Qt modbus通讯写上位

本文介绍了如何使用Qt通过北辰网关进行Modbus通讯,创建一个能显示正反转时间并控制S7-300 PLC电机启停的上位程序。内容包括北辰网关的配置、UI设计、计时器实现、Modbus通讯的QModbusClient应用,以及使用QObject::sender()来区分不同计时器信号。
摘要由CSDN通过智能技术生成

Qt modbus通讯写上位

继上次PLC展厅,通过北辰网关的转Modbus功能,使用Qt写一个简单的S7-300的上位程序,可以查看正转时间,反转时间,还可以控制电机启停。

北辰网关设置

北辰网关的设置可以参考这篇文章西门子PLC实现modbusTCP通讯
我的设置如下图:
这里写图片描述

UI界面

这里写图片描述

计时器的实现

构造函数中

timer1 = new QTimer(this);  //timer1为QTimer类型
connect(timer1, SIGNAL(timeout()), this, SLOT(showTime()));
timer1->start(1000);

showTime()中

 time=time.addSecs(60);//time为QTime类型
 QString text = time.toString("hh:mm");
 if ((time.second() % 2) == 0)
        text[2] = ' ';
 ui->lcdNumber->display(text);

Modbus通讯

modbus通讯可以参考我之前的文章QModbusClient

QObject::sender()

因为有正转时间,反转时间,停止时间三个时间需要计时

 connect(timer1, SIGNAL(timeout()), this, SLOT(showTime()));
 connect(timer2, SIGNAL(timeout()), this, SLOT(showTime()));
 connect(timer3, SIGNAL(timeout()), this, SLOT(showTime()));

它们都连接到槽showTime();因此,需要在showTime()中判断是哪个对象发出了timeout()信号,这个是通过QObject::sender()来实现的。
在showTime()中

 QTimer *t=qobject_cast<QTimer *>(sender());
 if(t==timer1)
        ui->lcdNumber->display(text);
    else if (t==timer2)
        ui->lcdNumber_2->display(text);
    else
        ui->lcdNumber_3-&
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值