救命啊!串口通信,使用CSerialPort的问题

jasonshark 2007-03-10 08:29:55
最近在使用PJ Naughter的CSerialPort做一个串口程序,底层使用三个线程进行异步发送,接收和处理,程序跑起来的的时候会出现丢失数据,而且还有一个非常严重的问题,就是接上设备以后程序无法正常退出...用TRACE跟踪发现三个子线程都已经结束返回,但是主线程的Wait就是得不到信号,由于工期很紧了, 设备只能白天去测试,而我以前又从来没接触过串口,对其特性了解得少之又少,故先在这里求助各位有经验的高手,如果有碰到过跟小弟类似问题的大侠还望不吝赐教。

先提出几点:
1. 刚开始写这个程序的时候我不知道流控制的意思,在设置串口的时候用了XonXoffFlowControl,今天回来以后检查代码发现了这个问题,会不会是这个原因造成了丢失和程序无法退出?
2. 我没有进行命令反馈控制,也就是说我没有等待每条指令的反馈信息,而是把指令一堆一堆往buffer里面写的,会不会是这个原因造成下位机的阻塞,无法响应和丢失数据?

另外,跟我的软件通信的下位机貌似是单片机,我调试时用的是USB转RS232串口线,不知道可靠否?
...全文
1156 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jasonshark 2008-08-28
  • 打赏
  • 举报
回复
好久没上来了,楼上的那个问题没有接触过,不知道哈.

一年以后我才想起来,当时的那个破问题肯定是串口线驱动写得有问题
benny_ustc 2008-06-11
  • 打赏
  • 举报
回复
各位高手,我现在用CSerialPort类进行串口通信,因为下层是用一个1:16硬件从COM1映射了16个虚拟串口,我需要在发送查询命令之前用DTR和RTS来进行虚拟串口的选择,比如在程序开始我设置RTS为真,DTR为真,然后设置DTR为FALSE,想选择设备1,则DTR从FALSE跳变到TRUE需要两次,
选择设备5,则为(int i =0;i<5;i++)
DTR= false;
DTR = TRUE;}其他设备类似,
我现在不知道怎么在CSerialPort类中实现这样的功能,EscapeCommFunction (hPort, SETDTR);这个函数中的SETDTR 和CLRDTR是怎么定义的
急急!请帮忙看看啊,快答辩了,很是感谢
rocllllll 2007-06-28
  • 打赏
  • 举报
回复
USB转RS232串口线,没有问题,我一直用的这种线,一般用来连接控制单片机或是其他嵌入式的串口。我现在也在用VC开发上位机和单片机的通信。
jasonshark 2007-05-16
  • 打赏
  • 举报
回复
结了~ 这个问题还是等以后有时间了再看
DentistryDoctor 2007-03-14
  • 打赏
  • 举报
回复
有没有线程同步方面的问题?
lyl_rabbit 2007-03-14
  • 打赏
  • 举报
回复
CSerialPort本身就可以实现数据的异步或同步接收,楼主再开线程,有点多余
lyl_rabbit 2007-03-14
  • 打赏
  • 举报
回复
USB转RS232串口线
~~~~~~~~~~~~~~~~~~`
有时会有问题,这个控件以前也用过

但看楼主的问题,好象不是出在串口上,在多线程部分的可能性大一些
睡在床板下_ 2007-03-14
  • 打赏
  • 举报
回复
USB转RS232串口线
----------
很有问题, 我用自己写的mscom 控件来打开串口通讯,结果只会死机。。
后来用串口调试器 发现 只能打开一次,而且关闭不了。。 最后改用
高级串口调试器才可以用,但是仍然碰到数据传送出现问题。。。

结论就是,USB转RS232串口线 有问题。。。
jasonshark 2007-03-14
  • 打赏
  • 举报
回复
我再顶...
没有人用过USB转串口线做过这方面的应用么...我的线是huge pine USB to Serial Ports的
期待大侠的出现...
jasonshark 2007-03-14
  • 打赏
  • 举报
回复
哇,突然这么多回复,真有点受宠若惊呢 :P, 一个一个来说
首先,我的三个子线程都是在dll中开的

To: corrupt(喜欢 睡在床板下 的思考)
不知道你当时用的串口线多少钱一根的?我用的好象3,40一根,难道是便宜没好货..
To: lyl_rabbit(阿牛)
是这样的,我发送的命令全部是从发送队列里取出来发的,所以开SendProc;每读到一整条完整指令就存到存到接收队列,所以开了ReadProc;而对命令的解析和处理另开了一个线程ResolveProc,在里面用回调函数进行处理,我想开三个工作线程的效率会高点吧
To: DentistryDoctor(不在无聊中无奈,就在沉默中变态)
应该没有这方面的问题,需要同步和互斥的地方我都检查过,EnterCriticalSection跟LeaveCriticalSection是配对出现了的,在线程的while循环中没有直接退出线程的可能。要不我把我的代码发给大侠帮我看看?

下面是Debug窗口的输出,显示线程是已经退出了的...
读线程准备退出
The thread 0x104 has exited with code 1 (0x1).
发送线程准备退出
The thread 0x794 has exited with code 1 (0x1).
解析线程准备退出
The thread 0x864 has exited with code 1 (0x1).

运行的时候如果没有接设备则没问题,但一接上设备主线程就退出不了...这问题真是把我急死了
jasonshark 2007-03-13
  • 打赏
  • 举报
回复
汗,没人知道么...
那等我把问题解决了就散分,楼层高的分就多哦 ;-]
现在最怀疑的就是那根USB转串口的线了
syy64 2007-03-12
  • 打赏
  • 举报
回复
现在看到了。
jasonshark 2007-03-12
  • 打赏
  • 举报
回复
晕,我再顶~
在坛子上根本看不到这个帖子嘛~
jasonshark 2007-03-11
  • 打赏
  • 举报
回复
顶一下,CSDN出问题了??

2,644

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧