-
Notifications
You must be signed in to change notification settings - Fork 136
2.5 抽象协议层 Protocol
抽象协议层是某一类型的协议的公共内核,以及管理具体协议层的入口。
Modbus.Net的抽象协议层为IProtocol,其中管理了大量的ProtocolUnit。
每一个ProtocolUnit就是一个抽象协议,它并不是真正的协议,而是协议的公共部分。
比如Modbus协议中,
Rtu协议为 从站-协议号-地址-数据-CRC校验
ASCII协议为 从站-协议号-地址-数据-LRC校验
TCP协议为 4个0-从站-协议号-地址-数据
那么它们的公共部分就是 从站-协议号-地址-数据
BaseProtocol实现了一个惰性加载ProtocolUnit的字典,这个字典不需要手动添加,只需要直接指明ProtocolUnit的类型,它就能把相应的ProtocolUnit自动懒加载到字典当中供使用者调用。
-
ProtocolUnit
ProtocolUnit继承自IProtocolFormatting,由两个方法构成,Format和Unformat。
public abstract TParamIn Format(IInputStruct message); public abstract IOutputStruct Unformat(TParamOut messageBytes, ref int pos);
Format把IInputStruct变为输入参数,Unformat把输出参数变为IOutputStruct。
您可以参考Modbus.Net.Modbus中的ModbusProtocol.cs,实现自己的ProtocolUnit。
-
BaseProtocol
BaseProtocol实现了一个惰性加载的Dictionary。
public ProtocolUnit this[Type type]
这个Dictionary以ProtocolUnit的类型作为参数,当ProtocolUnit未加载时,则将ProtocolUnit加载到Dictionary中,否则直接调用缓存。
当需要发送数据和接收数据的时候,则直接调用ProtocolUnit的Format和Unformat方法构造与解构协议内容。
如果您想实现自己的加载方法,请直接继承IProtocol。
当构造IProtocol的时候,会要求添加一个IProtocolLinker,这个Linker代表了具体协议的构造与发送器。
IProtocol只有SendReceive一个主要方法,在IUtilityMethod向其发送SendReceive用于传递消息的时候,IProtocol则会把协议变为输入参数(默认为字节数组),然后发送给IProtocolLinker的SendReceive。
Modbus.Net Hangzhou Delian Science Technology Co.,Ltd. © 2023
-
2 Specification of Modbus.Net main framework
- 2.1 Modbus.Net Architecture
- 2.2 Transmission Control Layer Controller
- 2.3 Transmission Link Layer Connector
- 2.4 Concrete Protocol Layer ProtocolLinker
- 2.5 Abstract Protocol Layer Protocol
- 2.6 Protocol Presentation Layer Utility
- 2.7 Device Application Layer Machine
- 2.8 Task Application Layer MachineJob
-
3 Using Modbus.Net to implement a protocol
- 3.1 Global Tools
- 3.2 Extends Protocol and ProtocolUnit according to protocol specification
- 3.3 Extends Connector to create a link method
- 3.4 Extends Machine and Utility, creating two apis
- 3.5 Extends API methods to Machine and Utility
- 3.6 Extends Formater, Translator and Combiner, Creating Encoding,Decoding,Combining methods for address
- 3.7 Extends Controller, to control message