• 21523阅读
  • 20回复

Qt4.8.3版本串口通信 [复制链接]

上一主题 下一主题
离线liangwenkuai
 

只看楼主 倒序阅读 楼主  发表于: 2013-12-28
请问有谁有QT4.8.3版本的串口通信类,我的程序用的是第三方的串口通信类,但是发送不了数据(write总返回-1),调试几天都不知道是什么问题,感觉是不是第三方类有问题,如果有在4.8.3版本下课以成功的串口类,麻烦发一下,谢了!
离线realfan

只看该作者 1楼 发表于: 2013-12-28
回 楼主(liangwenkuai) 的帖子
serialport_12rc_wdg.zip (41 K) 下载次数:392
就用qextserialport呀,附件是我用qt4时,一直用的串口通讯类,没出过问题,一个程序同时与一百多个串口设备讯,都表现很好。
离线_hwb

只看该作者 2楼 发表于: 2013-12-28
最近都是正常使用,Qt做上位机跟单片机通讯
离线liangwenkuai

只看该作者 3楼 发表于: 2013-12-29
回 1楼(realfan) 的帖子
qespta.zip (3085 K) 下载次数:172
离线liangwenkuai

只看该作者 4楼 发表于: 2013-12-29
回 1楼(realfan) 的帖子
太奇怪了,port = new QextSerialPort("COM1", QextSerialPort::EventDriven);write的时候返回值是-1, int vnum = port->bytesToWrite(); //要写入串口的数据量,返回值是要写入的字节数;
  int vbyteavaliable = port->bytesAvailable();返回值为0。
但是,如果这样写的话port = new QextSerialPort("COM1");write的时候返回值是就是写入的数据字节数了,但是
int vnum = m_pCom->bytesToWrite(); //要写入串口的数据量,返回值为0
        int vbyteavaliable = m_pCom->bytesAvailable();返回值也是0.太神奇了!!!我是直接晕了,实在搞不懂。上面那个就是一个例子,在我的电脑上就是不行。我的是win7下,qt是4.8.3的。vs是2008.
离线realfan

只看该作者 5楼 发表于: 2013-12-29
回 4楼(liangwenkuai) 的帖子
你的附件下载不了。
你是在Windows下用还是Linux下,
我记得QextSerialPort比较早的版本,在Linux下,不支持EventDriven模式
离线liangwenkuai

只看该作者 6楼 发表于: 2013-12-30
回 5楼(realfan) 的帖子
是在windows下面。 SerialPort.zip (4105 K) 下载次数:150
离线realfan

只看该作者 7楼 发表于: 2013-12-30
回 6楼(liangwenkuai) 的帖子
你确认正确上传了附件?论坛不支持这么大的附件吧。
你用1楼的附件,替换你的串口代码试试吧
离线liangwenkuai

只看该作者 8楼 发表于: 2014-01-01
Re:回 6楼(liangwenkuai) 的帖子
引用第7楼realfan于2013-12-30 11:10发表的 回 6楼(liangwenkuai) 的帖子 :
你确认正确上传了附件?论坛不支持这么大的附件吧。
你用1楼的附件,替换你的串口代码试试吧

试了,也不行。好郁闷。我重新上传一份试试 SerialPort.zip (28 K) 下载次数:40 ,我自己下载是可以打开运行的,难道只有自己可以?我又调试了下,事件驱动模式(EventDriver)的时候,writeFile返回false,然后GetLastError返回时997,好像是什么IO is in progress。高手先运行下我的这个小的测试例子,看看行不行,我也不太清楚具体是什么原因,试了多台机器都不行。
离线liangwenkuai

只看该作者 9楼 发表于: 2014-01-02
回 2楼(_hwb) 的帖子
能给个完完全全运行的Qt例子吗?我在网上找的,在我的这边运行都不行,都是用一个问题。(错误代码为997,ERROR_IO_PENDING Overlapped I/O operation is in progress.)
离线liangwenkuai

只看该作者 10楼 发表于: 2014-01-02
回 5楼(realfan) 的帖子
想不明白为什么下载的Qt例子运行都是错误代码为997,ERROR_IO_PENDING Overlapped I/O operation is in progress.这个问题,等了半天还是没有数据。
离线dbzhang800

只看该作者 11楼 发表于: 2014-01-02
首先:  ERROR_IO_PENDING 不是错误,你可以直接忽略。

其次:write() 返回-1 不一定是错误,因为采用的异步模式,函数返回时数据可能还未写入。你可以通过信号 QIODevice::bytesWritten(qint64 bytes) 来获取写入的字符数(如果你关心这个值的话)。

再次:
bytesAvailable();返回值也是0.太神奇了
这个是接受到的字符数,和write() 没什么关联

离线liangwenkuai

只看该作者 12楼 发表于: 2014-01-02
引用第11楼dbzhang800于2014-01-02 14:55发表的  :
首先:  ERROR_IO_PENDING 不是错误,你可以直接忽略。
其次:write() 返回-1 不一定是错误,因为采用的异步模式,函数返回时数据可能还未写入。你可以通过信号 QIODevice::bytesWritten(qint64 bytes) 来获取写入的字符数(如果你关心这个值的话)。
再次:这个是接受到的字符数,和write() 没什么关联
.......

关键是没有写入到串口中,直接忽略  ERROR_IO_PENDING ,也不行,write返回-1,就是没有写入数据。主要就是  ERROR_IO_PENDING ,即使在那等也没有反应。还是没写入数据。而且,你说的用bytesWritten,这个没有反应,主要是没有写入到数据。不知道该如何解决?
离线liangwenkuai

只看该作者 13楼 发表于: 2014-01-02
回 11楼(dbzhang800) 的帖子
不知道楼主是否测试我上传的那个小例子了?是否能成功?
离线dbzhang800

只看该作者 14楼 发表于: 2014-01-03
建议你升级到 QextSerialPort 1.2rc 版本,然后再试试看。https://code.google.com/p/qextserialport/wiki/QextSerialPort_1_2_RC

离线sulang
只看该作者 15楼 发表于: 2014-01-15
这个问题我也遇到了
离线happyandgo

只看该作者 16楼 发表于: 2014-08-11
Qt5.1或更高版本
离线dosmlp

只看该作者 17楼 发表于: 2014-08-14
为什么不用更高版本的Qt
离线interfaceaj

只看该作者 18楼 发表于: 2014-08-15
大神,请问一个问题:我定义了一个Win_QextSerialPort的类,然后Win_QextSerialPort  *mycom=
new Win_QextSerialPort();和mycom=new  Win_QextSerialPort();都不行,怎么回事?好痛苦,解决不了,本人Qt菜鸟
离线bluesky0318

只看该作者 19楼 发表于: 2015-12-02
现在似乎QTSERIALPORT支持了
离线liweinuli

只看该作者 20楼 发表于: 2015-12-04
快速回复
限100 字节
 
上一个 下一个