C ++ / CLI串口发送命令

时间:2011-03-02 23:13:33

标签: visual-studio-2010 c++-cli

我这里有硬件,通过串口通信。我使用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;

感谢您的帮助。

3 个答案:

答案 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操作,而不必乱用线程池和同步。