2 任务5.2 设计小区路灯管理功能_第1页
2 任务5.2 设计小区路灯管理功能_第2页
2 任务5.2 设计小区路灯管理功能_第3页
2 任务5.2 设计小区路灯管理功能_第4页
2 任务5.2 设计小区路灯管理功能_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目5多机通信系统的设计与实现任务描述485通信为了让小区内的多个路灯保持正常运行,以便确保小区内老人小孩的夜间出行安全,物业需要监测小区内各点的路灯的使用情况,并通过监控室的PC对小区的所有路灯进行有效管理。任务描述任务要求任务5.2设计小区路灯管理功能各路灯监测点与监控机之间通过RS-485总线进行连接。各监测点与与监控机之间采用Modbus通信协议进行通信。监控机能实时管理各路灯的开启和关闭,能了解路灯是否有故障。任务分析485通信任务5.2设计小区路灯管理功能任务背景1)小区路灯管理:需要对小区内的路灯进行监控和控制,以保证路灯的正常运行和照明效果。2)RS-485:一种常用的串行通信协议,用于在设备之间进行远距离数据传输。3)Modbus协议:一种工业通信协议,可用于不同设备之间的数据通信。2.任务要求设计和实现一个基于RS-485的Modbus协议对小区路灯设备进行管理,能够实现对小区内路灯的监控和控制。该设备应具备以下功能。(1)实时监测路灯的工作状态(亮/灭)和位置信息。(2)支持远程控制路灯的开关和亮度调节。(3)具有报警功能,当路灯出现故障时能够及时报警并记录故障信息。(4)设备应通过RS-485接口与其他设备进行通信,并遵循Modbus协议的通信规范。任务分析485通信任务5.2设计小区路灯管理功能任务实施步骤任务关键点(1)设计电路:根据任务要求设计电路,包括RS-485接口电路。(2)选择芯片和模块:选择合适的芯片和模块,如微控制器、RS-485收发器芯片等。(3)编写程序:使用所选芯片和模块编写程序,实现实时监测和控制路灯的功能。(4)调试和测试:对设计进行调试和测试,确保设备能够正常工作并满足任务要求。(1)掌握RS-485通信协议的原理和实现方法。(2)熟悉Modbus协议的通信规范和数据传输流程。(3)理解串行通信的基本原理和数据传输方式。(4)能够编写基于RS-485Modbus协议的路灯管理程序,实现路灯的监控和控制功能。任务目标485通信职业能力目标(1)掌握Modbus通信协议的基础知识。(2)能根据项目需求自行规划通信协议。(3)会搭建RS-485总线网络并编程实现组网通信。(4)会开发基于Modbus协议的通信软件。(1)会搭建RS-485总线通信网络。(2)会设计Cortex-M4微控制器的RS-485总线通信程序。任务目标技能目标485通信Modbus概述知识链接1.什么是ModbusModicon莫迪康Modbus-IDA组织ModbusOrganization2004年发布国标485通信Modbus概述知识链接1.什么是Modbus为可编程控制器PLC通信而发布工业领域通信协议的业界标准工业电子设备之间常用的连接方式2.为什么要用ModbusRS-485是通信协议吗?NORS-485仅定义了接口的电气特性,未对电缆、接口和通信协议标准化应用层通信协议用户自定义行业:多功能电能表通信规约(DL/T645-1997)Modbus协议485通信Modbus概述知识链接485通信Modbus的基础知识知识链接1.Modbus的通信模型Modbus的通信模型设备地址:被选中的从设备地址功能码:告知从设备要执行的功能数据段:执行功能的附加信息差错检测区:数据校验方法单播/广播课堂上教师提问与学生回答的模式如何?单主/多从485通信Modbus的基础知识知识链接2.Modbus的通信模式同:数据模型与功能调用形式;异:传输报文的封装方式。基于不同的物理链路,Modbus通信协议存在不同的通信模式串行链路ModbusRTU模式ModbusASCII模式以太网链路ModbusTCP模式485通信Modbus的基础知识知识链接3.Modbus的寄存器寄存器种类特性说明实际应用线圈状态(Coil)输出端口(可读可写),相当于PLC的DO(数字量输出)LED显示、电磁阀输出等离散输入状态(DiscreteInput)输入端口(只读),相当于PLC的DI(数字量输入)接近开关、拨码开关等保持寄存器(HoldingRegister)输出参数或保持参数(可读可写),相当于PLC的AO(模拟量输出)模拟量输出设定值、PID运行参数、传感器报警阈值等输入寄存器(InputRegister)输入参数(只读),相当于PLC的AI(模拟量输入)模拟量输入值Modbus寄存器的分类与特性位操作位操作字操作字操作485通信Modbus的基础知识知识链接4.Modbus的消息帧格式起始位地址功能代码数据CRC校验结束符≥3.5字符8位8位n个8位16位≥3.5字符地址域0:广播地址1-247:单播地址功能码域消息帧功能数据域具体数据差错校验CRC16485通信Modbus的功能码知识链接1.功能码分类代码功能码名称位/字操作操作数量01读线圈状态位操作单个或多个02读离散输入状态位操作单个或多个03读保持寄存器字操作单个或多个04读输入寄存器字操作单个或多个05写单个线圈位操作单个06写单个保持寄存器字操作单个15写多个线圈位操作多个16写多个保持寄存器字操作多个功能码公共功能码用户自定义功能码保留功能码表5-7部分常用的Modbus功能码任务中使用的功能码485通信Modbus的功能码知识链接(1)读保持寄存器的功能码03该功能码用于读取从设备保持寄存器的二进制数据,不支持广播,使用案例如下。请求报文:060300D20004E587从表5-8可以看出,从设备地址为06,需要读取Modbus地址210(0x00D2)~213(0x00D5)共4个保持寄存器的内容。相应的响应报文如表5-9所示。从设备地址功能码起始地址寄存器个数CRC校验060300D20004E587②响应报文:060308026E01F3010659AB1E6A从设备地址功能码数据域字节数4个数据CRC校验060308026E01F3010659AB1E6A注意:Modbus的保持寄存器和输入寄存器以字为基本单位,即每个寄存器分别对应2个字节。485通信Modbus的功能码知识链接任务中使用的功能码(1)写单个保持寄存器值功能码06该功能码用于更新从设备单个保持寄存器的值,使用案例如下。请求报文:0306008202AB68DF从设备地址功能码起始地址变更数据CRC校验0306008202AB68DF从表可以看出,从设备的地址为03,要求设置从设备Modbus地址0x82的内容为683(0x02AB)。②响应报文:0306008202AB68DF从设备地址功能码起始地址变更数据CRC校验0306008202AB68DF根据任务要求制定Modbus通信协议485通信知识链接根据任务要求,Modbus主机向从机发请求帧获取路灯的状态。该值为可修改型数据,查阅表5-7可知,在各种寄存器类型中,读保持寄存器特性符合本任务的需求,应选择功能码“03”。要改变路灯的状态,查阅表5-7可知,在各种寄存器类型中,写单个保持寄存器特性符合本任务的需求,应选择功能码“06”。另外,在嵌入式微控制器作为主机的系统中,Modbus寄存器的地址可以用内存的地址代替,如数组中某个变量的存储地址。我们想开启1号路灯的指令如下表所示。从设备地址功能码起始地址变更数据CRC校验01069C420001C64E如能正常开启路灯,返回的响应报文应该和发送报文内容相同,即01069C420001C64E。同理,关闭1号路灯的指令如下表所示。从设备地址功能码起始地址变更数据CRC校验01069C420000078E如能正常关闭路灯,返回的响应报文应该和发送报文内容相同,即01069C420000078E。根据任务要求制定Modbus通信协议485通信知识链接查询1号路灯状态的指令如表5-14所示表5-14查询1号路灯状态的指令从设备地址功能码起始地址变更数据CRC校验01039C420002BA4F如果从设备的响应报文(十六进制)为01030200010066D9A3,表示的含义为02两个寄存器的内容,第一个字0001表示蜂鸣器打开,第二个字0066没有具体含义,D9A3为CRC码。如果读到第一个字为0000,表示蜂鸣器当前的状态是关闭的。CRC校验码是如何求得的呢?485通信知识链接CRC校验码由两个字节组成,附加在报文的最后。CRC的值由发送设备计算,接收设备在接收报文时重新计算CRC值,并将计算值与实际接收值做比较,如果不相等,则为错误。CRC计算过程如下。将一个16位CRC寄存器装入0xFFFF,即全1。将报文的第一个8位字节与16位CRC寄存器的低字节异或,结果置于CRC寄存器中。将CRC寄存器中的值右移1位(LSB),MSB补零,提取并检测LSB。如果LSB=0,重复步骤(3);如果LSB=1,CRC寄存器与0xA0001异或。重复步骤(3)和(4),直到完成8次移位。对报文中的下一个字节重复步骤(2)~(5),直到所有报文处理完毕。CRC寄存器中的最终值为CRC值。将CRC值的高低字节交换,附加在报文最后。将上述步骤写成C语言代码,如程序清单5-6所示。CRC校验码是如何求得的呢?485通信知识链接在C语言环境下运行此程序,可计算出数组元素为:0x01、0x03、0x61、0x00、0x00、0x02,它们的CRC码为0xF7DB,一般将低位排在前面,高位写在后面,故其CRC码为DBF7。485通信知识链接使用CRC计算器求得CRC校验码也可用Modbus-RTU计算器计算出CRC值,如图5-14所示图5-14Modbus-RTU计算器计算CRC值可从网上下载ModbusRTUCRC16计算器绿色版即可使用。如图所示。485通信任务实施实验器材为了教学方便,我们用蜂鸣器代替路灯,用PC运行串口调试助手程序,使用USB转RS-485接口,一端连接PC的USB口,另一端连接开发板的RS-485接口,同名端相连。使用串口发送Modbus指令,控制蜂鸣器的开启、关闭,查询蜂鸣器的状态等操作。序号设备/资源名称数量是否准备到位(√)1STM32F407核心板1

2USB转RS-485调试器1

3USB转RS-232线缆1

4蜂鸣器电路1

5串口调试助手1

6配书软件包1套

任务实施前必须先准备好以下设备和资源。实验器材清单表485通信任务实施硬件电路环境硬件电路环境:RS-485转换接口电路如图5-1所示,蜂鸣器接口电路如图5-15所示。图5-15中,PF8置高,Q1导通,蜂鸣器开启;PF8置低,Q1截止,蜂鸣器关闭。程序初始化配置GPIOF.8为低,推挽输出,不上拉/下拉。485通信任务实施任务实施导航&实施纪要修改任务1的STM32CubeMX工程配置添加代码包编写代码编译下载程序搭建硬件环境结果验证实施纪要表项目名称项目五

工厂环境监控系统任务名称5.2任务2设计小区路灯管理功能序号分步纪要1

2

3

4

5

6

7

8

修改工程配置添加代码包编写代码编译下载程序搭建硬件环境结果验证485通信任务实施1)

基于STM32CubeMX建立工程在桌面新建文件夹“task2_rs485_modbus”用于保存工程。2)新建STM32CubeMX工程参照任务5.1新建STM32CubeMX工程。3)配置工程参照任务5.1,完成配置的STM32F407ZET6外设,包括USART1、USART2、蜂鸣器引脚(PF8)和RS-485接收/发送使能引脚(PG8)。串口1不使能中断。另外,还需对STM32的时钟系统、调试端口等系统内核组件进行配置。串口2的配置,在任务5.1的基础上,增加DMA配置、引脚确认,如图5-16所示。串口2的中断配置,如图5-17所示。图5-16图5-17USART配置要点485通信任务实施实验中,USART2接收数据采用空闲中断触发,发送数据采用DMA发送,触发后完成发送中断。USART2总中断(USART2globalinterrupt)必须打开(为了发送完成中断实现)。UART_RX(DMA1stream5globalinterrupt)DMA接收中断不打开,取消对钩(这里对钩无法改变,后续解决)。UART_TX(DMA1stream6globalinterrupt)DMA发送中断打开。进行NVIC中断优先级配置,上述无法取消DMA接收中断,原因是选中了强制DMA中断,操作如图5-18所示,进入“NVIC”标签页:①取消“ForceDMAchannelsinterrupts”前的对钩;②取消“DMA1stream5globalinterrupt”后的对钩;③将“DMA1stream6globalinterrupt”后的抢占优先级(PreemptionPriority)从0改为2。RS-485使能端(PG8)及蜂鸣器输出端(PF8)的配置结果如图5-19所示。USART配置要点485通信任务实施添加代码完成上述配置后,生成基础工程,并用KeilMDK打开。(1)添加工程文件在task2_rs485_modbus文件夹下拷贝配套软件MyApplication包,MyApplication文件夹下有Inc和Src两个子文件夹。Src文件夹下为应用程序文件,Inc文件夹下为应用程序文件对应的头文件,添加后的文件结构如图5-20所示。485通信任务实施修改main.c代码(2)打开main.c文件,在/*USERCODEBEGINIncludes*/和/*USERCODEENDIncludes*/之间添加“#include"MyApplication.h";在/*USERCODEBEGIN2*/和/*USERCODEEND2*/之间添加“MyInit.Peripheral_Set();”;修改主函数while(1)的代码,代码如下:/*USERCODEBEGINIncludes*/#include

"MyApplication.h"/*USERCODEENDIncludes*/……

/*USERCODEBEGIN2*/ MyInit.Peripheral_Set();//外设初始化操作

/*USERCODEEND2*/……

/*USERCODEBEGIN3*/

……while(1){

/*USERCODEENDWHILE*/

/*USERCODEBEGIN3*/ System.Run();}

/*USERCODEEND3*/485通信任务实施修改main.c代码修改出错函数Error_Handler(void)为如下代码:修改出错函数assert_failed(uint8_t*file,uint32_tline)为如下代码:这样做的好处是,今后的main.c文件都可以写成这种格式,我们的重点工作是编写自己的函数,所有的函数都在MyApplication文件夹下,MyApplication/Inc下是函数的声明,MyApplication/Src下是函数的实现。这样实现了自定义函数和系统的基础工程代码的分离。(3)打开stm32f4xx_it.c文件,按如下修改voidUSART2_IRQHandler(void)函数:485通信任务实施修改stm32f4xx_it.c代码voidUSART2_IRQHandler(void){

/*USERCODEBEGINUSART2_IRQn0*/if(__HAL_UART_GET_FLAG(&huart2,UART_FLAG_IDLE))//判断空闲中断标志位{__HAL_UART_CLEAR_IDLEFLAG(&huart2);//清除中断标志位HAL_UART_IdleCallback(&huart2);//空闲中断回调函数}

/*USERCODEENDUSART2_IRQn0*/HAL_UART_IRQHandler(&huart2);

/*USERCODEBEGINUSART2_IRQn1*/

/*USERCODEENDUSART2_IRQn1*/}485通信任务实施修改stm32f4xx_it.c代码因为重构了一个UART2的空闲中断函数HAL_UART_IdleCallback(UART_HandleTypeDef*huart),需要在stm32f4xx_hal_uart.h文件中声明一下,打开stm32f4xx_hal_uart.h文件,在第722行位置添加如下语句:voidHAL_UART_IdleCallback(UART_HandleTypeDef*huart);/*自构空闲中断回调函数

*/该空闲中断回调函数在CallBack.c文件中定义,因此需要在CallBack.h文件中声明该函数。在CallBack.h文件中添加如下语句:externvoidHAL_UART_IdleCallback(UART_HandleTypeDef*huart);485通信任务实施设置系统编译器路径因为添加了工程文件夹MyApplication,需要告诉编译器添加工程文件的编译路径。按图5-21所示顺序,添加\task2_rs485_modbus\MyApplication\Inc的编译路径。485通信任务实施(5)程序测试编译程序,下载目标文件到核心板,核心板的USART1、USART2分别连接到串口,串口2发送Modbus的指令、接收响应报文,串口1接收调试信息。测试结果如图5-22所示串口2发送“01069C420001C64E”,开启蜂鸣器,串口2收到响应报文——01069C420001C64E,此时核心板的蜂鸣器开启,同时串口1显示调试信息,并计算得到的CRC校验码。经比较,发送的CRC校验码与接收信息经计算得到的CRC校验码相同。485通信任务实施(5)程序测试串口2发送“01069C420000078E”,关闭蜂鸣器,串口2收到应答报文——01069C420000078E,此时核心板的蜂鸣器关闭,同时串口1显示调试信息,并计算得到的CRC校验码。经比较,发送的CRC校验码与接收信息经计算得到的CRC校验码相同。测试结果如图5-23所示。485通信任务实施(5)程序测试当蜂鸣器状态是关闭的,串口2发送“01039C4200024A4F”,测试当前蜂鸣器的状态:01为设备地址,03为功能码,读保持寄存器的值,9C42为寄存器起始地址,0002表示读两寄存器内容,从设备的响应报文(十六进制)为“0103020000006619F2”,表示的含义为:02表示数据长度为2个字,第一个字0000

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论