QModbusRtuSerialMaster не может отправить данные - PullRequest
0 голосов
/ 06 февраля 2020

У меня трудности с использованием QModbusRtuSerialMaster для чтения / записи данных с устройства Modbus. Ошибка происходит, когда мое приложение пытается отправить данные на устройство:

Debug: (RTU client) Sent Serial PDU: 0x0304160001 ((null):0, (null))
Debug: (RTU client) Sent Serial ADU: 0x01030416000164fe ((null):0, (null))
Debug: (RTU client) Send failed: 0x0304160001 ((null):0, (null))

Ошибка отправки, а затем весь тайм-аут запроса. Вот некоторый код:

_modbus = new QModbusRtuSerialMaster(this);

connect(_modbus, &QModbusClient::stateChanged, this, &ModbusMaster::stateChanged);
connect(_modbus, &QModbusClient::errorOccurred, this, &ModbusMaster::errorOccurred);

_modbus->setConnectionParameter(QModbusDevice::SerialPortNameParameter, _port);
_modbus->setConnectionParameter(QModbusDevice::SerialParityParameter, QSerialPort::EvenParity);
_modbus->setConnectionParameter(QModbusDevice::SerialBaudRateParameter, QSerialPort::Baud19200);
_modbus->setConnectionParameter(QModbusDevice::SerialDataBitsParameter, QSerialPort::Data8);
_modbus->setConnectionParameter(QModbusDevice::SerialStopBitsParameter, QSerialPort::OneStop);

_modbus->setTimeout(1000);
_modbus->setNumberOfRetries(0);

bool ModbusMaster::read(QModbusDataUnit::RegisterType type, int startAddress, quint16 count)
{
    if (!_modbus) return false;
    if (_modbus->state() != QModbusDevice::ConnectedState) return false;

    QModbusDataUnit req(type, startAddress, count);    
    if (auto *reply = _modbus->sendReadRequest(req, _id))
    {
        qDebug() << reply->isFinished() << _modbus->timeout();
        if (!reply->isFinished()) connect(reply, &QModbusReply::finished, this, &ModbusMaster::readReady);
        else readReady();
        return true;
    }
    else
    {
        qDebug() << _modbus->errorString();
    }
    return false;
}

Я использую Qt5.11 в пользовательском дистрибутиве Yocto ARM. Что может вызвать такой сбой?

При использовании другого приложения устройство Modbus отвечает правильно.

...