Skip to content

2.4 具体协议层 ProtocolLinker

luosheng edited this page Jun 7, 2023 · 1 revision

具体协议层是指代某种具体的通讯协议,比如Modbus Rtu,它在Modbus协议公共部分的基础之上,增加了CRC16,并使用串口进行通讯。

内部实现

在接收了IProtocol的SendReceive之后,协议首先判断发送的ProtocolUnit是否挂载了SpecialProtocolUnitAttribute属性。

如果ProtocolUnit挂载了SpecialProtocolUnitAttribute,就直接把ProtocolUnit转换成IConnector的接收对象并将其发送给IConnector。
接收时执行检查命令CheckRight,如果接收的命令是正确的,就把接收的信息转换成ProtocolUnit的接收对象返回给IProtocol。

如果ProtocolUnit未挂载SpecialProtocolUnitAttribute,就把ProtocolUnit转换成IConnector的接收对象,之后反射ProtocolLinker对应的ProtocolLinkerBytesExtend,执行其中的BytesExtend,把公共协议内核扩展成完整的具体协议,之后发送给IConnector。
接收时执行检查命令CheckRight,如果接收的命令是正确的,就执行ProtocolLinkerBytesExtend里的BytesDecact,把具体协议收缩回公共协议内核,然后转换为ProtocolUnit的接收对象返回给IProtocol。

AProtocolLinker对应AProtocolLinkerBytesExtend,名称必须完全对应。

内部图3

外部接口

IProtocol向IProtocolLinker发送SendMessage,IProtocolLinker向IConnector发送SendMessage。
具体如何发送,采用何种方式发送由ProtocolLinker内部控制。

IProtocol向IProtocolLinker发送Connect/Disconnect,IProtocolLinker向IConnector发送Connect/Disconnect。

外部图3

Home

Clone this wiki locally