|
@@ -18,24 +18,24 @@ using YSAI.Core.data;
|
|
|
using YSAI.Core.@interface.only;
|
|
using YSAI.Core.@interface.only;
|
|
|
using YSAI.Core.@interface.unify;
|
|
using YSAI.Core.@interface.unify;
|
|
|
using YSAI.Unility;
|
|
using YSAI.Unility;
|
|
|
-using static YSAI.Modbus.ModbusData;
|
|
|
|
|
|
|
+using static YSAI.Modbus.client.ModbusClientData;
|
|
|
|
|
|
|
|
-namespace YSAI.Modbus
|
|
|
|
|
|
|
+namespace YSAI.Modbus.client
|
|
|
{
|
|
{
|
|
|
/// <summary>
|
|
/// <summary>
|
|
|
/// modbus 操作
|
|
/// modbus 操作
|
|
|
/// </summary>
|
|
/// </summary>
|
|
|
- public class ModbusOperate : IBase, IModbus
|
|
|
|
|
|
|
+ public class ModbusClientOperate : IBase, IModbus
|
|
|
{
|
|
{
|
|
|
private static readonly object Lock = new object(); //锁
|
|
private static readonly object Lock = new object(); //锁
|
|
|
- private static List<ModbusOperate> ThisObjList = new List<ModbusOperate>(); //自身对象集合
|
|
|
|
|
|
|
+ private static List<ModbusClientOperate> ThisObjList = new List<ModbusClientOperate>(); //自身对象集合
|
|
|
/// <summary>
|
|
/// <summary>
|
|
|
/// 单例模式
|
|
/// 单例模式
|
|
|
/// </summary>
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
/// <returns></returns>
|
|
|
- public static ModbusOperate Instance(Basics basics)
|
|
|
|
|
|
|
+ public static ModbusClientOperate Instance(Basics basics)
|
|
|
{
|
|
{
|
|
|
- ModbusOperate? exp = ThisObjList.FirstOrDefault(c => c.basics.Equals(basics));
|
|
|
|
|
|
|
+ ModbusClientOperate? exp = ThisObjList.FirstOrDefault(c => c.basics.Equals(basics));
|
|
|
if (exp == null)
|
|
if (exp == null)
|
|
|
{
|
|
{
|
|
|
lock (Lock)
|
|
lock (Lock)
|
|
@@ -46,7 +46,7 @@ namespace YSAI.Modbus
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|
|
|
- ModbusOperate exp2 = new ModbusOperate(basics);
|
|
|
|
|
|
|
+ ModbusClientOperate exp2 = new ModbusClientOperate(basics);
|
|
|
ThisObjList.Add(exp2);
|
|
ThisObjList.Add(exp2);
|
|
|
return exp2;
|
|
return exp2;
|
|
|
}
|
|
}
|
|
@@ -58,7 +58,7 @@ namespace YSAI.Modbus
|
|
|
/// 构造函数
|
|
/// 构造函数
|
|
|
/// </summary>
|
|
/// </summary>
|
|
|
/// <param name="basics"></param>
|
|
/// <param name="basics"></param>
|
|
|
- public ModbusOperate(Basics basics)
|
|
|
|
|
|
|
+ public ModbusClientOperate(Basics basics)
|
|
|
{
|
|
{
|
|
|
this.basics = basics;
|
|
this.basics = basics;
|
|
|
}
|
|
}
|
|
@@ -93,22 +93,22 @@ namespace YSAI.Modbus
|
|
|
/// <param name="value">实际值</param>
|
|
/// <param name="value">实际值</param>
|
|
|
/// <param name="dataType">数据要转换的类型</param>
|
|
/// <param name="dataType">数据要转换的类型</param>
|
|
|
/// <returns></returns>
|
|
/// <returns></returns>
|
|
|
- private string? DataConvert(ushort value, ModbusData.DataType dataType)
|
|
|
|
|
|
|
+ private string? DataConvert(ushort value, DataType dataType)
|
|
|
{
|
|
{
|
|
|
Value = value;
|
|
Value = value;
|
|
|
switch (dataType)
|
|
switch (dataType)
|
|
|
{
|
|
{
|
|
|
- case ModbusData.DataType.MSB:
|
|
|
|
|
|
|
+ case DataType.MSB:
|
|
|
return MSB.ToString();
|
|
return MSB.ToString();
|
|
|
- case ModbusData.DataType.LSB:
|
|
|
|
|
|
|
+ case DataType.LSB:
|
|
|
return LSB.ToString();
|
|
return LSB.ToString();
|
|
|
- case ModbusData.DataType.Hex:
|
|
|
|
|
|
|
+ case DataType.Hex:
|
|
|
return Hex.ToString();
|
|
return Hex.ToString();
|
|
|
- case ModbusData.DataType.Binary:
|
|
|
|
|
|
|
+ case DataType.Binary:
|
|
|
return Binary.ToString();
|
|
return Binary.ToString();
|
|
|
- case ModbusData.DataType.Signed:
|
|
|
|
|
|
|
+ case DataType.Signed:
|
|
|
return Signed.ToString();
|
|
return Signed.ToString();
|
|
|
- case ModbusData.DataType.Value:
|
|
|
|
|
|
|
+ case DataType.Value:
|
|
|
return Value.ToString();
|
|
return Value.ToString();
|
|
|
}
|
|
}
|
|
|
return null;
|
|
return null;
|
|
@@ -134,7 +134,7 @@ namespace YSAI.Modbus
|
|
|
get { return (byte)Value; }
|
|
get { return (byte)Value; }
|
|
|
set
|
|
set
|
|
|
{
|
|
{
|
|
|
- Value = (ushort)((ushort)value + (ushort)(Value & 0xff00));
|
|
|
|
|
|
|
+ Value = (ushort)(value + (ushort)(Value & 0xff00));
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -180,10 +180,10 @@ namespace YSAI.Modbus
|
|
|
}
|
|
}
|
|
|
#endregion
|
|
#endregion
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
|
|
|
- public override string LogHead => "[ ModbusOperate 操作 ]";
|
|
|
|
|
- public override string ClassName => "ModbusOperate";
|
|
|
|
|
|
|
+
|
|
|
|
|
+ public override string LogHead => "[ ModbusClientOperate 操作 ]";
|
|
|
|
|
+ public override string ClassName => "ModbusClientOperate";
|
|
|
|
|
|
|
|
public Task<OperateResult> OnAsync()
|
|
public Task<OperateResult> OnAsync()
|
|
|
{
|
|
{
|
|
@@ -206,8 +206,8 @@ namespace YSAI.Modbus
|
|
|
|
|
|
|
|
switch (basics.ProtocolType)
|
|
switch (basics.ProtocolType)
|
|
|
{
|
|
{
|
|
|
- case ModbusData.ProtocolType.Rtu:
|
|
|
|
|
- case ModbusData.ProtocolType.Ascii:
|
|
|
|
|
|
|
+ case ModbusClientData.ProtocolType.Rtu:
|
|
|
|
|
+ case ModbusClientData.ProtocolType.Ascii:
|
|
|
|
|
|
|
|
if (string.IsNullOrWhiteSpace(basics.SerialPortParam.PortName))
|
|
if (string.IsNullOrWhiteSpace(basics.SerialPortParam.PortName))
|
|
|
{
|
|
{
|
|
@@ -230,19 +230,19 @@ namespace YSAI.Modbus
|
|
|
SerialPortAdapter serialPortAdapter = new SerialPortAdapter(serialPort);
|
|
SerialPortAdapter serialPortAdapter = new SerialPortAdapter(serialPort);
|
|
|
|
|
|
|
|
//Ascii
|
|
//Ascii
|
|
|
- if (basics.ProtocolType.Equals(ModbusData.ProtocolType.Ascii))
|
|
|
|
|
|
|
+ if (basics.ProtocolType.Equals(ModbusClientData.ProtocolType.Ascii))
|
|
|
{
|
|
{
|
|
|
//创建对象
|
|
//创建对象
|
|
|
modbusMaster = modbusFactory.CreateAsciiMaster(serialPortAdapter);
|
|
modbusMaster = modbusFactory.CreateAsciiMaster(serialPortAdapter);
|
|
|
}
|
|
}
|
|
|
//Rtu
|
|
//Rtu
|
|
|
- if (basics.ProtocolType.Equals(ModbusData.ProtocolType.Rtu))
|
|
|
|
|
|
|
+ if (basics.ProtocolType.Equals(ModbusClientData.ProtocolType.Rtu))
|
|
|
{
|
|
{
|
|
|
//创建对象
|
|
//创建对象
|
|
|
modbusMaster = modbusFactory.CreateRtuMaster(serialPortAdapter);
|
|
modbusMaster = modbusFactory.CreateRtuMaster(serialPortAdapter);
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
- case ModbusData.ProtocolType.Tcp:
|
|
|
|
|
|
|
+ case ModbusClientData.ProtocolType.Tcp:
|
|
|
if (string.IsNullOrWhiteSpace(basics.TcpParam.Ip))
|
|
if (string.IsNullOrWhiteSpace(basics.TcpParam.Ip))
|
|
|
{
|
|
{
|
|
|
return Break("On", false, $"IP不能为空");
|
|
return Break("On", false, $"IP不能为空");
|
|
@@ -270,7 +270,7 @@ namespace YSAI.Modbus
|
|
|
//创建对象
|
|
//创建对象
|
|
|
modbusMaster = modbusFactory.CreateMaster(tcpClient);
|
|
modbusMaster = modbusFactory.CreateMaster(tcpClient);
|
|
|
break;
|
|
break;
|
|
|
- case ModbusData.ProtocolType.Udp:
|
|
|
|
|
|
|
+ case ModbusClientData.ProtocolType.Udp:
|
|
|
if (string.IsNullOrWhiteSpace(basics.UdpParam.Ip))
|
|
if (string.IsNullOrWhiteSpace(basics.UdpParam.Ip))
|
|
|
{
|
|
{
|
|
|
return Break("On", false, $"IP不能为空");
|
|
return Break("On", false, $"IP不能为空");
|
|
@@ -364,7 +364,7 @@ namespace YSAI.Modbus
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//数据处理
|
|
//数据处理
|
|
|
- AddressValue addressValue = YSAI.Core.data.Dispose.Execute(add, value);
|
|
|
|
|
|
|
+ AddressValue addressValue = Core.data.Dispose.Execute(add, value);
|
|
|
|
|
|
|
|
//数据添加
|
|
//数据添加
|
|
|
param.AddOrUpdate(add.Address, addressValue, (k, v) => addressValue);
|
|
param.AddOrUpdate(add.Address, addressValue, (k, v) => addressValue);
|
|
@@ -417,7 +417,7 @@ namespace YSAI.Modbus
|
|
|
value = retvalue[0].ToString();
|
|
value = retvalue[0].ToString();
|
|
|
}
|
|
}
|
|
|
//数据处理
|
|
//数据处理
|
|
|
- AddressValue addressValue = YSAI.Core.data.Dispose.Execute(add, value);
|
|
|
|
|
|
|
+ AddressValue addressValue = Core.data.Dispose.Execute(add, value);
|
|
|
|
|
|
|
|
//数据添加
|
|
//数据添加
|
|
|
param.AddOrUpdate(add.Address, addressValue, (k, v) => addressValue);
|
|
param.AddOrUpdate(add.Address, addressValue, (k, v) => addressValue);
|
|
@@ -460,17 +460,17 @@ namespace YSAI.Modbus
|
|
|
int index = Dvalue.startAddress;
|
|
int index = Dvalue.startAddress;
|
|
|
foreach (var item in retvalue)
|
|
foreach (var item in retvalue)
|
|
|
{
|
|
{
|
|
|
- DValue.Add(new RetValue { Address = index.ToString(), Value = DataConvert(item, (ModbusData.DataType)DataType) });
|
|
|
|
|
|
|
+ DValue.Add(new RetValue { Address = index.ToString(), Value = DataConvert(item, (DataType)DataType) });
|
|
|
index++;
|
|
index++;
|
|
|
}
|
|
}
|
|
|
value = DValue.ToJson();
|
|
value = DValue.ToJson();
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|
|
|
- value = DataConvert(retvalue[0], (ModbusData.DataType)DataType);
|
|
|
|
|
|
|
+ value = DataConvert(retvalue[0], (DataType)DataType);
|
|
|
}
|
|
}
|
|
|
//数据处理
|
|
//数据处理
|
|
|
- AddressValue addressValue = YSAI.Core.data.Dispose.Execute(add, value);
|
|
|
|
|
|
|
+ AddressValue addressValue = Core.data.Dispose.Execute(add, value);
|
|
|
|
|
|
|
|
//数据添加
|
|
//数据添加
|
|
|
param.AddOrUpdate(add.Address, addressValue, (k, v) => addressValue);
|
|
param.AddOrUpdate(add.Address, addressValue, (k, v) => addressValue);
|
|
@@ -512,18 +512,18 @@ namespace YSAI.Modbus
|
|
|
int index = Dvalue.startAddress;
|
|
int index = Dvalue.startAddress;
|
|
|
foreach (var item in retvalue)
|
|
foreach (var item in retvalue)
|
|
|
{
|
|
{
|
|
|
- DValue.Add(new RetValue { Address = index.ToString(), Value = DataConvert(item, (ModbusData.DataType)DataType) });
|
|
|
|
|
|
|
+ DValue.Add(new RetValue { Address = index.ToString(), Value = DataConvert(item, (DataType)DataType) });
|
|
|
index++;
|
|
index++;
|
|
|
}
|
|
}
|
|
|
value = DValue.ToJson();
|
|
value = DValue.ToJson();
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|
|
|
- value = DataConvert(retvalue[0], (ModbusData.DataType)DataType);
|
|
|
|
|
|
|
+ value = DataConvert(retvalue[0], (DataType)DataType);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//数据处理
|
|
//数据处理
|
|
|
- AddressValue addressValue = YSAI.Core.data.Dispose.Execute(add, value);
|
|
|
|
|
|
|
+ AddressValue addressValue = Core.data.Dispose.Execute(add, value);
|
|
|
|
|
|
|
|
//数据添加
|
|
//数据添加
|
|
|
param.AddOrUpdate(add.Address, addressValue, (k, v) => addressValue);
|
|
param.AddOrUpdate(add.Address, addressValue, (k, v) => addressValue);
|