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);
如果它会工作,为什么它的工作原理? 如果它不起作用,我该如何正确翻译我的同事的代码?
答
您不能使用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
欢迎来到堆栈溢出,请更具体_does不work_。程序是否编译?它是否在串口输出任何东西?另请从[this]开始(https://*.com/help/mcve)。 – vasek
那么第一次翻译应该工作。我建议你试着看看你的输出使用这样的东西: https://freeserialanalyzer.com/ 它是一个很长的tima前,但当我摆弄串行通信,我做了一个嗅探器电缆来监测通信通过我已安装的secont com端口: https://www.lammertbies.nl/comm/cable/RS-232-spy-monitor.html –
@HenrikClausen实际上翻译将无法正常工作,并且[这些言论](https ://msdn.microsoft.com/en-us/library/y2sxhat8(v = vs.110).aspx#Anchor_2)解释原因。 – vasek