C# 在帧和字符之间暂停

C# 在帧和字符之间暂停,c#,serial-port,modbus,C#,Serial Port,Modbus,我正在编写一个C#应用程序,使用Modbus(RTU)协议通过串行端口与外部设备通信。为了管理串口通信,我使用SerialPort类。Modbus要求帧之间保持3.5T的静音(T是1个字符(字节?)的传输时间) 如何确保我发送的帧中的字节之间没有太长的静默 如何识别我收到的字节之间有>3.5T的静默 我以前做过类似的事情。首先,我不认为您需要担心字节之间的3.5T静音,以表示接收时消息的结束最初是在80年代设计的,在80年代,接收到的每个字符有1个中断。这在当时是有意义的,但是现在,在输入字符和

我正在编写一个C#应用程序,使用Modbus(RTU)协议通过串行端口与外部设备通信。为了管理串口通信,我使用SerialPort类。Modbus要求帧之间保持3.5T的静音(T是1个字符(字节?)的传输时间)

  • 如何确保我发送的帧中的字节之间没有太长的静默
  • 如何识别我收到的字节之间有>3.5T的静默

  • 我以前做过类似的事情。首先,我不认为您需要担心字节之间的3.5T静音,以表示接收时消息的结束最初是在80年代设计的,在80年代,接收到的每个字符有1个中断。这在当时是有意义的,但是现在,在输入字符和软件之间有16字节的FIFO、USB适配器等,这就行不通了


    因此,应该尽可能经常地检查传入的消息。确定消息类型,然后确定Modbus RTU消息的长度。一旦你有了长度,检查你收到了多少个字符,如果你有足够的字符,你显然已经完成了,否则等待更多。输入一个超时,以防字符丢失。

    我以前做过类似的事情。首先,我不认为您需要担心字节之间的3.5T静音,以表示接收时消息的结束最初是在80年代设计的,在80年代,接收到的每个字符有1个中断。这在当时是有意义的,但是现在,在输入字符和软件之间有16字节的FIFO、USB适配器等,这就行不通了


    因此,应该尽可能经常地检查传入的消息。确定消息类型,然后确定Modbus RTU消息的长度。一旦你有了长度,检查你收到了多少个字符,如果你有足够的字符,你显然已经完成了,否则等待更多。输入一个超时,以防字符丢失。

    我以前做过类似的事情。首先,我不认为您需要担心字节之间的3.5T静音,以表示接收时消息的结束最初是在80年代设计的,在80年代,接收到的每个字符有1个中断。这在当时是有意义的,但是现在,在输入字符和软件之间有16字节的FIFO、USB适配器等,这就行不通了


    因此,应该尽可能经常地检查传入的消息。确定消息类型,然后确定Modbus RTU消息的长度。一旦你有了长度,检查你收到了多少个字符,如果你有足够的字符,你显然已经完成了,否则等待更多。输入一个超时,以防字符丢失。

    我以前做过类似的事情。首先,我不认为您需要担心字节之间的3.5T静音,以表示接收时消息的结束最初是在80年代设计的,在80年代,接收到的每个字符有1个中断。这在当时是有意义的,但是现在,在输入字符和软件之间有16字节的FIFO、USB适配器等,这就行不通了


    因此,应该尽可能经常地检查传入的消息。确定消息类型,然后确定Modbus RTU消息的长度。一旦你有了长度,检查你收到了多少个字符,如果你有足够的字符,你显然已经完成了,否则等待更多。输入一个超时,以防字符丢失。

    (1)始终在一次
    read()
    syscall中发送完整消息。(2) 一些USART有一个“接收器定时器”,当接收到每个字符时,它会被重置。如果该超时设置为4T,则当Rx线路在该持续时间内空闲时,该定时器将触发“接收消息结束”中断。不要费心去“测量”字符之间的到达时间;这是一个错误的算法。请注意,“框架”是用来描述UART/USAR的“字符”单元。而不是重新发明轮子,我建议您考虑现有的Modbus库,例如(1)总是在一个代码> Read()/<代码> SysCurrar中发送完整的消息。(2) 一些USART有一个“接收器定时器”,当接收到每个字符时,它会被重置。如果该超时设置为4T,则当Rx线路在该持续时间内空闲时,该定时器将触发“接收消息结束”中断。不要费心去“测量”字符之间的到达时间;这是一个错误的算法。请注意,“框架”是用来描述UART/USAR的“字符”单元。而不是重新发明轮子,我建议您考虑现有的Modbus库,例如(1)总是在一个代码> Read()/<代码> SysCurrar中发送完整的消息。(2) 一些USART有一个“接收器定时器”,当接收到每个字符时,它会被重置。如果该超时设置为4T,则当Rx线路在该持续时间内空闲时,该定时器将触发“接收消息结束”中断。不要费心去“测量”字符之间的到达时间;这是一个错误的算法。请注意,“框架”是用来描述UART/USAR的“字符”单元。而不是重新发明轮子,我建议您考虑现有的Modbus库,例如(1)总是在一个代码> Read()/<代码> SysCurrar中发送完整的消息。(2) 一些USART有一个“接收器定时器”,当接收到每个字符时,它会被重置。如果该超时设置为4T,则当Rx线路在该持续时间内空闲时,该定时器将触发“接收消息结束”中断。不要费心去“测量”字符之间的到达时间;这是一个错误的算法。注意,“框架”用于描述UART/USAR的“字符”单元,而不是重新发明轮子,我建议您考虑现有的Modbus库,例如。