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() { } /// /// 设定设备值 /// /// /// /// /// 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(key, val); // set a bit var result = await plc.GetValue(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("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(key, val); // set a bit var result = await plc.GetValue(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("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("DB2.DBX0.4", true); // set a bit await plc.SetValue(key, val); // set a bit // var bit = await plc.GetValue("DB2.int4"); // get a bit // create a nofication for data change in the plc //var notification = plc.CreateNotification("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(); } } /// /// 取值 /// /// /// /// /// public async Task GetVal(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("DB2.DBX0.4", true); // set a bit var bit = await plc.GetValue(key); // get a bit return bit; } } } }