【问题标题】:C++/CLI serial port send commandC++/CLI 串口发送命令
【发布时间】:2011-03-02 23:13:32
【问题描述】:

我这里有一个硬件,它通过串行端口进行通信。我用的是MS Visual C++ 2010,想发个命令:<-S->

我正在这样做:

SerialPort^ serialPort = gcnew SerialPort(portName , 9600, Parity::None, 8, StopBits::One);
serialPort->Open();
serialPort->WriteLine("<-S->");
serialPort->Close();

但是发出的命令是&lt;-S-&gt;.,而不是&lt;-S-&gt; (请注意附加到传出命令的点)。 我使用 Free Serial Port Monitor 来观察我的输入/输出数据。

那么我怎样才能摆脱 &lt;-S-&gt;. 中的这一点?

事情是这样的:

3C 2D 53 2D 3E 0A = .

这就是我想要的:

3C 2D 53 2D 3E =

感谢您的帮助。

【问题讨论】:

  • 这真的是 . 还是 FSM 显示为 . 的结尾 \0

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


【解决方案1】:

您正在使用WriteLine(),它将一个换行符(字符0x0A)附加到您的输出中(它显示为.,但它并不是一个真正的点)。请改用Write()

【讨论】:

  • 哦,是的,就是这样。非常感谢!
【解决方案2】:

它是 SerialPort.NewLine 属性的值。默认情况下换行。请改用 Write()。

更麻烦的是,你的代码只有在调试器单步运行时才能正常工作。没有它,Close() 方法将立即清除传输缓冲区,并且只会发送随机数量的字符,包括任何内容。仅在程序终止时关闭串行端口。

【讨论】:

    【解决方案3】:

    由于您使用的是 C++/CLI,因此没有理由使用可怕的 .NET SerialPort 类。 native Win32 serial port functions 更加强大和可靠。开启 OVERLAPPED 模式,附加一个事件,您就可以进行后台 I/O 操作,而不必弄乱线程池和同步。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      相关资源
      最近更新 更多