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

【C#】串口分次发几个数据怎么处理,求助求助
PC跟单片机通讯,按下PC界面上的一个按钮后,要先发送一个握手信号,收到单片机返回的信号后才开始发送数据。要确认PC已经跟单片机正确连接,如果发送出数据长时间没接收到返回的信息,就要提示设备未连接.------------------------------------->发送出数据后长时间未收到数据,就判定超时。请问,此处要通过什么来确定超时啊?根据计时器吗?是在发送数据起就开始计时,然后到一定时间如果还没有接收到数据就出错吗??

按下一个按钮后,要分次发送数据,每次发送完数据都要等待单片机的反应,确保单片机正确接收后我再发送下一个数据。单片机如果检测到数据里的校验码对不上,就返回一个错误信号给PC,PC会重新发送一次刚才的数据。
---------------------->我想请问的是,由于要多次发送数据,而且是根据单片机反馈的信号确定要发送什么。C#里要怎么处理,才能实现这种根据接收到的信息决定要发送什么数据的功能?我用的是serialPort控件。

求助求助啊,拟个通信协议都纠结死了

------解决方案--------------------
就用个计时器好了,在串口的datareceived事件里做一些操作,比如改变某个标识量的值,发送后启动计时器,一定时间间隔后判断值有没有变化,就知道有没有返回数据了。

你就把发送数据的代码页放在datareceived事件里,根据接收到的数组的某位的值 用分支语句去确定发送什么信息
------解决方案--------------------
自己实现一个发送方法,两个参数就够,一个是发送的数据,一个是超时的时间
每次发送调用该方法即可
serialport的接收事件本身就是一个独立的线程了,你用的话就不用考虑线程的问题了
如果你不想用事件,就自己建一个Thread循环去读取串口
------解决方案--------------------
引用:
引用:自己实现一个发送方法,两个参数就够,一个是发送的数据,一个是超时的时间
每次发送调用该方法即可
serialport的接收事件本身就是一个独立的线程了,你用的话就不用考虑线程的问题了
如果你不想用事件,就自己建一个Thread循环去读取串口

计算超时时间通过TIMER计时器吗?发送数据的时候启动TIMER,到时间后引发……

你自己看
不用定时器可以在发送语句的时候记录下datetime.now的时间,然后while读取,每次取当前时间跟开始时间对比,大于你设定的超时就退出来
------解决方案--------------------
用线程发送,发送过后,使用线程内的sleep(),sleep过后查看接收到的数据,没有则重新弄,有的话,进行下一个,然后继续循环。