具有2个c ++程序的两台计算机之间的通信

时间:2010-07-29 20:06:26

标签: c++ networking computer-vision serial-port robot

我有一台运行c ++程序的计算机来控制机器人和另一台运行计算机视觉系统的计算机(也用c ++编写)。我希望这两个项目能够相互交流。通信不一定非常复杂,我只需要机器人计算机能够在试验开始和结束时(何时开始和停止数据收集序列)告诉视觉计算机。你们有没有关于如何解决这个问题的建议?计算机之间的Rs232通信?某种网络解决方案?烟火信号?欢迎大家提出意见。 提前谢谢你

(编辑)如果您认为上述陈述含糊不清:

我需要将二进制(go / do not go)信号从一台计算机传递到另一台计算机。不幸的是,我不能更具体地说明这将是什么样的,因为(显然)我不知道什么是可用的。两台计算机都在网络上,两台计算机都在运行Windows。目标是将计算机视觉系统收集的数据与机器人执行的动作同步。通信确实需要足够快,以至于它不会减慢机器人或计算机视觉程序的速度。一个“好”的解决方案将是1)易于实施2)快速。我对网络知之甚少,我正在寻找一个可以开始寻找的地方。

再次感谢您的帮助

10 个答案:

答案 0 :(得分:4)

您可以使用简单的UDP协议 - 优点是,如果您了解RS232上简单数据包协议的概念,您会发现将这些知识转移到通过UDP发送数据包很容易。

如果你想要一个可靠的(如系统的其他部分会担心错误和重试)两台PC之间的字节流,那么使用TCP / IP并不比UDP复杂得多。

UDP和TCP都可以通过'套接字'访问。我担心你会发现从C ++中可以找到很多繁琐的样板,但是有很多很多例子。

答案 1 :(得分:2)

如果他们是网络连接的,你可以使用套接字。

答案 2 :(得分:2)

最好的选择是使用网络通信。解决这个问题的最简单方法应该是查看Qt中的网络示例。

您基本上将创建客户端和服务器应用程序。您可以决定客户端在看到来自服务器的特定消息时所执行的操作。就这样。 Qt应该照顾剩下的东西。

其他答案表明TCP / IP,UDP,RS232 ......当您使用QtNetwork模块时,所有这些都只是选项。我认为既然你问了你的问题,你就不知道它们之间的区别。因此最安全的选择是使用最高级别(免费)库,因此建议查看Qt。

另一种选择是使用Boost.Asio。我倾向于选择Qt解决方案,因为他们的API更好。

答案 3 :(得分:1)

这对于网络套接字来说听起来相当不错。如果您的两台机器都在Windows上,您甚至可以使用命名管道。

答案 4 :(得分:0)

对于Windows,您需要将COM n 端口作为文件打开,以通过串行端口进行通信[1]。我现在无法访问我的代码,当我回到家时,我可以查看它。

RS232很简单,我喜欢它。但是,它 很慢。您需要在设计中考虑这一点。

[1]对于C ++。

答案 5 :(得分:0)

大多数现代计算机都具有以太网功能,因此请自行购买便宜的集线器或交换机,并查看网络API。通常有一些相当简单的套接字。这样做的一个优点是,如果您想在以后提高通信能力,例如让您的视觉软件为您的机器人提供指导和指导,您就可以设置基础知识。

或者,设置您的视觉程序,以便您可以通过点击随机键来启动和停止它。当您打算使用它时,将键盘放在机器人计算机的CD驱动器前面,然后在机器人运行的开始和结束时弹出。

答案 6 :(得分:0)

这可能在你的情况下有点过分,但如果我在你的鞋子里,我可能会使用HTTP协议实现它。视觉计算机将运行HTTP服务器,机器人计算机将使用POST请求传达状态更改。 Poco C++ Net library为您提供了执行此操作所需的设施。

答案 7 :(得分:0)

我会使用TCP / IP套接字进行通信。 TCP保证数据可以实现。因此,您需要做的就是解析数据。

答案 8 :(得分:0)

RS232是一个简单的编程选项,但是现代PC不具备RS232端口。您可能需要获得USB-RS232适配器或安装PCI卡。

RS232的另一个问题是你有一个额外的电线担心哪个可能是一个nusiance。除非您投资一些笨重的RS232中继器或蓝牙连接器等,否则RS232电缆的长度可以限制(5-15米)。

除此之外,您还要在项目中添加一个可能出错的项目,并花费您的时间进行部署和调试。

IMO,一个优雅的工程解决方案是利用您拥有的硬件并使用TCP / IP套接字进行通信。

网上充斥着关于在服务器和客户端之间传递消息的示例:

如果您使用的是Linux: http://www.linuxhowtos.org/C_C++/socket.htm

使用Windows: http://www.adp-gmbh.ch/win/misc/sockets.html

答案 9 :(得分:0)

我也可以查看类似0MQ的内容,以使连接更加健壮。无论传输如何,它都会传输和重新组合消息,并在暂时失去连接的情况下处理缓冲。

但最重要的是我会使用TCP / IP,但根据机器人的性质,您可能需要比TCP套接字更强大的连接系统。 UDP非常好,因为它是无连接的 - 如果机器人暂时超出范围/视线/等,您将不必重建套接字和上下文。

相关问题