Есть контроллер Овен ПЛК73 с некой программой, в которой настроены ModBus регистры для переменных. Пишу программу-сервер для опроса контроллера на Qt. В связи с этим возникло несколько вопросов:
1. Нужно ли что-то дописывать в программе контроллера, чтобы получать данные с него по ModBus RTU? Или достаточно того, что поставил галочки Modbus и указал регистры у каждой нужной переменной?
2. Если есть специалисты по Qt, то как правильно написать функцию для получения данных. Я написал вот так:
Подключиться к контроллеру у меня удалось, а вот получить с него данные никак не получается. Никаких записей из функции comReady_read() на экран не выводилось. То есть функция ни разу не выполнялась.Код://Функция подключения к контроллеру 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"); }


Ответить с цитированием
