【发布时间】:2008-10-26 03:39:35
【问题描述】:
我正在使用需要通过串行通信的外围设备。我可以使用超级终端向它发送命令,但现在我需要编写让我在没有超级终端的情况下执行此操作的程序。有人可以将我指向一个网站和/或向我展示一个示例 hello world 程序以帮助我入门吗?我搜索了许多网站,这些网站给了我无法编译/古老的 VC6 代码。
【问题讨论】:
标签: windows winapi serial-port
我正在使用需要通过串行通信的外围设备。我可以使用超级终端向它发送命令,但现在我需要编写让我在没有超级终端的情况下执行此操作的程序。有人可以将我指向一个网站和/或向我展示一个示例 hello world 程序以帮助我入门吗?我搜索了许多网站,这些网站给了我无法编译/古老的 VC6 代码。
【问题讨论】:
标签: windows winapi serial-port
为了与串行端口连接,您打开一个具有特殊文件名“COM1”到“COM9”之一的文件。对于编号较大的串口,特殊文件名以\\?\开头,在C/C++代码中必须转义为“\\\\?\\COM10”等
http://msdn.microsoft.com/en-us/library/ms810467.aspx 有一个很好的串口使用教程。请注意,您应该使用 Windows 文件 I/O 函数,例如 CreateFile()、ReadFile() 和 WriteFile()。我不确定是否可以使用标准 I/O 函数,例如 fopen()、fread() 和 fwrite()。
【讨论】:
Microsoft 提供an article with sample code 描述如何在 Win32 下执行此操作。
【讨论】:
Boost:asio 可能会提供帮助,因为最近添加了串行设备。
不过是公平的警告;串行端口文档是light,大概是因为它很新(它是在 asio 1.1.1 中添加的,它包含在 boost 1.36 中)。
但是,恕我直言,通过 asio 工作是比使用原始 Win32 API 更好的解决方案。为什么?它会更易于阅读和维护(它是更高级别的 API),并且它是跨平台的(除非您需要指定特定于操作系统的设备名称)。
Boost - Users 和 asio.user 邮件列表非常活跃和友好,如果您遇到困难应该能够帮助您。
【讨论】:
WaitForSingleObject 的返回值。如果您不介意尝试在线程程序中追踪他们的错误,则使用风险自负。
如果使用 .NET 2.0,请参阅 System.IO.Ports 和 this article 应该会有所帮助。如果直接Win32,那么Adam's answer最好。
【讨论】:
如果您发现 VC6 过于古老,我相信您也会发现大量 C# 示例代码。我认为还有一堆“免费”的串行/COM 端口包装器,但我只是在编写 RS232 设备控制器软件时自己编写的。
google C# 和串口或 rs232
我得到了这些:
http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx
用谷歌搜索找到合适的代码应该没有问题。
【讨论】: