我正在通过串行端口使用 QModbusDevice 编写一个小程序(使用QModbusRtuSerialMaster
类)并有一些问题。
问题之一似乎是串口的流量控制不正确。检查串行端口嗅探器时,我发现工作客户端在发送请求时打开 RTS,然后关闭 RTS 以接收回复。当我使用QModbusRtuSerialMaster
发送未发生的消息。
与工作客户端相比,消息发送正确(有时,这是另一个问题的主题)。只是控制流不起作用,导致服务器无法回复。
我已将相关 COM 端口的 Windows 端口设置设置为硬件流量控制,但这并不重要,嗅探器仍然报告没有流量控制。
有没有办法得到QModbusRtuSerialMaster
按照我的意愿设置流量控制?或者有没有办法手动处理流量控制(这是工作客户端所做的)?或者是跳过 Qt modbus 类并直接使用串行端口组成我自己的唯一解决方案?
我正在做的事情的简短摘要...
首先是初始化QModbusRtuSerialMaster
object:
QModbusDevice* modbusDevice = new QModbusRtuSerialMaster(myMainWindow);
modbusDevice->setConnectionParameter(QModbusDevice::SerialPortNameParameter, "COM3");
modbusDevice->setConnectionParameter(QModbusDevice::SerialParityParameter, QSerialPort::NoParity);
modbusDevice->setConnectionParameter(QModbusDevice::SerialBaudRateParameter, QSerialPort::Baud115200);
modbusDevice->setConnectionParameter(QModbusDevice::SerialDataBitsParameter, QSerialPort::Data8);
modbusDevice->setConnectionParameter(QModbusDevice::SerialStopBitsParameter, QSerialPort::OneStop);
modbusDevice->setTimeout(100);
modbusDevice->setNumberOfRetries(3);
modbusDevice->connectDevice();
然后我如何发送请求:
auto response = modbusDevice->sendReadRequest(QModbusDataUnit(QModbusDataUnit::Coils, 0, 1), 1);