首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

再次咨询串口通讯的有关问题

2012-03-14 
再次咨询串口通讯的问题http://topic.csdn.net/u/20071211/10/b8e2d70d-7552-4673-9cc6-17979208294f.html

再次咨询串口通讯的问题
http://topic.csdn.net/u/20071211/10/b8e2d70d-7552-4673-9cc6-17979208294f.html
我用JustinIO类进行串口通讯,可以通过Write和Read函数发送和接收串口数据, 
现在的问题是我不知道何时调用Read函数接收数据,有没有类似6.0那个串口通讯控件的OnComm事件,当有数据时通知我自动接收串口数据

如果用线程读取或用Timer时钟读取,间隔时间一般是多少啊? 
还有因为对方发送的数据是不定长的,起始两个字节分别是0x03,0x03,结束有个校验位,每次调用Read函数的时候,读取多长合适呢?


[解决办法]
JustinIO没有怎么用过,不过VS2005中的System.IO.Ports.SerialPort就很好用,你可以建立数据到达事件进行检测是否有数据到达

XXXX.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(XXXX_DataReceived);

另外,据我的经验,串口数据接收的时候是必须有一定的延时,否则缓冲区会有点问题,有可能导致丢数据,据我测试,延时100ms就足够了

[解决办法]
帮顶..
[解决办法]
JF
[解决办法]
JustinIO说实话不是很好,对.net支持不是很好。我之前尝试过用JustinIO开发,效果不太理想。劝楼主用SerialPort控件。我用他开发了一款自己感觉功能很强悍的短信软件。SerialPort控件里面有个datareceive的事件,一旦串口有数据就触发这个事件。
你说的用timer控件定时监控感觉很影响软件性能,起码作为商业软件的话是不能用如此粗糙的方法处理的。至于你说的对数据的读取,我建议你分开处理。因为串口收到数据的类型有别他的结束的“校验位”也有区别,最常见的如ok/r。你可以每次用下readline方法,并把读到的数据加到byte数组里面去。一旦读到的一行以结束的“校验位”结束即结束操作。
[解决办法]
jf
[解决办法]
在vs2003时我也用过JustinIO类,确实不怎么好用,而且打开串口时常出问题。后来改用微软的for vs2003,就可以了。你可以试试
http://msdn.microsoft.com/msdnmag/issues/02/10/NETSerialComm/default.aspx
[解决办法]
1 米长就够了。
[解决办法]
up
[解决办法]
up

热点排行