MODBUS通讯程序设计流程图

news2024/10/5 14:17:56

MODBUS通讯一般来说是基于RS485电平的通讯,RS485是半双工,很多单片机工程师做的通讯不是稳定,主要原因是流程没有掌控好。

我以前也犯过和他们一样错误,觉得很容易。在QQ群里,有位老工程师和大家一样犯了同样的毛病。曾经去一家公司面试,他们也遇到过类似的问题。他们咨询我用是什么485芯片,想知道一些信息。他们以为是自己的芯片问题,其实就是程序流程不正确。当然,这次面试肯定是泡汤,他们的动机不是招聘,而是想找答案。我告诉了芯片的型号,但具体流程设计,是口述的。面试时,当有人问解决方案时,就要注意留个心眼。

看似简单,那是因为你没有用到项目上去,只有做过的人才知道其中的奥妙。一次通讯正确,那不叫稳定,要能工作一年不出问题,才能说自己做好了。

1、变量定义如下:

#define RS485_TX_Overtime_RefValue    40   //发送完成最大等待时间为80ms,流程图直接用40
#define RS485_TX_Buffer_Size               17
u8 TX[RS485_TX_Buffer_Size];
u8 TXindex;//TX[]的发送下标值;
u8 Tmax;//TX[]的装载数据完成后的最大下标值
u8 TXstep;
u8 TXcnt;//RS485发送无从机超时计数器

#define Rmax               125
u8 RX[Rmax]; //RS485接收缓冲区数组
u8 RXindex;          //RX[]的装载索引值
u8 RXcnt;              //RS485接收时间计数器
u8 RXstep;

union RS485_CRC16_DATA_TYPE
{ uint8_t  b[2];
  uint16_t  d; //b[1]和d的高8位值相等;b[0]和d的低8位值相等;
};
union RS485_CRC16_DATA_TYPE  RS485_serial_crc;

uint8_t  High8Bit,Low8Bit;//用来保存计算到的CRC

2、流程图如下:

 

 照着上面的流程图设计,应该问题不大。

3、CRC循环冗长检测

//函数功能:CRC循环冗长检测
u16 FrequencyConverter_Crc16(u8 *data,u8 len)
{
    u16 ccitt16 = 0xA001;      //多项式0xA001
    u16 crc = 0xFFFF;
    int i;

    for(;len>0;len--)
  {
        crc^=*data;                  //异或
        for(i=0;i<8;i++)
        {
            if(crc & 0x0001)    //最低位为1,减去除数
            {
                crc>>=1;            //将最低位的1移出,剩下的数与0xA001异或
                crc^=ccitt16;
            }
            else                          //最高位为0,不需要减去除数
            {
                crc>>=1;                 //直接移位
            }
        }
        data++;
    }
    return crc;
}

4、装载举例

          TX[0] = 0x01;               //装载变频器设备地址
          TX[1] = 0x03;               //装载MODBUS读命令
          TX[2] = RegAdress>>8;       //装载寄存器地址的高8位值
          TX[3] = RegAdress&0xFF;     //装载寄存器地址的低8位值
          TX[4] = DataOrNumber1>>8;   //装载读取数据长度的高8位值
          TX[5] = DataOrNumber1&0xFF; //装载读取数据长度的低8位值
          crc16 = FrequencyConverter_Crc16(&TX[0],6);    //计算CRC16的值
          TX[6] = (u8)(crc16&0x00FF); //装载CRC16的低8位值
          TX[7] = (u8)(crc16>>8);     //装载CRC16的高8位值
          Tmax = 7;//设置TX[]中的最大装载索引值

5、结论

本流程图,在实际案例中使用过,很不错。

欢迎交流,互相进步。

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

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

相关文章

宣布!BNB Greenfield 测试网上的部署

我们很高兴地宣布&#xff0c;4EVERLAND Hosting 现在支持在 BNB Greenfield Testnet 上部署&#xff0c;为开发和托管去中心化应用程序 (dApp) 提供更具可扩展性和安全性的选项。 这种集成使项目团队能够轻松且经济地利用 4EVERLAND 在去中心化托管方面的尖端技术和专业知识&…

No module named ‘torch_geometric‘解决办法——PyG(PyTorch Geometric)安装教程

1、查询已安装的torch版本 一定要先查询自己的torch版本&#xff0c;也不同版本的依赖跟库都是不一样的。 import torch print("torch版本&#xff1a;",torch.__version__)输出结果&#xff1a; 2、安装依赖 2.1 进入官网下载依赖。 官网下载链接&#xff1a;…

word查找与替换

比如我有一个需求&#xff1a;将word中符号和中文为全角&#xff0c;但英文字符和数字为半角。 这种我们应该怎么办&#xff1f; 可以通过查找和替换解决。 按ctrl H即可看到查找替换框&#xff0c;注意word中查找替换不是ctrl F 查找 功能&#xff1a;在以下选项中查找 我们…

WiFi(Wireless Fidelity)基础(十)

目录 一、基本介绍&#xff08;Introduction&#xff09; 二、进化发展&#xff08;Evolution&#xff09; 三、PHY帧&#xff08;&#xff08;PHY Frame &#xff09; 四、MAC帧&#xff08;MAC Frame &#xff09; 五、协议&#xff08;Protocol&#xff09; 六、安全&#x…

Springboot +Flowable,各种历史信息如何查询(二)

一.简介 正在执行的流程信息是保存在以 ACT_RU_ 为前缀的表中&#xff0c;执行完毕的流程信息则保存在以 ACT_HI_ 为前缀的表中&#xff0c;也就是流程历史信息表。 假设有一个流程&#xff0c;流程图如下&#xff1a; 当这个流程执行完毕后&#xff0c;以 ACT_RU_ 为前缀的…

【ubuntu】alias命令

1 alias的作用 alias允许用户为命令创建简单的名称或缩写。如果需要在窗口输入复杂且较多的命令时&#xff0c;alias就可以减轻用户的记忆负担&#xff0c;发挥作用啦。 2 语法 &#xff08;1&#xff09;简单命令 alias [name”value”] 举例&#xff1a;alias ppwd 命令…

学习网络安全有哪些就业方向?网络安全就业前景!

在当下&#xff0c;网络安全是非常重要的&#xff0c;与我们的生活息息相关&#xff0c;因此网络安全课程也成为了热门技术&#xff0c;引发众多人学习。那么学习网络安全有哪些就业方向?我想很多人都不太了解&#xff0c;接下来我们一起来看看吧。 首先说一下什么是网络安全…

科罗拉多州立大学发布CSU-MLP模型,用随机森林预测中期恶劣天气

本文首发自 HyperAI超神经微信公众号~ 内容一览&#xff1a;近期&#xff0c;来自美国科罗拉多州立大学与 SPC 的相关学者联合发布了一个基于随机森林的机器学习模型 CSU-MLP&#xff0c;该模型能够对中期 (4-8天) 范围内恶劣天气进行准确预报。目前该成果刊已发表在《Weather …

进销存是什么意思?值得推荐的进销存软件有哪些?

在这个消费不断升级、直播带货和电商不断冲击的时代&#xff0c;实体店的生存变得越来越艰难&#xff0c;如何提高门店管理效率、降低管理成本、提升门店客流量&#xff0c;是实体店当下急需解决的几大问题。 进销存软件就是为了帮助实体店解决以上几大难题而设计的&#xff0c…

Xline v0.4.0: 一个用于元数据管理的分布式KV存储

Xline是什么&#xff1f;我们为什么要做Xline&#xff1f; Xline是一个基于Curp协议的&#xff0c;用于管理元数据的分布式KV存储。现有的分布式KV存储大多采用Raft共识协议&#xff0c;需要两次RTT才能完成一次请求。当部署在单个数据中心时&#xff0c;节点之间的延迟较低&a…

对STM32栈的理解Stack_Size EQU 0x00000400

对STM32栈的理解Stack_Size EQU 0x00000400 Stack_Size EQU 0x00000400表示什么意思可以通过查找flash内存的方式定位存储1.flash2.RAM内部 本人主要为个人参考网络及个人总结而来比较&#xff0c;如有雷同请告知&#xff0c;即刻删除 以下引用网上资料 理解堆和栈的区别 &…

RK3588 设备树pinctrl gpio子系统解析,解决GPIO无法正确拉高拉低的问题,RK3588设备树详解

一、RK3588设备树结构 firefly的官方说明文档RK3588gpio系统说明 function {group {rockchip,pin <bank gpio func &ref>;}; };其中&#xff0c;bank是所属的组&#xff0c;Core-3588J 有 5 组 GPIO bank&#xff1a;GPIO0-GPIO4&#xff0c;每组又以 A0-A7, B0-B…

DiffDock源码解析

DiffDock源码解析 数据预处理 数据输入方式 df pd.read_csv(args.protein_ligand_csv), 使用的是csv的方式输入&#xff0c; 格式&#xff1a; 不管受体还是配体&#xff0c; 输入可以是序列或者3维结构的文件 如果蛋白输入的是序列&#xff0c;需要计算蛋白的三维结构&am…

Type-C接口在显示器上有什么作用?Type-C 显示器方案介绍

一显示器的Type-C口&#xff0c;是未来显示器的接口的“终极形态”&#xff0c;未来显示器可以不要USB-A&#xff0c;不要HDMI&#xff0c;不要3.5音频&#xff0c;甚至不要DP口&#xff0c;但Type-C口一定会越来越多。 二显示器Type-C有什么用&#xff0c;有什么类型 1只可以…

大势智慧软硬件技术答疑第三期

1.重建大师6.0试用版&#xff0c;怎么导出DOM、DEM&#xff1f; 答&#xff1a;需要先生成三维模型&#xff0c;然后再提交产品选择DOM和DEM。 2.麻烦问下&#xff0c;修模出来贴的纹理图片&#xff0c;导出osgb后再打开就模糊了是什么情况&#xff1f; 答&#xff1a;拿高清…

OushuDB × 东方证券:数据仓库信创国产化最佳实践

前言&#xff1a;东方证券是一家综合类证券公司&#xff0c;成立于 1998 年&#xff0c;总部设在上海。经过 20 多年的发展&#xff0c;东方证券现有分支机构 177 家、管理 3200 亿资产&#xff0c;服务上亿客户。与一个大型金融机构相匹配的&#xff0c;正是东方证券当前管理的…

想利用业余时间当一名黑客?要具备什么能力,确定不来看看?

几十年前刚有小型电脑的时候&#xff0c;产生了一个由程序专家和部分网络名人所组成的文化社群。该社群的成员创造出了hacker这个词&#xff0c;也就是人们常说的“黑客”。这些黑客们建立了后来的Internet&#xff0c;以及发明了电脑的操作系统。 如果有人对这种文化做出了贡…

OpenResty(Nginx)示例

Nginx Nginx概念&#xff1a; 聊到Nginx,先简单讲一下Nginx的基本概念 Nginx是一个高性能的、开源的 Web 服务器和反向代理服务器软件&#xff0c;由 Igor Sysoev 开发。它可以作为 HTTP 服务器使用&#xff0c;也可以作为负载均衡器、HTTP 缓存、反向代理和邮件代理等其他功…

Spring ( 二 ) 介绍

2.Spring Spring框架是一个用于Java开发的开源应用程序框架&#xff0c;提供了一系列的工具和解决方案&#xff0c;帮助开发者快速构建高质量、可维护的企业级应用。Spring框架的主要特点包括&#xff1a;模块化、轻量级、可测试性、松耦合、面向切面编程&#xff08;AOP&…

NFT Insider #94:​The Sandbox与ERM Labs达成合作,周杰伦与中国移动开启元宇宙合作

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members(https://twitter.com/WHALEMembers)、BeepCrypto&#xff08;https://twitter.com/beep_crypto&#xff09;联合出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜、最有价值的讯息。每期周…