qt - QModbusTcpClient 无法连接到 PLC
问题描述
我正在尝试连接到 PLC 设备。我正确设置了设备中的所有配置,我通过 ModbusSlave 软件成功连接并测试了 PC 和 PLC 设备之间的通信。
我的QT代码是:
PLC = new QModbusTcpClient();
m_port = 502;
m_host = "10.100.101.2"; //PLC IP
PLC->setConnectionParameter(QModbusDevice::NetworkPortParameter, this->m_port);
PLC->setConnectionParameter(QModbusDevice::NetworkAddressParameter, this->m_host);
PLC->setTimeout(5000);
PLC->setNumberOfRetries(10);
qDebug()<<"State: " << PLC->state();
qDebug()<<"Try to connect...";
if(!PLC->connectDevice()){
qDebug()<<"Not connected to PLC: " << PLC->errorString();
}
else{
qDebug()<<"State: " << PLC->state();
while(PLC->state()!=QModbusDevice::ConnectedState){
QThread::msleep(5);
}
qDebug()<<"Connection to PLC succesed" << PLC->state();
emit PLCConnected();
}
输出是:
状态:QModbusDevice::UnconnectedState 尝试连接... 状态:QModbusDevice::ConnectingState
解决方案
首先,PLC->connectDevice() 是做什么的?
第二,你不能在同一个线程中等待连接,只需订阅 QModbusDevice::stateChanged 信号并寻找状态变化
推荐阅读
- laravel - Laravel8 打印的个人 ID 的 pdf 文件
- ios - SwiftUI - 将函数 ID 设置为 post.id
- macos - 链接 libPocoCrypto.dylib 时,在 Mac Catalina 上构建 Poco 失败
- node.js - 如何从 nodeJs 应用程序在 imageKit 上上传多个图像?
- opencv-python - 如何在 ubuntu 的 anaconda jupyter notebook 中安装 OpenCv 库
- python - 将 Python 文件连接在一起以简化导入
- python-3.x - 如何检查列值何时从 0 变为 1 并且在多次计数后第 1 列和第 2 列值相同
- flutter - Flutter flutter_test 小部件测试金色屏幕截图中的文本空白
- sockets - socket坏了时flink如何通过socketTextStream方法重新连接socket
- mysql - MYSQL 中的重做和撤消查询