1.ModbusTcp主站的创建和连接
1.创建
QModbusTcpClient* modBusTcpClient = new QModbusTcpClient;
2.设置参数
1.设置从站地址以及端口号
1.设置端口号 (ModbusTcp端口号默认为502)
modBusTcpClient->setConnectionParameter(QModbusDevice::NetworkPortParameter,502);
2.设置连接的从站地址(若是主从栈在同一电脑内部测试,则设置为本机ip 127.0.0.1,在局域网内则设置为从站的ip即可)
modBusTcpClient->setConnectParameter(QModbusDevice::NetworkAddressParameter,“192.168.1.74”);
2.设置连接超时时间以及连接尝试次数
modBusTcpClient->setTimeout(2000);
modBusTcpClient->setNumberOfRetries(3);
3.连接操作 (下面函数 返回值为1时连接进程成功初始化,为0初始化失败)
modBusTcpClient->connectDevice();//要注意连接时在另一进程,函数执行完比不代表完成连接
3.连接结果的查看
modbusTcpClient->status();//函数返回值为连接状态
signal QModbusDevice::stateChanged(QModbusDevice::State state)//连接状态变更信号
2.ModbusTcp值得获取
以读取2字节长度无符号为例
1.设置要读的数据的Address,和长度
QModbusDataUnit requestData(QModbusDataUnit::HoldingRegisters,6,10);
参数1指的是读寄存器(2字节为单位)
参数2读的起始地址为6
参数3读的长度为10
2.指定ID向从站发出请求
QModbusReply* reply = modBusTcpClient->sendReadRequest(requestData,1);
参数2为从站号
则上述的两行代码:向ID号为1的从站发送请求,读取Address为6长度为10的数据,也就是读取ID1的slave的6-15的数据共20个字节
3.获取结果
请求后,会在另一个线程处理获取数据,处理完成后可以在reply中获取结果
1.等待获取完成,使用信号 replay->finished()
2.连接上述信号,处理函数中QModbusDataUnit* data = reply->result();
data->value();//返回值是一个长度为10的quint16的QVector,保存了返回的数据
注意由于请求后获取参数在另一线程中执行,所以一定要使用reply->finished()作为信号,在处理函数中对reply->result()处理,否则没法获取到数据
QT ModbusTcp主站的使用 QModbusTcpClient
最新推荐文章于 2024-07-18 12:35:55 发布