2014-02-27 25 views
0

我有一个应用程序,我想通过串行链接与嵌入式设备进行通信。通信协议是二进制的 - 这意味着我有一个结构化的消息,我想从存储器复制到未改变的串行字节流(无编码)。使用C#和.net 4.0通过串行发送二进制字节流

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

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

回答

1

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

不,不是说串行(RS-232)通信需要字符数据。物理通信就像不关心你通过它发送的数据。无论您是否可以发送“原始二进制”数据或文本命令(如调制解调器使用的所谓的AT命令),都是实际应用协议(如果有)在通信链路上使用的问题。

+0

用于ASCII/Unicode的+1仍然是二进制的 – BradleyDotNET

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(); 
} 

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

+1

其实没有那么简单。数据发送之前,您的代码将关闭端口。它永远不会被发送。这不是很有帮助。 –

+0

我能找到的所有东西都说SerialPort.Write阻塞,直到所有的数据被发送到串口。这不正确吗? –

+0

是的,SerialPort.Write是一个阻塞操作。我的例子只是为了说明这些命令,在一个真正的程序中,您将保持端口的打开状态,直到您的通信完成。 – gunnerone

相关问题