jy-plc/Command/Extension/PlcHelper2.cs

139 lines
5.5 KiB
C#
Raw Normal View History

2024-07-24 13:30:21 +00:00
using Sharp7;
using Sharp7.Rx;
using Sharp7.Rx.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reactive.Disposables;
using System.Reactive.Linq;
using System.Reactive.Threading.Tasks;
using System.Threading.Tasks;
namespace LangGuan.Command.Extension
{
public class PlcHelper2
{
public PlcHelper2() { }
/// <summary>
/// 设定设备值
/// </summary>
/// <param name="ip"></param>
/// <param name="key"></param>
/// <param name="val"></param>
/// <returns></returns>
public async Task startDevice(string ip, string key, Int16 val)
{
try
{
using (var disposables = new CompositeDisposable())
{
Console.WriteLine($"开始连接设备,ip:{ip}");
// create a new PLC
var plc = new Sharp7Plc(ip, 0, 1);
disposables.Add(plc);
// initialize the plc
await plc.InitializeAsync();
var t = await plc.ConnectionState.FirstAsync(c => c == ConnectionState.Connected).ToTask();
await plc.SetValue<Int16>(key, val); // set a bit
var result = await plc.GetValue<Int16>(key);
Console.WriteLine($"监控写入结果:----- {result}");
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm ss")}----plc连接状态{t}");
// Console.WriteLine($"plc连接状态{plc.ConnectionState.FirstAsync(c => c == ConnectionState.Connected).Any()}");
// await plc.SetValue<bool>("DB2.DBX0.4", true); // set a bit
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
public async Task startDevice502(string ip, string key, Int16 val)
{
try
{
using (var disposables = new CompositeDisposable())
{
Console.WriteLine($"502开始连接设备,ip:{ip}");
// create a new PLC
var plc = new Sharp7Plc(ip, 0, 1,502);
disposables.Add(plc);
// initialize the plc
await plc.InitializeAsync();
var t = await plc.ConnectionState.FirstAsync(c => c == ConnectionState.Connected).ToTask();
await plc.SetValue<Int16>(key, val); // set a bit
var result = await plc.GetValue<Int16>(key);
Console.WriteLine($"502监控写入结果----- {result}");
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm ss")}--502--plc连接状态{t}");
// Console.WriteLine($"plc连接状态{plc.ConnectionState.FirstAsync(c => c == ConnectionState.Connected).Any()}");
// await plc.SetValue<bool>("DB2.DBX0.4", true); // set a bit
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
public async Task SetVal(string ip, string key, int val)
{
using (var disposables = new CompositeDisposable())
{
// create a new PLC
var plc = new Sharp7Plc(ip, 0, 2);
disposables.Add(plc);
// initialize the plc
await plc.InitializeAsync();
//wait for the plc to get connected
await plc.ConnectionState
.FirstAsync(c => c == ConnectionState.Connected)
.ToTask();
// await plc.SetValue<bool>("DB2.DBX0.4", true); // set a bit
await plc.SetValue<int>(key, val); // set a bit
// var bit = await plc.GetValue<int>("DB2.int4"); // get a bit
// create a nofication for data change in the plc
//var notification = plc.CreateNotification<bool>("DB1.DBX0.2", TransmissionMode.OnChange, TimeSpan.FromMilliseconds(100))
// .Where(b => b) //select rising edge
// .Do(_ => doStuff())
// .Subscribe();
//disposables.Add(notification);
//wait for enter before ending the program
// Console.ReadLine();
}
}
/// <summary>
/// 取值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="ip"></param>
/// <param name="key"></param>
/// <returns></returns>
public async Task<T> GetVal<T>(string ip, string key)
{
using (var disposables = new CompositeDisposable())
{
// create a new PLC
var plc = new Sharp7Plc(ip, 0, 2);
disposables.Add(plc);
// initialize the plc
await plc.InitializeAsync();
//wait for the plc to get connected
await plc.ConnectionState
.FirstAsync(c => c == ConnectionState.Connected)
.ToTask();
// await plc.SetValue<bool>("DB2.DBX0.4", true); // set a bit
var bit = await plc.GetValue<T>(key); // get a bit
return bit;
}
}
}
}