Qt工业物联网

Qt中的Modbus通信指南:QModbusClient与QModbusServer类解析 (qq.com)

cpp 复制代码
#include <QCoreApplication>
#include <QModbusTcpServer>
#include <QUrl>

int main(int argc, char *argv[]) {
    QCoreApplication app(argc, argv);

    QModbusTcpServer modbusServer;
    // 初始化数据模型,这里我们只设置了一个保持寄存器
    QModbusDataUnitMap dataModel;
    dataModel.insert(QModbusDataUnit::HoldingRegisters, { QModbusDataUnit::HoldingRegisters, 0, 10 });
    modbusServer.setDataMap(dataModel);

    const QUrl url = QUrl::fromUserInput("127.0.0.1:502");
    modbusServer.setConnectionParameter(QModbusDevice::NetworkPortParameter, url.port());
    modbusServer.setConnectionParameter(QModbusDevice::NetworkAddressParameter, url.host());

    if (!modbusServer.listen()) {
        qFatal("Unable to start the Modbus server: %s", qPrintable(modbusServer.errorString()));
    }

    return app.exec();
}
cpp 复制代码
#include <QCoreApplication>
#include <QModbusTcpClient>
#include <QModbusReply>

int main(int argc, char *argv[]) {
    QCoreApplication app(argc, argv);

    QModbusTcpClient modbusClient;
    modbusClient.setConnectionParameter(QModbusDevice::NetworkPortParameter, 502);
    modbusClient.setConnectionParameter(QModbusDevice::NetworkAddressParameter, "127.0.0.1");

    if (!modbusClient.connectDevice()) {
        qFatal("Unable to connect to the Modbus server.");
    }

    // 构建一个写请求
    QModbusDataUnit writeUnit(QModbusDataUnit::HoldingRegisters, 0, 1);
    writeUnit.setValue(0, 42); // 写入值 42 到地址 0

    if (auto *reply = modbusClient.sendWriteRequest(writeUnit, 1)) { // 1 是服务器地址
        if (!reply->isFinished()) {
            QObject::connect(reply, &QModbusReply::finished, [&]() {
                if (reply->error() == QModbusDevice::NoError) {
                    qDebug("Write success.");

                    // 构建一个读请求
                    QModbusDataUnit readUnit(QModbusDataUnit::HoldingRegisters, 0, 1);
                    if (auto *readReply = modbusClient.sendReadRequest(readUnit, 1)) {
                        if (!readReply->isFinished()) {
                            QObject::connect(readReply, &QModbusReply::finished, [readReply]() {
                                if (readReply->error() == QModbusDevice::NoError) {
                                    const QModbusDataUnit unit = readReply->result();
                                    qDebug("Read success: %d", unit.value(0));
                                } else {
                                    qWarning("Read error: %s", qPrintable(readReply->errorString()));
                                }
                                readReply->deleteLater();
                            });
                        } else {
                            delete readReply; // broadcast reply returns immediately
                        }
                    }
                } else {
                    qWarning("Write error: %s", qPrintable(reply->errorString()));
                }
                reply->deleteLater();
            });
        } else {
            delete reply; // broadcast reply returns immediately
        }
    }

    return app.exec();
}
相关推荐
智联视频超融合平台几秒前
智能互联新时代:视频联网平台与物联网的完美融合
人工智能·物联网·网络协议·系统安全·音视频
晚霞的不甘2 分钟前
实战精要:构建企业级 Flutter + OpenHarmony 工业物联网(IIoT)监控平台
物联网·flutter
数峦云数字孪生三维可视化5 分钟前
VR云览系统:把工厂 “装进口袋”的营销工具
人工智能·物联网·vr·智能制造·数字孪生·三维可视化
小李做物联网30 分钟前
【物联网毕设】60.1基于单片机物联网嵌入式项目程序开发之智能家庭安防感应报警
stm32·单片机·嵌入式硬件·物联网
sdyeswlw31 分钟前
一二三物联网:领航济南制造业数字化绿色化协同转型
人工智能·科技·物联网
willhuo1 小时前
WIFI版本温湿度传感器
单片机·物联网·智能硬件·iot
才盛智能科技2 小时前
欢小娱自助KTV,娱乐本该自由~
大数据·人工智能·物联网·娱乐·自助ktv系统·才盛云自助ktv系统
御控工业物联网2 小时前
工业网关新玩法:手机变“移动触摸屏”,局域网内远程操控PLC
物联网·智能手机·自动化·数据采集·plc·远程控制·远程操控plc
御控工业物联网3 小时前
泵站物联网信息系统:打造高效、智能、可持续的水务管理新生态
物联网·数字化转型·节能减排·智慧水务·泵站物联网
hazy1k3 小时前
MSPM0L1306 从零到入门:第七章 通用定时器(GPTIM) —— 成为时间的主宰
stm32·单片机·嵌入式硬件·mcu·物联网·esp32·ti