modbus协议通信

编程入门 行业动态 更新时间:2024-10-27 05:21:17

modbus<a href=https://www.elefans.com/category/jswz/34/1771197.html style=协议通信"/>

modbus协议通信

一、总概括:
Modbus Slave搭配-Modbus Poll收发数据
Modbus Slave是一个模拟Modbus协议从机的上位机软件,主要用于模拟测试跟其他主机设备通信的过程。与之成套存在的另一个软件--Modbus Poll,则是模拟Modbus协议主机的上位机软件。该软件内部封装标准Modbus协议栈,通过图形化界面使得操作更为简便。目前软件支持01、02、03、04、05、06、15、16功能码,原始报文查看,数据记录等功能,是调试Modbus协议栈的好帮手。

1.qModMaster配合ModbusSlave数据收发
ModbusSlave: 从机,作为服务器,监听端口
qModMaster: 主机,作为客户端,负责与从机读写数据

主站(Master),是一个控制设备,负责发起和管理 Modbus TCP 通信。它可以向从站发送读取或写入请求,并接收从站返回的响应。主站通常是一个上位机或监控系统,负责控制和监视整个系统。
从站(Slave):从站是被动设备,响应主站的请求并提供数据。它可以是传感器、PLC 或其他设备。从站接收主站的读取或写入请求,并返回相应的数据或执行相应的操作。
Modbus TCP中,主站通常是tcp的client端,从站是tcp的server端,开启默认端口502。这个很容易混淆,这里在强调下。


二、利用libmodbus库编写代码模拟从机功能,并进行代码分析
windows下模拟运行modbusmaster 参考 或者 
=1001.2014.3001.5506 发现写入失败,
参考 中的代码,写入失败,把写入的代码注释掉,读取ok
---modbus poll中setup选择的function选择16 Write Muitiple Registers中可以进行写操作,修改modbus slave中的值,是否将程序中的调用接口功能码修改一下也可以进行写操作呢?


三、开源代码QModMaster配合Modbus Slave使用
qt模拟modbus master =1001.2014.3001.5502
代码模拟modslave master中ip地址为127.0.0.1 502 modbus slave中setup选择any address

---至此tcp通信基本OK


四、rtu通信 串口通信
modbus master和modbus poll进行rtu通信 =1001.2014.3001.5502
先下载和使用虚拟串口
参考代码示例
利用modbus slave和自写的main程序通信成功


五、遇到的问题
QModbusMaster与ModbusSlave通信 
QModbus中的 m_modbus = modbus_new_rtu(port.toLatin1().constData(),baud,parity.toLatin1(),dataBits,stopBits,RTS);
报错“Connection failed. Could not connect to serial port”的问题
将其中的参数 parity.toLatin1() 改为‘N’即可了
原因:1,QChar 转换char: char QChar::toLatin1();char QChar::toAscii();
Qstring用函数QChar EUtils::parity(QString p)只取第一个字符之后 转换成了QChar 但是取到的值还是‘奇’ ‘偶’ ‘无’这三个值 不符合 modbus_new_rtu的char值的判断

更多推荐

modbus协议通信

本文发布于:2023-11-15 10:31:44,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1598222.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:协议   通信   modbus

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!