Skip to content

文档-工程实例-modbus主机演示

本例程使用ExpOS设备做主机,使用modbus控件,通讯接口使用串口com1(modbus-rtu)或者网口(modbus-tcp)

■ 设计步骤

1.如果使用modbus-rtu方式,首先需要设置串口com1协议为PassThrough(透传),这样串口com1将串口的读写转交给modbus控件

2.在主页面上拖入modbus控件(注意:全局只能有一个modbus控件,另外modbus控件所属的页面,把页面的“隐藏时缓存”属性勾选上),设置相应的属性,类型选择RTU或者TCP,角色选择Master, 串口选择COM1

3、从站的设置,如果是RTU通讯,可以设置slaveId属性;如果是TCP通讯,需要使用modbus.connect(ip, port)方法来连接从站

4、modbus的读和写 (注意:不管是RTU还是TCP, 读写方法都是一样的)

modbus控件中提供了下面的4种读写方法,一般推荐使用前3种方法即可,不建议使用sendRaw(data)方法

read(code, addr, nb) 读线圈或者保持寄存器:code-功能码,addr-寄存器地址,nb-读取个数
write(code, addr, values) 写线圈或者保持寄存器:code-功能码,addr-寄存器地址,values-设置值数组
writeread(code, write_addr, write_values, read_addr, read-nb) 写和读:code-功能码,write_addr-写寄存器地址,write_values-写操作数组,read_addr-读寄存器地址,read-nb读取的个数
sendRaw(data) 发送原始数据帧,data为字节数组,首字节以功能码开头,中间是寄存器地址以及个数和数据,帧尾不需要添加CRC校验,如果是RTU协议控件内部会自动追加CRC(TCP协议不需要CRC)

Modbus的读和写都是异步方法,返回结果都是在modbus控件的事件方法onReceive()或者onError(),如果通讯正常,调用onReceive();如果通讯出错,则调用onError()

函数定义:onReceive(data, flags, addr), data为从站回复的结果数组(如果请求是通过sendRaw(data)发起的,返回的结果是原始的字节数组),flags为标识(包含isRaw, slaveId, functionCode标识), addr为寄存器地址
函数定义:onError(errno, reason, flags), errno为错误号,reason为错误原因字符串,flags为标识(包含isRaw, slaveId, functionCode标识),addr为寄存器地址

完整工程,请在最新版本的Studio中打开例程“Modbus 主机演示”