如何:在串行应用程序中发送 ASCII 控制字符
How to: sending ASCII control characters in serial application
使用不久前创建的简单串行程序(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
您可以使用 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);
使用不久前创建的简单串行程序(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
您可以使用 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);