【发布时间】:2019-08-30 19:26:30
【问题描述】:
我正在通过串口使用 QModbusDevice 编写一个小程序(使用QModbusRtuSerialMaster 类)并且遇到了一些问题。
其中一个问题似乎是串口的流控不正确。检查串行端口嗅探器,我看到一个工作客户端在发送请求时将 RTS 设置为打开,然后 RTS 关闭以接收回复。当我使用QModbusRtuSerialMaster 发送消息时不会发生。
与工作客户端相比,消息发送正确(有时是另一个问题的主题)。只是控制流不起作用,导致服务器无法回复。
我已将相关 COM 端口的 Windows 端口设置设置为硬件流控制,但没关系,嗅探器仍然报告没有流控制。
有没有办法让QModbusRtuSerialMaster 设置我想要的流量控制?或者有没有办法手动处理流量控制(这是工作客户端所做的)?或者是唯一的解决方案是跳过 Qt modbus 类并直接使用串口自己编写?
我在做什么的简短总结......
首先初始化QModbusRtuSerialMaster对象:
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);
【问题讨论】:
-
如果你访问串口和
setRequestToSend()会发生什么? -
因为很有可能这会让你获得所需的控制bugreports.qt.io/browse/QTBUG-76232