【问题标题】:Serializing payload to be sent through serial port序列化通过串口发送的有效载荷
【发布时间】:2021-03-19 16:40:56
【问题描述】:
我正在尝试发送这个字节数组:0x7E 0x02 0x40 0x01 0x00 0x06 0xDA 0x7E
通过串口,但必须先序列化。我不知道该怎么做。我还必须反序列化来自串行端口的数据。我该怎么做呢?
【问题讨论】:
标签:
c#
serialization
serial-port
packet
【解决方案1】:
串口上的协议数据单位是字节;无需序列化它们。您只需将字节写入串行端口,即可从电缆的另一端获取这些字节。
串行端口的行为可能有点棘手。像 Linux 这样的 Unix 通常将它们视为“文本”设备,因此开始解释传入的字节流,就好像您在键盘上键入它一样(因此 ^H 0x08 是退格并被解释为这样)。所以你必须小心将串口配置为原始的二进制接口。
如果端口仅是文本,那么这就是像 base64 这样的二进制编码的来源,它实际上是字节的文本序列化。
您还需要正确配置和接线;使用硬件流控并连接相应的线?
然后是消息分界。并且根据您配置的流控制,如果接收端未运行,则无法停止发送端,因此您可能会遇到启动顺序问题。
基本上,串行端口使用起来非常麻烦,并且开发了诸如 xmodem 和 ymodem 之类的协议以使传输可靠。如果您希望串行端口像 tcp 网络套接字一样可靠和肯定地交换数据报(嗯,文件),您需要在应用程序和串行端口之间使用 xmodem 或 ymodem 之类的东西。问题是这些都是古老的技术,但似乎有一些实现。