会员列表 统计排行 帮助

串口调试助手(QT 4.4.3 + QextSerialPort 1.2)

作者:csoapy 2008-11-13 23:17 阅读:35718
 
最新版 v1.05,QT4.6.2 + qtcreator,见三楼


有需要快速整合QextSerialPort的,请到这里下载 QextSerialPort安装包 & 示例代码



            欢迎使用 “我的串口

    本软件用VS 2005 + QT4.4.3 + QextSerialPort写成

    界面模仿串口调试助手

    源码在安装目录下的 source.7z

    有关源码或其它问题请联系:csoapy@126.com


        作者:后排男生
        2008 年 11 月 11 日 下午


    ——谨以此软件献给自己的节日!光棍节快乐!!

    ——向QextSerialPort的开发人员表示感谢!


=============================================================

版本历史
我的串口 V1.01
    修正了接收字节数不准的问题
    修正了10/16进制发送时多发一个空格的问题
    增加了BCD码和压缩BCD码的显示

============================================================

所需DLL列表:
    mirosoft.vc80.crt.mainifest
    mirosoft.vc80.debugcrt.mainifest   
    msvcm80.dll
    msvcp80.dll
    msvcr80.dll
    qtcore4.dll
    qtgui4.dll

==========================================================

备注:
    一、在显示接收数据的时候容易形成内存碎片,如果你长时间运行,
并且串口频繁发送数据包的话。
    除非数小时不停地收发数据,否则碎片问题应该不大,再加上
现在机器内存都很大,也就没有更正这一问题。
    二、本贴自发布以来已改动过几次,主要是源码,改动处如下:
        注释掉自动清空的两行代码
        增加BCD和压缩BCD码的显示
        更改安装包中的网址为本贴地址
        可执行程序与源码一致
    三、以后本贴不再改动。如有需要则以回复形式反映。


===========================================================

由于FTP(ftp://qtcnupload:qtcn.org@503.mygis.org:2200/)无法登录,我是教育网,现在只发源码包,安装包脚本,及部分截图





源码 source.zip (55 K) 下载次数:1828


安装脚本(将后缀名改成nsi即可) Setup.txt (5 K) 下载次数:676


可执行文件 MySerialPort.zip (29 K) 下载次数:968

完整安装包(V1.04,包含源码,链接已失效,请到三楼下载最新版):
[url]http://www.namipan.com/d/d4b943042690cc4bc4f24bebbf531b47203b6706dabe4800[/url]
[ 此帖被csoapy在2011-05-26 19:38重新编辑 ]

最新评论

aven152273 2008-11-15 10:46
强人。
skywalker80 2008-11-15 17:29
学习了
csoapy 2008-11-16 11:28
补充说明:

最新版本:V1.05


以后有改动的地方均在这里说明。

有需要快速整合QextSerialPort的,请到这里下载 QextSerialPort安装包 & 示例代码


=========== v1.05================= 2010年4月20日 ============================
用QT 4.6.2 + qtcreator重写
修正了串口名称有时乱码的问题

时间关系,以下功能未完成,见谅。
  1. 自动清空
  2. 窗体大小可调,控件自动布局
  3. 双击LCDNumber自动清零
  4. 支持UNICODE,UTF8,GBK等
  5. 打包成一个独立的可执行文件


编译好的源码: MySerialPort v1.05.7z (420 K) 下载次数:955

源码声明:这份代码您可以自由使用,但像这样连个招呼也不打就随便再次发布,我还是感到不爽,这是基本的礼貌问题。





=========== v 1.04 =========================================================
版本说明:V 1.04,按diyuanbo的建议——串口列表中的串口名改为系统中实际存在的串口名称,而不是1234什么的,实际有多少支持多少。
        这就用到QextSerialEnumerator类,可是在QextSerialPort的源码中仍然有会有LNK2019错误,原因也是没有引入必要的库:Setupapi.lib,按V 1.03时提供的方法改正即可。
        另外,我在代码中用的是#include <QextSerialEnumerator>,所以也要在QT目录中添加相应的头文件,具体方法同网上安装QextSerialPort的例子,不再赘述。

源码 V1.04 source.7z (85 K) 下载次数:456

可执行文件 V1.04 MySerialPort.7z (26 K) 下载次数:259  

完整安装包(V1.04,包含源码,链接已失效,请到下载上方的最新版):
[url]http://www.namipan.com/d/d4b943042690cc4bc4f24bebbf531b47203b6706dabe4800[/url]





=========== v1.03 =========================================================

有朋友来信问到 QextSerialPort 1.2  编译时的连接错误LNK2019,防止重复在这里一并回复:
        因为QextSerialEnumerator试图通过注册表来枚举当前的串口,但它用了RegQueryValueEx()等注册表函数却没有引入Advapi32.lib库,可能开发者们是在工程设置里面添加的这个库,而不是在代码里面,所以他们可以编译通过,我们通不过。

        知道了原因就好改了,在QextSerialEnumerator.h里面增加一条语句即可:
  1. #ifdef _TTY_WIN_
  2.     #include <windows.h>
  3.     #include <setupapi.h>
  4.     #pragma comment( lib, "Advapi32.lib" )              // added by csoapy
  5. #endif /*_TTY_WIN_*/

       另外,在用这个1.2版的时候发现了它的三个bug,已提交到:https://sourceforge.net/tracker/?group_id=127181&atid=708001

====================================================================


现有BUG:
    1·接收数据时如果在数据中间用鼠标点一下,则刚发上来的数据会显示在当前光标的位置,而不是追加到所有数据的后面。BUG状态:已修复。


源码 V1.03 source.zip (55 K) 下载次数:251


可执行文件 V1.03 MySerialPort.zip (29 K) 下载次数:147
[ 此帖被csoapy在2011-05-26 19:44重新编辑 ]
kuang906 2008-11-16 23:37
强!
xjcook 2008-11-18 12:00
引用
引用第3楼csoapy于2008-11-16 11:28发表的  :
补充说明:

最新版本:V1.03


.......


已解决,谢谢楼主。
另外,提一个小建议,接收报文的时候,在显示时每一帧后面加一个回车,这样看起来方便些。
csoapy 2008-11-18 14:17
引用
引用第5楼xjcook于2008-11-18 12:00发表的  :

已解决,谢谢楼主。
另外,提一个小建议,接收报文的时候,在显示时每一帧后面加一个回车,这样看起来方便些。


        其实这个小工具是给我们学校一个实验室做的东西,在V1.01版后他们也提出了这个要求,因为自动清空我没做出来,所以就把自动清空改成自动换行了。

    之所以在V1.01后上传的不是V1.02而是V1.03,是因为V1.02按他们的要求做的。但我觉得这个自动换行不能够真实反应收到的数据,所以就没把它发上来。现在既然有人需要就发在这里吧。
    需要说明的是,在V1.03里面提到的那个修正后的BUG是V1.02时就已经修正了。

    下面是带自动换行的版本V1.02:

源码 V1.02  带自动换行 source.zip (84 K) 下载次数:166

可执行文件 V1.02  带自动换行 MySerialPort.zip (29 K) 下载次数:80
[ 此贴被csoapy在2008-11-18 14:36重新编辑 ]
xjcook 2008-11-18 16:47
提供一个最简单有效的自动清空方法供参考,在你把要显示的东西添加到QTextEdit后,加上
if( ui.plainTextEdit_RecBuf->toPlainText().length() > 1000 )
    ui.plainTextEdit_RecBuf->setPlainText(ui.plainTextEdit_RecBuf->toPlainText().right(ui.plainTextEdit_RecBuf->toPlainText().length()/2));
并不是全部清空,是到1000个字符了清除前面一半,当然到多少,清多少自己说了算。

自动清空其实只是为了让连续运行时不要一直内存涨上去,如果全部清空又可能导致想看的数据不见了。

另外,楼主说的“自动换行不能够真实反应收到的数据”,我也发现了,就是发送端发送的一帧连续数据,到这个程序会被分帧,
如果作为一个串口监视软件的话,这样没有问题,如果需要处理数据的话,需要把几帧合并,就会比较烦。这个和串口的参数设置
有关,不知道楼主研究过没有。
csoapy 2008-11-18 18:27
引用
引用第7楼xjcook于2008-11-18 16:47发表的  :
提供一个最简单有效的自动清空方法供参考,在你把要显示的东西添加到QTextEdit后,加上
if( ui.plainTextEdit_RecBuf->toPlainText().length() > 1000 )
    ui.plainTextEdit_RecBuf->setPlainText(ui.plainTextEdit_RecBuf->toPlainText().right(ui.plainTextEdit_RecBuf->toPlainText().length()/2));
并不是全部清空,是到1000个字符了清除前面一半,当然到多少,清多少自己说了算。

.......


我想做的“自动清空”是指像龚博士的串口调试助手那样,当滚动条将要出现还未出现的时候就把显示内容清空。仅有现有字符的个数不能解决这个问题,比如每行一个数,十几行就出现滚动条了,但没有换行符时可能几百个字符也不会导致滚动条的出现。
    真正解决这个问题得一行行地算:根据当前字体大小、行数和最后一行的字符数来算出是否已经超出了当前窗口所能显示的字符数。比较麻烦,所以就没做。


你说的“串口参数设置”是不是指win平台上SetCommConfig()函数参数中COMMCONFIG结构体中的DCB结构体里面提到的一些东西?曾经试着理解里面的每一项,但是发现有很多涉及到通信知识的东西,看不懂,除了通常用到的选项其它的也就没再管。
xjcook 2008-11-18 21:21
就是windows那个结构的参数,挺难懂的,我也理解不多,反正就是各个参数不停的试。÷

清空也没有必要做的像哪个软件一样,只要用者方便,实现简单就可以了。
天行健 2008-11-18 21:38
佩服,好好学习一下!
«12345»
共10页
我要投稿 我要评论
认证码:
验证问题:11 - 2 = ? 正确答案:9
限 50000 字节