使用C#和.net 4.0通过串行发送二进制字节流

时间:2014-02-27 19:00:33

标签: c# .net serialization binary serial-port

我有一个应用程序,我希望通过串行链接与嵌入式设备进行通信。通信协议是二进制的 - 这意味着我有一个结构化的消息,我希望从内存复制到串行字节流不变(无编码)。

我正在使用Microsoft VS 2012使用.NET框架在C#中编写应用程序。我继承了一个应用程序的shell,它似乎使用System.IO.Ports.SerialPort类来读取/写入com端口。

几位同事告诉我,我会遇到问题,因为现代通讯库,甚至是USB和串行驱动程序,都会假设您正在使用某种形式的编码(如ASCII或Unicode)进行通信。如果有人知道如何开始这个,请告诉我。我感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您可能正在寻找的起点是Write(byte\[\], int, int)方法,它允许您将任意数据块的二进制数据发送到串行端口。

不,串行(RS-232)通信不需要字符数据。物理通信并不关心您通过它发送的数据。您是否可以发送'原始二进制'数据或文本命令(例如调制解调器使用的所谓AT命令)是在该通信链接之上使用的实际应用程序协议(如果有)的问题。 / p>

答案 1 :(得分:1)

C#非常简单。

using System.IO.Ports;

public void TestSerialPort()
{
    SerialPort serialPort = new SerialPort("COM1", 115200, Parity.None, 8, StopBits.One);
    serialPort.Open();

    byte[] data = new byte[] { 1, 2, 3, 4, 5 };
    serialPort.Write(data, 0, data.Length);

    serialPort.Close();
}

如上所述,您可以发送所需的任何原始二进制值,它不需要是字符数据。