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

    相关阅读

    在没有标明箭头的情况下,怎么看泵的转向是否正确呢,有大神知道吗?

    作为一名资深电工,在多年的职业生涯中,我积累了丰富的电气知识与实践经验。然而,在复杂的工厂环境中,即便是经验丰富的我也时常会遇到一些难以独自解决的问题。最近,我就被一个关...
    2024-09-12
    在没有标明箭头的情况下,怎么看泵的转向是否正确呢,有大神知道吗?

    怎么学习变频器知识?

    怎么学习变频器 知识?呢对于很多刚刚接触变频器的人来说,怎么学习是一个至关重要的问题,要想学好变频器知识,除了要有一定的基础,还要有理论学习后的的实践操作,下面介绍...
    2023-03-21

    如何选择电容器优先考虑钽电容器还是MLCC 呢?

    如今,市场上有许多不同类型的电容器,使得选择合适的电容器变得困难。而且,关于电容器的一些误解,比如将钽电容和II类MLCC视为可互换的,也增加了选择的复杂性。不同类型的电...
    2023-08-09
    如何选择电容器优先考虑钽电容器还是MLCC 呢?

    果断收!电工最常用电气元件实物图及对应符号

    我们简单列举一些常用的电气元件:断路器系列,各类开关,接触器,继电器系列,各类按钮,指示灯,再有就是变频器和PLC。 各种断路器 我们常用的一般有:空气开关,漏电保护器...
    2023-06-11
    果断收!电工最常用电气元件实物图及对应符号

    电流互感器变比检验的方法

    电流互感器 是一种专门用作变换电流的特种变压器,在正常工作条件下,其二次电流实质上与一次电流成正比,而且在连接方向正确时,二次电流对一次电流的相位差接近于零。 电流...
    2023-03-21

    热销商品

    加厚abs安全帽电工建筑工地程施工领导监理透气防砸头盔可印字V型

    这款加厚ABS安全帽专为电工、建筑工地施工人员、领导及监理设计,采用高强度ABS工程塑料,抗冲击、防砸性能优异,有效保障头部安全。帽体加厚设计,增强耐用性与防护等级...
    5.8

    欧普led筒灯3w孔灯超薄桶灯吊顶天花灯过道嵌入式洞灯客厅5w

    欧普LED筒灯是一款高品质嵌入式照明产品,适用于客厅、过道、吊顶等多种场景。采用优质LED光源,提供3W和5W两种功率选择,光线柔和均匀,显色指数高,有效还原真实色彩。超...
    7.45

    水口钳高硬度模型剪钳电子钳工业级口水剪斜嘴钳偏口斜口专用钳子

    水口钳高硬度模型剪钳是一款工业级精密工具,专为电子、模型制作及精细作业设计。采用优质高碳钢材质,经热处理工艺打造,具备卓越的硬度和耐磨性,可轻松剪切金属引脚、...
    4.8

    170电子剪钳II 如意斜口钳 工业斜嘴钳水口钳 模型剪塑胶钳尖嘴钳

    170电子剪钳II如意斜口钳是一款专业级精密工具,集工业斜嘴钳、水口钳、模型剪、塑胶钳与尖嘴钳功能于一体,适用于电子维修、模型制作、手工艺及精密作业。其采用优...
    4.5

    安全帽国标工地加厚施工领导透气安全头盔建筑工程监理免费印字

    本款安全帽严格遵循国家GB 2811-2019标准,专为建筑工程、工地施工及监理人员设计。采用高强度ABS工程塑料,加厚壳体有效抗冲击,保障头部安全。帽体轻盈透气,内置可调...
    10

    网站栏目