日期:2014-05-17  浏览次数:21013 次

C#向串口循环发送数据的问题
现有N条命令需要发送到串口,先发送第一条命令,得到应答的数据后,再发送第二条命令,得到第二条命令的应答数据后,再发送第三条命令,依次类推,并循环发送。请问:得到应答数据后触发下一条命令,这块代码该怎么写呢?
C#??串口数据?循环发送

------解决方案--------------------
同步的方式。
开启一个线程,在线程中循环发送数据,发送一条数据后,判断有无应答数据。
如果没有就sleep,如果有就发送下一条数据。

异步方式。
使用串口的DataReceived事件。DataReceived中取出下一条数据发送。
------解决方案--------------------
引用:
Quote: 引用:

同步的方式。
开启一个线程,在线程中循环发送数据,发送一条数据后,判断有无应答数据。
如果没有就sleep,如果有就发送下一条数据。

异步方式。
使用串口的DataReceived事件。DataReceived中取出下一条数据发送。

对于异步方式的问题能再详细一点儿吗?

比如一共发送10条数据。
设置当前发送数据的顺序位1,取出第一条数据发送。下位机收到数据后会发送应答给上位机。这时自动进入DataReceived事件中。在DataReceived事件中你把当前的顺序位加1,取出当前的顺序位对应的数据(其实就是下一条数据),当顺位超过数据的总数时停止发送。
上面顺序位是通过类变量实现。如果应答数据中有数据顺位,也可以从应答数据中取。

------解决方案--------------------
建议做法:
先用一个list将你要发送的指令顺序存进去
新建一个线程对串口发送list第一条数据->等待50ms->接收数据->判断接受数据是否正确;若是(移除list中的此条记录)从头执行,若不是根据要求来.
或者使用serialport的DataReceived事件,建议在事件发生后等待10ms左右再接收,因为有时候串口数据接收不全.
------解决方案--------------------
在接收数据的部分里分析接收到的数据,确认为应答数据就发送下一帧。我就是这么做的