c#通过串口发送命令

问题描述:

我必须使用串口处理四个电机链。 的用户手册,表明在初始化过程中我需要发送(例如)字符串c#通过串口发送命令

Z 
1ECHO 
2ECHO 
3ECHO 
4ECHO 

,并告诉我要做到这一点,在我不认识的代码,用命令

PRINT(#128, "Z", #13) 
PRINT(#129, "ECHO", #13) 
PRINT(#130, "ECHO", #13) 
PRINT(#131, "ECHO", #13) 
PRINT(#132, "ECHO", #13) 

要解释这一点,手动还增加了一个句话我不明白:

与你上面的字符串可以通过电机 软件,但主机公关初始化电机需要发送不同的相同命令 前缀:0,1,2,3和4实际上分别是0x80,0x81,0x82,0x83,0x84, 。十六进制值的十进制等价物128, 129,130,131和132

一个同事写了Visual Basic中的工作代码如下:

SerialPort.Output(chr(128) & "Z" & chr(13)) 
SerialPort.Output(chr(129) & "ECHO" & chr(13)) 
SerialPort.Output(chr(130) & "ECHO" & chr(13)) 
SerialPort.Output(chr(131) & "ECHO" & chr(13)) 
SerialPort.Output(chr(132) & "ECHO" & chr(13)) 

我翻译成.NET与:

SerialPort.Write((char)128 + "Z" + (char)13); 
SerialPort.Write((char)129 + "ECHO" + (char)13); 
SerialPort.Write((char)130 + "ECHO" + (char)13); 
SerialPort.Write((char)131 + "ECHO" + (char)13); 
SerialPort.Write((char)132 + "ECHO" + (char)13); 

但它不起作用。

现在我不能尝试,但我不知道是否可以工作,重写我的代码是这样的:

SerialPort.Write("Z" + (char)13); 
SerialPort.Write("1ECHO" + (char)13); 
SerialPort.Write("2ECHO" + (char)13); 
SerialPort.Write("3ECHO" + (char)13); 
SerialPort.Write("4ECHO" + (char)13); 

如果它会工作,为什么它的工作原理? 如果它不起作用,我该如何正确翻译我的同事的代码?

+0

欢迎来到堆栈溢出,请更具体_does不work_。程序是否编译?它是否在串口输出任何东西?另请从[this]开始(https://*.com/help/mcve)。 – vasek

+0

那么第一次翻译应该工作。我建议你试着看看你的输出使用这样的东西: https://freeserialanalyzer.com/ 它是一个很长的tima前,但当我摆弄串行通信,我做了一个嗅探器电缆来监测通信通过我已安装的secont com端口: https://www.lammertbies.nl/comm/cable/RS-232-spy-monitor.html –

+0

@HenrikClausen实际上翻译将无法正常工作,并且[这些言论](https ://msdn.microsoft.com/en-us/library/y2sxhat8(v = vs.110).aspx#Anchor_2)解释原因。 – vasek

您不能使用SerialPort.Write(string)默认编码发送字节> 128(0x80),更多信息请参阅this。如果你需要确保你的数据匹配任何二进制协议,应该发送的数据为byte列数组:

var data = new byte[] { 129, (byte)'E', (byte)'C', (byte)'H', (byte)'O', 13 }; 
SerialPort.Write(data, 0, data.Length); 

那么你一定会没有多余的转换在发送之前进行。

+0

谢谢,它发挥作用,如果我发送一个数组! – Andrea