如何:在串行应用程序中发送ASCII控制字符

时间:2015-07-09 18:17:11

标签: c# visual-studio serial-port

使用一段时间后创建的简单串行程序(http://csharp.simpleserial.com/),但我无法将ASCII控制命令发送到我的串行设备。我需要发送:01P00104 ##。是否有某种方法来修改代码,以便它为C#发出这些“ASCII不可打印的字符命令”?

我试过了:

      private void linkLabel_HC1_100_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
 {
        if serialPort1.IsOpen()
        { 
          serialPort1.Write( (char)2 + “01P00104##” + (char)3);
        }
  } 

其中(char)2和(char)3应该是文本命令开始和结束的字符表示。我也尝试使用转义码,如\ u0002甚至sendKeys.Send(“^(b)”)或^(c),但它似乎不起作用。当我使用Hyperterminal或PuTTy软件时,我可以从notepad.txt文件中复制并通过完整的命令并且它正确发送但是当我将相同的代码复制并传递到此应用程序时,我没有收到来自序列的响应设备。这个应用程序使用.net 2.0。记事本中的stx和etx命令看起来像一个小7和小L

1 个答案:

答案 0 :(得分:1)

您可以使用SerialPort.Write(Byte[], Int32, Int32)方法。

var content = new List<byte>();
content.Add(2); // ASCII STX
content.AddRange(Encoding.ASCII.GetBytes("01P00104##"));
content.Add(3); // ASCII ETX
byte[] buffer = content.ToArray();
serialPort1.Write(buffer, 0, buffer.Length);