【《基于STM32单片机的现场温湿度监控系统设计与实现》13000字(论文)】_第1页
【《基于STM32单片机的现场温湿度监控系统设计与实现》13000字(论文)】_第2页
【《基于STM32单片机的现场温湿度监控系统设计与实现》13000字(论文)】_第3页
【《基于STM32单片机的现场温湿度监控系统设计与实现》13000字(论文)】_第4页
【《基于STM32单片机的现场温湿度监控系统设计与实现》13000字(论文)】_第5页
已阅读5页,还剩29页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

基于STM32单片机的现场温湿度监控系统设计与实现摘要随着科技的不断进步,各种工业现场对监控系统的需求也在逐渐增加,在过程自动化和制造自动化中通常都离不开监控系统。在工业现场中,许多的设备运行情况都需要监测,但工作人员不可能一直在现场盯着,因此可以用Modbus协议来建立通信,使上位机和现场就地控制单元之间构建以Modbus协议为基础的完整监控系统。本设计主要是通过移植开源的RT-Thread和FreeModbus到STM32L475单片机上实现Modbus协议在现场采集设备中的实现。然后通过MCGS组态软件的Modbus设备驱动,实现Modbus协议在监控中心上位机的实现,这样监控中心的电脑主机就可以与现场的嵌入式设备通过Modbus协议进行通信,STM32现场采集设备端采集的数据就可以按照ModbusRTU/TCP上送至上位机。这样的话工作人员就可以在监控中心的电脑主机上对现场设备的数据进行采集和监控。最终我可以在MCGS上位机中看到室内的温湿度数据,并且在温湿度到达一定值时,可以通过监控主机向STM32单片机下发控制命令点亮STM32单片机的LED报警灯。关键词监控系统;STM32;ModbusTCP/RTU;温湿度传感器;RT-Thread目录1绪论 11.1背景及目的 11.1.1背景 11.1.2目的和意义 11.1.3Modbus的背景 11.2国内外研究现状和相关领域已有成果 11.3课题研究的主要内容 22系统总体方案设计 42.1整体设计思路 43硬件设计 53.1STM32L475开发板详解 53.1.1MCU 53.1.2STLINKV2.1 53.2硬件接口 63.3温湿度传感器AHT10 83.3.1AHT10 83.3.2I2C通信 83.4串口服务器 94软件设计 104.1Modbus协议的通信 104.2下位机程序设计 114.2.1FreeModbus协议栈的移植 114.2.2Modbus协议在STM32单片机上的实现 124.3上位机监控计算机的实现 134.3.1MCGS组态软件 134.3.2Modbus协议的RTU模式在上位机的实现 134.3.3Modbus协议的TCP模式在上位机的实现 144.3.4ModbusTCP转RTU 164.4温湿度的采集 164.5温湿度数据在液晶屏上的显示 175设备调试 195.1保持寄存器的读写 195.2线圈寄存器的读写 215.3ModbusTCP协议下的数据传输 215.4研究成果 225.4.1成果的实用性 225.4.2改进及创新之处 226结论 236.1课题小结 236.2存在的不足 24参考文献 27附录一 281绪论1.1背景及目的1.1.1背景随着时代的进步、传感器科学和计算机科学的飞速发展,现场工业控制中对数据的采集与监测控制的要求在不断上升,各类监控系统广泛运用在过程自动化和制造自动化中。许多工业现场等对数据监控要求比较高的场所在对现场设备的运行情况进行监控和控制都离不开监控系统。并且由于如今的控制系统在不断地发展进步,相关监控系统的需求就越来越高了,比如一些监控系统可以利用Modbus协议来通信从而将一些流量,或者温湿度,智能电表的电压电流数据等传送的控制中心,实现数据的监控,除此之外还可以通过监控主机向单片机下发控制命令实现控制阀门开度,控制灯的亮或灭等。可以让监控系统变得更加智能化。但目前大多数监控系统仍然是通过有线方式获取信息,在初始阶段还需要进行布线设计。如果需要增加监控参数,就很难改变接线。因而利用无线通信的方式进行监控系统设计也是一种好办法。1.1.2目的和意义本课题研究的通信是以Modbus协议为基础,通过在上位监控计算机和现场就地控制单元之间构建基于Modbus协议的完整监控系统,深入研究Modbus协议在嵌入式设备上的实现方法,具有很强的现实意义。1.1.3Modbus的背景Modbus是莫迪康公司(现施耐德电气旗下的一个品牌)在一九七九年为了使用PLC通信而发表的一种串行通信协议。Modbus协议是公开的,因此所有用户都可以在没有版权的情况进行使用。它的部署和维护较也为简单方便,Modbus协议不仅支持RS232和RS485通讯,而且还支持以太网设备。并且由于Modbus的实现较为容易并且现场工业控制中用的也非常广泛,利用Modbus协议,可以构成开放,标准的自动化控制系统和监控系统。1.2国内外研究现状和相关领域已有成果监控系统是一个综合利用通信技术和自动化控制技术等设计出来的一种集中管理监控模式的自动化的系统,而随着国内外各行各业对数据监系统的需求的逐渐增加。国内外出现了多种技术成熟,功能较强的监控系统。(1)直接通过串口通信的监控系统:这类监控系统主要由传感器和监控计算机构成,将各类传感器与PC机直接通过RS232串口将采集到的数据直接传输至监控计算机存储,由计算机完成数据的处理。但由于不同的传感器一般都是不同的厂家导致传感器的通讯协议也不全相同,造成了系统的兼容性极差REF_Ref72490882\r\h[1]。(2)无线通信的远程监控系统:这类系统由传统单片机、传感器和无线数据传输模块组成。由传感器来进行数据采集,然后由单片机来完成存储数据的功能,最后通过无线通信将数据传送到远程服务器。与第一种监控系统相比这种系统在数据采集方面具有更好的实用性,功耗和成本大幅降低,并且还可以有远程监控的功能。(3)嵌入式集中监控系统:这种系统主要是两部分构成一是现场采集设备,实现数据采集与传输;二是监控中心,主要用于查看和接收数据,存储监测目标信息的功能。这样的系统在现场采集设备端具有优异的特点:通过移植FreeModbus协议栈的主机或者从机到单片机时Modbus协议就可以在现场采集设备上实现。现场设备采集数据,然后通过Modbus协议可以接入各种接口协议不同的传感器,使系统采集数据更加丰富全面,监控中心就能够同时对现场的多个设备进行监控和控制,使监控系统更加智能化,控制也更加集中。本课题采取利用实验室现有的设备来进行通信进而对ModbusTCP/RTU协议进行研究,通过利用正点原子的STM32潘多拉开发板来进行温度和湿度的采集,上位监控计算机与现场嵌入式设备通过Modbus协议来进行实际通信。1.3课题研究的主要内容本课题的关键内容主要由三个部分内容构成:(1)研究Modbus协议,熟悉常用功能码01、03、05、06、15、16的协议内容通过查阅相关资料了解Modbus协议栈的相关知识,并利用常用功能码来数实现数据的读写,可以利用软件来进行模拟通信来观查这些功能。(2)ModbusRTU协议在STM32单片机的实现Modbus协议在嵌入式设备中的实现有多种方式,一是自己写单片机代码,但工作量十分庞大,代码没有经过严格测试和长期运行,可能存在错误。二是移植开源的或商业软件协议栈,可以节省开发时间,代码经过长期运行检验,比较可靠。本课题选择通过移植RT-Thread和开源的FreeModbus协议栈到STM32单片机实现Modbus协议在现场采集设备中的实现。(3)Modbus协议在监控中心的上位机实现研究MCGS设计监控系统界面,通过组态软件的Modbus设备驱动,实现Modbus协议在上位机的实现。监控中心的电脑主机就可以与现场的嵌入式设备通过Modbus协议进行通信。STM32现场采集设备端采集到的数据就就可以按照ModbusRTU/TCP协议上送MCGS上位机,并且监控中心的电脑主机最终实现对现场设备的数据采集和监控。

2系统总体方案设计该系统主要包括上位机模块、温湿度采集传感单元、通讯模块等,系统将传感器所采集的数据传输至单片机中进行存储和处理,并通过总线传送到服务器。客户端可通过MCGS组态软件设计监控系统界面采集和控制现场设备,对数据进行实时监测。2.1整体设计思路系统主要分为数据采集端和数据监控端两部分的软硬件设计,利用STM32单片机采集温度和湿度的数据(温湿度的采集主要是通过STM32上的AHT10温湿度传感器),STM32再将采集的数据按Modbus的协议进行上传。最后上位监控计算机通过MCGS组态通过以太网按照ModbusTCP协议采集STM32的温湿度数据。为实现从RS485总线到以太网的转换,本课题采用串口服务器,串口服务器的RS485总线接口连接STM32单片机,串口服务器的网络接口连接到上位监控计算机,这样串口服务器就可以将ModbusRTU变为ModbusTCP协议,实现网络通信进而完成数据的远距离传输。当采集到的STM32温湿度数值到达一定值时,通过监控主机向STM32单片机下发控制命令点亮STM32单片机的LED灯报警。同时STM32单片机还可以利用SPI通信使温湿度的数据在液晶屏上面显示出来。总体框图如图2-1MCGS上位机MCGS上位机STM32AHT10温湿度传感器LED灯ModbusRTU协议串口进行数据传输IIC通信方式RS485串口服务器以太网RS485网络接口总线接口ModbusTCP协议控制LED灯的颜色将温湿度数据用液晶屏显示SPI通信方式图2-1总体设计框图

3硬件设计硬件部分需要对单片机进行选型,选择一个合适的温湿度传感器,对串口进行合适的配置,串口服务器的使用,以及相关外设的连接和使用。3.1STM32L475开发板详解3.1.1MCU正点原子的潘多拉STM32L475开发板选用的是STM32L475VET6来作为MCU,该芯片功能非常强大,STM32L4是意法半导体公司推出的一款MCU,由于其强大的低功耗性能、拥有很广泛的应用前景REF_Ref72491103\r\h[2]。该芯片的资源包括:集成FPU和DSP指令,并具有128KBSRAM、512KBFLASH、SPI、三个IIC、多个串口(本课题常用的只有2个)、一个低功耗串口、一个全速USBOTG、一个CAN接口、还包括82个通用IO口、芯片主频为80MHz。MCU引脚图如图3-1。图3-1MCU引脚图3.1.2STLINKV2.1开发板的STLINKV2.1原理图如图3-2所示,潘多拉STM32L475开发板板载的STLINKV2.1集程序下载、仿真调试和串口功能与一体。在需要进行程序下载和仿真的时候,选择SWD模式。所以在使用STLINKV2.1的串口功能时,需要使用短接帽将串口1的PA10与PA9这两个引脚分别与TXD与RXD进行连接。这样USB接口可以连接到电脑USB口,单片机就可以当作从机与电脑进行通信。图3-2STLINKV2.1原理图引脚图如图3-3图3-3STM32F103C8T6引脚图3.2硬件接口主要采用了STM32L475上的三个串口。本课题的Modbus协议的在物理层用的TTL通信接口,除此之外还可以用RS485这种只需要用两根线电压的差来发送与接收,硬件设备连接的时候非常方便REF_Ref71898599\r\h[4]。但由于这个开发板较小,除了串口一可以直接用USB接口,其余的串口都需要利用CH340将USB转TTL串口,在使用的过程会有一些不便,当需要使用RS485线的时候,协议转换起来也会造成许多不方便。串口1:STLINKV2.1的串口同STM32的串口1进行连接的接口(USART1),当他们通过跳帽进行对接,使PA9和PA10分别和STLINK的RX和TX连接起来,就可以实现串口通信。有了板载的STLINKV2.1功能,就可以直接省去USB转TTL的工具,只需要一根MicroUSB线就可以实现串口输出功能。串口1使用到的IO如表3-1。表3-1串口1PA9和PA10在STM32CuberMX里面配置如图3-4。图3-4串口1的引脚配置使用短路帽将USART1排针的PA10与PA9分别与TXD与RXD进行连接,这样串口1就可以与电脑的USB串口进行通讯。原理图如图3-5。图3-5串口1原理图(2)串口2:STM32L475开发板中并没有直接引出串口2,而是将串口2的引脚放在了ATK模块中,这是一个通用的接口,可以支持正点原子开发的多种模块。本课题仅仅使用了ATK模块的RX和TX引脚当作串口二使用(此处需要注意的是开发板上标注的RX和TX与实际引脚的是相反的)。串口2的IO分配如表3-2表3-2串口2由于开发板只引出了PA2和PA3故需要利用CH340将USB转TTL串口,从而实现串口2与电脑的USB口进行串口通讯。(3)串口3:从原理图中找到PB10和PB11分别是串口三的TX和RX,使用方法如串口2。本课题只在同时移植主站和从站到单片机上的时候才使用了串口3。3.3温湿度传感器AHT103.3.1AHT10本课题采用STM32L475上自带的AHT10温湿度传感器来进行采集温湿度。可以用来监控不同环境里的温度和湿度。AHT10模块的原理图如图3-6。图3-6AHT10模块的原理图AHT10传感器和单片机的通信是使用的IIC方式,单片机通过串行数据引脚IIC_SDA(PC1)、串行时钟引脚IIC_SCL2(PD6)对传感器AHT10发送命令、读取数据等REF_Ref71898427\r\h[4]。该传感器工作电压范围为1.8V-3.3V。温度、湿度的量程和精度如表3-3表3-3温湿度的量程和精度功能量程精度温度-40~85±0.5℃(典型值)相对湿度0~100%RH±3%RH(典型值)并且I2C总线具有低功耗,抗干扰强的优点,AHT10的品质非常优秀、响应速度很快、抗干扰的能力也比较强。能测量的温度和湿度检测的范围都比较大完全能够满足监控系统对温湿度采集的要求。3.3.2I2C通信I2C总线是一种二线制同步串行总线,通信起来较为方便。仅仅只需要利用2根线就可以使连接在总线上的设备之间进行数据传送,分别是串行数据线和串行时钟线。应用单片机的普通I/O口模拟I2C通信模式时,可以选择单片机上任意的2个I/O口作为SCL和SDA引脚,分析I2C的时序,根据I2C的时序编写I2C通信模块的程序代码REF_Ref71898427\r\h[5]。详细的I2C通信参考文献REF_Ref72491739\r\h[6]。本课题是将钟线SCL与STM32的PD6连接,串行数据线SDA与STM32的PC1连接,最终实现STM32与传感器AHT10的通信,从而实现温湿度的采集。3.4串口服务器串口服务器可以实现将串口转成网络,可以将Modbus串口通信协议转换成以太网通信。这样的话串口设备就可以快速拥有TCP/IP网络接口的功能,从而通过网络来进行数据的传输,这样就能进行较远距离的通讯。所用型号如图3-7。图3-7智嵌物联串口服务器ZQWL-EthRS-H4是实现4路串口(每路都支持RS485、RS232或RS422模式)与以太网的数据相互转换的设备。设备的IP地址等网络参数以及4路串口的参数都可以进行修改。本课题由于需要运用ModbusTCP网络协议来建立通讯,故选用串口服务器来完成协议的转换,串口服务器的485总线接口连接STM32单片机,串口服务器的网络接口连接到上位监控计算机。这样就可以实现从485总线到以太网的转换。最终就可以完成远程监和无线数据传输。

4软件设计软件设计主要有三个方面:一是Modbus协议在上位机的实现,二是Modbus协议在单片机上的实现,三是实现对温湿度传感器AHT10数据的采集,最终实现上位监控计算机与现场采集设备间的通信,并且可以在上位机观测到温湿度的变化。4.1Modbus协议的通信Modbus协议是一种工业现场总线协议标准。可以实现的功能有很多种,它的主要的功能码如表4-1。表4-1Modbus常用功能码功能码描述01H读线圈寄存器02H读离散输入寄存器03H读保持寄存器04H读输入寄存器05H写单个线圈寄存器06H写单个保持寄存器0FH写多个线圈寄存器10H写多个保持寄存器其中运用到最多的有:03功能码:读保持寄存器,字节指令操作,可读单个或者多个;05功能码:写单个线圈,位操作,只能写一个,可以通过一位同时控制8个LED灯。Modbus协议的通信有以下两种途径:(1)串口方式进行通信:主要是RTU和ASCII模式,本课题主要运用的ModbusRTU,RTU的帧结构如表4-2所示,在ModbusRTU传输模式下数据帧的第一个字节代表的是温度传感器的设备地址,从站不停地侦测总线,来判断上位机的指令是不是发向自己的;功能代码决定了当前指令的作用;数据段为传输的具体信息(如温湿度传感器采集到的温湿度数据);两位CRC校验码则用来避免各种干扰,能够起到降低误码率,提高了传输可靠性的作用。表4-2ModbusRTU报文帧子节点地址功能代码数据CRC校验1字节1字节0-252字节CRC低CRC高(2)利用网络的方式进行Modbus通信:FreeModbus支持TCP模式,这个模式的功能码与RTU模式的一样。当在现场嵌入式设备上运行时,可以利用TCP协议和上位监控计算机进行通信。TCP报文帧由MBAP头和PDU数据单元构成。PDU由功能码和数据组成。利用以太网通信的时候server端就相当于从站,只能等待连接。4.2下位机程序设计4.2.1FreeModbus协议栈的移植FreeModbus是一个开源的协议。它具有RTU、ASCII模式和TCP协议的支持。它的代码规范并且移植方便简单,给程序的开发带来了极大的便利。又由于它具有可裁剪性,因此可以根据自己的需求来对代码进行任意的裁剪。同时FreeModbus对软硬件的要求也不高、资源占用的不多,使用起来简单方便REF_Ref71899412\r\h[9]。因为协议栈的程序编写较为复杂,自己编写工作量过大,并且代码没有经过长期运行不可靠。因此在RT-Thread操作系统系下移植FreeModbus协议栈到STM32单片机上面以实现远程上位机的RTU模式的Modbus通信功能。利用ENV工具来对串口进行配置(ENV工具进行配置可以对自己需要的板载资源包进行任意的组合,满足自己开发的各种需要),可以方便快速的移植从站协议到STM32单片机。FreeModbus协议中有4种寄存器,开关输入寄存器、线圈寄存器、保持寄存器和输入寄存器,Modbus所有的功能都是通过这四种不同的类型来实现。但是不同的用户数据缓冲区在结构上不一定是一样的,所以相应的数据处理方式就会各不相同,因此我们应该把各种数据类型对应的操作按照不同的数据缓冲区来进行不同操作。四种数据处理回调接函数如下:eMBMasterRegInputCB();输入寄存器回调接口,输入寄存器可读,但不可写;eMBMasterRegHoldingCB();保持寄存器回调接口,保持寄存器可读可写;eMBMasterRegCoilsCB();线圈回调接口,线圈寄存器可读可写;eMBMasterRegDiscreteCB();离散输入回调接口,可读但不可写。当有功能函数调用的时候,就可以通过不同的回调函数进行回读,然后进行数据处理和传送。往从机中写入数据函数具体如下所示,本课题使用中其中第一个参数为SLAVE_ADDR(在开始已经将这个定义为1,即从机地址为0x01。);第二个参数写寄存器的起始地址使用的是前面已经定义过的2(即写数据的起始地址为2);第三个参数写寄存器的总数使用的是MB_SEND_REG_NUM(已被定义为2,即向从机写入两个数据);第四个参数为写寄存器的数据(下面所示的函数表示的数据为data数组中的数据)。读数据函数与写类似。4.2.2Modbus协议在STM32单片机上的实现在主程序中先定义好从机地址、波特率、奇偶校验、停止位和端口号等。首先通过eMBSlaveInit来从机协议栈进行初始化操作,从机中涉及到的部分硬件就会跟着进行初始化,同时利用HAL_UART_MspDeInit()函数对串口进行初始化,由于ENV工具配置的生成的串口初始化函数只有串口1的,而本课题所使用的还有别的串口,因此需要自己编写其他在数据采集过程中所用到的串口的初始化。利用在线程轮询调用eMSlavePoll方式,来实现主站和从站的通信。使用一个线程的第一步就是先创建一个线程。通过创建线程在主函数中创建了两个动态线程。当调用一个线程时,系统就从动态堆内存中分配一个线程句柄,然后按照线程函数里面的参数中定义的栈的值来分配对应大小的空间。线程1:tid1=rt_thread_create("md_s_poll",mb_slave_poll,RT_NULL,512,MB_POLL_THREAD_PRIORITY,10);创建线程1,名称是md_s_poll,入口函数是mb_slave_poll,线程大小是512字节,优先级设置的10(优先级范围根据系统配置情况,数值越小那么优先级久会越高)。当线程执行成功以后就会返回一个句柄,就可以用来判断。创建的线程首先会是初始化,这个时候线程是不会进入到就绪线程的队列,当获得线程控制块后,我们可以在线程初始化完成以后利用rt_thread_startup(tid1)函数接口让该线程进入就绪态,随后按照设置的优先级等待。当新启动的线程优先级高于当前的线程那么就会先启动这个优先级更高的线程。启动这个线程后,在函数mb_slave_poll中进行轮询。线程2:tid2=rt_thread_create("md_s_send",send_slave_entry,RT_NULL,512,MB_SEND_THREAD_PRIORITY,10);创建线程2,名称是md_s_send,入口函数是send_slave_entry。“send_slave_entry”函数主要是实现从站发送数据,将温度和湿度的数值写到保持寄存器中,将LED灯的值写到离散寄存器中。一般来在线程的实际应用的时候会利用rt_thread_mdelay();函数让正在运行的线程延迟一定的时间,以便有足够的时间进行响应,直到设置的时间到了以后才会再次运行。主要程序参考附录二。4.3上位机监控计算机的实现4.3.1MCGS组态软件MCGS组态软件可以快速构造和生成上位机监控系统,实现上位机的功能。主要实现数据的采集、检测和处理,能面向多种操作系统平台。MCGS拥有强大的用户操作界面可以自行绘制所需要的操作界面,利用公式进行数据处理也很方便,同时还有生成报表、产生报警的功能,除此之外还具有网络通讯(支持Modbus、串口及TCP/IP协议)的功能以及可以支持各种不同硬件设备REF_Ref71899243\r\h[7]。当MCGS与现场的硬件设备连接以后,就可以便捷的开发出各种运用于现场数据采集及处理的监控系统。MCGS设数据的采集和输出的原理图如图4-1。图4-1MCGS原理图4.3.2Modbus协议的RTU模式在上位机的实现组态软件MCGS6.2中的ModbusRTU驱动程序是基于Modbus通信协议编制的。因此,在设计监控界面的时候,只需要设置与单片机程序中一样的波特率,校验方式,和下位机地址就可以将单片机寄存器中的数据采集到实时数据库中,或者将数据写入到单片机的寄存器中。最终MCGS组态软件就可以实现与下位机的通信。我们在MCGS编程的时候,当涉及到与硬件连接的时候,我们可以通过简单地模块化组态从而来设计所需要的监控系统REF_Ref71899248\r\h[8]。由于使用的ModbusRTU协议来进行串口通信,因此在使用MCGS软件进行设计的时候要先在设备窗口选用通用串口父设备,这样才能正确建立通信。然后设置相关的设备属性来建立连接,建立了连接以后就可以将外部设备的数据读取到MCGS的实时数据库。随后添加设备,在名称内部设置相应的地址变量和寄存器地址来读取想用的参数,通道连接如图4-2。图4-2通道连接随后在用户界面绘制简单的操作界面来实时显示所采集的温湿度数据,并且可以通过写线圈实现LED灯的控制。最终使ModbusRTU协议能够在上位监控计算机实现。上位监控计算机界面如图4-2。正常情况下LED灯为绿色,当温湿度超出一定的值时就可以使LED灯变成红色产生提醒的作用。图4-3上位监控计算机界面4.3.3Modbus协议的TCP模式在上位机的实现在需要远程监控或数据采集的场所,通过ModbusRTU的传统通信方式满足不了需求,这个时候用以太网来进行通信就成了最好的选择,由于在RT-Thread操作系统下进行FreeModbus协议栈中的ModbusTCP模式移植有些问题,所以最终采取了利用串口服务器来实现串口转网络。在MCGS组态软件实现TCP模式与RTU模式不同的首先在于,TCP模式的父设备选择的是“通用TCP/IP父设备“”,父设备选择网路类型的选择中选择TCP,选择客户端,其中的远程IP地址则根据远程设备的IP地址来确定。建立好连接后,实时数据库的配置与RTU模式里的配置方法一致。建立连接需要先将上位机的IP地址改为和串口服务器设备在同一个网段,使上位监控计算机的IP地址和远程设备在同一个网段,串口服务最初的IP地址为192.168.1.253,测试时直接用默认IP地址,因此将上位监控计算机的地址设置为192.168.1.112。设置完成后查询得到电脑的地址如图4-3图4-4上位监控计算机IP地址在配置串口服务器时选择TCP_SERVER模式,由于需要实现ModbusTCP协议到ModbusRTU协议的转换因此需要将“ModbusTCP转RTU”选项勾选。其余的配置(波特率,校验方式等)与程序里面给从站定义的保持一致。详细配置界面如图4-4所示,这样设置完成以后建立连接的时候就能实现数据的正确传输了,能利用ModbusPoll在设置成TCP/IP模式的时候采集到的单片机采集的数据,也可以利用MCGS显示单片机采集到的数据。最终就完成了ModbusTCP协议在上位机的实现。图4-5串口服务器的配置4.3.4ModbusTCP转RTU“TCP转RTU”这个选项是进行协议转换的所需要的,只有网络和串口数据符合ModbusTCP和RTU协议格式的时候才会对数据格式进行变换,否则就会把数据丢弃。当串口服务器选择的TCP_SERVER模式时,与其进行通信的的MCGS组态软件或者是ModbusPoll软件等都需要工作在TCPClient模式。最开始尝试通信的时候可以先利用ModbusPoll来模拟通信,正确连接线路后,利用串口服务器配置软件对串口服务器进行配置,将“TCP转RTU”打勾。设置完成以后就通过ModbusPoll来建立连接,将串口服务器的IP和端口号设置好就可以进行连接。连接完成以后就可以在ModbusPoll上看到相应的数据。4.4温湿度的采集本课题所用的AHT10采用的是I2C通信方法采集温湿度,使用I2C总线设备时要先利用I2C总线的设备的名称来得到设备句柄。通过查找设备函数rt_device_find(AHT10_I2C_BUS_NAME)来实现总线设备名称获取设备句柄,在主函数最上面将AHT10_I2C_BUS_NAME定义为"i2c4"(系统的I2C设备的名称一般都用i2c0,i2c1等,本次使用的名称是i2c4)。当得到I2C总线设备句柄后,就能利用rt_i2c_transfer(bus,&msgs,1)函数来进行数据传输,其中bus代表I2C总线设备句柄,其中&msgs为指向待传输的消息数组指针,1即消息数组元素个数,返回值为消息数组元素个数,因此可以利用rt_i2c_transfer(bus,&msgs,1)==1语句来进行判断数据传输是否有错误。利用I2C进行数据传输将读取温湿度的值后放入寄存器中,以便发送给上位监控计算机。当要到读取温度和湿度的数据时首先通过调用aht10_init(void)函数对AHT10进行初始化。通过写传感器寄存器和读传感器寄存器来将AHT10中的温度和湿度数据调用,然后将温度和湿度的数据进行转换,转换方法如下:*cur_humi=(temp[1]<<12|temp[2]<<4|(temp[3]&0xf0)>>4)*100.0/(1<<20);*cur_temp=((temp[3]&0xf)<<16|temp[4]<<8|temp[5])*200.0/(1<<20)-50;随后将转换好的温度和湿度的数值放到已经定义好的数组usSRegHoldBuf[S_REG_HOLDING_NREGS]中,分别将温度和湿度写到寄存器0和寄存器1中,这样上位机就可以通过ModbusRTU/TCP协议的读保持寄存器03功能来读取这两个寄存器的数值从而实现对温度和湿度的读取。在模拟上位机和下位机的Modbu通信的时候,可以利用Modbuspoll软件模拟主站可以观察到通信的完整数据格式如图4-4图4-6通信报文帧图中框选的温度和湿度的读取指令说明如表4-1所示表4-1ModbusRTU温湿度读取指令说明指令指令01说明设备地址读指令读寄存器地址读取数量CRC校验030000000A74EE图中温度和湿度的返回数据指令说明如表4-2所示表4-1ModbusRTU温湿度返回数据指令说明数据数据01说明设备地址读指令湿度数据温度数据CRC校验0302E70113120214数据数各个节点的温度和湿度都有两个字节,一共由四个字节组成。数据指令中的十六进制数据转换为十进制以后分别为743和275(即当前温度为27.5℃,湿度为74.3%。)由于还需进行网络通信,利用串口服务器将ModbusRTU转换为ModbusTCP协议以后数据帧格式也会发生变化。4.5温湿度数据在液晶屏上的显示液晶屏是通过SPI来进行通信,本课题编写了简单的液晶屏显示界面,以便温度和湿度的数据除了在监控中心能看到以外,数据采集现场也能直观的看到。我编写的是在第一排显示“Hello,JHUN”然后显示开发板型号以及传感器通信的方式,在屏幕的中线画一条直线,最后在最下方的Temp:和Humi:的后面分别显示当前环境的温度和湿度数据。液晶屏显示的画面如图4-5图4-5液晶屏显示结果本课题因为只是简单显示温湿度数据以便于在现场观测到,因此直接选用屏幕底色为白色,字体为黑色来显示,屏幕上的字符和线条显示的函数如图4-6所示。图4-6LCD字符显示函数由于显示温湿度需要保留一位小数使精度更高,因此要在液晶屏上分别在固定的位置显示整数部分和小数部分,具体函数如图4-7所示。其中第一个参数是液晶屏上显示位置的横坐标;第二个是液晶屏上显示位置的纵坐标(此处设置的显示温度的纵坐标为150,湿度的纵坐标为180,最大值为240);第三个是需要显示的数据;第四个参数为2和1(即整数部分显示两位,小数部分显示1位);第五个是现实的数据的像素(即字体大小)。这个显示位置必须得计算准确,否则显示在液晶屏上的数据就会使混乱的。图4-7LCD温湿度显示函数

5设备调试5.1保持寄存器的读写在电脑上安装了STLink驱动和CH340驱动后可以在设备管理器中看到COM4和COM6,如图5-1。这两个分别对应的开发板的串口1和串口2,其中串口1用于终端控制,串口2用作从机通信。图5-1所用串口硬件连接完成之后可以先利用ModbusPoll来模拟Modbus通信并观测采集到的的温度和湿度的数据,其中用来模拟主站的ModbusPoll软件的配置如图5-2所示,因为温度和湿度数据存储在保存寄存器中,所以选择03功能码(读保持寄存器)来读取温度和湿度的数值。图5-2ModbusPoll连接设置连接完成后ModbusPoll界面如图5-3可以看到第一个地址显示的湿度的数值,第二个地址显示的温度的数值。图5-3Modbus通信采集的数据图中湿度和温度都是三位数是因为在程序编写的时候我将数据乘了一个10,这是因为保持寄存器数组只能是整形,而我想最终在上位机显示的温度和湿度的数值有以为小数,这样温度和湿度的数值的精度就会更加的高。当能够运用Modbus协议进行简单的数据通信以后,利用MCGS组态软件绘制的控制界面能将温度和湿度的数据显示的更加清晰具体。如图5-4。温湿度数据可以显示成有以为小数的,是在文本框中使用实时数据库中的temperature/10,这样最终现实的数据就可以是想观测到的,当温度正常时LED等的颜色显示为绿色和现场嵌入式设备上LED等的颜色保持一致。当温度和湿度的值达到一定的值时,可以通过输入框写1或者0(也可直接使用按键)来使LED灯的颜色变为红色,这样现场设备上的LED灯也会变为红色,这样就可以起到报警的作用。图5-4上位监控计算机操作界面最终就可以顺利采集到环境的温湿度,并在远程的上位监控计算机中显示出来,同时可以在上位机上通过Modbus写线圈的指令来控制LED灯的亮灭或颜色变化来产生报警的效果,由于还采用了串口服务器,所以还能实现远距离通信。5.2线圈寄存器的读写潘多拉STM32L475开发板上的LED灯是一个RGB灯,通过三个IO口不同的值能过产生多种颜色,RGB_R为红色、RGB_G为绿色、RGB_B为蓝色。因此在Modbus通信的时候可以利用写多个线圈(15)来写入的不同值来控制灯产生不同的颜色变化。同样能利用ModbusPoll当做主站来模拟Modbus通信。如图5-5。图5-5ModbusPoll写线圈界面当写线圈所写入的值不同,开发板上的LED灯就可以产生不同的颜色变化,这样就可以利用这个LED灯来显示环境的状态。5.3ModbusTCP协议下的数据传输利用智嵌物联的串口服务器设置好从机的IP地址后,就可以通过串口服务器实现串口到网络的协议的转换,用网线将电脑和串口服务器建立以太网连接后,利用ModbusPoll选择TCP模式建立连接的设置如图5-6。这样就可以顺利采集到的单片机所采集的温度和湿度的数据。图5-6ModbusPollTCP/IP模式下的连接设置5.4研究成果5.4.1成果的实用性本课题所实现的监控系统是利用Modbus通信,而Modbus协议在工业现场中有着非常广的用途,并且还是个单主站多从站的协议,因此除了利用Modbus采集温湿度以外还可以同时监控工业现场中的其他需要检测的数据,比如智能电表的电压电流数据,或者是对液位、流量等进行监控。有很强的的实际运用性,再加上可以利用串口服务器将ModbusRTU协议转换成ModbusTCP协议实现远程无线通信,这样的实用性更强。在工业自动化现场中如果须同时监控多个设备,那么Modbus协议的优点就可以很好的体现出来。并且可以通过Modbus构成开放化、标准化的自动控制系统,使不同制造商的设备都可以建立连接,这样就能极大的降低成本,并且系统的可靠性也比较高。5.4.2改进及创新之处利用串口助手可以将串口协议转换成以太网协议,从而可以实现远距离通信,不会仅仅局限在现场。当利用网线通信的时候会受到距离的限制,因此还可以通过路由器实现无线通信,相对与使用传统的ModbusRTU协议建立通信,上位监控计算机不会仅仅局限在工业现场,可以将上位机放到监控中心,这样可以统一监测工业现场需要注意的数据或者是需要人为远程控制的设备。比如还可以利用Modbus协议通过对变频器的控制来实现对电机转速的控制,或者是通过对伺服驱动器的控制来实现对电机的控制。6结论6.1课题小结在完成课题的过程难免会遇到千奇百怪的困难,最开始会遇到环境搭建的问题,这是编写程序,移植协议栈的第一步,只有电脑环境搭建好了才能进行后面的步骤。在环境搭建过程遇到的问题有下面几种:(1)在安装Keil.STM32L4xx_DFP.2.0.0时报错;报错原因当前安装的是MDK514,版本较低。重新安装MDK后问题得到了解决,最终安装了MDK525。(2)在程序下载的时候产生“notargetconnected”的报错窗口;这是因为在OptionsforTarget‘rt-thread的设置中,在设置选择调试器setting中的connect默认为“Normal”导致的,将其改为“underReset”就可以解决这个问题。(3)在利用ModbusPoll调试的时候始终只有发的信号而没有接受的信号;这个是因为STM32L475潘多拉开发板上面串口2的RX与TX标注的与实际引脚的是相反的,导致硬件连接出了错误。交换RX和TX的连接以后,通信可以顺利进行。(4)ENV工具只能配置串口1和串口2;在board文件中的Kconfig中相应的位置添加以下程序。添加完成以后meanuconfig中就出现了串口3的选项如图6-1图6-1串口配置界面利用ENV工具配置完成以后还要在stm32l4xx_hal_msp.c中的voidHAL_UART_MspDeInit(UART_HandleTypeDef*huart)函数中添加串口3的初始化。环境搭建中MDK下载好了以后,ENV工具下载需要先下载git,除此之外还需要下载串口调试助手等来进行辅助调试,都下载完成以后就初步完成了环境的搭建,可以利用ENV工具移植Modbus协议栈。环境初步搭建完成后在运行RT-Thread的实例代码由于并不是放在主函数中,因此需要利用putty将sample程序进行运行,控制台设置的是串口1,因此当用多个串口时要避免冲突。当同时移植了主站和从站以后要将这二者的串口分别设置好(从站为串口2,主站为串口3),这样既可以实现数据的读取还可以利用单片机当主站进行写数据。在环境搭建和调试的过程也难免遇到许多问题,但在耐心调试的过程中,对遇到的问题一点点进行排查最终大多都能解决。环境搭建同样需要充足耐心,因为配置软件的过成中会遇到千奇百怪的问题,并且每个人遇到的问题都会不同,因此只能慢慢检查来解决问题。6.2存在的不足协议的转换时利用串口服务器最多只能连接四个设备,当实际需要监控的设备较多时,串口服务器就不够用了。但由于协议栈移植ModbusTCP模式的时候始终有问题,导致直接在stm32开发板上实现以太网模块较为困难,最终就只能利用串口服务器进行协议的转换。并且利用Modbus协议的数据通信实时性一般,轮询效率较低;数据的类型也很少,保护寄存器只能是整形的数,因此当监控对精度有要求的数据时,就还需要在上位机程序中进行数据处理,使最终显示的数据能够保留多位小数。并且由于Modbus是应答模式,从站不能主动发起请求智能是主站来进行请求,这就使现在很多设备的功能无法实现。特别是很多设备希望能产生反向通知能在某些数据变化的情况下发送信号,Modbus自适应差,需要合

温馨提示

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

评论

0/150

提交评论