框架设计-RZMPU工业控制教程连载(48)

瑞萨MCU小百科 2025-01-09 12:00


13.2 框架设计


13.2.1 程序层次

如下图所示:

①程序总体划分为:LVGL前台程序,后台程序。这使得GUI和后台程序分开,可以很容易升级、替换GUI程序。


②LVGL程序:显示界面,是用户和后台程序的桥梁,把用户的指令下发给后台程序,把后台上报的数据在界面显示出来。


③后台程序(控制中心):根据前台程序的指示去操作设备,比如把用户设置的参数传递给MQTT程序、通知 modbus_tcp_server、通过RS485接口操作传感器。


④MQTT程序:根据后台程序的指示连接MQTT服务器、发布消息,订阅消息。


⑤modbus_tcp_server:根据后台程序的指示操作本地传感器


13.2.2 后台程序(控制中心)功能

后台程序(控制中心),是程序的核心。它实现了各类RPC接口(远程调用接口),供前台程序、MQTT程序使用,比如:


①前台程序启动后,咨询后台程序,显示出上次用户配置的“点”


②前台程序通过RPC接口对“点”进行读、写操作


③前台程序增加、删除点时,也是调用RPC接口


④前台程序进行MQTT设置、升级操作时,也是使用RPC接口通知后台程序


⑤MQTT程序通过RPC接口获得MQTT设置信息、要操作的“点”的信息


⑥MQTT程序通过RPC接口读、写“点”


1. 两个核心操作对象

一个是PointInfo结构体,用来表示“点”。另一个是MQTTInfo结构体,用来表示MQTT信息。


在工业控制领域,通过modbus操作传感器时,核心单位是“点”。它包含这些信息:

①使用什么协议?Modbus RTU还是Modbus TCP?

  • 对于Modbus RTU,使用哪个串口?数据格式(数据位/检验位/停止位)是什么?

  • 对于Modbus TCP,IP和端口是什么?

②设备地址是?

③寄存器地址是?

④寄存器类型是?


针对“点”,本项目定义了一个结构体来表示“点的信息”,如下:

左右滑动查看完整内容

typedef struct PointInfo { int point; char port_info[100]; int dev_addr; int reg_addr; char reg_type[4]; int period; /* ms */}PointInfo, *PPointInfo;


  • point:点的索引,一个唯一的整数,通过它可以找到某个“点”。


  • port_info:端口信息,表示串口时格式为“/dev/ttyUSB0,115200,8N1”;表示网络时格式为“192.168.5.89:1052”。


  • dev_addr:设备地址


  • reg_addr:寄存器地址


  • reg_type:寄存器类型,有“0x”、“1x”、“4x”、“3x”四种取值。


  • period:读取周期(单位ms)。


结构体的信息,跟前台程序对应,用一个PointInfo结构体描述界面里这一个元素:


在前台程序增加、修改、删除、读取、写“点”时,操作的就是对应的PointInfo结构体。所有的“点”信息,会保存在PointInfo结构体数组里。


前台程序设置MQTT信息时,mqtt_client_app获得MQTT 信息时,这些信息都使用一个结构体表示:

typedef struct MQTTInfo { char broker[100]; int port; char client_id[100]; char user[100]; char password[100]; char publish[100]; char subcribe[100];}MQTTInfo, *PMQTTInfo;


2. 交互示例

RPC是远程过程调用(Remote Procedure Call)的意思,而json是比较流行的传递信息的格式。


前台程序和后台程序之间使用“json-rpc”进行远程调用:前台程序发出请求,后台程序处理请求返回结果。


比如前台程序增加一个点时,调用如下函数通知后台程序:


这会导致后台程序调用如下函数:


它把cJSON格式的参数解析出来后,调用本地函数:


3. RPC接口

定义好RPC接口后,前台程序、后台程序就可以独立开发。在“controle_center”程序的rpc.h里定义了如下RPC接口。


①询问后台程序有多少个点:

左右滑动查看完整内容

/* 询问后台程序有多少个点* 返回值:(-1)错误, (>=0) 点的个数*/int rpc_get_point_count(int iSocketClient);


②询问后台程序取出下一个点:

左右滑动查看完整内容

/* 询问后台程序取出下一个点(point > pre_point 的第 1 个点)* 返回值:(-1)错误, (>=0) 点的个数*/int rpc_get_next_point(int iSocketClient, int pre_point, PPointInfo pInfo);


使用①②,就可以得到所有的点的信息,示例代码为:

左右滑动查看完整内容

int cnt = rpc_get_point_count(fd);if (cnt > 0){printf("point count = %d\n", cnt);}int pre_point = -1;PointInfo tInfo;for (int i = 0; i < cnt; i++){ err = rpc_get_next_point(fd, pre_point, &tInfo); if (!err) { printf("Point %d:\n", tInfo.point); printf("port_info: %s\n", tInfo.port_info); printf("dev_addr: %d\n", tInfo.dev_addr); printf("reg_addr: %d\n", tInfo.reg_addr); printf("reg_type: %s\n", tInfo.reg_type); printf("period: %d\n", tInfo.period); } pre_point = tInfo.point;}


③增加点:

左右滑动查看完整内容

/* port_info: "/dev/ttyUSB0,115200,8n1" or "192.168.0.123:234"* dev_addr: modbus device address* reg_addr: register address* reg_type: "0x" - Coils, "1x" - Discrete Inputs, "4x" - Holding Registers, "3x" - Input Registers* period: 访问周期(ms)* 返回值: -1 失败, 其他值:唯一的句柄*/int rpc_add_point(int iSocketClient, char *port_info, int dev_addr, int reg_addr, char *reg_type, int period);


④删除点:

左右滑动查看完整内容

/* 移除一个点* point: 要移除的点*/int rpc_remove_point(int iSocketClient, int point);


⑤修改点:

左右滑动查看完整内容

/* 修改点* point: 要修改的点** port_info: "/dev/ttyUSB0,115200,8n1" or "192.168.0.123:234"* dev_addr: modbus device address* reg_addr: register address* reg_type: "0x" - Coils, "1x" - Discrete Inputs, "4x" - Holding Registers, "3x" - Input Registers* period: 访问周期(ms)* 返回值: -1 失败, 其他值:唯一的句柄*/int rpc_modify_point(int iSocketClient, int point, char *port_info, int dev_addr, intreg_addr, char *reg_type, int period);


⑥读点:

左右滑动查看完整内容

/* 读数据* point: 哪个点*/int rpc_read_point(int iSocketClient, int point, int *val);


⑦写点:

左右滑动查看完整内容

/* 写数据* point: 哪个点* val: 要写入的数值*/int rpc_write_point(int iSocketClient, int point, int val);


⑧升级功能:

左右滑动查看完整内容

/* 开始升级传感器*/int rpc_start_update(int iSocketClient, PUpdateInfo ptUpdateInfo);/* 询问后台程序升级进度* 返回值:(-1)错误, (>=0) 进度(0~100)*/int rpc_get_update_percent(int iSocketClient);


⑨MQTT配置:

左右滑动查看完整内容

/* 询问后台程序获得 MQTT 信息*/int rpc_get_mqttinfo(int iSocketClient, PMQTTInfo ptMQTTInfo);/* 设置后台程序的 MQTT 信息*/int rpc_set_mqttinfo(int iSocketClient, PMQTTInfo ptMQTTInfo);


需要产品及方案支持

请扫码登记


需要技术支持?

如您在使用瑞萨MCU/MPU产品中有任何问题,可识别下方二维码或复制网址到浏览器中打开,进入瑞萨技术论坛寻找答案或获取在线技术支持。

https://community-ja.renesas.com/zh/forums-groups/mcu-mpu/



未完待续


推荐阅读

Modbus RTU客户端及服务器端的编程与实验 - RZ MPU工业控制教程连载(43)


Modbus TCP编程与实验 - RZ MPU工业控制教程连载(44)

LVGL开发入门 - RZ MPU工业控制教程连载(45)

更多精彩,敬请关注

需要产品及方案支持

请扫码登记



评论 (0)
  •   高海拔区域勤务与装备保障调度系统平台解析   北京华盛恒辉高海拔区域勤务与装备保障调度系统平台专为高海拔特殊地理环境打造,致力于攻克装备适应、人员健康保障、物资运输及应急响应等难题。以下从核心功能、技术特点、应用场景及发展趋势展开全面解读。   应用案例   目前,已有多个高海拔区域勤务与装备保障调度系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润高海拔区域勤务与装备保障调度系统。这些成功案例为高海拔区域勤务与装备保障调度系统的推广和应用提供了有力支持。   一、核心
    华盛恒辉l58ll334744 2025-04-24 10:13 74浏览
  • 前言本文主要演示基于TL3576-MiniEVM评估板HDMI OUT、DP 1.4和MIPI的多屏同显、异显方案,适用开发环境如下。Windows开发环境:Windows 7 64bit、Windows 10 64bitLinux开发环境:VMware16.2.5、Ubuntu22.04.5 64bitU-Boot:U-Boot-2017.09Kernel:Linux-6.1.115LinuxSDK:LinuxSDK-[版本号](基于rk3576_linux6.1_release_v
    Tronlong 2025-04-23 13:59 131浏览
  •   有效样本分析决策系统平台全面解析   一、引言   北京华盛恒辉有效样本分析决策系统在当今数据驱动的时代,企业、科研机构等面临着海量数据的处理与分析挑战。有效样本分析决策系统平台应运而生,它通过对样本数据的精准分析,为决策提供有力支持,成为提升决策质量和效率的关键工具。   应用案例   目前,已有多个有效样本分析决策系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润有效样本分析决策系统。这些成功案例为有效样本分析决策系统的推广和应用提供了有力支持。   二、平台概述
    华盛恒辉l58ll334744 2025-04-24 11:13 73浏览
  •   航空兵训练与战术对抗仿真平台系统解析   北京华盛恒辉航空兵训练与战术对抗仿真平台系统是现代军事训练的关键工具,借助计算机技术构建虚拟战场,支持多兵种协同作战模拟,为军事决策、训练及装备研发提供科学依据。   应用案例   目前,已有多个航空兵训练与战术对抗仿真平台在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润航空兵训练与战术对抗仿真平台。这些成功案例为航空兵训练与战术对抗仿真平台的推广和应用提供了有力支持。   一、系统架构与核心功能   系统由模拟器、计算机兵力生
    华盛恒辉l58ll334744 2025-04-24 16:34 44浏览
  •   陆地装备体系论证与评估综合平台系统解析   北京华盛恒辉陆地装备体系论证与评估综合平台系统是契合现代军事需求而生的专业系统,借助科学化、智能化手段,实现对陆地装备体系的全方位论证与评估,为军事决策和装备发展提供关键支撑。以下从功能、技术、应用及展望展开分析。   应用案例   目前,已有多个陆地装备体系论证与评估综合平台在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润陆地装备体系论证与评估综合平台。这些成功案例为陆地装备体系论证与评估综合平台的推广和应用提供了有力支持。
    华盛恒辉l58ll334744 2025-04-24 10:53 74浏览
  •   海上训练与保障调度指挥平台系统解析   北京华盛恒辉海上训练与保障调度指挥平台系统是现代海上作战训练的核心枢纽,融合信息技术、GIS、大数据及 AI 等前沿技术,旨在实现海上训练高效组织、作战保障科学决策。以下从架构功能、应用场景、系统优势及发展挑战展开解读。   应用案例   目前,已有多个海上训练与保障调度指挥平台在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润海上训练与保障调度指挥平台。这些成功案例为海上训练与保障调度指挥平台的推广和应用提供了有力支持。   一
    华盛恒辉l58ll334744 2025-04-24 15:26 53浏览
  •   通用装备论证与评估系统平台解析   北京华盛恒辉通用装备论证与评估系统平台是服务军事装备全生命周期管理的综合性信息化平台,通过科学化、系统化手段,实现装备需求论证、效能分析等核心功能,提升装备建设效益。   应用案例   目前,已有多个通用装备论证与评估系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润通用装备论证与评估系统。这些成功案例为通用装备论证与评估系统的推广和应用提供了有力支持。   一、系统分层架构   (一)数据层   整合装备性能、作战、试验等多源异
    华盛恒辉l58ll334744 2025-04-24 16:14 42浏览
  • 故障现象一辆2016款奔驰C200L车,搭载274 920发动机,累计行驶里程约为13万km。该车组合仪表上的防侧滑故障灯、转向助力故障灯、安全气囊故障灯等偶尔异常点亮,且此时将挡位置于R挡,中控显示屏提示“后视摄像头不可用”,无法显示倒车影像。 故障诊断用故障检测仪检测,发现多个控制单元中均存储有通信类故障代码(图1),其中故障代码“U015587 与仪表盘的通信存在故障。信息缺失”出现的频次较高。 图1 存储的故障代码1而组合仪表中存储有故障代码“U006488 与用户界
    虹科Pico汽车示波器 2025-04-23 11:22 94浏览
  •   电磁频谱数据综合管理平台系统解析   一、系统定义与目标   北京华盛恒辉电磁频谱数据综合管理平台融合无线传感器、软件定义电台等前沿技术,是实现无线电频谱资源全流程管理的复杂系统。其核心目标包括:优化频谱资源配置,满足多元通信需求;运用动态管理与频谱共享技术,提升资源利用效率;强化频谱安全监管,杜绝非法占用与干扰;为电子战提供频谱监测分析支持,辅助作战决策。   应用案例   目前,已有多个电磁频谱数据综合管理平台在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润电磁频谱数
    华盛恒辉l58ll334744 2025-04-23 16:27 182浏览
  •   无人机结构仿真与部件拆解分析系统平台解析   北京华盛恒辉无人机结构仿真与部件拆解分析系统无人机技术快速发展的当下,结构仿真与部件拆解分析系统平台成为无人机研发测试的核心工具,在优化设计、提升性能、降低成本等方面发挥关键作用。以下从功能、架构、应用、优势及趋势展开解析。   应用案例   目前,已有多个无人机结构仿真与部件拆解分析系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润无人机结构仿真与部件拆解分析系统。这些成功案例为无人机结构仿真与部件拆解分析系统的推广和应用提
    华盛恒辉l58ll334744 2025-04-23 15:00 191浏览
  •   后勤实验仿真系统平台深度解析   北京华盛恒辉后勤实验仿真系统平台依托计算机仿真技术,是对后勤保障全流程进行模拟、分析与优化的综合性工具。通过搭建虚拟场景,模拟资源调配、物资运输等环节,为后勤决策提供数据支撑,广泛应用于军事、应急管理等领域。   应用案例   目前,已有多个后勤实验仿真系统平台在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润后勤实验仿真系统平台。这些成功案例为后勤实验仿真系统平台的推广和应用提供了有力支持。   一、核心功能   (一)后勤资源模拟
    华盛恒辉l58ll334744 2025-04-23 15:39 155浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦