jy-plc/Command/Extension/PlcHelper2.cs

139 lines
5.5 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
}
}