109 lines
2.8 KiB
C#
109 lines
2.8 KiB
C#
using HslCommunication;
|
||
using HslCommunication.ModBus;
|
||
using System;
|
||
using System.Net.Sockets;
|
||
|
||
// ModbusTcp读写服务类,线程安全,互斥锁
|
||
namespace Check.Main.Common
|
||
{
|
||
public class ModbusTcpService
|
||
{
|
||
private readonly TcpClient _tcpClient = new();//
|
||
private readonly ModbusTcpNet _plc;
|
||
private readonly object _lock = new();
|
||
public bool IsConnected => _tcpClient != null && _tcpClient.Connected;//
|
||
|
||
public ModbusTcpService(string ip, int port = 502, byte station = 1)
|
||
{
|
||
_plc = new ModbusTcpNet(ip, port, station)
|
||
{
|
||
// CDAB 格式:PLC的不同品牌的modelbus TCP存在正反高低位。如果读写异常。删掉或者补充下面这句函数进行修复
|
||
DataFormat = HslCommunication.Core.DataFormat.CDAB
|
||
};
|
||
}
|
||
|
||
// 读取 32 位整数
|
||
public OperateResult<int> ReadInt32(string address)
|
||
{
|
||
lock (_lock)
|
||
{
|
||
return _plc.ReadInt32(address);
|
||
}
|
||
}
|
||
|
||
// 写入 32 位整数(int)
|
||
public OperateResult WriteInt32(string address, int value)
|
||
{
|
||
lock (_lock)
|
||
{
|
||
return _plc.Write(address, value);
|
||
}
|
||
}
|
||
|
||
// 读取 16 位整数(short)
|
||
public OperateResult<short> ReadInt16(string address)
|
||
{
|
||
lock (_lock)
|
||
{
|
||
return _plc.ReadInt16(address);
|
||
}
|
||
}
|
||
|
||
// 写入 16 位整数(short)
|
||
public OperateResult WriteInt16(string address, short value)
|
||
{
|
||
lock (_lock)
|
||
{
|
||
return _plc.Write(address, value);
|
||
}
|
||
}
|
||
|
||
|
||
// 读取布尔量
|
||
public OperateResult<bool> ReadBool(string address)
|
||
{
|
||
lock (_lock)
|
||
{
|
||
return _plc.ReadBool(address);
|
||
}
|
||
}
|
||
|
||
// 写入布尔量
|
||
public OperateResult WriteBool(string address, bool value)
|
||
{
|
||
lock (_lock)
|
||
{
|
||
return _plc.Write(address, value);
|
||
}
|
||
}
|
||
|
||
// 读取浮点数(float)
|
||
public OperateResult<float> ReadFloat(string address)
|
||
{
|
||
lock (_lock)
|
||
{
|
||
return _plc.ReadFloat(address);
|
||
}
|
||
}
|
||
|
||
// 写入浮点数(float)
|
||
public OperateResult WriteFloat(string address, float value)
|
||
{
|
||
lock (_lock)
|
||
{
|
||
return _plc.Write(address, value);
|
||
}
|
||
}
|
||
|
||
// 关闭连接
|
||
public void Close()
|
||
{
|
||
lock (_lock)
|
||
{
|
||
_plc.ConnectClose();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|