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

本文关键字:ASCII 控制字符 应用程序 如何 | 更新日期: 2023-09-27 18:01:49

使用一段时间后创建的简单串行程序(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),但它似乎不起作用。当我使用超级终端或PuTTy软件时,我可以从notepad.txt文件中复制并传入完整的命令,并且它发送正确,但是当我将相同的代码复制并传入此应用程序时,我没有从串行设备获得响应。这个应用程序使用。net 2.0。记事本中的stx和etx命令看起来像一个小7和小L

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

您可以使用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);