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-&