您好,登录后才能下订单哦!
请求超时!
请点击 重新获取二维码小编给大家分享一下Qt如何实现串口调试助手,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
这个作品很多年前就做了,经过了长达七八年的完善,当然也不是全身心的投入完善,也就是根据实际项目的需求不断完善的,尤其是模拟设备回复数据的功能,这个在很多用Qt做上位机开发非常实用,毕竟很多软硬件的项目都是同时开工的,不会说是等硬件或者软件都完工了才去搞另外一部分,所以软件工程师就需要根据一开始约定好的通信协议来先把软件搞起来,没有硬件实地测试怎么办呢,只能自己写工具来模拟设备回复数据咯,基本上都是要求收到什么数据回复什么数据,所以这就有了通用的串口设备回复数据的可能。
其实Qt5以后开始集成了QSerialPort类可以用来串口通信,我个人测试过很多次,发现总是有莫名其妙的怪怪的问题,后面还是打算直接用第三方的串口开源类来做,毕竟成熟稳定,而且经历过各种项目的长时间的考验,还是非常可靠的。
基本功能:
支持16进制数据发送与接收。
支持windows下COM9以上的串口通信。
实时显示收发数据字节大小以及串口状态。
支持任意qt版本,亲测4.7-5.14。
支持串口转网络数据收发。
高级功能:
可自由管理需要发送的数据,每次只要从下拉框中选择数据即可,无需重新输入数据。
可模拟设备回复数据,需要在主界面开启模拟设备回复数据。当接收到设置好的指令时,立即回复设置的回复指令。例如指定收到0x16 0x00 0xFF 0x01需要回复0x16 0x00 0xFE 0x01,则只需要在SendData.txt中添加一条数据16 00 FF 01:16 00 FE 01即可。
可定时发送数据和保存数据到文本文件:,默认间隔5秒钟,可更改间隔时间。
在不断接收到大量数据时,可以暂停显示数据来查看具体数据,后台依然接收数据但不处理,无需关闭串口来查看已接收到的数据。
每次收到的数据都是完整的一条数据,而不是脱节的,做了延时处理。
一套源码随处编译,无需更改串口通信类,已在XP/WIN7/UBUNTU/ARMLINUX系统下成功编译并运行。
第一步:引入第三方串口类 include($$PWD/qextserialport/qextserialport.pri) INCLUDEPATH += $$PWD/qextserialport 第二步:实例化类 void frmComTool::on_btnOpen_clicked() { if (ui->btnOpen->text() == "打开串口") { com = new QextSerialPort(ui->cboxPortName->currentText(), QextSerialPort::Polling); comOk = com->open(QIODevice::ReadWrite); if (comOk) { //清空缓冲区 com->flush(); //设置波特率 com->setBaudRate((BaudRateType)ui->cboxBaudRate->currentText().toInt()); //设置数据位 com->setDataBits((DataBitsType)ui->cboxDataBit->currentText().toInt()); //设置校验位 com->setParity((ParityType)ui->cboxParity->currentIndex()); //设置停止位 com->setStopBits((StopBitsType)ui->cboxStopBit->currentIndex()); com->setFlowControl(FLOW_OFF); com->setTimeout(10); changeEnable(true); ui->btnOpen->setText("关闭串口"); timerRead->start(); } } else { timerRead->stop(); com->close(); com->deleteLater(); changeEnable(false); ui->btnOpen->setText("打开串口"); on_btnClear_clicked(); comOk = false; } } 第三步:读取数据并处理 void frmComTool::readData() { if (com->bytesAvailable() <= 0) { return; } QUIHelper::sleep(sleepTime); QByteArray data = com->readAll(); int dataLen = data.length(); if (dataLen <= 0) { return; } if (isShow) { QString buffer; if (ui->ckHexReceive->isChecked()) { buffer = QUIHelper::byteArrayToHexStr(data); } else { //buffer = QUIHelper::byteArrayToAsciiStr(data); buffer = QString::fromLocal8Bit(data); } //启用调试则模拟调试数据 if (ui->ckDebug->isChecked()) { int count = App::Keys.count(); for (int i = 0; i < count; i++) { if (buffer.startsWith(App::Keys.at(i))) { sendData(App::Values.at(i)); break; } } } append(1, buffer); receiveCount = receiveCount + data.size(); ui->btnReceiveCount->setText(QString("接收 : %1 字节").arg(receiveCount)); //启用网络转发则调用网络发送数据 if (tcpOk) { socket->write(data); append(4, QString(buffer)); } } }
以上是“Qt如何实现串口调试助手”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
聚圣源郑氏起名女孩人名大全美洲花园五期挪威的森林剧情介绍狂武战帝开贸易公司起名字人行征信中心三原色配色表初生婴儿起名测试公司起名鲁什么传媒公司 起名宸字起名男孩生辰八字起名2018muvluv游戏长征故事怎么给书店起名大全建筑装饰公司起名字呐喊读后感五行缺金男孩起名用字工作室起姓名惟妙惟肖的意思蚯蚓电影用诗词起的名字杨氏婴儿起名大全一月出生起什么名字电子商务公司名称起名天天射综合网三立电视台网上起名称准不准免费php空间王氏宝宝男孩起名大全淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费