数据源是组态软件的核心灵魂,少了数据源,组态就是个花架子没卵用,通常数据源有三种方式获取,串口、网络、数据库,至于数据规则是什么,这个用户本身指定,本设计器所有采用第一个字节做为数据来演示。 串口通讯在大量的工业控制领域用的最多,就由于稳定两个字,长期霸占了几十年的通讯规则,如今还有大量的工业控制设备使用的就是串口通讯,Qt5之后封装了串口通讯的类,不过听说不大好用,也不大稳定,本人在早期的Qt版本好比Qt5.3时代用过几回,是有点莫名其妙的问题,后面索性就不在用自带的了,而是用的第三方开源的qextserialport,主要仍是由于本人作过的硬件设备上面大量的仍是Qt4.8的Qt版本,无法用Qt5,还没升级到Qt5可能也是考虑到稳定性的缘由。linux
体验地址:https://pan.baidu.com/s/1A5Gd77kExm8Co5ckT51vvQ 提取码:877p 文件:可执行文件.zipc++
void frmData::initServer() { //实例化串口类,绑定信号槽 com = new QextSerialPort(QextSerialPort::EventDriven, this); connect(com, SIGNAL(readyRead()), this, SLOT(readDataCom())); //实例化网络通讯客户端类,绑定信号槽 tcpClient = new QTcpSocket(this); connect(tcpClient, SIGNAL(readyRead()), this, SLOT(readDataClient())); //实例化网络通讯服务端类,绑定信号槽 tcpSocket = NULL; tcpServer = new QTcpServer(this); connect(tcpServer, SIGNAL(newConnection()), this, SLOT(newConnection())); //开启定时器读取数据库采集数据 timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(readDataDb())); timer->setInterval(1000); } void frmData::on_btnOpenCom_clicked() { if (ui->btnOpenCom->text() == "打开") { com->setPortName(App::PortName); bool ok = com->open(QIODevice::ReadWrite); if (ok) { com->setBaudRate((BaudRateType)App::BaudRate); setEnable(ui->btnOpenCom, false); ui->btnOpenCom->setText("关闭"); } } else { com->close(); setEnable(ui->btnOpenCom, true); ui->btnOpenCom->setText("打开"); } } void frmData::readDataCom() { QByteArray data = com->readAll(); if (data.length() <= 0) { return; } //默认取第一个字节解析,能够自行更改 quint8 value = data.at(0); ui->txtValue->setText(QString::number(value)); append(1, data.toHex()); }