问题描述
C#通过serialPort.write发送一串数据【字符串1】,要在这一串数据发送完成之后延时20毫秒,继续发送另一串数据【字符串2】请问一下有什么方法可以知道串口已经将【字符串1】发送完成?
解决方案
解决方案二:
可以判断发送数据的那个事物是否已经完成,如果整个过程完成的话数据也应该发完了。
解决方案三:
好像没有办法检测发送数据是否完成,或者数据是否被客户端接收,因为I/O下位机通讯,能做的就是把数据扔进通信通道,是否接收到,只能靠通讯协议,下位机返回数据来看
解决方案四:
你们都不遵守通讯协议的吗?
解决方案五:
最好是有通讯协议,简单点就是用一个特殊字符表示结束当然也可以用间隔时间为条件,但不是很稳定,最好相隔几百毫秒以上,接收方在一定时间内没有新数据就表示数据结束了.
解决方案六:
可以根据波特率计算一下发送指定数据需要的时间t,调用serialPort.write后延时(t+20)ms试试
解决方案七:
通讯协议是有的。第一帧是唤醒帧,下位机对唤醒帧是不响应的。等到唤醒帧发送完延迟一段时间就是真正的数据帧,下位机对数据帧是有响应的。现在的问题是不知道第一帧数据是什么时候发完的,如果在serialPort.write()后延时一段时间,感觉这个延时是没用的。
解决方案八:
那你的通讯协议是有毛病的,不能修改了吗?下位机对唤醒帧是不响应的这是不对的,如果下位机出现故障你也发送数据帧吗?握手过程是必须要有的
解决方案九:
解决方案十:
你要这么整,那就要与下位机有这样的一个协议ReqAskReqAsk
解决方案十一:
协议没问题的,按照MODBUS协议来的。
解决方案十二:
下位机对唤醒帧没响应,其余帧都是响应的。C#没有类似于单片机的串口发送中断吗?通讯协议目前是不能改了的。
时间: 2024-09-17 11:03:24