使用Qt通过modbusRTU协议给西门子PLC点灯

需求

用上位机软件通过modbusRTU协议来控制下位机的Q0.0的指示灯

材料

电脑1
USB转485设备
1
PLC(s7-200)*1
下位机PLC程序:(STEP7-Micro/Win-sp9可以直接打开,程序兼容200SMART)
上位机Qt程序(Qt5.8-MinGW可直接打开)
.
Qt例程+PLC例程 提取码:4l8r

分析

上位机基于Qt开发,因为Qt有官方的Modbus库,支持Serial和Tcp两种方式
下位机PLC(s7-200 )

硬件连接

ModnusRTU物理层是RS485(当然也可以是光纤其它),电脑通过USB转485设备连接PLC,
PLC(s7-200)的两个端口不是标准的DB9排序,我们使用8(RS485-A)、3(RS485-B)针脚,

PLC端口针脚在这里插入图片描述在这里插入图片描述

qt的modbusRTU主站

xxx.pro文件增加
QT += serialport serialbus
xxx.c
xxx.c文件修改
连接数据接受槽
connect(reply, &QModbusReply::finished, this, &Widget::readReady);//绑定数据接受槽
修改串口号
modbusDevice->setConnectionParameter(QModbusDevice::SerialPortNameParameter, QString("COM4"));//设置串口号
修改从站的数据请求
QModbusDataUnit writeUnit = QModbusDataUnit(QModbusDataUnit::HoldingRegisters, startAddress, numberOfEntries);//设置写入数据格式
modbusDevice->sendWriteRequest( writeUnit ,接收请求的从站的地址)); //填有写入请求参数的对象 和 被操作从站地址
读取从站的数据请求
QModbusDataUnit ReadRequest(QModbusDataUnit::HoldingRegisters, startAddress, numberOfEntries);
处理从从站里接收的数据
auto reply = qobject_cast<QModbusReply *>(sender());//通过sender()获取发送信号对象的QObject指针,并且转化成QModbusReplyd对象类型的指针
const QModbusDataUnit unit = reply->result();//获取结果对象
unit.value(i)//获取地址i的值

测试结果

成功,可以在上位机上控制Q0.0的指示灯,且上位机上灯状态显示正常

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值