Modbus多机通信例程

时间:2023-03-13作者:佚名

  给从机下发不同的指令,从机去执行不同的操作,这个就是判断一下功能码即可,和我们前边学的实用串口例程是类似的。多机通信,无非就是添加了一个设备地址判断而已,难度也不是很大。我们找了一个Modbus调试精灵,通过设置设备地址,读写寄存器的地址以及数值数量等参数,可以直接替代串口调试助手,比较方便的下发多个字节的数据,如图1所示。我们先来就图中的设置和数据来对Modbus做进一步的分析,图中的数据来自于调试精灵与我们接下来要讲的例程之间的交互。

Modbus多机通信例程

图1 Modbus调试精灵

  如图:我们的USB转485模块虚拟出的是COM5,波特率9600,无校验位,数据位是8位,1位停止位,设备地址假设为1。

  写寄存器的时候,如果我们要把01写到一个地址是0000的寄存器地址里,点一下“写入”,就会出现发送指令:01 06 00 00 00 01 48 0A。我们来分析一下这帧数据,其中01是设备地址,06是功能码,代表写寄存器这个功能,后边跟00 00表示的是要写入的寄存器的地址,00 01就是要写入的数据,48 0A就是CRC校验码,这是软件自动算出来了。而根据Modbus协议,当写寄存器的时候,从机成功完成该指令的操作后,会把主机发送的指令直接返回,我们的调试精灵会接收到这样一帧数据:01 06 00 00 00 01 48 0A。

  假如我们现在要从寄存器地址0002开始读取寄存器,并且读取的数量是2个。点一下“读出”,就会出现发送指令:01 03 00 02 00 02 65 CB。其中01是设备地址,03是功能码,代表写寄存器这个功能,00 02就是读寄存器的起始地址,后一个00 02就是要读取2个寄存器的数值,65 CB就是CRC校验。而接收到的数据是:01 03 04 00 00 00 00 FA 33。其中01是设备地址,03是功能码,04代表的是后边读到的数据字节数是4个,00 00 00 00分别是地址为00 02和00 03的寄存器内部的数据,而FA 33就是CRC校验了。

  似乎越来越明朗了,所谓的Modbus这种通信协议,无非就是主机下发了不同的指令,从机根据指令的判断来执行不同的操作而已。由于我们的开发板没有Modbus功能码那么多相应的功能,我们在程序中定义了一个数组regGroup[5],相当于5个寄存器,此外又定义了第6个寄存器,控制蜂鸣器,通过下发不同的指令我们改变寄存器组的数据或者改变蜂鸣器的开关状态。在Modbus协议里寄存器的地址和数值都是16位的,即2个字节,我们默认高字节是0x00,低字节就是数组regGroup对应的值。其中地址0x0000到0x0004对应的就是regGroup数组中的元素,我们写入的同时把数字又显示到我们的LCD1602液晶上,而0x0005这个地址,写入0x00,蜂鸣器就不响,写入任何其他数字,蜂鸣器就报警。我们单片机的主要工作也就是解析串口接收的数据执行不同操作,也就是主要在RS485.C这个文件中了

/***********************RS485.c文件程序源代码*************************/

#include

#include

sbit RS485_DIR = P1^7; //RS485方向选择引脚

bit flagOnceTxd = 0; //单次发送完成标志,即发送完一个字节

bit cmdArrived = 0; //命令到达标志,即接收到上位机下发的命令

unsigned char cntRxd = 0;

unsigned char pdata bufRxd[40]; //串口接收缓冲区

unsigned char regGroup[5]; //Modbus寄存器组,地址为0x00~0x04

extern bit flagBuzzOn;

extern void LcdShowStr(unsigned char x, unsigned char y, const unsigned char *str);

extern unsigned int GetCRC16(unsigned char *ptr, unsigned char len);

void ConfigUART(unsigned int baud) //串口配置函数,baud为波特率

{

RS485_DIR = 0; //RS485设置为接收方向

SCON = 0x50; //配置串口为模式1

TMOD

相关阅读

家里停电但邻居有电是什么原因,如何解决

家里突然没电,但邻居家有电?有多种状况,我们逐一分析! 家里突然没电了,大部分原因是家用电器或是家庭线路老化以及电路安装不规范引起的断路、过负荷、漏电等多种原因,碰...
2023-05-21
家里停电但邻居有电是什么原因,如何解决

电工最危险的10个瞬间,每一个都可能致命!

电工是与电为伴的职业,日常穿梭在线路、设备、配电箱之间,看似平常的操作,却暗藏着无数安全隐患。高压电击、电弧灼伤、高空坠落、机械伤害……每一个危险瞬间,都可...
2026-04-22

设备改造后找电工接电使用。电工现场一看,电缆粉化懵了!

在工业生产的幕后,电工们扮演着至关重要的角色,他们不仅是电力系统的守护者,更是设备安全运行的保障者。然而,在实际工作中,电工们常常面临一种令人头疼的困境——设备...
2024-08-16
设备改造后找电工接电使用。电工现场一看,电缆粉化懵了!

临时用电接线操作不容忽视!牢记以下6点,远离危险!

临时用电工作属于危险性较高的电工作业,故相关规程规范对临时用电都有很高的安全技术方面的要求。尤其是雨水肆虐的季节,临时用电接线若不遵守规范,将对作业电工或作业区域...
2023-06-11

变电站设备的常用防雷保护措施

本文介绍了雷电的形成,下行雷与上行雷的区别,变电站的防雷措施,包括变电站的直击雷防护、变电站对侵入波的防护、变电站的进线防护以及变电站的防雷接地等,下面具体来看下...
2024-03-18

热销商品

手术衣一次性防护服打农药防尘实验服参观服加厚透气无纺布隔离衣

手术衣一次性防护服,作为一种重要的医疗防护用品,广泛应用于医院、实验室等场所。它采用加厚透气无纺布制成,具有优良的防尘、防污、防病毒能力,能有效保护医护人员免...
14

欧普照明led灯泡e27/e14大小螺口超亮家用节能灯螺旋暖白光球泡

欧普照明LED灯泡,适用于E27和E14两种常见螺口,是您家用照明的理想选择。这款灯泡采用先进LED技术,亮度超群,瞬间点亮,无需等待,为您提供明亮舒适的光环境。同时,它节能环...
3.59

LED柜内照明灯 AC220V 4W 7W配电箱导轨式 LL10-W 高压柜内照明灯

LED柜内照明灯AC220V 4W/7W配电箱导轨式LL10-W是一款专为高压柜、配电箱等封闭电气设备设计的紧凑型照明产品。采用高效LED光源,功耗低(4W/7W可选),亮度高,寿命长,节能...
7

密封胶条包邮耐磨耐高温耐腐蚀圆柱棒丁晴/氟胶实心硅胶胶条红色

本品采用优质丁腈橡胶(NBR)或氟橡胶(FKM)及实心硅胶材质制成,呈红色圆柱棒状,具备卓越的耐磨、耐高温(-40℃至+200℃以上,氟胶可达250℃)、耐腐蚀性能,适用于酸、碱、油类等...
1

小木锤木锤子实木木榔头圆头木锤实木棰木头锤子木柄锤黄檀手工锤

小木锤采用优质黄檀木精心打造,通体实木结构,质地坚硬、纹理细腻,手感温润舒适。圆头设计兼顾敲击与整形功能,适用于木工、雕刻、家具组装及日常维修等场景。木柄经精...
3.4

网站栏目