格尔木城乡建设规划局网站潍坊外贸网站制作

张小明 2026/3/2 16:29:40
格尔木城乡建设规划局网站,潍坊外贸网站制作,设计素材网站月收益,网站怎么发邮件说明#xff1a;这是我2025 RT-Thread嵌入式大赛-软件赛道参赛作品#xff08;一等奖#xff09; 项目背景及功能 受国际形势复杂多变的影响#xff0c;工业控制领域长期以来以国外产品及系统为主导的格局正在发生转变。当下国家大力倡导国产自主可控的发展方向#xff0…说明这是我2025 RT-Thread嵌入式大赛-软件赛道参赛作品一等奖项目背景及功能受国际形势复杂多变的影响工业控制领域长期以来以国外产品及系统为主导的格局正在发生转变。当下国家大力倡导国产自主可控的发展方向为响应这一战略转变对原有控制系统进行重构升级以契合国产化替代的潮流。本项目所构建的是一个原型系统核心功能架构如下Web 端采用 Three.js 技术栈实现机械臂运行状态的 3D 可视化展示系统通过 MQTT 协议与睿擎派进行高效数据交互形成上下层通信链路。睿擎派采用双总线控制架构其一通过 EtherCat 总线驱动伺服系统实现电机的精准闭环控制进而带动机械臂完成预设动作其二通过 Modbus RTU 总线对接 IO 模块实现各类灯具的开关状态管控。RT-Thread使用情况采用以RT-Thread为核心的睿擎工业平台进行开发开发环境为RuiChing Studio。硬件主控模块采用了睿擎派。该平台是为工业场景设计的软硬件一体化开发方案全栈自主可控整合了数据采集、通信、控制、工业协议、AI、显示六大核心功能。本系统糅合了三个官方典型示例工程完成了本系统嵌入式系统的开发所使用的示例工程如下103_network_mqtt206_bus_modbus_rtu_master306_bus_ethercat_master_csp硬件相关说明1 主控系统睿擎派2 伺服系统汇川IS620NS1R6I3 伺服电机汇川ISMH1 20B30CB44路继电器模块叶帆科技 YF3210-Q4物联网智能模块5LED灯泡12V-24V硬件连接拓扑图通信协议约定WEB前端和睿擎派设备通过MQTT协议进行通信主要功能就是前端页面可以远程操作伺服电机的启停速度还有运转方向。另外还可以远程开灯。所以我们定义一个南向的控制信息帧JSON格式{cmd: “state”,argv: 0}cmd和argv对应的命令和参数如下“state” – 电机状态 argv: 0 – 停止 1 – 运行“dir” – 运转方向 0 – 逆时针 1 – 顺时针“pos” – 运转步长脉冲数 argv: 建议 1000 ~ 10000 之间变化“led” - 灯的状态 argv0 – 关闭 1 – 打开对应的topic为: /mqtt/command北向状态信息帧每秒上传一次{state: 0, //电机状态dir:0, //运转方向pos: 1000, //目标每秒运转步长脉冲led0, //灯的状态error_wrod: 0, //故障字status_word: 0, //伺服运行状态字cur_pos: 0, // 电机当前位置 脉冲cur_speed0, //电机当前最大限速 脉冲/秒cur_torque: 0, //电机当前转矩voltage:0.0, //母线电压current:0.0, //相电流temp:0.0 //电机温度speed: //实际点击转速(rpm)}status_word0x0023伺服已上电处于就绪状态0x0027伺服准备运行0x0037伺服正在运行0x0080伺服故障。对应的topic为: /mqtt/message软件开发一、 睿擎派嵌入系统开发1新建项目由于EtherCAT总线驱动伺服相对复杂所以我们基于06_bus_ethercat_master_csp示例工程创建我们的项目YFMechPilot额外再添加MQTT和Modbus功能。2配置以太网接口另外我们的网段和默认的开发板不同所以我们需要修改网口0的IP地址等相关信息并部署到睿擎派。3拷贝文件我们从06_bus_modbus_rtu_master项目和03_network_mqtt项目里拷贝modbus_rtu_master_example.c 和 paho_mqtt_example.c 文件到YFMechPilot项目里并且分别改名为 modbus_rtu_master.c 和 paho_mqtt.c。4修改代码1、modbus_rtu_master.c代码修改4路继电器模块我们使用第二路来控制LED灯的亮灭所以增加如下函数来控制灯的状态0-灭1-亮int led_control(int state){modbus_t *ctx;int rc;led_status state;ctx modbus_new_rtu(/dev/uart5, 9600, N, 8, 1);if (ctx NULL){rt_kprintf(Unable to create the libmodbus context\n);return -1;}modbus_set_slave(ctx, 1);modbus_set_response_timeout(ctx, 1, 0);modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS485);modbus_rtu_set_rts(ctx, RS485_RTS_PIN, MODBUS_RTU_RTS_UP);if (modbus_connect(ctx) -1){rt_kprintf(Connection failed\n);modbus_free(ctx);return -1;}//控制第二路继电器的开和关rc modbus_write_bit(ctx,1,state);if (rc -1){rt_kprintf(Failed to modbus_write_bit\n);modbus_close(ctx);modbus_free(ctx);return -1;}rt_kprintf(modbus_write_bit rc%d\n, rc);modbus_close(ctx);modbus_free(ctx);return 0;}2、paho_mqtt.c代码修改MQTT_URI根据实际进行填写也可以采用默认的”tcp://broker.emqx.io:1883”值得说明的是EMQ 提供的公共 MQTT 服务有两个接入点broker.emqx.io (全球节点部署于 AWS 美国俄勒冈)broker-cn.emqx.io (中国节点部署于腾讯云上海)这些服务器由 EMQX 集群组成每个集群包含 2 个节点为全球用户提供免费的 MQTT服务主要用于测试和学习场景。发送和订阅的Topic进行如下修改。#define MQTT_SUBTOPIC /mqtt/command#define MQTT_PUBTOPIC /mqtt/message在mqtt_sub_callback函数里处理南向发下的控制帧代码如下static void mqtt_sub_callback(MQTTClient *c, MessageData *msg_data){*((char *)msg_data-message-payload msg_data-message-payloadlen) \0;char *json_str (char *)msg_data-message-payload;LOG_D(Topic: %.*s 接收消息: %s,msg_data-topicName-lenstring.len, msg_data-topicName-lenstring.data,json_str);//消息解析// 步骤1解析JSON数据cJSON *root cJSON_Parse(json_str);if (root RT_NULL) // JSON格式错误{LOG_E(JSON解析失败无效格式: %s, json_str);return;}// 步骤2提取cmd和argv字段校验字段存在性cJSON *cmd_item cJSON_GetObjectItem(root, cmd);cJSON *argv_item cJSON_GetObjectItem(root, argv);if (cmd_item RT_NULL || !cJSON_IsString(cmd_item)){LOG_E(JSON缺少有效cmd字段);cJSON_Delete(root);return;}if (argv_item RT_NULL || !cJSON_IsNumber(argv_item)){LOG_E(JSON缺少有效argv字段);cJSON_Delete(root);return;}// 步骤3获取字段值const char *cmd cmd_item-valuestring;int argv argv_item-valueint; // 适配argv为整数状态/步长/LED均为整数LOG_I(云端指令cmd%s, argv%d, cmd, argv);// 步骤5根据cmd分支处理业务逻辑if (strcmp(cmd, state) 0) // 电机状态控制{servo_run argv;}else if (strcmp(cmd, dir) 0) // 运转方向{servo_dir argv;}else if (strcmp(cmd, pos) 0) // 电机步长设置脉冲数{// 校验步长范围1000~10000if (argv 1000 argv 10000){motor_v argv; // 赋值给全局步长变量EtherCAT代码中使用}}else if (strcmp(cmd, led) 0) // LED状态控制{if (argv 0 || argv 1){led_control(argv); // 调用LED控制函数需你实现Modbus RTU逻辑}else{LOG_W(无效的led argv值仅支持 0(关闭)/1(打开));}}else // 未知指令{LOG_W(未知cmd指令%s, cmd);}cJSON_Delete(root); // 必须释放避免内存泄漏return;}3、ethercat_csp.c代码修改由于我们WEB网页要显示很多信息比如要显示母线电压相电流电机温度实际转速等内容所以我们扩展tpdo_csp定义如下struct tpdo_csp{uint16_t error_word;uint16_t status_word;int32_t cur_pos;int32_t cur_speed;int16_t cur_torque;// 新增与PDO条目顺序一致uint16_t voltage; // 母线电压单位0.1Vint16_t current; // 相电流单位0.1Auint16_t temp; // 电机温度单位1℃int16_t speed; // 实际转速 rpm};同时slave1_input_pdo_entries的结构也要扩展。static ec_pdo_entry_info_t slave1_input_pdo_entries[] {{ 0x603F, 0x00, 16 }, // 603Fh(error){ 0x6041, 0x00, 16 }, // 6041h(status){ 0x6064, 0x00, 32 }, // 6064h(current postion){ 0x606C, 0x00, 32 }, // 606Ch(current speed){ 0x6077, 0x00, 16 }, // 6077h(current torque)// 新增{ 0x200B, 0x1B, 16 }, // voltage母线电压16位{ 0x200B, 0x19, 16 }, // current相电流16位{ 0x200B, 0x1C, 16 }, // temp电机温度16位{ 0x200B, 0x38, 16 }, // speed(实际电机转速16位)};slave_pdos定义的个数也要对应调整ec_pdo_info_t slave_pdos[] {{ 0x1600, 5, slave1_output_pdo_entries },{ 0x1a00, 9, slave1_input_pdo_entries }, //5条修改为9条{ 0x1600, 5, slave1_output_pdo_entries },{ 0x1a00, 9, slave1_input_pdo_entries }, //5条修改为9条};另外我们除了电机的启停外还需要调整速度我们通过调整步长pos的值来控制电机转的快慢。我们定义了一个motor_v变量。rmap-dest_pos motor_v;为了把伺服器获取的实时数据发送到MQTT服务器也就是tmap里面的内容。tmap servo_tpdo_get(csp_master, slave_counts, slave);我们增加如下代码//1秒发送一次if (rt_tick_get() - last_ms 1000){last_ms rt_tick_get();// 1. 分配邮箱消息内存动态分配从任务释放servo_status_msg_t *msg rt_malloc(sizeof(servo_status_msg_t));if (msg RT_NULL){LOG_E(分配消息内存失败);continue;}// 2. 拷贝数据到消息关中断保护避免数据竞争rt_enter_critical();msg-servo_run servo_run;msg-servo_dir servo_dir;msg-motor_v motor_v;msg-led_status led_status;msg-error_word tmap-error_word;msg-status_word tmap-status_word;msg-cur_pos tmap-cur_pos;msg-cur_speed tmap-cur_speed;msg-cur_torque tmap-cur_torque;msg-voltage tmap-voltage;msg-current tmap-current;msg-temp tmap-temp;msg-speed tmap-speed;rt_exit_critical();// 3. 发送消息到邮箱非阻塞不影响主任务err rt_mb_send(status_mailbox, (rt_ubase_t)msg);if (err ! RT_EOK){LOG_E(邮箱发送失败);rt_free(msg); // 发送失败释放内存}}需要注意的是直接mqtt推送的代码不能放在这个代码逻辑里面因为一旦放入那电机将会停止旋转。所以需要我们新开一个任务通过邮箱的方式传递数据然后再发送到MQTT服务器。/*** 新增从任务 - 接收邮箱消息生成JSON并发布MQTT*/static void servo_status_task(void *param){servo_status_msg_t *msg RT_NULL;rt_err_t err;while (1){// 等待邮箱消息RT_WAITING_FOREVER永久等待直到有消息err rt_mb_recv(status_mailbox, (rt_ubase_t *)msg, RT_WAITING_FOREVER);if (err ! RT_EOK || msg RT_NULL){rt_thread_mdelay(100);continue;}// 1. 消息转JSONchar *json_str msg_to_json(msg);if (json_str ! NULL){// 2. MQTT发布耗时操作在从任务执行mq_publish(json_str);// 3. 可选打印日志不影响主任务LOG_D(伺服状态JSON%s, json_str);// 4. 释放JSON内存rt_free(json_str);}// 5. 释放邮箱消息内存rt_free(msg);}}二、 WEB前端开发1. 概述电机机械臂前端系统是一个基于 WebGL 的实时可视化应用结合 Vue 3、Three.js 与 MQTT 协议实现可视化三维演示 远程指令控制 实时状态监控的一体化体验。系统主要目标如下1. 直观呈现伺服电机与工业机械臂的协同运行状态2. 提供人机交互界面保障启停、方向、速度、灯光等操作的远程执行3. 通过 MQTT 获取设备实时数据驱动动画、灯光及数据面板联动确保画面与实际工况同步4. 遇到通信异常或设备故障时及时反馈并自动进入安全状态。2. 功能说明2.1 三维场景展示基于 Three.js 构建统一场景内含伺服电机、工业机械臂、灯泡及地面网格等对象通过 AnimationMixer 控制电机与机械臂动画实现启动、停止、正反转、速度变化等效果灯泡模型配合点光源呈现开关效果强化联动体验。2.2 实时状态联动订阅 /mqtt/message实时解析 state、status_word、dir、pos、led、speed 等字段根据状态自动调整动画、灯光及数据面板保障前端显示与真实设备一致当 status_word 表示运行/就绪/准备/故障等不同阶段时界面给出对应文字提示。2.3 远程控制能力左侧设备控制面板提供启动、停止、正/反转、加/减速、灯光开关等命令按钮点击按钮后通过 sendMqttCommand 将 { cmd, argv } JSON 消息发送至 /mqtt/command驱动后端或真实设备执行加减速按钮将步进值 pos 在 1000~10000 范围内调整并同步更新动画播放速度。2.4 数据监控面板右侧数据监控面板展示电机名称、实时转速、扭矩、电流、电压、温度、步进值等status_word 被转换为伺服正在运行 / 伺服准备运行 / 伺服故障等中文描述降低理解门槛。2.5 异常与安全处理每秒接收一次 /mqtt/message超过 3 秒未收到或 MQTT 连接断开时自动停止电机与机械臂动画并关闭灯光状态即时切换为停止并在控制台记录告警日志便于追踪问题支持 error_word 的拓展可与后端约定错误码字典后续用于更细粒度的异常提示。3. 架构介绍3.1 技术栈与模块划分前端框架 Vue 3 (script setup) 负责 UI 组织、状态管理与生命周期控制三维渲染 Three.js FBXLoader OrbitControls构建 3D 场景、加载模型、处理交互消息通信mqtt.js (WebSocket)与 MQTT 服务器交互订阅设备状态、发送控制指令UI 组件 自定义控制面板 / 数据面板提供操作入口与实时数据展示3.2 数据流下行数据设备通过 MQTT 服务器推送 /mqtt/message 前端 handleMqttMessage 更新 motorData、控制动画和灯光。上行指令用户点击控制按钮 sendMqttCommand 发布至 /mqtt/command 设备执行并反馈结果。3.3 状态管理motorData存放电机实时参数转速、扭矩、电流、电压、温度、status_word、pos 等obotArmData存放机械臂展示数据角度、伸展、负载等当前用于界面展示其余用于存放动画速度、方向、灯光状态、面板显隐等。3.4 安全机制startMqttTimeoutCheck handleMqttTimeout负责检测消息超时并触发停机逻辑mqttClient.on(‘close’|’offline’)连接断开立即执行停机getStatusWordText对伺服状态码进行解析和人性化提示。4. 代码结构说明src/App.vue4.1 主要函数场景相关initMainScene、createLightBulb、 oggleLightBulb、startRobotArmLoop、stopRobotArmAnimation 等MQTT 相关initMqttClient、sendMqttCommand、handleMqttMessage、getStatusWordText、startMqttTimeoutCheck控制指令playMotorAnimationLoop、stopMotorAnimation、speedUpMotor、slowDownMotor、setMotorForward、setMotorReverse、 urnOnLight、 urnOffLight。4.2 生命周期1. onMounted处理 viewport 兼容逻辑初始化 Three.js 场景与动画循环加载机械臂、电机模型及灯泡建立 MQTT 连接并启动超时检测监听窗口尺寸变化保持画面自适应。2. onUnmounted清理 ResizeObserver、动画帧、Three.js 控制器与渲染器断开 MQTT 连接停止超时检测释放资源。4.3 状态码与动画联动当 status_word 标记为运行时自动播放电机动画并按照 speed/5.5 的比例调整 timeScale机械臂同步以 1.0 速度循环当状态变为就绪/准备/故障/停止时停止相关动画并更新 UIdir 控制 timeScale 的正负led 控制灯泡明灭pos 在加速/减速时更新。演示效果程序部署到睿擎派后在命令行进行程序启动。1 先输入mqtt_init命令初始化mqtt服务连接。2 然后输入ect_csp命令初始化伺服器设备3 在浏览器输入WEB前端url连接打开WEB页面。进行对应的操作电机的启动停止调速更换方向开灯和关灯灯操作。演示视频地址https://www.bilibili.com/video/BV1WfUBBTEZn/代码地址1 睿擎派嵌入式代码https://gitee.com/yfiot_project/yfmech-pilot2 WEB前端代码https://download.csdn.net/download/yefanqiu/92462210获奖证书
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

彩票网站维护会跑路吗app网站与普通网站的区别

Figma界面本地化解决方案:中文插件深度解析 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma英文界面而困扰?想要快速掌握这款专业设计工具却受限于语…

张小明 2026/1/20 22:49:20 网站建设

电商网站建设包括哪些方面常德网站开发

LobeChat能否转换代码格式?编程语言互译实验 在现代软件开发中,团队常常面临技术栈割裂的困境:前端用TypeScript,后端跑Python,边缘设备上却要写C。当一个算法原型需要跨平台部署时,手动重写不仅耗时&#…

张小明 2026/1/20 22:48:49 网站建设

网站设计客户案例wordpress 伪静态 403

随着大语言模型与开发工具链的深度融合,命令行终端正被重塑为开发者的AI协作界面。本文以 Google gemini-cli 为范本,通过源码解构,系统性分析其 Agent 内核、ReAct 工作流、工具调用与上下文管理等核心模块的实现原理。为希望构建终端 Agent…

张小明 2026/1/20 22:48:18 网站建设

网站建设挣钱么wordpress炫酷模板

旅游网系统 目录 基于springboot vue旅游网系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue旅游网系统 一、前言 博主介绍:✌️大厂…

张小明 2026/1/20 22:47:47 网站建设

产品外观设计网站html网页实例

关键字:轻量级IM即时通讯和实时音视频系统(含后端源码、前端源码) (一)系统介绍 1.1 系统介绍 轻量级IM即时通讯和实时音视频系统(含后端源码、前端源码) 一个全平台、功能齐全、二次…

张小明 2026/1/20 22:47:16 网站建设

网站建设指南长沙企业建站按效果付费

在糖生物学与糖药物研发飞速发展的今天,精确控制蛋白质的糖基化修饰已成为理解生命过程、开发新型疗法的关键。甘露糖丝氨酸(Tetra-O-acetyl-α-Mannosyl-Fmocserine,CAS号 118358-80-8)作为一类结构明确、反应特性优良的糖基化氨…

张小明 2026/1/20 22:46:14 网站建设