using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using IniHelper;
using S7.Net;
using thinger.cn.DataConvertHelper;
namespace IniPractice
{
public class CoreLogicManager
{
private Plc simensS7 = null;
//public int MyProperty { get; set; }
public CommunicationState CurentState { get; set; } = new CommunicationState();
private CancellationTokenSource cts = new CancellationTokenSource();
//连接
public bool ConnectPLC(SysSettings sysSettings)
{
try
{
simensS7 = new Plc((CpuType)Enum.Parse(typeof(CpuType), sysSettings.CpuType), sysSettings.CpuType, 0,0);
simensS7.Open();
}
catch (Exception)
{
return false;
}
//采集 多线程执行
Task.Run(() =>
{
PLCCommucation();
}, cts.Token);
return true;
}
private void PLCCommucation()
{
while (!cts.IsCancellationRequested)
{
byte[] result = simensS7.ReadBytes(S7.Net.DataType.DataBlock, 1, 0,23);//起始地址,数量30
//数据解析 截取字节数组,转换为需要的值
if (result!=null && result.Length==23)
{
CurentState.SatusValue = ByteLib.GetByteFromByteArray(result,22);//状态值
CurentState.LimitLeft = BitLib.GetBitFromByteArray(result, 20, 5);//20个字节第5个位
}
}
}
//断开
private void PLCClose()
{
if (cts!=null)
{
cts.Cancel();
}
if(simensS7!=null)
{
simensS7.Close();
}
}
}
}
使用S7.net通信库
最新推荐文章于 2024-08-31 16:54:44 发布