2017-12-22 Update 1 MatchController

This commit is contained in:
parallelbgls
2017-12-22 11:49:25 +08:00
parent 8614905006
commit 7d82d647d1
48 changed files with 555 additions and 450 deletions

View File

@@ -70,7 +70,7 @@ namespace Modbus.Net.Modbus
"Q",
new AreaOutputDef
{
Code = (int) ModbusProtocalReadDataFunctionCode.ReadCoilStatus,
Code = (int) ModbusProtocolReadDataFunctionCode.ReadCoilStatus,
AreaWidth = 0.125
}
},
@@ -78,7 +78,7 @@ namespace Modbus.Net.Modbus
"M",
new AreaOutputDef
{
Code = (int) ModbusProtocalReadDataFunctionCode.ReadCoilStatus,
Code = (int) ModbusProtocolReadDataFunctionCode.ReadCoilStatus,
AreaWidth = 0.125
}
},
@@ -86,7 +86,7 @@ namespace Modbus.Net.Modbus
"N",
new AreaOutputDef
{
Code = (int) ModbusProtocalReadDataFunctionCode.ReadCoilStatus,
Code = (int) ModbusProtocolReadDataFunctionCode.ReadCoilStatus,
AreaWidth = 0.125
}
},
@@ -94,7 +94,7 @@ namespace Modbus.Net.Modbus
"I",
new AreaOutputDef
{
Code = (int) ModbusProtocalReadDataFunctionCode.ReadInputStatus,
Code = (int) ModbusProtocolReadDataFunctionCode.ReadInputStatus,
AreaWidth = 0.125
}
},
@@ -102,29 +102,29 @@ namespace Modbus.Net.Modbus
"S",
new AreaOutputDef
{
Code = (int) ModbusProtocalReadDataFunctionCode.ReadInputStatus,
Code = (int) ModbusProtocolReadDataFunctionCode.ReadInputStatus,
AreaWidth = 0.125
}
},
{
"IW",
new AreaOutputDef {Code = (int) ModbusProtocalReadDataFunctionCode.ReadInputRegister, AreaWidth = 2}
new AreaOutputDef {Code = (int) ModbusProtocolReadDataFunctionCode.ReadInputRegister, AreaWidth = 2}
},
{
"SW",
new AreaOutputDef {Code = (int) ModbusProtocalReadDataFunctionCode.ReadInputRegister, AreaWidth = 2}
new AreaOutputDef {Code = (int) ModbusProtocolReadDataFunctionCode.ReadInputRegister, AreaWidth = 2}
},
{
"MW",
new AreaOutputDef {Code = (int) ModbusProtocalReadDataFunctionCode.ReadHoldRegister, AreaWidth = 2}
new AreaOutputDef {Code = (int) ModbusProtocolReadDataFunctionCode.ReadHoldRegister, AreaWidth = 2}
},
{
"NW",
new AreaOutputDef {Code = (int) ModbusProtocalReadDataFunctionCode.ReadHoldRegister, AreaWidth = 2}
new AreaOutputDef {Code = (int) ModbusProtocolReadDataFunctionCode.ReadHoldRegister, AreaWidth = 2}
},
{
"QW",
new AreaOutputDef {Code = (int) ModbusProtocalReadDataFunctionCode.ReadHoldRegister, AreaWidth = 2}
new AreaOutputDef {Code = (int) ModbusProtocolReadDataFunctionCode.ReadHoldRegister, AreaWidth = 2}
}
};
WriteFunctionCodeDictionary = new Dictionary<(string, bool), AreaOutputDef>
@@ -133,7 +133,7 @@ namespace Modbus.Net.Modbus
("Q", false),
new AreaOutputDef
{
Code = (int) ModbusProtocalWriteDataFunctionCode.WriteMultiCoil,
Code = (int) ModbusProtocolWriteDataFunctionCode.WriteMultiCoil,
AreaWidth = 0.125
}
},
@@ -141,7 +141,7 @@ namespace Modbus.Net.Modbus
("M", false),
new AreaOutputDef
{
Code = (int) ModbusProtocalWriteDataFunctionCode.WriteMultiCoil,
Code = (int) ModbusProtocolWriteDataFunctionCode.WriteMultiCoil,
AreaWidth = 0.125
}
},
@@ -149,7 +149,7 @@ namespace Modbus.Net.Modbus
("N", false),
new AreaOutputDef
{
Code = (int) ModbusProtocalWriteDataFunctionCode.WriteMultiCoil,
Code = (int) ModbusProtocolWriteDataFunctionCode.WriteMultiCoil,
AreaWidth = 0.125
}
},
@@ -157,7 +157,7 @@ namespace Modbus.Net.Modbus
("MW", false),
new AreaOutputDef
{
Code = (int) ModbusProtocalWriteDataFunctionCode.WriteMultiRegister,
Code = (int) ModbusProtocolWriteDataFunctionCode.WriteMultiRegister,
AreaWidth = 2
}
},
@@ -165,7 +165,7 @@ namespace Modbus.Net.Modbus
("NW", false),
new AreaOutputDef
{
Code = (int) ModbusProtocalWriteDataFunctionCode.WriteMultiRegister,
Code = (int) ModbusProtocolWriteDataFunctionCode.WriteMultiRegister,
AreaWidth = 2
}
},
@@ -173,7 +173,7 @@ namespace Modbus.Net.Modbus
("QW", false),
new AreaOutputDef
{
Code = (int) ModbusProtocalWriteDataFunctionCode.WriteMultiRegister,
Code = (int) ModbusProtocolWriteDataFunctionCode.WriteMultiRegister,
AreaWidth = 2
}
},
@@ -181,7 +181,7 @@ namespace Modbus.Net.Modbus
("Q", true),
new AreaOutputDef
{
Code = (int) ModbusProtocalWriteDataFunctionCode.WriteSingleCoil,
Code = (int) ModbusProtocolWriteDataFunctionCode.WriteSingleCoil,
AreaWidth = 0.125
}
},
@@ -189,7 +189,7 @@ namespace Modbus.Net.Modbus
("M", true),
new AreaOutputDef
{
Code = (int) ModbusProtocalWriteDataFunctionCode.WriteSingleCoil,
Code = (int) ModbusProtocolWriteDataFunctionCode.WriteSingleCoil,
AreaWidth = 0.125
}
},
@@ -197,7 +197,7 @@ namespace Modbus.Net.Modbus
("N", true),
new AreaOutputDef
{
Code = (int) ModbusProtocalWriteDataFunctionCode.WriteSingleCoil,
Code = (int) ModbusProtocolWriteDataFunctionCode.WriteSingleCoil,
AreaWidth = 0.125
}
},
@@ -205,7 +205,7 @@ namespace Modbus.Net.Modbus
("MW", true),
new AreaOutputDef
{
Code = (int) ModbusProtocalWriteDataFunctionCode.WriteSingleRegister,
Code = (int) ModbusProtocolWriteDataFunctionCode.WriteSingleRegister,
AreaWidth = 2
}
},
@@ -213,7 +213,7 @@ namespace Modbus.Net.Modbus
("NW", true),
new AreaOutputDef
{
Code = (int) ModbusProtocalWriteDataFunctionCode.WriteSingleRegister,
Code = (int) ModbusProtocolWriteDataFunctionCode.WriteSingleRegister,
AreaWidth = 2
}
},
@@ -221,7 +221,7 @@ namespace Modbus.Net.Modbus
("QW", true),
new AreaOutputDef
{
Code = (int) ModbusProtocalWriteDataFunctionCode.WriteSingleRegister,
Code = (int) ModbusProtocolWriteDataFunctionCode.WriteSingleRegister,
AreaWidth = 2
}
}
@@ -306,7 +306,7 @@ namespace Modbus.Net.Modbus
"0X",
new AreaOutputDef
{
Code = (int) ModbusProtocalReadDataFunctionCode.ReadCoilStatus,
Code = (int) ModbusProtocolReadDataFunctionCode.ReadCoilStatus,
AreaWidth = 0.125
}
},
@@ -314,17 +314,17 @@ namespace Modbus.Net.Modbus
"1X",
new AreaOutputDef
{
Code = (int) ModbusProtocalReadDataFunctionCode.ReadInputStatus,
Code = (int) ModbusProtocolReadDataFunctionCode.ReadInputStatus,
AreaWidth = 0.125
}
},
{
"3X",
new AreaOutputDef {Code = (int) ModbusProtocalReadDataFunctionCode.ReadInputRegister, AreaWidth = 2}
new AreaOutputDef {Code = (int) ModbusProtocolReadDataFunctionCode.ReadInputRegister, AreaWidth = 2}
},
{
"4X",
new AreaOutputDef {Code = (int) ModbusProtocalReadDataFunctionCode.ReadHoldRegister, AreaWidth = 2}
new AreaOutputDef {Code = (int) ModbusProtocolReadDataFunctionCode.ReadHoldRegister, AreaWidth = 2}
}
};
WriteFunctionCodeDictionary = new Dictionary<(string, bool), AreaOutputDef>
@@ -333,7 +333,7 @@ namespace Modbus.Net.Modbus
("0X", false),
new AreaOutputDef
{
Code = (int) ModbusProtocalWriteDataFunctionCode.WriteMultiCoil,
Code = (int) ModbusProtocolWriteDataFunctionCode.WriteMultiCoil,
AreaWidth = 0.125
}
},
@@ -341,7 +341,7 @@ namespace Modbus.Net.Modbus
("4X", false),
new AreaOutputDef
{
Code = (int) ModbusProtocalWriteDataFunctionCode.WriteMultiRegister,
Code = (int) ModbusProtocolWriteDataFunctionCode.WriteMultiRegister,
AreaWidth = 2
}
},
@@ -349,7 +349,7 @@ namespace Modbus.Net.Modbus
("0X", true),
new AreaOutputDef
{
Code = (int) ModbusProtocalWriteDataFunctionCode.WriteSingleCoil,
Code = (int) ModbusProtocolWriteDataFunctionCode.WriteSingleCoil,
AreaWidth = 0.125
}
},
@@ -357,7 +357,7 @@ namespace Modbus.Net.Modbus
("4X", true),
new AreaOutputDef
{
Code = (int) ModbusProtocalWriteDataFunctionCode.WriteSingleRegister,
Code = (int) ModbusProtocolWriteDataFunctionCode.WriteSingleRegister,
AreaWidth = 2
}
}

View File

@@ -5,7 +5,7 @@ namespace Modbus.Net.Modbus
/// <summary>
/// Modbus/Ascii码协议
/// </summary>
public class ModbusAsciiInTcpProtocal : ModbusProtocal
public class ModbusAsciiInTcpProtocol : ModbusProtocol
{
/// <summary>
/// 构造函数
@@ -13,7 +13,7 @@ namespace Modbus.Net.Modbus
/// <param name="slaveAddress">从站号</param>
/// <param name="masterAddress">主站号</param>
/// <param name="endian">端格式</param>
public ModbusAsciiInTcpProtocal(byte slaveAddress, byte masterAddress, Endian endian)
public ModbusAsciiInTcpProtocol(byte slaveAddress, byte masterAddress, Endian endian)
: this(ConfigurationManager.AppSettings["IP"], slaveAddress, masterAddress, endian)
{
}
@@ -25,10 +25,10 @@ namespace Modbus.Net.Modbus
/// <param name="slaveAddress">从站号</param>
/// <param name="masterAddress">主站号</param>
/// <param name="endian">端格式</param>
public ModbusAsciiInTcpProtocal(string ip, byte slaveAddress, byte masterAddress, Endian endian)
public ModbusAsciiInTcpProtocol(string ip, byte slaveAddress, byte masterAddress, Endian endian)
: base(slaveAddress, masterAddress, endian)
{
ProtocalLinker = new ModbusAsciiInTcpProtocalLinker(ip, slaveAddress);
ProtocolLinker = new ModbusAsciiInTcpProtocolLinker(ip, slaveAddress);
}
/// <summary>
@@ -39,10 +39,10 @@ namespace Modbus.Net.Modbus
/// <param name="slaveAddress">从站号</param>
/// <param name="masterAddress">主站号</param>
/// <param name="endian">端格式</param>
public ModbusAsciiInTcpProtocal(string ip, int port, byte slaveAddress, byte masterAddress, Endian endian)
public ModbusAsciiInTcpProtocol(string ip, int port, byte slaveAddress, byte masterAddress, Endian endian)
: base(slaveAddress, masterAddress, endian)
{
ProtocalLinker = new ModbusTcpProtocalLinker(ip, port);
ProtocolLinker = new ModbusTcpProtocolLinker(ip, port);
}
}
}

View File

@@ -6,13 +6,13 @@ namespace Modbus.Net.Modbus
/// <summary>
/// Modbus/Ascii码协议连接器Tcp透传
/// </summary>
public class ModbusAsciiInTcpProtocalLinker : TcpProtocalLinker
public class ModbusAsciiInTcpProtocolLinker : TcpProtocolLinker
{
/// <summary>
/// 构造函数
/// </summary>
/// <param name="ip">IP地址</param>
public ModbusAsciiInTcpProtocalLinker(string ip)
public ModbusAsciiInTcpProtocolLinker(string ip)
: base(ip, int.Parse(ConfigurationManager.AppSettings["ModbusPort"] ?? "502"))
{
}
@@ -22,10 +22,10 @@ namespace Modbus.Net.Modbus
/// </summary>
/// <param name="ip">ip地址</param>
/// <param name="port">端口号</param>
public ModbusAsciiInTcpProtocalLinker(string ip, int port)
public ModbusAsciiInTcpProtocolLinker(string ip, int port)
: base(ip, port)
{
((BaseConnector)BaseConnector).AddController(new FIFOController(500));
((BaseConnector)BaseConnector).AddController(new FifoController(500));
}
/// <summary>
@@ -35,15 +35,15 @@ namespace Modbus.Net.Modbus
/// <returns>校验是否正确</returns>
public override bool? CheckRight(byte[] content)
{
//ProtocalLinker不会返回null
//ProtocolLinker不会返回null
if (!base.CheckRight(content).Value) return false;
//CRC校验失败
var contentString = Encoding.ASCII.GetString(content);
if (!Crc16.GetInstance().LrcEfficacy(contentString))
throw new ModbusProtocalErrorException(501);
throw new ModbusProtocolErrorException(501);
//Modbus协议错误
if (byte.Parse(contentString.Substring(3, 2)) > 127)
throw new ModbusProtocalErrorException(byte.Parse(contentString.Substring(5, 2)));
throw new ModbusProtocolErrorException(byte.Parse(contentString.Substring(5, 2)));
return true;
}
}

View File

@@ -5,7 +5,7 @@ namespace Modbus.Net.Modbus
/// <summary>
/// Modbus/Ascii码协议
/// </summary>
public class ModbusAsciiProtocal : ModbusProtocal
public class ModbusAsciiProtocol : ModbusProtocol
{
/// <summary>
/// 构造函数
@@ -13,7 +13,7 @@ namespace Modbus.Net.Modbus
/// <param name="slaveAddress">从站号</param>
/// <param name="masterAddress">主站号</param>
/// <param name="endian">端格式</param>
public ModbusAsciiProtocal(byte slaveAddress, byte masterAddress, Endian endian)
public ModbusAsciiProtocol(byte slaveAddress, byte masterAddress, Endian endian)
: this(ConfigurationManager.AppSettings["COM"], slaveAddress, masterAddress, endian)
{
}
@@ -25,10 +25,10 @@ namespace Modbus.Net.Modbus
/// <param name="slaveAddress">从站号</param>
/// <param name="masterAddress">主站号</param>
/// <param name="endian">端格式</param>
public ModbusAsciiProtocal(string com, byte slaveAddress, byte masterAddress, Endian endian)
public ModbusAsciiProtocol(string com, byte slaveAddress, byte masterAddress, Endian endian)
: base(slaveAddress, masterAddress, endian)
{
ProtocalLinker = new ModbusAsciiProtocalLinker(com, slaveAddress);
ProtocolLinker = new ModbusAsciiProtocolLinker(com, slaveAddress);
}
}
}

View File

@@ -1,4 +1,5 @@
using System.IO.Ports;
using System.Collections.Generic;
using System.IO.Ports;
using System.Text;
namespace Modbus.Net.Modbus
@@ -6,17 +7,17 @@ namespace Modbus.Net.Modbus
/// <summary>
/// Modbus/Ascii码协议连接器
/// </summary>
public class ModbusAsciiProtocalLinker : ComProtocalLinker
public class ModbusAsciiProtocolLinker : ComProtocolLinker
{
/// <summary>
/// 构造函数
/// </summary>
/// <param name="com">串口地址</param>
/// <param name="slaveAddress">从站号</param>
public ModbusAsciiProtocalLinker(string com, int slaveAddress)
public ModbusAsciiProtocolLinker(string com, int slaveAddress)
: base(com, 9600, Parity.None, StopBits.One, 8, slaveAddress)
{
((BaseConnector)BaseConnector).AddController(new FIFOController(500));
((BaseConnector)BaseConnector).AddController(new MatchController(new ICollection<int>[] { new List<int> { 0, 1 }}, 500));
}
/// <summary>
@@ -26,15 +27,15 @@ namespace Modbus.Net.Modbus
/// <returns>校验是否正确</returns>
public override bool? CheckRight(byte[] content)
{
//ProtocalLinker不会返回null
//ProtocolLinker不会返回null
if (!base.CheckRight(content).Value) return false;
//CRC校验失败
var contentString = Encoding.ASCII.GetString(content);
if (!Crc16.GetInstance().LrcEfficacy(contentString))
throw new ModbusProtocalErrorException(501);
throw new ModbusProtocolErrorException(501);
//Modbus协议错误
if (byte.Parse(contentString.Substring(3, 2)) > 127)
throw new ModbusProtocalErrorException(byte.Parse(contentString.Substring(5, 2)));
throw new ModbusProtocolErrorException(byte.Parse(contentString.Substring(5, 2)));
return true;
}
}

View File

@@ -7,7 +7,7 @@ namespace Modbus.Net.Modbus
/// <summary>
/// 变量功能码
/// </summary>
internal enum ModbusProtocalVariableFunctionCode : byte
internal enum ModbusProtocolVariableFunctionCode : byte
{
/// <summary>
/// 读变量
@@ -23,7 +23,7 @@ namespace Modbus.Net.Modbus
/// <summary>
/// 跟时间有关的功能码
/// </summary>
public enum ModbusProtocalTimeFunctionCode : byte
public enum ModbusProtocolTimeFunctionCode : byte
{
/// <summary>
/// 读时间
@@ -39,7 +39,7 @@ namespace Modbus.Net.Modbus
/// <summary>
/// 跟读数据有关的功能码
/// </summary>
public enum ModbusProtocalReadDataFunctionCode : byte
public enum ModbusProtocolReadDataFunctionCode : byte
{
/// <summary>
/// 读线圈
@@ -65,7 +65,7 @@ namespace Modbus.Net.Modbus
/// <summary>
/// 跟写数据有关的功能码
/// </summary>
internal enum ModbusProtocalWriteDataFunctionCode : byte
internal enum ModbusProtocolWriteDataFunctionCode : byte
{
/// <summary>
/// 写单个线圈
@@ -91,7 +91,7 @@ namespace Modbus.Net.Modbus
/// <summary>
/// Modbus协议
/// </summary>
public abstract class ModbusProtocal : BaseProtocal
public abstract class ModbusProtocol : BaseProtocol
{
/// <summary>
/// 构造函数
@@ -99,7 +99,7 @@ namespace Modbus.Net.Modbus
/// <param name="slaveAddress">从站地址</param>
/// <param name="masterAddress">主站地址</param>
/// <param name="endian">端格式</param>
protected ModbusProtocal(byte slaveAddress, byte masterAddress, Endian endian)
protected ModbusProtocol(byte slaveAddress, byte masterAddress, Endian endian)
: base(slaveAddress, masterAddress, endian)
{
}
@@ -110,7 +110,7 @@ namespace Modbus.Net.Modbus
/// <returns>是否连接成功</returns>
public override async Task<bool> ConnectAsync()
{
return await ProtocalLinker.ConnectAsync();
return await ProtocolLinker.ConnectAsync();
}
}
@@ -205,7 +205,7 @@ namespace Modbus.Net.Modbus
/// <summary>
/// 读数据协议
/// </summary>
public class ReadDataModbusProtocal : ProtocalUnit
public class ReadDataModbusProtocol : ProtocolUnit
{
/// <summary>
/// 格式化
@@ -343,7 +343,7 @@ namespace Modbus.Net.Modbus
/// <summary>
/// 写多个寄存器协议
/// </summary>
public class WriteDataModbusProtocal : ProtocalUnit
public class WriteDataModbusProtocol : ProtocolUnit
{
/// <summary>
/// 格式化
@@ -398,7 +398,7 @@ namespace Modbus.Net.Modbus
StartAddress = (ushort) translateAddress.Address;
int a = 0, b = 0;
var writeByteValue =
FunctionCode == (byte) ModbusProtocalWriteDataFunctionCode.WriteSingleCoil
FunctionCode == (byte) ModbusProtocolWriteDataFunctionCode.WriteSingleCoil
? ((bool) writeValue
? new byte[] {0xFF, 0x00}
: new byte[] {0x00, 0x00})
@@ -473,7 +473,7 @@ namespace Modbus.Net.Modbus
/// <summary>
/// 写多个寄存器协议
/// </summary>
public class WriteSingleDataModbusProtocal : ProtocalUnit
public class WriteSingleDataModbusProtocol : ProtocolUnit
{
/// <summary>
/// 格式化
@@ -501,7 +501,7 @@ namespace Modbus.Net.Modbus
var functionCode = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag);
var startAddress = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag);
var writeValue = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag);
var returnValue = functionCode == (byte)ModbusProtocalWriteDataFunctionCode.WriteSingleCoil
var returnValue = functionCode == (byte)ModbusProtocolWriteDataFunctionCode.WriteSingleCoil
? (object)(writeValue == 0xFF00) : writeValue;
return new WriteSingleDataModbusOutputStruct(slaveAddress, functionCode, startAddress,
returnValue);
@@ -524,7 +524,7 @@ namespace Modbus.Net.Modbus
public GetSystemTimeModbusInputStruct(byte slaveAddress)
{
SlaveAddress = slaveAddress;
FunctionCode = (byte) ModbusProtocalTimeFunctionCode.GetSystemTime;
FunctionCode = (byte) ModbusProtocolTimeFunctionCode.GetSystemTime;
StartAddress = 30000;
GetCount = 5;
}
@@ -602,7 +602,7 @@ namespace Modbus.Net.Modbus
/// <summary>
/// 读系统时间协议
/// </summary>
public class GetSystemTimeModbusProtocal : ProtocalUnit
public class GetSystemTimeModbusProtocol : ProtocolUnit
{
/// <summary>
/// 格式化
@@ -656,7 +656,7 @@ namespace Modbus.Net.Modbus
public SetSystemTimeModbusInputStruct(byte slaveAddress, DateTime time)
{
SlaveAddress = slaveAddress;
FunctionCode = (byte) ModbusProtocalTimeFunctionCode.SetSystemTime;
FunctionCode = (byte) ModbusProtocolTimeFunctionCode.SetSystemTime;
StartAddress = 30000;
WriteCount = 5;
WriteByteCount = 10;
@@ -775,7 +775,7 @@ namespace Modbus.Net.Modbus
/// <summary>
/// 写系统时间协议
/// </summary>
public class SetSystemTimeModbusProtocal : ProtocalUnit
public class SetSystemTimeModbusProtocol : ProtocolUnit
{
/// <summary>
/// 格式化
@@ -812,9 +812,9 @@ namespace Modbus.Net.Modbus
/// <summary>
/// Modbus协议错误表
/// </summary>
public class ModbusProtocalErrorException : ProtocalErrorException
public class ModbusProtocolErrorException : ProtocolErrorException
{
private static readonly Dictionary<int, string> ProtocalErrorDictionary = new Dictionary<int, string>
private static readonly Dictionary<int, string> ProtocolErrorDictionary = new Dictionary<int, string>
{
{1, "ILLEGAL_FUNCTION"},
{2, "ILLEGAL_DATA_ACCESS"},
@@ -830,8 +830,8 @@ namespace Modbus.Net.Modbus
/// Modbus错误
/// </summary>
/// <param name="messageNumber">Modbus错误号</param>
public ModbusProtocalErrorException(int messageNumber)
: base(ProtocalErrorDictionary[messageNumber])
public ModbusProtocolErrorException(int messageNumber)
: base(ProtocolErrorDictionary[messageNumber])
{
ErrorMessageNumber = messageNumber;
}

View File

@@ -5,12 +5,12 @@ using System.Text;
namespace Modbus.Net.Modbus
{
public class ModbusRtuInTcpProtocalLinkerBytesExtend : ModbusRtuProtocalLinkerBytesExtend
public class ModbusRtuInTcpProtocolLinkerBytesExtend : ModbusRtuProtocolLinkerBytesExtend
{
}
public class ModbusAsciiInTcpProtocalLinkerBytesExtend : ModbusAsciiProtocalLinkerBytesExtend
public class ModbusAsciiInTcpProtocolLinkerBytesExtend : ModbusAsciiProtocolLinkerBytesExtend
{
}
@@ -18,7 +18,7 @@ namespace Modbus.Net.Modbus
/// <summary>
/// Tcp协议字节伸缩
/// </summary>
public class ModbusTcpProtocalLinkerBytesExtend : IProtocalLinkerBytesExtend
public class ModbusTcpProtocolLinkerBytesExtend : IProtocolLinkerBytesExtend
{
/// <summary>
/// 协议扩展,协议内容发送前调用
@@ -54,7 +54,7 @@ namespace Modbus.Net.Modbus
/// <summary>
/// Rtu协议字节伸缩
/// </summary>
public class ModbusRtuProtocalLinkerBytesExtend : IProtocalLinkerBytesExtend
public class ModbusRtuProtocolLinkerBytesExtend : IProtocolLinkerBytesExtend
{
/// <summary>
/// 协议扩展,协议内容发送前调用
@@ -89,7 +89,7 @@ namespace Modbus.Net.Modbus
/// <summary>
/// Ascii协议字节伸缩
/// </summary>
public class ModbusAsciiProtocalLinkerBytesExtend : IProtocalLinkerBytesExtend
public class ModbusAsciiProtocolLinkerBytesExtend : IProtocolLinkerBytesExtend
{
/// <summary>
/// 协议扩展,协议内容发送前调用

View File

@@ -6,7 +6,7 @@ namespace Modbus.Net.Modbus
/// <summary>
/// Modbus/Rtu协议tcp透传
/// </summary>
public class ModbusRtuInTcpProtocal : ModbusProtocal
public class ModbusRtuInTcpProtocol : ModbusProtocol
{
/// <summary>
/// 构造函数
@@ -14,7 +14,7 @@ namespace Modbus.Net.Modbus
/// <param name="slaveAddress">从站号</param>
/// <param name="masterAddress">主站号</param>
/// <param name="endian">端格式</param>
public ModbusRtuInTcpProtocal(byte slaveAddress, byte masterAddress, Endian endian)
public ModbusRtuInTcpProtocol(byte slaveAddress, byte masterAddress, Endian endian)
: this(ConfigurationManager.AppSettings["IP"], slaveAddress, masterAddress, endian)
{
}
@@ -26,10 +26,10 @@ namespace Modbus.Net.Modbus
/// <param name="slaveAddress">从站号</param>
/// <param name="masterAddress">主站号</param>
/// <param name="endian">端格式</param>
public ModbusRtuInTcpProtocal(string ip, byte slaveAddress, byte masterAddress, Endian endian)
public ModbusRtuInTcpProtocol(string ip, byte slaveAddress, byte masterAddress, Endian endian)
: base(slaveAddress, masterAddress, endian)
{
ProtocalLinker = new ModbusTcpProtocalLinker(ip);
ProtocolLinker = new ModbusTcpProtocolLinker(ip);
}
/// <summary>
@@ -39,10 +39,10 @@ namespace Modbus.Net.Modbus
/// <param name="slaveAddress">从站号</param>
/// <param name="masterAddress">主站号</param>
/// <param name="endian">端格式</param>
public ModbusRtuInTcpProtocal(string ip, int port, byte slaveAddress, byte masterAddress, Endian endian)
public ModbusRtuInTcpProtocol(string ip, int port, byte slaveAddress, byte masterAddress, Endian endian)
: base(slaveAddress, masterAddress, endian)
{
ProtocalLinker = new ModbusRtuInTcpProtocalLinker(ip, port);
ProtocolLinker = new ModbusRtuInTcpProtocolLinker(ip, port);
}
}
}

View File

@@ -5,13 +5,13 @@ namespace Modbus.Net.Modbus
/// <summary>
/// Modbus/Rtu协议连接器
/// </summary>
public class ModbusRtuInTcpProtocalLinker : TcpProtocalLinker
public class ModbusRtuInTcpProtocolLinker : TcpProtocolLinker
{
/// <summary>
/// 构造函数
/// </summary>
/// <param name="ip">IP地址</param>
public ModbusRtuInTcpProtocalLinker(string ip)
public ModbusRtuInTcpProtocolLinker(string ip)
: base(ip, int.Parse(ConfigurationManager.AppSettings["ModbusPort"] ?? "502"))
{
}
@@ -21,10 +21,10 @@ namespace Modbus.Net.Modbus
/// </summary>
/// <param name="ip">IP地址</param>
/// <param name="port">端口号</param>
public ModbusRtuInTcpProtocalLinker(string ip, int port)
public ModbusRtuInTcpProtocolLinker(string ip, int port)
: base(ip, port)
{
((BaseConnector)BaseConnector).AddController(new FIFOController(500));
((BaseConnector)BaseConnector).AddController(new FifoController(500));
}
/// <summary>
@@ -34,14 +34,14 @@ namespace Modbus.Net.Modbus
/// <returns>数据是否正确</returns>
public override bool? CheckRight(byte[] content)
{
//ProtocalLinker的CheckRight不会返回null
//ProtocolLinker的CheckRight不会返回null
if (!base.CheckRight(content).Value) return false;
//CRC校验失败
if (!Crc16.GetInstance().CrcEfficacy(content))
throw new ModbusProtocalErrorException(501);
throw new ModbusProtocolErrorException(501);
//Modbus协议错误
if (content[1] > 127)
throw new ModbusProtocalErrorException(content[2]);
throw new ModbusProtocolErrorException(content[2]);
return true;
}
}

View File

@@ -5,7 +5,7 @@ namespace Modbus.Net.Modbus
/// <summary>
/// Modbus/Rtu协议
/// </summary>
public class ModbusRtuProtocal : ModbusProtocal
public class ModbusRtuProtocol : ModbusProtocol
{
/// <summary>
/// 构造函数
@@ -13,7 +13,7 @@ namespace Modbus.Net.Modbus
/// <param name="slaveAddress">从站号</param>
/// <param name="masterAddress">主站号</param>
/// <param name="endian">端格式</param>
public ModbusRtuProtocal(byte slaveAddress, byte masterAddress, Endian endian)
public ModbusRtuProtocol(byte slaveAddress, byte masterAddress, Endian endian)
: this(ConfigurationManager.AppSettings["COM"], slaveAddress, masterAddress, endian)
{
}
@@ -25,10 +25,10 @@ namespace Modbus.Net.Modbus
/// <param name="slaveAddress">从站号</param>
/// <param name="masterAddress">主站号</param>
/// <param name="endian">端格式</param>
public ModbusRtuProtocal(string com, byte slaveAddress, byte masterAddress, Endian endian)
public ModbusRtuProtocol(string com, byte slaveAddress, byte masterAddress, Endian endian)
: base(slaveAddress, masterAddress, endian)
{
ProtocalLinker = new ModbusRtuProtocalLinker(com, slaveAddress);
ProtocolLinker = new ModbusRtuProtocolLinker(com, slaveAddress);
}
}
}

View File

@@ -1,21 +1,22 @@
using System.IO.Ports;
using System.Collections.Generic;
using System.IO.Ports;
namespace Modbus.Net.Modbus
{
/// <summary>
/// Modbus/Rtu协议连接器
/// </summary>
public class ModbusRtuProtocalLinker : ComProtocalLinker
public class ModbusRtuProtocolLinker : ComProtocolLinker
{
/// <summary>
/// 构造函数
/// </summary>
/// <param name="com">串口地址</param>
/// <param name="slaveAddress">从站号</param>
public ModbusRtuProtocalLinker(string com, int slaveAddress)
public ModbusRtuProtocolLinker(string com, int slaveAddress)
: base(com, 9600, Parity.None, StopBits.One, 8, slaveAddress)
{
((BaseConnector)BaseConnector).AddController(new FIFOController(500));
((BaseConnector)BaseConnector).AddController(new MatchController(new ICollection<int>[]{new List<int>{0}}, 500));
}
/// <summary>
@@ -25,14 +26,14 @@ namespace Modbus.Net.Modbus
/// <returns>数据是否正确</returns>
public override bool? CheckRight(byte[] content)
{
//ProtocalLinker的CheckRight不会返回null
//ProtocolLinker的CheckRight不会返回null
if (!base.CheckRight(content).Value) return false;
//CRC校验失败
if (!Crc16.GetInstance().CrcEfficacy(content))
throw new ModbusProtocalErrorException(501);
throw new ModbusProtocolErrorException(501);
//Modbus协议错误
if (content[1] > 127)
throw new ModbusProtocalErrorException(content[2]);
throw new ModbusProtocolErrorException(content[2]);
return true;
}
}

View File

@@ -5,7 +5,7 @@ namespace Modbus.Net.Modbus
/// <summary>
/// Modbus/Tcp协议
/// </summary>
public class ModbusTcpProtocal : ModbusProtocal
public class ModbusTcpProtocol : ModbusProtocol
{
/// <summary>
/// 构造函数
@@ -13,7 +13,7 @@ namespace Modbus.Net.Modbus
/// <param name="slaveAddress">从站号</param>
/// <param name="masterAddress">主站号</param>
/// <param name="endian">端格式</param>
public ModbusTcpProtocal(byte slaveAddress, byte masterAddress, Endian endian)
public ModbusTcpProtocol(byte slaveAddress, byte masterAddress, Endian endian)
: this(ConfigurationManager.AppSettings["IP"], slaveAddress, masterAddress, endian)
{
}
@@ -25,10 +25,10 @@ namespace Modbus.Net.Modbus
/// <param name="slaveAddress">从站号</param>
/// <param name="masterAddress">主站号</param>
/// <param name="endian">端格式</param>
public ModbusTcpProtocal(string ip, byte slaveAddress, byte masterAddress, Endian endian)
public ModbusTcpProtocol(string ip, byte slaveAddress, byte masterAddress, Endian endian)
: base(slaveAddress, masterAddress, endian)
{
ProtocalLinker = new ModbusTcpProtocalLinker(ip);
ProtocolLinker = new ModbusTcpProtocolLinker(ip);
}
/// <summary>
@@ -39,10 +39,10 @@ namespace Modbus.Net.Modbus
/// <param name="slaveAddress">从站号</param>
/// <param name="masterAddress">主站号</param>
/// <param name="endian">端格式</param>
public ModbusTcpProtocal(string ip, int port, byte slaveAddress, byte masterAddress, Endian endian)
public ModbusTcpProtocol(string ip, int port, byte slaveAddress, byte masterAddress, Endian endian)
: base(slaveAddress, masterAddress, endian)
{
ProtocalLinker = new ModbusTcpProtocalLinker(ip, port);
ProtocolLinker = new ModbusTcpProtocolLinker(ip, port);
}
}
}

View File

@@ -5,13 +5,13 @@ namespace Modbus.Net.Modbus
/// <summary>
/// Modbus/Tcp协议连接器
/// </summary>
public class ModbusTcpProtocalLinker : TcpProtocalLinker
public class ModbusTcpProtocolLinker : TcpProtocolLinker
{
/// <summary>
/// 构造函数
/// </summary>
/// <param name="ip">IP地址</param>
public ModbusTcpProtocalLinker(string ip)
public ModbusTcpProtocolLinker(string ip)
: this(ip, int.Parse(ConfigurationManager.AppSettings["ModbusPort"] ?? "502"))
{
}
@@ -21,9 +21,9 @@ namespace Modbus.Net.Modbus
/// </summary>
/// <param name="ip">IP地址</param>
/// <param name="port">端口</param>
public ModbusTcpProtocalLinker(string ip, int port) : base(ip, port)
public ModbusTcpProtocolLinker(string ip, int port) : base(ip, port)
{
((BaseConnector)BaseConnector).AddController(new FIFOController(500));
((BaseConnector)BaseConnector).AddController(new FifoController(500));
}
/// <summary>
@@ -33,14 +33,14 @@ namespace Modbus.Net.Modbus
/// <returns>数据是否正确</returns>
public override bool? CheckRight(byte[] content)
{
//ProtocalLinker的CheckRight不会返回null
//ProtocolLinker的CheckRight不会返回null
if (!base.CheckRight(content).Value) return false;
//长度校验失败
if (content[5] != content.Length - 6)
throw new ModbusProtocalErrorException(500);
throw new ModbusProtocolErrorException(500);
//Modbus协议错误
if (content[7] > 127)
throw new ModbusProtocalErrorException(content[2] > 0 ? content[2] : content[8]);
throw new ModbusProtocolErrorException(content[2] > 0 ? content[2] : content[8]);
return true;
}
}

View File

@@ -145,18 +145,18 @@ namespace Modbus.Net.Modbus
case ModbusType.Rtu:
{
Wrapper = ConnectionString == null
? new ModbusRtuProtocal(SlaveAddress, MasterAddress, Endian)
: new ModbusRtuProtocal(ConnectionString, SlaveAddress, MasterAddress, Endian);
? new ModbusRtuProtocol(SlaveAddress, MasterAddress, Endian)
: new ModbusRtuProtocol(ConnectionString, SlaveAddress, MasterAddress, Endian);
break;
}
//Tcp协议
case ModbusType.Tcp:
{
Wrapper = ConnectionString == null
? new ModbusTcpProtocal(SlaveAddress, MasterAddress, Endian)
? new ModbusTcpProtocol(SlaveAddress, MasterAddress, Endian)
: (ConnectionStringPort == null
? new ModbusTcpProtocal(ConnectionString, SlaveAddress, MasterAddress, Endian)
: new ModbusTcpProtocal(ConnectionStringIp, ConnectionStringPort.Value, SlaveAddress,
? new ModbusTcpProtocol(ConnectionString, SlaveAddress, MasterAddress, Endian)
: new ModbusTcpProtocol(ConnectionStringIp, ConnectionStringPort.Value, SlaveAddress,
MasterAddress, Endian));
break;
}
@@ -164,18 +164,18 @@ namespace Modbus.Net.Modbus
case ModbusType.Ascii:
{
Wrapper = ConnectionString == null
? new ModbusAsciiProtocal(SlaveAddress, MasterAddress, Endian)
: new ModbusAsciiProtocal(ConnectionString, SlaveAddress, MasterAddress, Endian);
? new ModbusAsciiProtocol(SlaveAddress, MasterAddress, Endian)
: new ModbusAsciiProtocol(ConnectionString, SlaveAddress, MasterAddress, Endian);
break;
}
//Rtu协议
case ModbusType.RtuInTcp:
{
Wrapper = ConnectionString == null
? new ModbusRtuInTcpProtocal(SlaveAddress, MasterAddress, Endian)
? new ModbusRtuInTcpProtocol(SlaveAddress, MasterAddress, Endian)
: (ConnectionStringPort == null
? new ModbusRtuInTcpProtocal(ConnectionString, SlaveAddress, MasterAddress, Endian)
: new ModbusRtuInTcpProtocal(ConnectionStringIp, ConnectionStringPort.Value, SlaveAddress,
? new ModbusRtuInTcpProtocol(ConnectionString, SlaveAddress, MasterAddress, Endian)
: new ModbusRtuInTcpProtocol(ConnectionStringIp, ConnectionStringPort.Value, SlaveAddress,
MasterAddress, Endian));
break;
}
@@ -183,10 +183,10 @@ namespace Modbus.Net.Modbus
case ModbusType.AsciiInTcp:
{
Wrapper = ConnectionString == null
? new ModbusAsciiInTcpProtocal(SlaveAddress, MasterAddress, Endian)
? new ModbusAsciiInTcpProtocol(SlaveAddress, MasterAddress, Endian)
: (ConnectionStringPort == null
? new ModbusAsciiInTcpProtocal(ConnectionString, SlaveAddress, MasterAddress, Endian)
: new ModbusAsciiInTcpProtocal(ConnectionStringIp, ConnectionStringPort.Value, SlaveAddress,
? new ModbusAsciiInTcpProtocol(ConnectionString, SlaveAddress, MasterAddress, Endian)
: new ModbusAsciiInTcpProtocol(ConnectionStringIp, ConnectionStringPort.Value, SlaveAddress,
MasterAddress, Endian));
break;
}
@@ -205,7 +205,7 @@ namespace Modbus.Net.Modbus
var inputStruct = new GetSystemTimeModbusInputStruct(SlaveAddress);
var outputStruct =
await Wrapper.SendReceiveAsync<GetSystemTimeModbusOutputStruct>(
Wrapper[typeof(GetSystemTimeModbusProtocal)], inputStruct);
Wrapper[typeof(GetSystemTimeModbusProtocol)], inputStruct);
return outputStruct?.Time ?? DateTime.MinValue;
}
catch (Exception e)
@@ -227,7 +227,7 @@ namespace Modbus.Net.Modbus
var inputStruct = new SetSystemTimeModbusInputStruct(SlaveAddress, setTime);
var outputStruct =
await Wrapper.SendReceiveAsync<SetSystemTimeModbusOutputStruct>(
Wrapper[typeof(SetSystemTimeModbusProtocal)], inputStruct);
Wrapper[typeof(SetSystemTimeModbusProtocol)], inputStruct);
return outputStruct?.WriteCount > 0;
}
catch (Exception e)
@@ -259,7 +259,7 @@ namespace Modbus.Net.Modbus
var inputStruct = new ReadDataModbusInputStruct(SlaveAddress, startAddress,
(ushort) getByteCount, AddressTranslator);
var outputStruct = await
Wrapper.SendReceiveAsync<ReadDataModbusOutputStruct>(Wrapper[typeof(ReadDataModbusProtocal)],
Wrapper.SendReceiveAsync<ReadDataModbusOutputStruct>(Wrapper[typeof(ReadDataModbusProtocol)],
inputStruct);
return outputStruct?.DataValue;
}
@@ -283,7 +283,7 @@ namespace Modbus.Net.Modbus
var inputStruct = new WriteDataModbusInputStruct(SlaveAddress, startAddress, setContents,
AddressTranslator, Endian);
var outputStruct = await
Wrapper.SendReceiveAsync<WriteDataModbusOutputStruct>(Wrapper[typeof(WriteDataModbusProtocal)],
Wrapper.SendReceiveAsync<WriteDataModbusOutputStruct>(Wrapper[typeof(WriteDataModbusProtocol)],
inputStruct);
return outputStruct?.WriteCount == setContents.Length;
}
@@ -307,7 +307,7 @@ namespace Modbus.Net.Modbus
var inputStruct = new WriteSingleDataModbusInputStruct(SlaveAddress, startAddress, setContent,
(ModbusTranslatorBase)AddressTranslator, Endian);
var outputStruct = await
Wrapper.SendReceiveAsync<WriteSingleDataModbusOutputStruct>(Wrapper[typeof(WriteSingleDataModbusProtocal)],
Wrapper.SendReceiveAsync<WriteSingleDataModbusOutputStruct>(Wrapper[typeof(WriteSingleDataModbusProtocol)],
inputStruct);
return outputStruct?.WriteValue.ToString() == setContent.ToString();
}