首页 > 解决方案 > 如何通过串口编写结构?

问题描述

我有以下结构

unsafe public struct usb_board
{
        UInt16 scr_id;
        UInt16 cmd_id;
        uint type;
        UInt16 size;
        UInt16 crc;
        uint [] buffer;
}

我需要将整个结构写入串行端口。

串口连接如下:

System.IO.Ports.SerialPort Port = new System.IO.Ports.SerialPort("COM1");
Port.BaudRate = 9600;
Port.Open();
Port.WriteTimeout = 4000;
Port.Write("Some String Data");

port.Write方法允许我写入字符串数据,我如何通过端口传递这个结构内容我必须将数据转换为字符串格式吗?如果是这样,我该如何实现?还有其他方法吗?

标签: c#serializationserial-port

解决方案


你可以简单地序列化它,你可以使用 Json,或者创建你自己的序列化:

string json = Newtonsoft.Json.JsonConvert.SerializeObject(your_object);
System.IO.Ports.SerialPort Port = new System.IO.Ports.SerialPort("COM1");
Port.BaudRate = 9600;
Port.Open();
Port.WriteTimeout = 4000;
Port.Write(json);

如果很难在您的设备(或任何接收器)中解析 json,您可以自己创建一个序列化:

unsafe public struct usb_board
{
   UInt16 scr_id;
   UInt16 cmd_id;
   uint type;
   UInt16 size;
   UInt16 crc;
   uint[] buffer;
   public override string ToString()
   {
       return $"{scr_id},{cmd_id},{type},{size},{crc},{string.Join(",", buffer)}";
   }
}

然后,您可以使用your_object.ToString()获取所有结构值的逗号分隔字符串,并且可以在设备中将其分隔。


推荐阅读