MODBUS-RTU协议主机和从机代码STM32 包含2个程序代码,主机和从机(我代码最容易看懂)

MODBUS-RTU协议主机和从机代码STM32 包含2个程序代码,主机和从机(我代码最容易看懂) 基于温度传感器DS18B20的MODBUS-RTU从机 主机发送指令:01 03 20 00 00 01 8F CA 从机收到指令返回温度数据 06指令修改Add通信地址/站号和波特率 主机代码,主动发03指令读其它设备数据并把返回用数码管显示 程序代码包含:stm32单片机(stm32f103vet6) 我的代码是最容易看懂的 很多人想要很多功能号 实现原理就是用if判断数据帧有点区别,所以学会一条功能号,其它自然会了 4位595数码管模块显示

直接上干货,咱们用STM32F103VET6玩转MODBUS-RTU通讯。先看从机代码怎么处理温度数据——DS18B20的数值直接塞进MODBUS数据帧,简单粗暴有效。

从机接收处理核心代码:

if(usRxBuffer[1] == 0x03) //功能码判断 { if(memcmp(&usRxBuffer[2],"\x20\x00\x00\x01",4)==0) //寄存器地址校验 { temp = DS18B20_GetTemp(); //获取温度值 usSndBuffer[3] = temp >> 8; //拆分高字节 usSndBuffer[4] = temp & 0xFF; //低字节 CRC16(usSndBuffer,5); //生成CRC校验码 Send_Data(usSndBuffer,7); //发送7字节数据包 } }

这里用memcmp直接匹配地址比逐字节判断更省事。温度数据用16位整数传输,注意DS18B20采集时记得放大10倍处理小数位。

改地址和波特率的功能码06实现更带劲:

case 0x06: if(usRxBuffer[4] == 0x00 && usRxBuffer[5] == 0xC0) //特定写入值触发修改 { DeviceAddr = usRxBuffer[2]; //新设备地址 UART1_BaudRate = 38400; //切换波特率 USART_Init(...); //重新初始化串口 } break;

这种暗号式修改方式适合快速调试,实际应用建议做成可配置参数。

主机代码这边,数码管显示和MODBUS查询得配合好:

void MODBUS_Query(void) { static uint8_t query[8] = {0x01,0x03,0x20,0x00,0x00,0x01,0x00,0x00}; CRC16(query,6); //动态生成校验码 USART_Send(query,8); //发送查询指令 HAL_Delay(200); //等待从机响应 } //数码管显示用移位寄存器驱动 void Show_Temp(int temp) { uint8_t codes[4]; codes[0] = SEG_CODE[temp/1000]; //千位 codes[1] = SEG_CODE[(temp%1000)/100] | 0x80; //百位带小数点 codes[2] = SEG_CODE[(temp%100)/10]; //十位 codes[3] = SEG_CODE[temp%10]; //个位 HC595_Send(codes,4); //串行输出到595 }

注意温度显示时百位的小数点处理,这里用了或运算直接点亮最高位。595驱动时序要卡准,建议用SPI硬件加速。

功能码扩展其实就那回事,比如想加个05功能码控制继电器:

if(usRxBuffer[1] == 0x05) { uint16_t coil_addr = (usRxBuffer[2]<<8) | usRxBuffer[3]; if(coil_addr == 0x0001) //指定线圈地址 { RELAY = (usRxBuffer[4] == 0xFF) ? 1 : 0; //强制置位/复位 } }

看到没?核心就是判断功能码后处理对应地址数据。MODBUS协议层搞定后,业务逻辑随便加。

最后提醒:调试时先用USB转485工具监视数据帧,用十六进制模式查看原始报文。遇到CRC校验错误别慌,八成是字节超时没处理好,调整定时器参数比死磕代码更有效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1149695.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入探讨C#三菱FX编程口协议RS422圆口,推荐测试工具及相关资料

C# 三菱FX编程口协议RS422圆口 C#三菱FX编程口协议RS422圆口测试工具&#xff0c;及其相关资料最近在折腾三菱FX系列PLC的通信工具时发现&#xff0c;原厂给的编程口协议文档看得人头皮发麻。特别是RS422圆口的硬件接线&#xff0c;稍不留神就烧串口。今天咱们就用C#手搓个测试…

被局域网卡脖子的 WPS?用cpolar这样设置,在哪都能改文档

✨道路是曲折的&#xff0c;前途是光明的&#xff01; &#x1f4dd; 专注C/C、Linux编程与人工智能领域&#xff0c;分享学习笔记&#xff01; &#x1f31f; 感谢各位小伙伴的长期陪伴与支持&#xff0c;欢迎文末添加好友一起交流&#xff01; 1. 拉取WPS Office镜像2. 运行W…

大数据安全技术实验:数据动态脱敏与操作审计实践

实验概述动态脱敏&#xff1a;在数据使用&#xff08;查询、导出&#xff09;时&#xff0c;根据用户角色或访问场景&#xff0c;实时对敏感数据进行脱敏处理&#xff0c;原始数据不改变&#xff0c;仅向用户展示脱敏后的数据&#xff0c;实现“按需可见”&#xff1b;视图脱敏…

西门子YH33无负压供水系统一拖三及一拖三加一程序图解

无负压供水一拖三加一拖三加一图纸程序 西门子YH33 1.恒压供水系统&#xff0c;采用西门子smart200 PLC&#xff0c;西门子smart 700 IE触摸屏&#xff1b; 2.一拖三和一拖三加一切换&#xff1b; 3.采用PLC内置PID控制&#xff0c;恒压更稳定&#xff0c;界面更高端&#x…

基于ABAQUS和Comsol的盾构隧道有限元整体模型:结构抗震、承载性、防水性、稳定性分析

ABAQUS Comsol 盾构隧道 有限元整体模型 用于结构抗震&#xff0c;承载性&#xff0c;防水性&#xff0c;稳定性分析盾构隧道这玩意儿&#xff0c;搞工程的人都知道是个技术活。地下几十米挖洞&#xff0c;周围土体、水压、地震全得考虑进去。以前老师傅们靠经验&#xff0c;现…

AutoGLM-Phone-9B核心优势揭秘|附手机端AI推理部署实战案例

AutoGLM-Phone-9B核心优势揭秘&#xff5c;附手机端AI推理部署实战案例 1. 技术背景与核心价值 随着移动智能设备的普及&#xff0c;用户对本地化、低延迟、高隐私保护的AI服务需求日益增长。然而&#xff0c;传统大模型受限于计算资源和能耗&#xff0c;在移动端难以实现高效…

分类模型效果对比表:实测5大方案显存与精度关系

分类模型效果对比表&#xff1a;实测5大方案显存与精度关系 引言 当企业需要部署AI分类模型时&#xff0c;技术团队常常面临一个关键问题&#xff1a;如何在有限的硬件资源下&#xff0c;选择最适合业务需求的模型方案&#xff1f;这个问题对于非技术背景的高管来说尤其重要&…

AI智能实体侦测服务核心优势解析|高精度+高亮显示

AI智能实体侦测服务核心优势解析&#xff5c;高精度高亮显示 1. 背景与需求&#xff1a;非结构化文本中的信息抽取挑战 在当今信息爆炸的时代&#xff0c;大量关键数据以非结构化文本的形式存在——新闻报道、社交媒体内容、企业文档、客服对话等。这些文本中蕴含着丰富的人名…

超越商用API的轻量翻译模型|HY-MT1.5-1.8B实测分享

超越商用API的轻量翻译模型&#xff5c;HY-MT1.5-1.8B实测分享 1. 引言&#xff1a;为什么我们需要轻量级开源翻译模型&#xff1f; 在多语言内容爆发式增长的今天&#xff0c;高质量、低延迟的翻译能力已成为全球化应用的核心基础设施。尽管Google Translate、DeepL等商用AP…

工控圈的老铁们注意了!今天给大家扒一扒某神秘大佬流出的三菱系PLC源码干货。先看这个FX1N的底层代码,实测支持四轴脉冲输出不是吹的,直接上硬核验证

FX1N底层源码,PLSR源码&#xff0c;支持4路脉冲输出 总体功能和指令可能支持在RUN中下载程序&#xff0c;支持注释的写入和读取&#xff0c;支持脉冲输出与定位指令(包括PLSY /PLSR/PLSV/DRVI DRVA 等指令)。 对于FX1N&#xff0c;支持波特率9600/19200/38400/57600/115200自适…

直接上干货,先扔个QPSK星座图代码镇楼

实现QPSK调制&#xff0c;通过瑞利信道和高斯信道&#xff0c;计算其误码率&#xff0c;并进行比较。 星座图&#xff0c;误比率对比&#xff0c;或者对ASK&#xff0c;FSK&#xff0c;DPSK等各种误码率对比计算。import numpy as np import matplotlib.pyplot as pltsymbols …

重构工作流:平台型产品经理如何用 AI 极速生成设计与原型?

&#x1f680; 引言&#xff1a;从“画图匠”到“逻辑架构师” 作为一名平台型产品经理&#xff08;Platform PM&#xff09;&#xff0c;我们的核心价值往往在于底层逻辑梳理、数据结构定义、API 规范以及后台管理系统的复杂交互&#xff0c;而非单纯的 C 端视觉特效。 传统的…

单相逆变器的效率仿真

核心效率模型与损耗分析 逆变器总效率 η P_out / P_in 100%&#xff0c;其中损耗主要包括&#xff1a; 开关损耗&#xff1a;与开关频率、器件特性相关导通损耗&#xff1a;与器件通态电阻、电流有效值相关死区损耗&#xff1a;由上下管互补导通间的死区时间引起滤波电感损耗…

手把手教学:AI万能分类器部署教程,云端GPU开箱即用

手把手教学&#xff1a;AI万能分类器部署教程&#xff0c;云端GPU开箱即用 引言&#xff1a;为什么你需要这个教程&#xff1f; 最近有位应届生朋友跟我吐槽&#xff0c;面试时被问到AI项目经验直接懵了——自己连个简单的图像分类器都没跑通过。回家想自学&#xff0c;结果在…

保护隐私数据:分类模型本地化训练+云端推理方案

保护隐私数据&#xff1a;分类模型本地化训练云端推理方案 1. 为什么需要本地训练云端推理&#xff1f; 在医疗行业&#xff0c;数据隐私保护是重中之重。想象一下&#xff0c;病人的病历数据就像你的私人日记 - 你肯定不希望它被随意传阅。但另一方面&#xff0c;医院又需要…

分类模型数据增强:云端自动化扩增实战教程

分类模型数据增强&#xff1a;云端自动化扩增实战教程 当你训练一个图像分类模型时&#xff0c;是否遇到过某些类别总是识别不准&#xff1f;就像教小朋友认动物&#xff0c;如果只给他看5张猫的照片&#xff0c;他可能很难准确认出所有品种的猫。数据增强技术就是解决这个问题…

中文文本正负向识别新选择|集成Web界面的StructBERT情感分析镜像

中文文本正负向识别新选择&#xff5c;集成Web界面的StructBERT情感分析镜像 1. 背景与需求&#xff1a;中文情感分析的挑战与演进 在自然语言处理&#xff08;NLP&#xff09;的实际应用中&#xff0c;情感分析&#xff08;Sentiment Analysis&#xff09;是企业洞察用户反馈…

FX3U PLC v10.0与V10.51源代码及设计图

FX3U PLC v10.0和V10.51源代码及设计图。三菱FX3U PLC这两个版本的源码包像是藏在电工柜里的武功秘籍&#xff0c;最近把V10.0和V10.51的工程文件翻出来对比&#xff0c;发现几个有意思的改动点。先说个直观的——定时中断的配置方式变了&#xff0c;老版本用MOV指令给D8013赋值…

三菱FX3U一拖二玩转台达温控器

三菱FX3U与2台台达温控器modbus通讯案例 功能&#xff1a;三菱FX3U与2台台达温控器进行modbus通讯。 实现设定温度&#xff0c;设定温度探头型号&#xff0c;读取实际温度。 配件&#xff1a;三菱FX3U的PLC&#xff0c;FX3U的485BD板&#xff0c;2台台达DTA7272C1温控器&#x…

分类器效果保障:云端A/B测试最佳实践

分类器效果保障&#xff1a;云端A/B测试最佳实践 引言 作为算法工程师&#xff0c;你是否遇到过这样的困境&#xff1a;新开发的分类器模型在测试集上表现优异&#xff0c;但就是不敢上线生产环境&#xff1f;担心新模型在实际业务场景中表现不稳定&#xff0c;又怕老模型已经…