无人矿车使用ZMQ消息代理进行跨机互联进行消息收发

目录

背景

前景知识

1.启动一个代理服务器

2.发布者

3.订阅者

实际应用

1.模拟智驾收来自交互箱131的按钮json数据

2.模拟交互箱131收来自智驾137的cjson数据


背景

在调试防爆无轨无人矿车时,出现消息代理不能很好转发,于是在公司通过代理的方式模拟跨机互联收发数据报文,当时记录的目的是若更新固件后若不能收发数据,智驾的代码那块可参考该文章进行修改相应ip和端口

前景知识

ZeroMQ(ZMQ)是一个强大的消息传递库,它提供了许多灵活的消息传递模式,包括发布-订阅、请求-应答、推送-接收等。在 ZeroMQ 中,您可以通过使用不同的套接字类型和模式来构建消息代理转发机制。

下面是一个简单的示例,演示了如何使用 ZeroMQ 来实现一个消息代理转发机制:

1.启动一个代理服务器

        代理服务器会接收来自多个发布者的消息,并将这些消息发送给订阅者。

import zmq

context = zmq.Context()

# 代理服务器绑定到tcp://*:5555
frontend = context.socket(zmq.SUB)
frontend.bind("tcp://*:5555")

# 代理服务器发送到tcp://*:5556
backend = context.socket(zmq.PUB)
backend.bind("tcp://*:5556")

zmq.proxy(frontend, backend)

2.发布者

        发布者将消息发送到代理服务器

import zmq

context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.connect("tcp://localhost:5555")

while True:
    msg = input("Enter message: ")
    socket.send_string(msg)

3.订阅者

        订阅者从代理服务器接收消息。

import zmq

context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://localhost:5556")

while True:
    msg = socket.recv_string()
    print("Received message: ", msg)

        在这个示例中,代理服务器充当消息的中转站,让发布者和订阅者之间进行解耦。发布者将消息发送到代理服务器,而订阅者从代理服务器接收消息,实现了消息的转发机制。

        大家可以根据具体需求和场景,调整消息传递模式、套接字类型以及网络配置,来构建适合您需求的消息代理转发机制。

实际应用

        本次采用2块交互版子进行跨机互联模拟,一块板子负责模拟智驾发数据,ip为192.168.1.137,以下简称智驾137;另一块板子负责接收来自模拟智驾板子的数据,ip为192.168.1.131;以下简称交互箱131。目前均已关闭了守护进程和hmi_info。

1.模拟智驾收来自交互箱131的按钮json数据

        其中Test程序写法

        其中,交互箱131写法:

        结果:智驾这块收到了来自按钮的数据。

2.模拟交互箱131收来自智驾137的cjson数据

        其中,模拟智驾发布显示json数据的智驾137代码:

        其中,交互箱131zmq订阅接收智驾的代码编写:

        结果:交互箱131收到了来自智驾137的数据:

        最终显示效果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值