将数据从一个串行端口多路复用/多路分解到“虚拟”端口

时间:2019-06-19 09:32:03

标签: python-2.7

我目前正在设计测量系统。它在平移/倾斜云台上安装了三台仪器,但从仪器到控制所有部件的Beaglebone Black(BBB)只有一条串行线。乐器A和B相似(使用相同的命令和模块)。我正在使用Python控制一切。在测试过程中,我使用了额外的电缆,以便可以将每台仪器连接到BBB上的单独端口,但这在最终设置中是不可能的。 由于无论如何我都需要在云台上有一些处理功能,因此我使用了PIC24器件来连接所有仪器串行连接。 我的想法是多路复用3个串行连接,例如,在命令/回复中添加前缀A_ / B_ / C_。 我可以做到的。

仪器A和仪器B的通讯和处理是通过相同的Python模块完成的,该模块具有一个功能measure(),该功能将串行端口(即/ dev / ttyO4)作为参数之一。我显然需要对此进行调整。

我需要找到一种方法,允许不同的模块访问三个“虚拟”端口,并选择任一流A / B / C。 简而言之:我(我想)需要某种类/ ...,它可以打开串行端口并多路复用/多路分离三个流。仪器A和B不能同时使用,但是A / C和B / C可以同时使用。时间不是很关键,几百毫秒的延迟不是问题。

Schematic

一种选择是使用第二个PIC来代替仪器附近的微控制器,但我想这也应该在Python中可行...

2 个答案:

答案 0 :(得分:1)

我认为,一种优雅的解决方案是为PIC添加一些代码以用作Modbus从站。

似乎已经做了很多努力,所以也许您可以使用this之类的东西作为起点。

您可以将连接到传感器的三个UART连续写入几个Modbus寄存器,并使用pymodbuspylibmodbus之类的东西从您的BBB查询。

也可以使用其他总线/协议,例如CAN,但是如果您直接在TTL UART上运行Modbus(而不是通过RS485,除非您有长距离或嘈杂的环境,否则就不需要)。不需要任何其他硬件。您将必须在PIC上修改固件,并在BBB上写一些Python行。

但是,如果您想学习新知识(假设您还不了解),Modbus是添加到您的工具箱中的一种非常简单实用的协议。它仍然非常流行且开放(该规范是公开可用的,并且您有大量的信息和代码)。

答案 1 :(得分:0)

编辑:我保留我的第一个答案作为其他参考,但问题并不涉及为多个端口共享同一根物理电缆,因此我在此处写的内容对某人并不是真正有用像我一样误解了。

这个问题已经出现了很多次,例如见Receiving data from multiple devices using parallel wired RS232

串行线路不是多路复用的,如果您决定遵循这种方法,我想您会头疼的。

是否有理由不使用RS485,SPI等多点协议?我相信您将能够找到满足您需求的one。以RS485为例,  在新硬件上的投资将是minimal,在软件方面将是小菜一碟。