C++/CLI串口发送命令

发布于 2024-10-20 13:45:53 字数 713 浏览 2 评论 0原文

我这里有一个硬件,它通过串行端口进行通信。我使用 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-> (请注意附加到传出命令的点)。 我使用免费串行端口监视器来监视我的传入/传出数据。

那么我怎样才能摆脱 <-S->. 中的这一点?

这就是正在发生的事情:

3C 2D 53 2D 3E 0A = <-S->。

这就是我想要的:

3C 2D 53 2D 3E = <-S->

感谢您的帮助。

I have a hardware here, wich communicates over serial port. I use MS Visual C++ 2010, and I want to send a command: <-S->

I am doing this:

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

But the command that goes out is <-S->., and not <-S->
(please notice the point that is attached to the outgoing command).
I use Free Serial Port Monitor to watch my ingoing/outcoming data.

So how can I get rid of that point in <-S->. ?

This is what is going out:

3C 2D 53 2D 3E 0A = <-S->.

This is what I want:

3C 2D 53 2D 3E = <-S->

Thanks for help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

莳間冲淡了誓言ζ 2024-10-27 13:45:53

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

You are using WriteLine(), which is appending a newline (character 0x0A) to your output (which something is showing as a ., but it's not really a dot). Try Write() instead.

随波逐流 2024-10-27 13:45:53

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

还有更多麻烦,只有当您使用调试器单步执行时,您的代码才能正常工作。如果没有它,Close() 方法将立即清除传输缓冲区,并且只有随机数量的字符将设法发送,包括根本不发送任何字符。仅当程序终止时才关闭串行端口。

It is the value of the SerialPort.NewLine property. A line-feed by default. Use Write() instead.

There's more trouble, your code will only work well when you single-step with the debugger. Without it, the Close() method will instantly purge the transmit buffer and only a random number of characters will manage to get sent, including nothing at all. Only close serial ports when your program terminates.

七月上 2024-10-27 13:45:53

由于您使用的是 C++/CLI,因此实际上没有理由使用可怕的 .NET SerialPort 类。 本机 Win32 串口功能更加强大和可靠。打开 OVERLAPPED 模式,附加一个事件,您就可以进行后台 I/O 操作,而不必扰乱线程池和同步。

Since you're using C++/CLI, there's really no reason to use the horrid .NET SerialPort class. The native Win32 serial port functions are much more powerful and reliable. Turn on OVERLAPPED mode, attach an event, and you can get background I/O operations going without having to mess with the thread pool and synchronization.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文