數據源是組態軟件的核心靈魂,少了數據源,組態就是個花架子沒卵用,通常數據源有三種方式獲取,串口、網絡、數據庫,至於數據規則是什麼,這個用戶本身指定,本設計器所有采用第一個字節做爲數據來演示。 串口通訊在大量的工業控制領域用的最多,就由於穩定兩個字,長期霸佔了幾十年的通訊規則,如今還有大量的工業控制設備使用的就是串口通訊,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()); }