Modbus主机

本例程使用ExpOS设备做主机,使用modbus控件,通讯接口使用串口com1(modbus-rtu)或者网口(modbus-tcp)。注意: modbus-rtu不能通过模拟器来模拟,如果要在Windows里面模拟,可以通过Windows App来模拟。

■ 设计步骤

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

2、在主页面上拖入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 主机演示”

results matching ""

    No results matching ""