Modbus解析器控件

一个工程只能用一个此控件,作用于全局,使用详解请参考实验八

1. 属性

属性

说明

id

控件ID号,不可更改

name

控件名称,可改,默认:modprotocol+序号

rxBufLen

用于接收数据的缓存的长度

2. 示例

2.1. 在脚本中访问属性(以modbus名称为modbus为例)

2.1.1. Modbus主站发送读取帧(modbusRead)

例如,从设备地址0x01,功能码0x03,寄存器起始地址0x0000,寄存器数量2,超时时间50ms

modbusRead(0x01,0x03,0x00,2,50);

2.1.2. modbus主站发送写入帧写入数值(modbusWrite)

例如,从机设备地址0x01,功能码06,写入寄存器地址0x0064,写入值2,超时时间 50ms

modbuswrite(0x01,0x06,0x0064,0x02,50)

2.1.3. modbus主站发送写入帧写入数组(modbusWrrites)

例如 从设备地址0x01,功能码0x03,寄存器起始地址0x0000,寄存器数量2,数组arr[4]值,数组长度4 超时时间50ms

byte arr[4]={0x01,0x02,0x03,0x04};
modbusWrites(0x01,0x06,0x00,2,arr,4,50);

2.1.4. modbus从机发送数据(modbusSendBytes)

例如 从机地址0x01,功能码0x03,发送的字节数组arr[4],发送的数组长度4,超时时间50ms

byte arr[4]={0x01,0x02,0x03,0x04};
modbusSenBytes(0x01,0x03,arr,4,50);

Modbus函数返回值为0或者-1,用户使用modbus发送时一定要读取返回值,返回为0正常执行解析脚本,返回值为-1则通信失败不执行解析脚本

2.1.5. modbus.addr(只读)数据帧中的地址

modbus报文命令帧可以查看报文命令格式(modbus rtu命令帧文档有相关详细介绍可以查阅)

例如 获取 报文地址

int add;
add = modbus.addr;

2.1.6. modbus.fcode(只读)数据帧中的功能码

modbus报文命令帧可以查看报文命令格式(modbus rtu命令帧文档有相关详细介绍可以查阅)

例如 获取 报文功能码

int faction;
faction= modbus.fcode;

2.1.7. Modbus.rxbuf(modbus数据缓存数组)

此数组为modbus属性内容,数组不可读写,每次接收到modbus报文都会自动覆盖之前内容,rxbuf第一个字节为modbus报文功能码后第一个字节,例如主站用03功能码读取从站寄存器,那么主站接收到的rxbuf就是从站返回的报文,rxbuf[0]为数据长度,rxbuf[1]开始是数据内容。具体modbusrtu各功能吗命令格式请查看modbusrtu命令帧介绍文档

2.1.8. Modbus.rxbufLen(modbus.rxbuf数组的长度)只读属性

3. 常见问题

  1. 屏作为modbus主站时,首先要从工具栏托一个modbus协议解析器控件致页面特殊控件栏,主站定时发轮询报文,利用定时器控件,在定时事件中写入发送脚本,以及返回的数据解析。此时modbus协议解析器控件不需要写脚本。

  2. 连续寄存器建议用循环写入或者读取,连续从站地址也建议循环解决(官网有例程可供参考),当定时器内需要写多个modbus发送函数时总超时时间不要超过定时器定时间隔

  3. 屏做modbus从站时,可以在modbus控件数据接收事件中,利用一个数组来模拟从站寄存器,按照主机发送报文的协议格式对数组进行赋值,协议解析完成之后一定要用modbussendbytes发送一个返回的报文给主机。