Skip to content

2.6 协议表示层 Utility

luosheng edited this page Jun 7, 2023 · 8 revisions

协议表示层是Modbus.Net的第一层可以调用的API,利用这个协议API,既可以以协议为理解目标直接与设备通讯,也可以自己封装一个针对某种特定通讯的API。

内部实现

协议表示曾分为两部分,属性IUtilityProperty和方法组IUtilityMethod。

IUtilityProperty内部有一个AddressTranslator,负责把string地址解析为有具体含义的地址AddressDef。
AddressTranslator可以自由替换

IUtilityProperty还有一个Endian端系统,可以指定数据的存储方式,分为小端格式,大端(小端bit)格式,大端(大端bit)格式。

IUtilityMethod是协议的方法组接口,定义了底层API可以执行的一组方法,这组方法需要继承IUtilityMethod并定义相应的接口,然后在类(Modbus.Net中为BaseUtility)中实现。

用户调用时只能直接看到IUtilityProperty,但是可以调用IUtilityProperty中的GetUtilityMethods来调用IUtilityMethod。

内部图5

外部接口

BaseUtility实现了IUtilityProperty和IUtilityMethodData,IUtilityMethodData包含一组GetDatas/GetDatasAsync负责读数据,以及SetDatas/SetDatasAsync负责写数据,在继承BaseUtility时只需要实现两个抽象函数,其余函数由框架自动完成。

public abstract Task<byte[]> GetDatasAsync(string startAddress, int getByteCount);

public abstract Task<bool> SetDatasAsync(string startAddress, object[] setContents);

当IMachineMethod发送命令的时候,IUtilityProperty解析地址,确定地址范围,然后IUtilityMethod把命令发送给IProtocol。

外部图5

Home

Clone this wiki locally