我这里有硬件,通过串口通信。我使用MS Visual C ++ 2010,我想发送一个命令:<-S->
我这样做:
SerialPort^ serialPort = gcnew SerialPort(portName , 9600, Parity::None, 8, StopBits::One);
serialPort->Open();
serialPort->WriteLine("<-S->");
serialPort->Close();
但是发出的命令是 <-S->.
,而不是 <-S->
(请注意附加到传出命令的点)。
我使用Free Serial Port Monitor来观察我的输入/输出数据。
那么如何在 <-S->.
中摆脱这一点?
这就是结果:
3C 2D 53 2D 3E 0A =&lt; -S-&gt ;.
这就是我想要的:
3C 2D 53 2D 3E =&lt; -S-&gt;
感谢您的帮助。
答案 0 :(得分:5)
您正在使用WriteLine()
,它会在您的输出中添加换行符(字符0x0A)(某些内容显示为.
,但它实际上不是一个点)。请改为Write()
。
答案 1 :(得分:1)
它是SerialPort.NewLine属性的值。默认情况下换行。改用Write()。
更麻烦的是,只需单步使用调试器,您的代码就能正常工作。如果没有它,Close()方法将立即清除传输缓冲区,只有随机数量的字符才会被发送,包括一切都没有。只在程序终止时关闭串口。
答案 2 :(得分:0)
由于您使用的是C ++ / CLI,因此没有理由使用可怕的.NET SerialPort类。 native Win32 serial port functions更强大,更可靠。打开OVERLAPPED模式,附加事件,您可以进行后台I / O操作,而不必乱用线程池和同步。