日期:2014-05-18  浏览次数:20819 次

再次咨询串口通讯的问题
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