Есть контроллер Овен ПЛК73 с некой программой, в которой настроены ModBus регистры для переменных. Пишу программу-сервер для опроса контроллера на Qt. В связи с этим возникло несколько вопросов:
1. Нужно ли что-то дописывать в программе контроллера, чтобы получать данные с него по ModBus RTU? Или достаточно того, что поставил галочки Modbus и указал регистры у каждой нужной переменной?
2. Если есть специалисты по Qt, то как правильно написать функцию для получения данных. Я написал вот так:
Код:
//Функция подключения к контроллеру
void MainWindow::on_comStart_triggered()
{
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
if ( info.portName() != config.value("PLC/COMPORT").toString() ) continue;
else {
port = info;
break;
}
}
if ( port.isNull() ) {
Log("Не удалось найти указанный порт для подключения к контроллеру!", "red");
return;
}
if ( port.isBusy() ) {
Log("Не удалось подключиться к контроллеру. Указанный порт используется другой программой!", "red");
return;
}
com.setPort(port);
if ( com.open(QIODevice::ReadWrite) ) {
connect(&com, SIGNAL(readyRead()), this, SLOT(comReady_read()));
Log("Подключение к контроллеру прошло успешно", "blue");
} else
Log("Не удалось подключиться к контроллеру!", "red");
}
//Функция чтения информации с контроллера
void MainWindow::comReady_read()
{
QByteArray msg = com.readAll();
if ( msg.length() > 0 ) {
Log("Сообщение от контроллера получено!", "blue");
Log(msg, "green");
}
Log("Удалось выполнить функцию comReady_read()", "blue");
}
Подключиться к контроллеру у меня удалось, а вот получить с него данные никак не получается. Никаких записей из функции comReady_read() на экран не выводилось. То есть функция ни разу не выполнялась.