diff --git a/IoTClient/Clients/Modbus/Base/ModbusSerialBase.cs b/IoTClient/Clients/Modbus/Base/ModbusSerialBase.cs
index 2db3067..eba65d1 100644
--- a/IoTClient/Clients/Modbus/Base/ModbusSerialBase.cs
+++ b/IoTClient/Clients/Modbus/Base/ModbusSerialBase.cs
@@ -14,6 +14,11 @@ namespace IoTClient.Clients.Modbus
protected EndianFormat format;
private bool plcAddresses;
+ ///
+ /// 是否是连接的
+ ///
+ public bool Connected => serialPort?.IsOpen ?? false;
+
///
/// 警告日志委托
///
@@ -946,7 +951,7 @@ namespace IoTClient.Clients.Modbus
public byte[] GetReadCommand(string address, byte stationNumber, byte functionCode, ushort length)
{
var readAddress = ushort.Parse(address?.Trim());
- if (plcAddresses) readAddress = Convert.ToUInt16(readAddress % 10000 - 1);
+ if (plcAddresses) readAddress = (ushort)(Convert.ToUInt16(address?.Trim().Substring(1)) - 1);
byte[] buffer = new byte[6];
buffer[0] = stationNumber; //站号
@@ -969,7 +974,7 @@ namespace IoTClient.Clients.Modbus
public byte[] GetWriteCommand(string address, byte[] values, byte stationNumber, byte functionCode)
{
var writeAddress = ushort.Parse(address?.Trim());
- if (plcAddresses) writeAddress = Convert.ToUInt16(writeAddress % 10000 - 1);
+ if (plcAddresses) writeAddress = (ushort)(Convert.ToUInt16(address?.Trim().Substring(1)) - 1);
byte[] buffer = new byte[7 + values.Length];
buffer[0] = stationNumber; //站号
@@ -994,7 +999,7 @@ namespace IoTClient.Clients.Modbus
public byte[] GetWriteCoilCommand(string address, bool value, byte stationNumber, byte functionCode)
{
var writeAddress = ushort.Parse(address?.Trim());
- if (plcAddresses) writeAddress = Convert.ToUInt16(writeAddress % 10000 - 1);
+ if (plcAddresses) writeAddress = (ushort)(Convert.ToUInt16(address?.Trim().Substring(1)) - 1);
byte[] buffer = new byte[6];
buffer[0] = stationNumber;//站号
diff --git a/IoTClient/Clients/Modbus/Interfaces/IModbusClient.cs b/IoTClient/Clients/Modbus/Interfaces/IModbusClient.cs
index 08fd78a..df33d24 100644
--- a/IoTClient/Clients/Modbus/Interfaces/IModbusClient.cs
+++ b/IoTClient/Clients/Modbus/Interfaces/IModbusClient.cs
@@ -14,6 +14,11 @@ namespace IoTClient.Clients.Modbus
///
LoggerDelegate WarningLog { get; set; }
+ ///
+ /// 是否是连接的
+ ///
+ bool Connected { get; }
+
///
/// 打开连接
///
diff --git a/IoTClient/Clients/ModBus/ModBusTcpClient.cs b/IoTClient/Clients/Modbus/ModBusTcpClient.cs
similarity index 99%
rename from IoTClient/Clients/ModBus/ModBusTcpClient.cs
rename to IoTClient/Clients/Modbus/ModBusTcpClient.cs
index 131ae53..da34442 100644
--- a/IoTClient/Clients/ModBus/ModBusTcpClient.cs
+++ b/IoTClient/Clients/Modbus/ModBusTcpClient.cs
@@ -20,6 +20,11 @@ namespace IoTClient.Clients.Modbus
private EndianFormat format;
private bool plcAddresses;
+ ///
+ /// 是否是连接的
+ ///
+ public bool Connected => socket?.Connected ?? false;
+
///
///
///
@@ -1359,7 +1364,7 @@ namespace IoTClient.Clients.Modbus
public byte[] GetReadCommand(string address, byte stationNumber, byte functionCode, ushort length, byte[] check = null)
{
var readAddress = ushort.Parse(address?.Trim());
- if (plcAddresses) readAddress = Convert.ToUInt16(readAddress % 10000 - 1);
+ if (plcAddresses) readAddress = (ushort)(Convert.ToUInt16(address?.Trim().Substring(1)) - 1);
byte[] buffer = new byte[12];
buffer[0] = check?[0] ?? 0x19;
@@ -1389,7 +1394,7 @@ namespace IoTClient.Clients.Modbus
public byte[] GetWriteCommand(string address, byte[] values, byte stationNumber, byte functionCode, byte[] check = null)
{
var writeAddress = ushort.Parse(address?.Trim());
- if (plcAddresses) writeAddress = Convert.ToUInt16(writeAddress % 10000 - 1);
+ if (plcAddresses) writeAddress = (ushort)(Convert.ToUInt16(address?.Trim().Substring(1)) - 1);
byte[] buffer = new byte[13 + values.Length];
buffer[0] = check?[0] ?? 0x19;
@@ -1419,7 +1424,7 @@ namespace IoTClient.Clients.Modbus
public byte[] GetWriteCoilCommand(string address, bool value, byte stationNumber, byte functionCode, byte[] check = null)
{
var writeAddress = ushort.Parse(address?.Trim());
- if (plcAddresses) writeAddress = Convert.ToUInt16(writeAddress % 10000 - 1);
+ if (plcAddresses) writeAddress = (ushort)(Convert.ToUInt16(address?.Trim().Substring(1)) - 1);
byte[] buffer = new byte[12];
buffer[0] = check?[0] ?? 0x19;
diff --git a/IoTClient/Clients/Modbus/ModbusRtuOverTcpClient.cs b/IoTClient/Clients/Modbus/ModbusRtuOverTcpClient.cs
index f01933e..6e0b381 100644
--- a/IoTClient/Clients/Modbus/ModbusRtuOverTcpClient.cs
+++ b/IoTClient/Clients/Modbus/ModbusRtuOverTcpClient.cs
@@ -19,6 +19,11 @@ namespace IoTClient.Clients.Modbus
private EndianFormat format;
private bool plcAddresses;
+ ///
+ /// 是否是连接的
+ ///
+ public bool Connected => socket?.Connected ?? false;
+
///
/// 构造函数
///
@@ -1126,7 +1131,7 @@ namespace IoTClient.Clients.Modbus
public byte[] GetReadCommand(string address, byte stationNumber, byte functionCode, ushort length)
{
var readAddress = ushort.Parse(address?.Trim());
- if (plcAddresses) readAddress = Convert.ToUInt16(readAddress % 10000 - 1);
+ if (plcAddresses) readAddress = (ushort)(Convert.ToUInt16(address?.Trim().Substring(1)) - 1);
byte[] buffer = new byte[6];
buffer[0] = stationNumber; //站号
@@ -1149,7 +1154,7 @@ namespace IoTClient.Clients.Modbus
public byte[] GetWriteCommand(string address, byte[] values, byte stationNumber, byte functionCode)
{
var writeAddress = ushort.Parse(address?.Trim());
- if (plcAddresses) writeAddress = Convert.ToUInt16(writeAddress % 10000 - 1);
+ if (plcAddresses) writeAddress = (ushort)(Convert.ToUInt16(address?.Trim().Substring(1)) - 1);
byte[] buffer = new byte[7 + values.Length];
buffer[0] = stationNumber; //站号
@@ -1174,7 +1179,7 @@ namespace IoTClient.Clients.Modbus
public byte[] GetWriteCoilCommand(string address, bool value, byte stationNumber, byte functionCode)
{
var writeAddress = ushort.Parse(address?.Trim());
- if (plcAddresses) writeAddress = Convert.ToUInt16(writeAddress % 10000 - 1);
+ if (plcAddresses) writeAddress = (ushort)(Convert.ToUInt16(address?.Trim().Substring(1)) - 1);
byte[] buffer = new byte[6];
buffer[0] = stationNumber;//站号
diff --git a/IoTClient/IoTClient/IoTClient.xml b/IoTClient/IoTClient/IoTClient.xml
index a26f399..e8e4786 100644
--- a/IoTClient/IoTClient/IoTClient.xml
+++ b/IoTClient/IoTClient/IoTClient.xml
@@ -4,6 +4,11 @@
IoTClient
+
+
+ 是否是连接的
+
+
警告日志委托
@@ -366,6 +371,11 @@
为了可用性,会对异常网络进行重试。此类日志通过委托接口给出去。
+
+
+ 是否是连接的
+
+
打开连接
@@ -775,6 +785,11 @@
Tcp的方式发送ModbusRtu协议报文 - 客户端
+
+
+ 是否是连接的
+
+
构造函数
@@ -1133,6 +1148,11 @@
ModbusTcp协议客户端
+
+
+ 是否是连接的
+
+