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

相关阅读

单端正激式/单端反激式/推挽式/全桥式/半桥式电路结构的特点

1、单端正激式 单端:通过一只开关器件单向驱动脉冲变压器。 正激:脉冲变压器的原/副边相位关系,确保在开关管导通,驱动脉冲变压器原边时,变压器副边同时对负载供电。 该电...
2023-07-28
单端正激式/单端反激式/推挽式/全桥式/半桥式电路结构的特点

电容耦合的原理是什么?——简易篇

首先确定一点,电流沿着导线的形状流动就是电容耦合的结果。可以从最基础的安培定律出发,考虑一个导体表面和介质相交的一个小体积,利用旋度的散度是0的性质,可以得到,导体...
2023-03-31
电容耦合的原理是什么?——简易篇

电工的这一高招,瞬间让原本繁琐的工作,变得轻而易举!

在一个繁忙工厂里,电工小李和焊工老张就如同不知疲倦的蜜蜂,频繁地在各个车间之间来回穿梭,全力进行着设备维修的重要工作。每次当他们着手修理那些出现故障的设备时,都会遭遇一...
2024-09-20
电工的这一高招,瞬间让原本繁琐的工作,变得轻而易举!

153项电气符号,收藏后你可以不用带手册了

我们平时的电气图纸 有很多的符号 如果你不认识那就out了! 为了方便 小编今天都收集齐了 拿走不谢! 好了,总共153项,基本的符号都在这了,可以不用带手册了吧! (来源:网络)...
2023-06-11

高压设备检修安全注意事项

1.高压设备检修必须事先汇报值长,必须经值长同意后,方可进行工作. 2.高压设备的检修必须严格执行工作票制度,根据实际工作需要填写第一、二种工作票. 3.高压设备的停电必须严格执行...
2023-03-21

热销商品

德国进口雅马哈风力灭火机大功率手提森林灭火器落叶工地吹雪机汽

德国进口雅马哈风力灭火机是一款高效、可靠的森林灭火和清理设备。它拥有大功率风机,能够迅速吹散落叶、杂草和积雪,有效清理工地和森林地面。这款灭火机采用先进技...
¥ 692.5

3M自粘橡胶条高硬度耐压实心幕墙玻璃舞台搭建货架专用减震密封条

3M自粘橡胶条是一款专为高要求工业及建筑场景设计的高性能密封减震材料,采用高硬度实心橡胶材质,具备优异的耐压性、抗老化性和持久弹性。其独特的自粘背胶设计,安装...
¥ 1.6

公牛官方旗舰店开关插座空调16A插座五孔10A面板暗装多孔G12白灰

公牛官方旗舰店提供一系列高质量的开关插座和空调配件。这款16A插座五孔面板采用暗装设计,适用于多种安装环境,如墙面、天花板等。它具有10A的电流容量,可以满足家庭...
¥ 5.55

电位器旋钮电流调节螺帽直流逆变电焊机二保焊送丝机通用旋钮B102

电位器旋钮电流调节螺帽适用于直流逆变电焊机和二保焊送丝机,是一款通用的旋钮B102。该旋钮采用优质材料制造,具有耐磨损、耐高温、耐腐蚀等特点,能够长时间稳定运行...
¥ 0.7

西门子开关插座无框皓彩米绒白亚光二三插USB10A五孔一开旗舰店

西门子开关插座无框皓彩米绒白亚光二三插USB10A五孔一开旗舰店,作为西门子品牌的专卖店,提供了一系列高品质、设计新颖的家居电气产品。这里销售的开关插座采用无框...
¥ 8.77

网站栏目