谢谢您提前的帮助!
(编辑)如果您认为上述陈述含糊不清:
我需要从一个电脑传递一个二进制(启动/停止)信号到另一个电脑。不幸的是,我无法更明确地描述它的外观,因为(显然)我不知道可用的内容。两台电脑都在一个网络上,两台电脑都在运行Windows。目标是将计算机视觉系统收集的数据与机器人执行的操作同步。通信必须足够快,以不会减慢机器人或计算机视觉程序的速度。一个“好”的解决方案应该是1)易于实现2)快速。我对网络知道得不多,正在寻找一个开始寻找的地方。
再次感谢您的帮助!
听起来这是网络套接字的一个相当不错的用法。如果你的两台机器都在Windows上,你甚至可以使用命名管道。
对于Windows系统,您需要将COM n端口作为文件打开以通过串行端口进行通信[1]。我现在无法访问我的代码,等我回家后可以查找。
RS232很简单,我喜欢它。但是,它确实很慢。您需要在设计中考虑到这一点。
[1] 适用于C++。
大多数现代计算机都具备以太网功能,因此您可以购买一个便宜的集线器或交换机,并查看网络API。通常有一些相当简单的套接字编程。其中一个优点是,如果您想在以后增加通信能力,例如让您的视觉软件向机器人提供指令和指导,那么您已经设置好了基础。
或者,设置您的视觉程序,以便您可以通过按随机键来启动和停止它。当您要使用它时,请将键盘放在机器人计算机的CD驱动器前面,并在机器人运行开始和结束时弹出。
这可能在你的情况下有些过度,但如果我处在你的位置,我可能会使用HTTP协议来实现它。视觉计算机将运行一个HTTP服务器,机器人计算机将使用POST请求通信状态更改。Poco C++ Net library提供了所需的设施。
我会使用TCP/IP套接字进行通信。TCP保证数据能够到达目的地。所以,你只需要解析数据即可。
RS232是一种易于编程的选择,但现代PC通常不具备RS232端口。您可能需要获取USB-RS232适配器或安装PCI卡。
RS232的另一个问题是您需要担心额外的电线,这可能会成为一个麻烦。此外,RS232电缆的长度可以受到限制(5-15m),除非您投资于一些笨重的RS232中继器或蓝牙连接器等。
除此之外,您还要向项目中添加一个可能出错并且会浪费部署和调试时间的元素。
在我看来,一种优雅的工程解决方案是利用您拥有的硬件并使用TCP/IP套接字进行通信。
网络上充斥着关于服务器和客户端之间传递消息的示例:
如果您使用Linux: http://www.linuxhowtos.org/C_C++/socket.htm
如果您使用Windows: http://www.adp-gmbh.ch/win/misc/sockets.html
我也可能会考虑使用0MQ之类的东西来使连接更加健壮。它可以在任何传输情况下传输和重新组装消息,并在临时失去连接时处理缓冲。
但归根结底,我会使用TCP/IP,但根据机器人的性质,您可能需要比TCP套接字稍微更强大的连接系统。 UDP很好,因为它是无连接的--如果机器人暂时超出范围/视线等,您不必重建套接字和上下文。