第一步:从通信指令库中调用MB_SERVER,选择V5.2版本。如下图:
第二步:为MB_SERVER的CONNECT参数配置对应的数据块和参数。如下图:
ID号用来区分不同的连接,如果创建了多个MB_SERVER连接,应设置多个ID号。本地端口号默认选择502,也可选择其它。远程连接伙伴的IP地址和端口号可以不设置。
第三步:创建一些数据块,作为Modbus TCP的数据Buffer的原始数据,供Modbus客户端访问。如下图:
本例一共创建了5个数据块,第1个类型为:01过程映像输出(线圈),第2个类型为:02过程映像输入(开关输入),第3个和第4个类型为:03保持寄存器,第5个类型为:04输入寄存器。第1个和第2个数据块中定了含有16个布尔类型的元素的一维数组,其余3个数据块定义了含有16个字类型的元素的一维数组。
第四步:在MB_SERVER的背景数据块中定义Modbus TCP的数据Buffer,和Modbus地址形成映射关系。如下图:
注意相同类型的数据的分配与连接,不可叠加但可以以字为单位跳空分配。
第五步:下载程序并用Modbus Poll工具进行数据监控。如下图:
总结:
如果在MB_SERVER背景数据块中的Data_Area_Array中定义数据区域,则通过形参MB_HOLD_REG以指针形式传递的数据将失效,尽管如此,该参数也不能设置为NULL,且其指向的存储区应大于等于2个字节;
如果只打算通过形参MB_HOLD_REG指向的数据来作为Modbus TCP的数据,则MB_SERVER背景数据块中的Data_Area_Array应保持默认参数,不应配置其它参数;
用户最多可在不同数据块中定义8个数据区域(Data_Area_Array只提供了8组),每个数据块只能包含一个数据区域。单个MODBUS请求只能对恰好一个数据区域进行读写操作。每个数据区域对应于一个MODBUS地址区域。可以在MB_SERVER背景数据块的静态变量Data_Area_Array中定义数据区域;
如果要使用的数据区域不到8个,则所需数据区域必须紧密相连,没有间隙。在处理过程中,数据区域中的第一个空白条目会终止数据区域搜索。例如,如果已定义Data_Area_Array字段元素 1、2、4 和 5,由于字段元素 3 留空,则Data_Area_Array只会识别字段元素 1 和 2;
单个 MODBUS 请求只能对一个数据区域进行读写操作。如果要读取覆盖多个数据区域的保持性寄存器,则需要多个 MODBUS 请求。
知识小卡片