From ff81e4aa0973ab2844fb3137235d4ee27742ed51 Mon Sep 17 00:00:00 2001 From: parallelbgls Date: Tue, 7 Feb 2017 17:15:05 +0800 Subject: [PATCH 1/4] 2017-02-07 update 1 Add comments and documents. --- .../AddressFormaterModbus.cs | 6 + .../AddressTranslatorModbus.cs | 17 ++- .../Modbus.Net.Modbus/ModbusAsciiProtocal.cs | 2 +- .../ModbusAsciiProtocalLinker.cs | 3 + Modbus.Net/Modbus.Net.Modbus/ModbusMachine.cs | 3 + .../Modbus.Net.Modbus/ModbusProtocal.cs | 6 + .../ModbusProtocalLinkerBytesExtend.cs | 2 + .../ModbusRtuProtocalLinker.cs | 3 + .../ModbusTcpProtocalLinker.cs | 3 + Modbus.Net/Modbus.Net.Modbus/ModbusUtility.cs | 30 +++++ Modbus.Net/Modbus.Net.Modbus/README.md | 2 +- .../Modbus.Net.OPC/AddressFormaterOpc.cs | 9 ++ .../Modbus.Net.OPC/AddressTranslatorOpc.cs | 3 + .../Modbus.Net.OPC/Modbus.Net.OPC.csproj | 1 + Modbus.Net/Modbus.Net.OPC/OpcDaConnector.cs | 3 + Modbus.Net/Modbus.Net.OPC/OpcDaMachine.cs | 3 + Modbus.Net/Modbus.Net.OPC/OpcDaProtocal.cs | 3 + .../Modbus.Net.OPC/OpcDaProtocalLinker.cs | 3 + Modbus.Net/Modbus.Net.OPC/OpcDaUtility.cs | 3 + Modbus.Net/Modbus.Net.OPC/OpcProtocal.cs | 11 ++ Modbus.Net/Modbus.Net.OPC/README.md | 35 ++++++ .../AddressFormaterSiemens.cs | 35 ++++++ .../AddressTranslatorSiemens.cs | 74 ++++++++++++- .../Modbus.Net.Siemens.csproj | 1 + Modbus.Net/Modbus.Net.Siemens/README.md | 42 +++++++ .../Modbus.Net.Siemens/SiemensMachine.cs | 3 + .../Modbus.Net.Siemens/SiemensPpiProtocal.cs | 3 + .../SiemensPpiProtocalLinker.cs | 3 + .../Modbus.Net.Siemens/SiemensProtocal.cs | 104 ++++++++++++++++++ .../SiemensProtocalLinkerBytesExtend.cs | 6 + .../Modbus.Net.Siemens/SiemensTcpProtocal.cs | 17 +-- .../SiemensTcpProtocalLinker.cs | 3 + .../Modbus.Net.Siemens/SiemensUtility.cs | 34 +++++- Modbus.Net/Modbus.Net/BaseUtility.cs | 3 + 34 files changed, 463 insertions(+), 16 deletions(-) create mode 100644 Modbus.Net/Modbus.Net.OPC/README.md create mode 100644 Modbus.Net/Modbus.Net.Siemens/README.md diff --git a/Modbus.Net/Modbus.Net.Modbus/AddressFormaterModbus.cs b/Modbus.Net/Modbus.Net.Modbus/AddressFormaterModbus.cs index 06a832e..ffe8813 100644 --- a/Modbus.Net/Modbus.Net.Modbus/AddressFormaterModbus.cs +++ b/Modbus.Net/Modbus.Net.Modbus/AddressFormaterModbus.cs @@ -1,5 +1,8 @@ namespace Modbus.Net.Modbus { + /// + /// 南大奥拓NA200H专用AddressFormater + /// public class AddressFormaterNA200H : AddressFormater { public override string FormatAddress(string area, int address) @@ -13,6 +16,9 @@ } } + /// + /// Modbus标准AddressFormater + /// public class AddressFormaterModbus : AddressFormater { public override string FormatAddress(string area, int address) diff --git a/Modbus.Net/Modbus.Net.Modbus/AddressTranslatorModbus.cs b/Modbus.Net/Modbus.Net.Modbus/AddressTranslatorModbus.cs index 29a8b00..7822cf6 100644 --- a/Modbus.Net/Modbus.Net.Modbus/AddressTranslatorModbus.cs +++ b/Modbus.Net/Modbus.Net.Modbus/AddressTranslatorModbus.cs @@ -4,12 +4,21 @@ using System.Linq; namespace Modbus.Net.Modbus { /// - /// NA200H数据单元翻译器 + /// 南大奥拓NA200H数据单元翻译器 /// public class AddressTranslatorNA200H : AddressTranslator { + /// + /// 读功能码 + /// protected Dictionary ReadFunctionCodeDictionary; + /// + /// 功能码翻译至标准Modbus地址位置 + /// protected Dictionary TransDictionary; + /// + /// 写功能码 + /// protected Dictionary WriteFunctionCodeDictionary; public AddressTranslatorNA200H() @@ -188,7 +197,13 @@ namespace Modbus.Net.Modbus /// public class AddressTranslatorModbus : AddressTranslator { + /// + /// 读功能码 + /// protected Dictionary ReadFunctionCodeDictionary; + /// + /// 写功能码 + /// protected Dictionary WriteFunctionCodeDictionary; public AddressTranslatorModbus() diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocal.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocal.cs index 43f93fd..feeff00 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocal.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocal.cs @@ -1,7 +1,7 @@ namespace Modbus.Net.Modbus { /// - /// Modbus/Rtu协议 + /// Modbus/Ascii码协议 /// public class ModbusAsciiProtocal : ModbusProtocal { diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocalLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocalLinker.cs index 5609f8f..8952917 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocalLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocalLinker.cs @@ -3,6 +3,9 @@ using System.Text; namespace Modbus.Net.Modbus { + /// + /// Modbus/Ascii码协议连接器 + /// public class ModbusAsciiProtocalLinker : ComProtocalLinker { public ModbusAsciiProtocalLinker(string com) : base(com, 9600, Parity.None, StopBits.One, 8) diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusMachine.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusMachine.cs index 9b41863..8fc918c 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusMachine.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusMachine.cs @@ -2,6 +2,9 @@ namespace Modbus.Net.Modbus { + /// + /// Modbus设备 + /// public class ModbusMachine : BaseMachine { public ModbusMachine(ModbusType connectionType, string connectionString, diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusProtocal.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusProtocal.cs index 71e2456..68eb5a6 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusProtocal.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusProtocal.cs @@ -4,6 +4,9 @@ using System.Threading.Tasks; namespace Modbus.Net.Modbus { + /// + /// 变量功能码 + /// internal enum ModbusProtocalVariableFunctionCode : byte { ReadVariable = 20, @@ -39,6 +42,9 @@ namespace Modbus.Net.Modbus WriteMultiRegister = 16 } + /// + /// Modbus协议 + /// public abstract class ModbusProtocal : BaseProtocal { protected ModbusProtocal(byte slaveAddress, byte masterAddress) : base(slaveAddress, masterAddress) diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusProtocalLinkerBytesExtend.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusProtocalLinkerBytesExtend.cs index b3c375d..1338d9f 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusProtocalLinkerBytesExtend.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusProtocalLinkerBytesExtend.cs @@ -57,6 +57,7 @@ namespace Modbus.Net.Modbus { public override byte[] BytesExtend(byte[] content) { + //Modbus/Ascii协议扩张,前面增加:,后面增加LRC校验和尾字符 var newContent = new List(); newContent.AddRange(Encoding.ASCII.GetBytes(":")); foreach (var number in content) @@ -71,6 +72,7 @@ namespace Modbus.Net.Modbus public override byte[] BytesDecact(byte[] content) { + //Modbus/Ascii协议收缩,抛弃头尾。 var newContent = new List(); var ans = Encoding.ASCII.GetString(content); var index = ans.IndexOf(Environment.NewLine); diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocalLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocalLinker.cs index 3fcbdfb..a5a089d 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocalLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocalLinker.cs @@ -2,6 +2,9 @@ namespace Modbus.Net.Modbus { + /// + /// Modbus/Rtu协议连接器 + /// public class ModbusRtuProtocalLinker : ComProtocalLinker { public ModbusRtuProtocalLinker(string com) : base(com, 9600, Parity.None, StopBits.One, 8) diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocalLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocalLinker.cs index 9e1154d..830e564 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocalLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocalLinker.cs @@ -1,5 +1,8 @@ namespace Modbus.Net.Modbus { + /// + /// Modbus/Tcp协议连接器 + /// public class ModbusTcpProtocalLinker : TcpProtocalLinker { public ModbusTcpProtocalLinker(string ip) : base(ip, int.Parse(ConfigurationManager.ModbusPort)) diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusUtility.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusUtility.cs index 65580f4..53c4775 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusUtility.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusUtility.cs @@ -23,8 +23,14 @@ namespace Modbus.Net.Modbus Ascii = 2 } + /// + /// Modbus基础Api入口 + /// public class ModbusUtility : BaseUtility { + /// + /// Modbus协议类型 + /// private ModbusType _modbusType; public ModbusUtility(int connectionType, byte slaveAddress, byte masterAddress) @@ -81,6 +87,7 @@ namespace Modbus.Net.Modbus _modbusType = value; switch (_modbusType) { + //Rtu协议 case ModbusType.Rtu: { Wrapper = ConnectionString == null @@ -88,6 +95,7 @@ namespace Modbus.Net.Modbus : new ModbusRtuProtocal(ConnectionString, SlaveAddress, MasterAddress); break; } + //Tcp协议 case ModbusType.Tcp: { Wrapper = ConnectionString == null @@ -98,6 +106,7 @@ namespace Modbus.Net.Modbus MasterAddress)); break; } + //Ascii协议 case ModbusType.Ascii: { Wrapper = ConnectionString == null @@ -114,6 +123,12 @@ namespace Modbus.Net.Modbus ModbusType = (ModbusType) connectionType; } + /// + /// 读数据 + /// + /// 起始地址 + /// 获取字节个数 + /// 获取的结果 public override async Task GetDatasAsync(string startAddress, int getByteCount) { try @@ -131,6 +146,12 @@ namespace Modbus.Net.Modbus } } + /// + /// 写数据 + /// + /// 起始地址 + /// 需要设置的数据 + /// 设置是否成功 public override async Task SetDatasAsync(string startAddress, object[] setContents) { try @@ -149,6 +170,10 @@ namespace Modbus.Net.Modbus } /* + /// + /// 读时间 + /// + /// 设备的时间 public override DateTime GetTime() { try @@ -165,6 +190,11 @@ namespace Modbus.Net.Modbus } } + /// + /// 写时间 + /// + /// 需要写入的时间 + /// 写入是否成功 public override bool SetTime(DateTime setTime) { try diff --git a/Modbus.Net/Modbus.Net.Modbus/README.md b/Modbus.Net/Modbus.Net.Modbus/README.md index a1f1617..94989db 100644 --- a/Modbus.Net/Modbus.Net.Modbus/README.md +++ b/Modbus.Net/Modbus.Net.Modbus/README.md @@ -1,4 +1,4 @@ -Modbus.Net +Modbus.Net.Modbus =================== [![NuGet](https://img.shields.io/nuget/v/Modbus.Net.Modbus.svg)](https://www.nuget.org/packages/Modbus.Net.Modbus/) diff --git a/Modbus.Net/Modbus.Net.OPC/AddressFormaterOpc.cs b/Modbus.Net/Modbus.Net.OPC/AddressFormaterOpc.cs index 9bc6d1d..ea16eb8 100644 --- a/Modbus.Net/Modbus.Net.OPC/AddressFormaterOpc.cs +++ b/Modbus.Net/Modbus.Net.OPC/AddressFormaterOpc.cs @@ -3,8 +3,17 @@ using System.Linq; namespace Modbus.Net.OPC { + /// + /// Opc地址编码器 + /// public class AddressFormaterOpc : AddressFormater { + /// + /// 协议构造器 + /// + /// 如何通过BaseMachine和AddressUnit构造Opc的标签 + /// 调用这个编码器的设备 + /// 每两个标签之间用什么符号隔开,默认为/ public AddressFormaterOpc(Func tagGeter, BaseMachine machine, char seperator = '/') { diff --git a/Modbus.Net/Modbus.Net.OPC/AddressTranslatorOpc.cs b/Modbus.Net/Modbus.Net.OPC/AddressTranslatorOpc.cs index 31d8f37..71f0d20 100644 --- a/Modbus.Net/Modbus.Net.OPC/AddressTranslatorOpc.cs +++ b/Modbus.Net/Modbus.Net.OPC/AddressTranslatorOpc.cs @@ -2,6 +2,9 @@ namespace Modbus.Net.OPC { + /// + /// Opc地址解析器 + /// public class AddressTranslatorOpc : AddressTranslator { public override AddressDef AddressTranslate(string address, bool isRead) diff --git a/Modbus.Net/Modbus.Net.OPC/Modbus.Net.OPC.csproj b/Modbus.Net/Modbus.Net.OPC/Modbus.Net.OPC.csproj index 2accc6f..71afb08 100644 --- a/Modbus.Net/Modbus.Net.OPC/Modbus.Net.OPC.csproj +++ b/Modbus.Net/Modbus.Net.OPC/Modbus.Net.OPC.csproj @@ -90,6 +90,7 @@ +