当前位置: 首页 > news >正文

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

目录

背景

前景知识

1.启动一个代理服务器

2.发布者

3.订阅者

实际应用

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

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


背景

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

前景知识

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

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

1.启动一个代理服务器

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

import zmqcontext = 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 zmqcontext = zmq.Context()
socket = context.socket(zmq.PUB)
socket.connect("tcp://localhost:5555")while True:msg = input("Enter message: ")socket.send_string(msg)

3.订阅者

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

import zmqcontext = 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的数据:

        最终显示效果如下:

http://www.lryc.cn/news/434606.html

相关文章:

  • 医疗机构关于DIP/DRG信息化建设
  • 100个候选人,没一个能讲明白什么是自动化框架?
  • 数据结构与算法1: 链表
  • 【专题】2024年8月医药行业报告合集汇总PDF分享(附原数据表)
  • 这10种人不适合干项目经理,你在其中吗?
  • IT每日英语(三)
  • 【保姆级教程】如何创建一个vitepress项目?
  • 智能头盔语音识别声控芯片,AI离线语音识别ic方案,NRK3301
  • 【STM32】CAN总线基础入门
  • STM32F1+HAL库+FreeTOTS学习10——任务相关API函数使用
  • 华为 HCIP-Datacom H12-821 题库 (14)
  • java八股!2
  • 一分钟了解统一软件开发过程RUP的那点事
  • Goby 漏洞发布|(CVE-2024-45195)Apache OFBiz /viewdatafile 代码执行漏洞【已复现】
  • js的书写位置和css的书写位置的区别?为什么要这样写?
  • Python一些可能用的到的函数系列132 ORM-sqlalchemy连clickhouse
  • 华为 HCIP-Datacom H12-821 题库 (12)
  • pointpillar部署-TensorRT实现(三)
  • Java学习中,为什么会混淆类方法和实例方法,应该怎么办?
  • 【人工智能学习笔记】4_3 深度学习基础之循环神经网络
  • 解锁生活密码,AI答案之书解决复杂难题
  • Android Radio2.0——公告监听设置(四)
  • EMR Spark-SQL性能极致优化揭秘 Native Codegen Framework
  • 【VUE】实现当前页面刷新,刷新当前页面的两个方法(如何在一个页面写一个方法提供给全局其他地方调用)(如何重复调用同一个路由实现页面的重新加载)
  • 【科研小小白】灰度化处理、阈值、反色、二值化、边缘检测;平滑;梯度计算;双阈值检测;非极大值抑制
  • 数字经济时代,零售企业如何实现以消费者为中心的数字化转型?
  • 微积分复习笔记 Calculus Volume 1 - 1.5 Exponential and Logarithmic Functions
  • 代码随想录 刷题记录-24 图论 (1)理论基础 、深搜与广搜
  • MyBatis 缓存机制详解:原理、应用与优化策略
  • 跨越技术壁垒:EasyCVR为何选择支持FMP4格式,重塑视频汇聚平台标准