数据源是组态软件的核心灵魂,少了数据源,组态就是个花架子没卵用,一般数据源有三种方式获取,串口、网络、数据库,至于数据规则是什么,这个用户自己指定,本设计器全部采用第一个字节作为数据来演示。
串口通信在大量的工业控制领域用的最多,就因为稳定两个字,长期霸占了几十年的通信规则,现在还有大量的工业控制设备使用的就是串口通信,Qt5以后封装了串口通信的类,不过据说不大好用,也不大稳定,本人在早期的Qt版本比如Qt5.3时代用过几次,是有点莫名其妙的问题,后面索性就不在用自带的了,而是用的第三方开源的qextserialport,主要还是因为本人做过的硬件设备上面大量的还是Qt4.8的Qt版本,没法用Qt5,还没升级到Qt5可能也是考虑到稳定性的原因。
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());
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。