当前位置: 首页 > 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的数据:

        最终显示效果如下:

相关文章:

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

目录 背景 前景知识 1.启动一个代理服务器 2.发布者 3.订阅者 实际应用 1.模拟智驾收来自交互箱131的按钮json数据 2.模拟交互箱131收来自智驾137的cjson数据 背景 在调试防爆无轨无人矿车时,出现消息代理不能很好转发,于是在公司通过代理的方式…...

医疗机构关于DIP/DRG信息化建设

推进DIP/DRG支付方式改革是一项系统性工程,牵一发而动全身。作为河北省DIP试点医院,河北医科大学第二医院将信息化与创新性管理理念融合,用好支付工具做好精细化管理,积极应对改革。 ■ 改革背景 国家医疗保障局制定的《DRG/DIP支…...

100个候选人,没一个能讲明白什么是自动化框架?

什么是自动化测试框架 01 什么是框架 框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法。它规定了应用的体系结构,阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程,表现为一组抽象类以及其实例之间…...

数据结构与算法1: 链表

题目名称: 重排链表 链接: ​​​​​​. - 力扣(LeetCode) 介绍:本题的目标是将链表进行重新组合,如下图。 如果按照标准的解法,我们需要实现三步 1. 链表中点的获取 2. 链表的反转 3. 链…...

【专题】2024年8月医药行业报告合集汇总PDF分享(附原数据表)

原文链接:https://tecdat.cn/?p37621 在科技飞速发展的当今时代,医药行业作为关乎人类生命健康的重要领域,正处于前所未有的变革浪潮之中。数智医疗服务的崛起,为医疗模式带来了全新的转变,开启了医疗服务的新时代。…...

这10种人不适合干项目经理,你在其中吗?

在一个项目中,项目经理扮演着至关重要的角色,他们需要协调各种资源、管理团队、制定计划以及应对各种挑战。然而,并非每个人都适合担任项目经理的角色。以下他们天生不适合当项目经理,你会在其中找到自己的类型吗? 1、…...

IT每日英语(三)

系列文章目录 IT每日英语(二) 文章目录 系列文章目录前言1.collie2.century3.farewell4.meme5.hall6.needle7.simulate8.emulate9.arbitray10.laboratory11.jest12.suite13.approach14.satellite15.instance16.representation 前言 这里给出的是本人在…...

【保姆级教程】如何创建一个vitepress项目?

文章目录 安装前的准备工作项目安装创建文件初始化文件安装依赖遇到了 missing peer deps 警告?命令行设置向导 完成 安装前的准备工作 Node.js 18 及以上版本。通过命令行界面 (CLI) 访问 VitePress 的终端。支持 Markdown 语法的编辑器。推荐 VSCode 及其官方 Vu…...

智能头盔语音识别声控芯片,AI离线语音识别ic方案,NRK3301

头盔是交通事故中保护电动车车主安全的最后一道屏障。为了增加骑行用户的安全保护,改善骑行用户的出行体验,让用户从被动使用头盔到主动佩戴头盔,头盔厂家与九芯电子合作,推出了语音智能头盔,它具备首家骑行专用的智能…...

【STM32】CAN总线基础入门

CAN总线基础入门 一、CAN简介二、主流通信协议对比三、CAN物理层1、CAN硬件电路2、CAN电平标准3、CAN收发器 – TJA1050(高速CAN)4、CAN物理层特性 四、帧格式1、CAN总线帧格式2、数据帧3、数据帧各部分用途简介4、数据帧的发展历…...

STM32F1+HAL库+FreeTOTS学习10——任务相关API函数使用

STM32F1HAL库FreeTOTS学习10——任务相关API函数使用 任务相关API函数1. uxTaskPriorityGet()2. vTaskPrioritySet()3. uxTaskGetNumberOfTasks()4. uxTaskGetSystemState()5. vTaskGetInfo()6. xTaskGetCurrentHandle()7. xTaskGetHandle()8. xTaskGetIdleTaskHandle()9. uxTa…...

华为 HCIP-Datacom H12-821 题库 (14)

有需要题库的可以加下方Q群 V群进行学习交流 1.以下哪一种工具可用于多种路由协议,并且是由 if-match 和appl y 子句组成的? A、community-filter B、as-path-filter C、route-policy D、ip-prefix 答案:C 解析: 暂无解析…...

java八股!2

IO流 好短 就三个问题(io流,区别,NIO实现) 文章目录 IO流io流基本认识字节流和字符流的区别(中文,底层设备,缓冲区,应用场景)I/O模型(4种(可以看做3种&…...

一分钟了解统一软件开发过程RUP的那点事

曾经几乎一统天下的统一软件开发过程RUP(Rational Unified Process)即使是现在看来,它也是一套非常先进并完整的理论体系加工具集合。虽然目前来看,敏捷开发方法似乎更优秀,但是到今天为止,几乎大部分的政府…...

Goby 漏洞发布|(CVE-2024-45195)Apache OFBiz /viewdatafile 代码执行漏洞【已复现】

漏洞名称:Apache OFBiz /viewdatafile 代码执行漏洞(CVE-2024-45195) English Name:Apache OFBiz /viewdatafile Code Execution Vulnerability(CVE-2024-45195) CVSS core: 8.0 漏洞描述: Apache OFBiz是一个开源…...

js的书写位置和css的书写位置的区别?为什么要这样写?

JavaScript 和 CSS 的书写位置有以下区别&#xff1a; CSS 通常写在 <style> 标签中&#xff0c;或者在外部样式表文件中&#xff08;<link rel"stylesheet" href"styles.css">&#xff09;。CSS 主要用于控制页面的视觉样式和布局&#xff0c…...

Python一些可能用的到的函数系列132 ORM-sqlalchemy连clickhouse

说明 继续ORM的转换 通过ORM&#xff0c;可以&#xff1a; 1 用几乎一样的方式来操作不同的数据库2 可以提供One的处理模式 内容 同步方式 这种方式更简单&#xff0c;适合处理小批量任务。这种操作严格来说&#xff0c;不是严格的One&#xff0c;而是MiniBatch&#xff0c…...

华为 HCIP-Datacom H12-821 题库 (12)

有需要题库的可以看主页置顶 V群进行学习交流 1.设备使能 BGP 自动聚合功能后&#xff0c;可将 10.1.1.1/24 和 10.2.1.1/24路由聚合成以下哪一项&#xff1f; A、10.2.1.0/24 B、10.0.0.0/14 C、10.0.0.0/8 D、10.1.1.0/24 答案&#xff1a;C 解析&#xff1a; 暂无解析 2.关…...

pointpillar部署-TensorRT实现(三)

模型后处理 __global__ void postprocess_kernal(const float *cls_input,float *box_input,const float *dir_cls_input,float *anchors,float *anchor_bottom_heights,float *bndbox_output,int *object_counter,const float min_x_range,const float max_x_range,const flo…...

Java学习中,为什么会混淆类方法和实例方法,应该怎么办?

在Java学习过程中&#xff0c;初学者经常会混淆类方法&#xff08;静态方法&#xff09;和实例方法。这种混淆源于它们之间的概念和使用方式具有一定的相似性&#xff0c;但却在本质上存在较大的区别。理解并掌握两者的区别和应用场景&#xff0c;是掌握Java面向对象编程思想的…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...