用C#写的串口通信程序接收数据出错

MAMM 2009-03-12 10:37:18
事件背景:
给定了利用RS485协议的下位机和RS232的下位机,要求按照一定的通信协议用C#2.0实现上位机程序(以下简称上位机),串口的波特率为2400,8位无校验,1停止位。

使用硬件平台:
使用PCI串口(RS232)卡的电脑,RS485与RS232的转换电路

软件:
VS2005,非独占模式的串口监视软件COMgrasp,串口调试助手(MFC+WinAPI编写成的)

程序:
使用C#中内建的SerialPort类进行串口通信并用标准的Invoke方法调用数据处理函数(也就是显示数据),设计了一个直接写在Write方法里的byte数组为第一缓冲区,另有一个将第一缓冲区收到数据拼成完整数据的第二缓冲区(似乎SerialPort类一次最多接受8字节所以要开这个缓冲区)。

过程:
1、为RS232的下位机编写上位机,经测试一切正常;
2、为RS485的下位机编写上位机,尚未使用第二缓冲区,显示返回数据不符合通信协议规范,数据包字节数少且数据本身的值基本全错;
3、用串口调试助手按照通信协议规范发送通信数据包,回显数据符合通信协议,正常;
4、利用串口监视软件监视收发数据,发现无论是正在编写的上位机程序还是串口调试助手,发送给下位机的数据完全相同且符合通信协议,但收回的数据中,两者差别很大,串口调试助手中是逐字节接收而上位机程序是一次接收多字节且每次接收的个数无规律;
5、用一拖二的线把信号引至同一串口卡的另一串口(机器上就这俩串口),同时用上位机程序和串口调试助手监视两个串口,用调试助手向下位机发送数据,调试助手回显数据正常上位机不显示,用上位机向下位机发送数据,调试助手回显数据正常上位机有显示但不正常,串口监视软件的监视情况和两个软件的显示情况相同;
6、在上位机中加入ErrorReceived事件的处理函数,显示错误类型为FRAME,MSDN说明为“硬件检测到一个组帧错误”,出现此错误的时间也是随机的,有的时候回显的数据也不对,但是不报任何错。

俺要求助的问题:
1、C#的SerialPort类,能直接访问输入和输出缓冲区不,要是能的话是哪个方法?我没查到......
2、串口调试助手中对串口接收数据的处理是每收到一个字节就抛出一个WM_RXCHAR消息,在C#中也设置了ReceivedBytesThreshold属性为1字节,为什么收数据的时候触发一次事件就收到不止一字节的数据,关键是还不规律?
3、2400也不算高速,为啥用MFC(或者叫WinAPI)正常而C#收到的数据既丢帧值也错误?所谓的Frame错误又从何而来?
4、如何对SerialPort类进行编程才能纠正上述各种错误,使其能起到和串口调试助手相同的作用?
5、如果解决方案是C#内嵌WinAPI的话,该用哪些函数或类,又该怎么处理线程和事件?
...全文
1714 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
waidawaida 2012-09-29
  • 打赏
  • 举报
回复
楼主,求赐教,能发一份吗?非常感谢!!waidawaida@163.com
zhijingcheng 2012-09-06
  • 打赏
  • 举报
回复
楼主 拜托了 急用啊 求赐教 发给我啊 1124565005@qq.com
sxkjdxllw0406 2012-08-14
  • 打赏
  • 举报
回复
楼主,传授下经验吧,怎么搞定的了?sxkjdxllw@126.com[Quote=引用 2 楼 的回复:]

自己搞定了,结帖
唉......
[/Quote]
du_fan1989 2012-08-08
  • 打赏
  • 举报
回复
楼主我也需要代码 不胜感激 493727395@qq.com
silencerRee 2011-12-03
  • 打赏
  • 举报
回复
楼主,经验分享一下好不,1943539555@qq.com,刚接触这个东西,很郁闷,谢谢了
wwfjj1987 2011-07-12
  • 打赏
  • 举报
回复
楼主,你是怎么搞定的啊,我现在也碰到你的问题了,头好痛,请赐教!可否把你的方法发给我,654948920@qq.com,感谢。
wangkefeng163 2010-08-02
  • 打赏
  • 举报
回复
楼主,能不能说下你是怎么搞定的,最近被这个问题搞的头都大了554161002@qq.com,非常感谢
lmxin123 2010-04-21
  • 打赏
  • 举报
回复
能不能吧代码也贴出来啊,非常感谢!!
kl2000kl2000 2010-04-07
  • 打赏
  • 举报
回复
楼主啊,能否说下,你是怎么搞定啊,我也正在研究这,卡住2周了 汗~~~
549385987@qq.com 谢谢。
whoganwho 2010-04-06
  • 打赏
  • 举报
回复
我也是,拜托楼主了。646947285@qq.com
tuzhenqiao 2010-03-25
  • 打赏
  • 举报
回复
楼主啊,,能否说下,你是怎么搞定啊,我也正在搞这,没办法我
24738874@qq.com 谢谢。
maxonic0792 2009-12-17
  • 打赏
  • 举报
回复
楼主,你是怎么搞定的啊,我现在也碰到你的问题了,头好痛,请赐教!可否把你的方法发给我,zhangchangyu88@163.com,感谢。
sincor 2009-09-22
  • 打赏
  • 举报
回复
C#操作串口通信很少人用 不过我最近在学习使用
MAMM 2009-03-13
  • 打赏
  • 举报
回复
自己搞定了,结帖
唉......
MAMM 2009-03-13
  • 打赏
  • 举报
回复
自己搞定了,结帖
唉......
MAMM 2009-03-13
  • 打赏
  • 举报
回复
到底有人回没有啊

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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