本文简单介绍Qt使用外部modbus通信C++编程流程
modbus中文手册:https://blog.csdn.net/qq_23670601/article/details/82155378
Qtmodbus较为方便,建议无特殊情况可以使用qtmodbus,为何不使用Qt自带QModbus呢?原因是我在编写modbus主站的时候需要创建一个线程监听从站的数据,创建线程的时候出现为不同线程的父线程创建子线程的报错,个人解决不了。
modbus通信编程流程
1.搭建modbus环境
在pro工程项目中添加头文件所在路径,lib库
2.建立连接
//创建modbus对象
modbus_t *modbus;
//建立tcp连接
modbus = modbus_new_tcp(ip地址,端口号);
//设置slave
int ret = modbus_set_slave(modbus,slave号);//错误返回-1,正确返回0;
//进行连接
ret = modbus_connect(modbus);//错误返回-1,正确返回0;
//设置响应延迟,第三个参数是最迟的时间,1000为1ms不是1s;
ret = modbus_response_timeout(modbus,0,900000);
中文操作手册上并没有找到设置slave的,但是这个确实要设置,不然只能连接不可以通信只是我没有找到,可能不是很细心,slave一般设置为1,市面上的modbus调试工具上面可以查看
3.接收/发送数据
//读数据
ret = modbus_read_registers(modbus,起始地址,数据个数,存储的容器);//读取的数据存储在容器中,错误返回-1
//写数据
ret = modbus_write_registers(modbus,起始地址,数据个数,存储的容器);//将容器的数据依次写入寄存器