使用QT的modbus通讯,我是客户端。在初始化时候连接成功了,状态为:
m_moduleMTClient->state() == QModbusDevice::ConnectedState
但是在向地址读取数据和写入数据时候,error返回的并不是0:NoError
reply->error() != QModbusDevice::NoError
提示返回的错误为
QModbusDevice::ProtocolError QT帮助里意思是:A Modbus specific protocol error occurred.
而reply->errorString()提示:"Modbus Exception Response."
有没有有相关经验的大ge帮忙看看是什么原因,在羡等,如果确实解决,马上采纳。
直接用套接字实现。看modbus tco就是一个套接字的客户端。没必要使用第三方库。使用套接字 按照保温合适发送即可。需要的话可以帮你。
你把要通信的设备说明文档发上来\QT代码发上来
今天上午已经解决了,说明下希望能帮到遇到这个情况的人。
出现我遇到的这个错误,原因是:没有在正确的地址读取和写入数据。而出现这个情况的原因,是modbusTcp有个奇怪的地方,就是PLC的地址40001,客户端对应的地址是0,可以看下图调试助手显示的。
所以当我以客户端使用modbus,读取的地址是40001时,服务器端也就是plc那边的地址实际上是44W多的一个地址。
解决办法是,我从0地址开始读取和写入数据,就一切正常了。
因为没用过modbus,不知道有这么个情况,以为双方的地址应该一样,浪费了1天时间。