diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusController.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusController.cs
index 9a5887b..32677cd 100644
--- a/Modbus.Net/Modbus.Net.Modbus/ModbusController.cs
+++ b/Modbus.Net/Modbus.Net.Modbus/ModbusController.cs
@@ -23,9 +23,9 @@ namespace Modbus.Net.Modbus
};
///
- /// Modbus Rtu协议长度计算
+ /// Modbus Rtu接收协议长度计算
///
- public static Func ModbusRtuLengthCalc => content =>
+ public static Func ModbusRtuResponseLengthCalc => (content) =>
{
if (content[1] > 128) return 5;
else if (content[1] == 5 || content[1] == 6 || content[1] == 8 || content[1] == 11 || content[1] == 15 || content[1] == 16) return 8;
@@ -33,6 +33,20 @@ namespace Modbus.Net.Modbus
else if (content[1] == 22) return 10;
else return DuplicateWithCount.GetDuplcateFunc(new List { 2 }, 5).Invoke(content);
};
+
+ ///
+ /// Modbus Rtu发送协议长度计算
+ ///
+ public static Func ModbusRtuRequestLengthCalc => (content) =>
+ {
+ if (content[1] == 1 || content[1] == 2 || content[1] == 3 || content[1] == 4 || content[1] == 5 || content[1] == 6 || content[1] == 8) return 8;
+ else if (content[1] == 7 || content[1] == 11 || content[1] == 12 || content[1] == 17) return 4;
+ else if (content[1] == 15 || content[1] == 16) { return DuplicateWithCount.GetDuplcateFunc(new List { 6 }, 9).Invoke(content); }
+ else if (content[1] == 22) return 10;
+ else if (content[1] == 23) return 19;
+ else if (content[1] == 24) return 6;
+ else return DuplicateWithCount.GetDuplcateFunc(new List { 2 }, 5).Invoke(content);
+ };
}
///
@@ -97,7 +111,7 @@ namespace Modbus.Net.Modbus
}
///
- /// Modbus Rtu协议控制器
+ /// Modbus Rtu发送协议控制器
///
public class ModbusRtuController : FifoController
{
@@ -108,7 +122,7 @@ namespace Modbus.Net.Modbus
/// 从站号
public ModbusRtuController(string com, int slaveAddress) : base(
int.Parse(ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "FetchSleepTime")),
- lengthCalc: ModbusLengthCalc.ModbusRtuLengthCalc,
+ lengthCalc: ModbusLengthCalc.ModbusRtuResponseLengthCalc,
checkRightFunc: ContentCheck.Crc16CheckRight,
waitingListMaxCount: ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "WaitingListCount") != null ?
int.Parse(ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "WaitingListCount")) :
@@ -118,7 +132,28 @@ namespace Modbus.Net.Modbus
}
///
- /// Modbus Rtu in Tcp协议控制器
+ /// Modbus Rtu接收协议控制器
+ ///
+ public class ModbusRtuResponseController : FifoController
+ {
+ ///
+ /// 构造函数
+ ///
+ /// 串口
+ /// 从站号
+ public ModbusRtuResponseController(string com, int slaveAddress) : base(
+ int.Parse(ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "FetchSleepTime")),
+ lengthCalc: ModbusLengthCalc.ModbusRtuRequestLengthCalc,
+ checkRightFunc: ContentCheck.Crc16CheckRight,
+ waitingListMaxCount: ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "WaitingListCount") != null ?
+ int.Parse(ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "WaitingListCount")) :
+ null
+ )
+ { }
+ }
+
+ ///
+ /// Modbus Rtu in Tcp发送协议控制器
///
public class ModbusRtuInTcpController : FifoController
{
@@ -129,7 +164,7 @@ namespace Modbus.Net.Modbus
/// 端口号
public ModbusRtuInTcpController(string ip, int port) : base(
int.Parse(ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "FetchSleepTime")),
- lengthCalc: ModbusLengthCalc.ModbusRtuLengthCalc,
+ lengthCalc: ModbusLengthCalc.ModbusRtuResponseLengthCalc,
checkRightFunc: ContentCheck.Crc16CheckRight,
waitingListMaxCount: ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "WaitingListCount") != null ?
int.Parse(ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "WaitingListCount")) :
@@ -139,7 +174,28 @@ namespace Modbus.Net.Modbus
}
///
- /// Modbus Rtu in Udp协议控制器
+ /// Modbus Rtu in Tcp接收协议控制器
+ ///
+ public class ModbusRtuInTcpResponseController : FifoController
+ {
+ ///
+ /// 构造函数
+ ///
+ /// ip地址
+ /// 端口号
+ public ModbusRtuInTcpResponseController(string ip, int port) : base(
+ int.Parse(ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "FetchSleepTime")),
+ lengthCalc: ModbusLengthCalc.ModbusRtuRequestLengthCalc,
+ checkRightFunc: ContentCheck.Crc16CheckRight,
+ waitingListMaxCount: ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "WaitingListCount") != null ?
+ int.Parse(ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "WaitingListCount")) :
+ null
+ )
+ { }
+ }
+
+ ///
+ /// Modbus Rtu in Udp发送协议控制器
///
public class ModbusRtuInUdpController : FifoController
{
@@ -150,7 +206,28 @@ namespace Modbus.Net.Modbus
/// 端口号
public ModbusRtuInUdpController(string ip, int port) : base(
int.Parse(ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "FetchSleepTime")),
- lengthCalc: ModbusLengthCalc.ModbusRtuLengthCalc,
+ lengthCalc: ModbusLengthCalc.ModbusRtuResponseLengthCalc,
+ checkRightFunc: ContentCheck.Crc16CheckRight,
+ waitingListMaxCount: ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "WaitingListCount") != null ?
+ int.Parse(ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "WaitingListCount")) :
+ null
+ )
+ { }
+ }
+
+ ///
+ /// Modbus Rtu in Udp接收协议控制器
+ ///
+ public class ModbusRtuInUdpResponseController : FifoController
+ {
+ ///
+ /// 构造函数
+ ///
+ /// ip地址
+ /// 端口号
+ public ModbusRtuInUdpResponseController(string ip, int port) : base(
+ int.Parse(ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "FetchSleepTime")),
+ lengthCalc: ModbusLengthCalc.ModbusRtuRequestLengthCalc,
checkRightFunc: ContentCheck.Crc16CheckRight,
waitingListMaxCount: ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "WaitingListCount") != null ?
int.Parse(ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "WaitingListCount")) :
diff --git a/Modbus.Net/Modbus.Net.Opc/OpcConnector.cs b/Modbus.Net/Modbus.Net.Opc/OpcConnector.cs
index 8c2f1c8..ae57556 100644
--- a/Modbus.Net/Modbus.Net.Opc/OpcConnector.cs
+++ b/Modbus.Net/Modbus.Net.Opc/OpcConnector.cs
@@ -118,7 +118,7 @@ namespace Modbus.Net.Opc
Value = Encoding.ASCII.GetBytes("NoData")
};
}
- logger.LogInformation($"Opc Machine {ConnectionToken} Read Opc tag {tag} for value {result.Value} {result.Value.GetType().FullName}");
+ logger.LogDebug($"Opc Machine {ConnectionToken} Read Opc tag {tag} for value {result.Value} {result.Value.GetType().FullName} {result.Quality}");
return new OpcParamOut
{
Success = true,
@@ -142,11 +142,11 @@ namespace Modbus.Net.Opc
try
{
await Client.WriteAsync(tag, value);
- logger.LogInformation($"Opc Machine {ConnectionToken} Write Opc tag {tag} for value {value}");
+ logger.LogDebug($"Opc Machine {ConnectionToken} Write Opc tag {tag} for value {value}");
}
catch (Exception e)
{
- logger.LogError(e, "Opc client {ConnectionToken} write exception", ConnectionToken);
+ logger.LogError(e, $"Opc client {ConnectionToken} write exception");
return new OpcParamOut
{
Success = false
@@ -165,7 +165,7 @@ namespace Modbus.Net.Opc
}
catch (Exception e)
{
- logger.LogError(e, "Opc client {ConnectionToken} read exception", ConnectionToken);
+ logger.LogError(e, $"Opc client {ConnectionToken} read exception");
Disconnect();
return new OpcParamOut
{
@@ -181,12 +181,12 @@ namespace Modbus.Net.Opc
{
Client.Connect();
_connect = true;
- logger.LogInformation("Opc client {ConnectionToken} connect success", ConnectionToken);
+ logger.LogInformation($"Opc client {ConnectionToken} connect success");
return true;
}
catch (Exception ex)
{
- logger.LogError(ex, "Opc client {ConnectionToken} connected failed", ConnectionToken);
+ logger.LogError(ex, $"Opc client {ConnectionToken} connected failed");
_connect = false;
return false;
}
diff --git a/Modbus.Net/Modbus.Net/Configuration/MachineReader.cs b/Modbus.Net/Modbus.Net/Configuration/MachineReader.cs
index 34004ea..b931527 100644
--- a/Modbus.Net/Modbus.Net/Configuration/MachineReader.cs
+++ b/Modbus.Net/Modbus.Net/Configuration/MachineReader.cs
@@ -22,11 +22,12 @@ namespace Modbus.Net
///
/// 读取设备列表
///
+ /// 读取设备的块名
/// 设备的列表
- public static List> ReadMachines()
+ public static List> ReadMachines(string machineSection = "Machine")
{
var ans = new List>();
- var root = configuration.GetSection("Modbus.Net").GetSection("Machine").GetChildren();
+ var root = configuration.GetSection("Modbus.Net").GetSection(machineSection).GetChildren();
foreach (var machine in root)
{
List> kv = new List>();
diff --git a/Samples/MachineJob/Worker.cs b/Samples/MachineJob/Worker.cs
index 07c2cf2..3eca9c2 100644
--- a/Samples/MachineJob/Worker.cs
+++ b/Samples/MachineJob/Worker.cs
@@ -97,7 +97,7 @@ namespace MachineJob.Service
{
foreach (var value in values)
{
- _logger.LogInformation(dataReturnDef.MachineId + " " + value.Key + " " + value.Value.DeviceValue);
+ _logger.LogDebug(dataReturnDef.MachineId + " " + value.Key + " " + value.Value.DeviceValue);
}
/*
@@ -148,7 +148,12 @@ namespace MachineJob.Service
return ans;
}
- return null;
+ else
+ {
+ _logger.LogError(dataReturnDef.MachineId + " Return Error.");
+ return null;
+ }
+
}
}
}
\ No newline at end of file