版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于CC3220SF的物联模块硬件设计和物联软件实现案例目录TOC\o"1-3"\h\u7025基于CC3220SF的物联模块硬件设计和物联软件实现案例 1166461.1概述 1171441.2物联模块方案 128171.3Wi-Fi物联模块硬件设计 460111.1.1电源模块电路设计 465861.1.2时钟模块电路设计 5234651.1.3存储器模块电路设计 5155621.1.4电平转换模块电路设计 6250381.1.5天线模块电路设计 786981.4Wi-Fi物联模块软件设计 7313541.4.1物联软件设计方案 7291561.4.2物联功能监控程序设计 11258811.4.3物联API函数层程序设计 13108931.4.4网络数据接收层程序设计 14150161.4.5私有协议程序设计 15286471.4.6Modbus-TCP协议程序设计 23191101.5小结 281.1概述本章研究基于CC3220SF的通用Wi-Fi物联模块硬件和软件设计。为了实现物联模块的通用性,在硬件设计方面需要实现串行通信接口的电平自动匹配、宽输入电压等设计;在软件设计方面需要实现私有协议和Modbus-TCP协议的设计,并面向流量仪表设计物联API函数层解决物联模块的兼容适配问题,面向网络设备设计网络数据接收层实现多网络设备请求报文的统一管理。1.2物联模块方案Wi-Fi物联模块是物联系统的核心部分。物联模块在软件上负责私有协议、Modbus-TCP协议、物联API函数层的实现;在硬件上通过UART接口与数字流量仪表连接组成物联终端设备。Wi-Fi物联模块设计方案如图1.1所示,Wi-Fi物联模块采用CC3220SF芯片作为主控核心。该芯片是TI公司SimpleLink系列单芯片WLAN无线解决方案产品,依据物联模块需要实现的功能在芯片外围设计相应的硬件电路。图1.SEQ图3.\*ARABIC1Wi-Fi物联模块方案设计框图Fig1.1DesignblockdiagramofWi-FiIoTmodule(1)芯片外围电路物联模块的CC3220SF芯片外围电路包括按键模块、UART接口、电源模块、电平转换模块、复位模块、启动模式选择模块、天线模块、时钟模块、存储模块、JTAG接口。每个模块负责实现的具体功能如下:按键模块:按键模块用于出发外部输入中断。在按键中断服务程序中实现软件部分的Wi-Fi模块的AP与STA模式的切换功能。UART接口:物联模块与流量仪表的硬件通信接口,总共有5根线,分别是电源线(VCC)、地线(GND)、数据发送信号线(TX)、数据接收信号线(RX)、复位信号线(nRESET)。流量仪表通过电源线(VCC)、地线(GND)为物联模块提供电源。电源模块:流量仪表通过电源线(VCC)、地线(GND)为物联模块提供的电源一般5V和1.3V两种,而物联模块工作在1.85V,所以不可以直接供电,所以需要使用DC-DC转换器将输入的5V或1.3V电压转换为1.85V后为物联模块提供电源。电平转换模块:流量仪表主处理器UART接口工作电压等级常见的有5V和1.3V两种。物联模块中电源模块电路为CC3220SF提供1.85V的工作电压,所以CC3220SF的UART接口的引脚输出的高电平为1.85V。为了实现物联模块可以适配5V和1.3V两个电压等级,在物连模块中设计UART接口的电平转换电路。存储模块:CC3220SF正常工作时不仅需要使用芯片内部集成的存储,还需要在芯片外部扩展串行FLASH存储器。CC3220SF设备在外部串行闪存上维护一个专有文件系统,文件系统在外部串行闪存上存放MCU程序的二进制文件、网络处理器服务支持包文件、系统文件、配置文件、证书文件、Web页面文件和用户文件。CC3200SF芯片不支持使用JTAG或FALSH下载器直接对芯片内部的FALSH烧写程序,在程序烧写过程中直接将程序映像下载到片外串行FALSH中,程序下载完成后执行引导装载程序从片外串行闪存中的读取加密的程序映像,然后解密并将其写入片内FALSH。天线模块:负责实现Wi-Fi射频接收和发送信号的滤波处理和外接天线连接功能。JTAG、时钟模块、复位模块、启动模式选择模块属于CC3220SF最小系统组成部分,负责实现的功能依次是程序下载与调试、提供时钟信号、提供芯片复位信号、启动模式设置。(2)核心处理器介绍物联模块主控核心所使用的CC3220SF无线MCU内部集成两个独立的执行环境,分别是ARMCortex-M4微控制器、网络处理器(NWP)。ARMCortex-M4微控制器与网络处理器(NWP)之间通过芯片内部的SPI接口进行通信,物理结构上的分离使ARMCortex-M4微控制器专门用来执行应用程序任务,同时所有Wi-Fi网络任务处理都由网络处理器(NWP)完成,应用程序使用SimpleLink主机驱动程序调用网络处理器(NWP)中固化的协议栈API函数实现网络功能。这种分离的方式限制网络攻击对应用程序执行的影响,从而提高安全性,CC3220SF芯片内部结构如图1.2所示。CC3220SF的ARMCortex-M4微控制器提供了丰富的外设接口,包括SPI、UART、I2S、PWM、ADC等。MCU的主频为80MHz,内部集成256KB的RAM和1MB的执行闪存。网络处理器(NWP)内部集成基于802.11b/g/n标准的射频收发器、基带、MAC使CC3220SF具备了Wi-Fi网络连接与数据收发功能。NWP的ROM中固化了用于网络功能实现的协议栈,其中包括HTTPs协议、TCP/IP协议、TLS/SSL协议等,其中TCP/IP协议最多可同时支持16个TCP或UDP套接字,TCP传输速度可达13Mbps,UDP传输速度可达16Mbps。图1.SEQ图3.\*ARABIC2CC3220SF无线MCU内部组成结构图Fig1.2InternalstructurediagramofCC3220SFwirelessMCU1.3Wi-Fi物联模块硬件设计1.1.1电源模块电路设计CC3220SF的工作电压输入分为两种模式,分别是2.1V~1.6V的宽电压供电模式和1.85V的稳压器供电模式。当采用宽电压输入模式时芯片内部的DC-DC进入工作状态,由于DC-DC转换器的开关噪声比较大,对Wi-Fi物联模块的射频性能有很大影响;当采用1.85V稳压器供电模式时,芯片内部的DC-DC转换器不工作,减少了开关噪声对射频信号的影响,所以本设计中选用1.85V稳压器供电模式。本设计使用TI公司生产的TPS62160芯片。该芯片是一款DC-DC转换器,输入电压范围是3~17V,输出电压为0.9~6V范围内可调;静态工作电流典型值为17uA,最大持续输出电流为1A,可以满足CC3220SF正常工作时250mA左右的工作电流需求;支持2.00mm*2.0mm的8引脚小外形的无引线(WSON)封装,非常适合应用在小型化的PCB板设计中,比如物联模块的设计。电源模块的电路原理图如图1.3所示。图1.SEQ图3.\*ARABIC3物联模块电源电路原理图Fig1.3SchematicdiagramofpowersupplycircuitofIoTmoduleTPS62160芯片输出电压通过调节外部电压反馈电阻的比值实现。对于本设计中的电阻R2、R6,为了获得最高的精度和电源的稳定性,R6需要使用较低的电阻值,根据数据手册的要求R6不应超过400k。输出电压与电阻的关系为:(3-1)当R2取120K,R6取91K时,1.855V,可以满足CC3220SF的正常工作电压需求。1.1.2时钟模块电路设计CC3220SF正常工作时需要提供两种独立的时钟信号,分别是32.768KHz的慢速时钟信号和40MHz的快速时钟信号,其中慢速时钟为RTC模块提供时钟信号,快速时钟为Cortex-M4处理器和NWP提供时钟信号。芯片内部集成振荡器电路,因此可以使用较便宜的晶体来实现时钟电路。同时也支持直接使用外部有源时钟电路提供时钟电路。本设计采用外部晶体配合内部振荡器电路的方法为CC3220SF提供时钟信号。时钟电路如图1.4所示,CC3220SF的数据手册中规定慢时钟频率的精度必须满足误差在±150ppm以内,快速时钟频率的精度必须满足误差在±25ppm以内的要求。(a)高速时钟电路(b)慢速时钟电路(a)Highspeedclockcircuit(b)Slowspeedclockcircuit图1.SEQ图3.\*ARABIC4物联模块时钟电路原理图Fig1.4SchematicdiagramofclockcircuitofIoTmodule1.1.3存储器模块电路设计如图1.5所示,外部存储器与CC3220SF通过SPI接口相连。存储器电路选用MXIC公司生产的型号为MX25R3235F的FLASH存储器作为CC3220SF的外部扩展存储器。存储器芯片的工作电压范围是1.65V~1.6V,能够在电源模块输出的1.85V电压下稳定工作;存储器的容量是32Mbit,能够满足物联模块的外部存储容量需求;存储器的擦除写入次数大于10万次,写入的数据可以保持20年不丢失。图1.SEQ图3.\*ARABIC5物联模块存储器电路原理图Fig1.5SchematicdiagramofmemorycircuitofIoTmodule1.1.4电平转换模块电路设计如图1.7所示,电平转换电路使用TI公司生产的四通道电平转换芯片TXB0104实现。TXB0104支持的最高传输速度为20Mbps,而CC3220SF的UART接口支持的最高波特率为3Mbps,所以TXB0104可以满足UART接口在传输速度上的要求;TXB0104芯片支持双向传输,不需要进行的传输方向控制设置,方便实现数据UART接口的全双工传输模式;TXB0104芯片工作电压的范围是,的工作电压范围是,所以端的接口用于连接物联模块的UART接口,端的接口连接流量仪表的UART接口。物联模块的UART接口如图1.6所示,UART接口使用两根信号线进行数据通信分别是发送信号线(Tx)、接收信号线(Rx),其次UART接口中增加复位信号线(nREST)用于流量仪表复位物联模块,物联接口的每根信号线都需要进行电平转换设计。图1.SEQ图3.\*ARABIC6物联接口电路原理图Fig1.6SchematicdiagramofIoTinterfacecircuit图1.SEQ图3.\*ARABIC7物联接口电平转换电路原理图Fig1.7SchematicdiagramofIoTinterfacelevelconversioncircuit1.1.5天线模块电路设计物联模块的天线设计有两种方式,分别是板载天线、外接天线。由于物联模块与流量仪表通过UART接口连接,大多数情况下和流量仪表PCB板一起装进仪表壳体中,金属的仪表壳体对射频信号具有屏蔽作用,所以不适合采用板载天线方案,使用外接天线的方式可以避免射频信号被屏蔽,同时仪表安装人员可以根据实际情况选择信号比较好的地方放置天线。CC3220SF芯片内部集成WIFI的射频信号收发模块,模块通过“RF_BG”引脚接收和发送射频信号。射频信号的发送接收过程中都会夹杂电磁波干扰信号,芯片发出的信号也可能存在其他频率的信号,2.4GWi-Fi的频率范围在2.4Ghz~2.5GHz之间,标准带宽为20MHz,扩展带宽为40MHz,因此需要在“RF_BG”引脚添加一个带通滤波器。由于不同的芯片射频发射和接收机的内部设计不同,频谱上会产生不同的杂散,所以需要一些特殊频段的信号抑制,本设计中采用的是TDK公司生产的DEA202450BT-1294C1-H滤波器芯片,用以抑制二次和三次谐波和带外杂散,滤波器电路如图1.8所示,外接的吸盘天线通过IPEX/IPX接头连接。图1.SEQ图3.\*ARABIC8物联模块天线电路原理图Fig1.8SchematicdiagramofantennacircuitofIoTmodule1.4Wi-Fi物联模块软件设计1.4.1物联软件设计方案为了实现物联模块功能的丰富性和可移植性将物联模块软件设计分为两大部分,分别是软件接口部分和物联协议部分。软件接口部分包括物联API函数层、网络数据接收层;物联协议部分包括私有协议、Modbus-TCP协议。物联API函数层用于对接流量仪表的物联API函数库以解决物联模块的在流量仪表上的适配问题;私有协议、Modbus-TCP协议用于解决流量仪表与现场设备、调试设备以及服务器设备的数据交互问题并提供丰富的功能。软件框架如图1.9所示,图中展示了物联模块的软件框架以及物联模块的软件模块与流量仪表以及网络设备之间数据交互关系。物联模块采用统一的网络数据接收和独立的网络数据转发方式实现与网络设备之间的数据交互。物联模块与流量仪表之间通过物联API函数层和物联API函数库实现数据交互。图1.SEQ图3.\*ARABIC9物联模块软件框架Fig1.9SoftwareframeworkofIoTmodule如图1.9所示,物联模块软件中每一部分的功能如下:(1)私有协议该协议用于实现物联终端与调试设备以及服务器设备的数据交互的功能。私有协议的组成结构如图1.10所示,私有协议中总共包含了四大类功能,分别是网络连接与管理模块、网络报文解析程序、本地报文解析模块、数据转发模块。每一大类功能中包括若干的子功能。网络连接与管理模块中包括调试设备扫描程序、工作模式切换程序、物联模块参数配置程序。调试设备扫描程序的功能是实现物联模块自动连接调试设备。该程序的实现过程在2.4.3小节中介绍,而Timer2中断服务程序用于定时发送应用层连接请求。工作模式切换程序的功能是实现物联模块调试模式与物联模式之间的切换。调试模式下,物联模块与调试设备连接;物联模式下,物联模块与服务器设备连接。物联模块参数配置程序的功能是将Wi-Fi模块配置从STA模式切换为AP模式,调试设备连接Wi-Fi模块并建立TCP连接,调试设备向物联模块传输配置参数。按键中断服务程序用于实现Wi-Fi模块从STA模式切换到AP模式。网络报文解析程序的功能是实现私有协议通信报文帧的解析。通信报文中包含透传数据帧,对于这种通信报文帧网络报文解析函数提取透传数据然后转发至物联模块。本地报文解析模块包含指令帧解析程序和信息帧解析程序。指令帧与信息帧由流量仪表发至物联模块用于完成流量仪表物联功能的初始化。指令帧由指令解析函数解析;信息帧由信息帧解析函数解析。数据转发模块包含日志数据转发程序和实时数据缓存与转发程序。日志数据转发函数的功能是将流量仪表的日志数据转发至调试设备或服务器设备;实时数据缓存与转发函数的功能是将流量仪表的实时数据先在物联模块中进行缓存,达到缓存深度后向调试设备或服务器设备转发。Timer0中断服务程序用于发送物联模块请求流量仪表日式数据的功能码;Timer1中断服务程序用于发送物联模块请求流量仪表实时数据的功能码。Timer0和Timer1的定时频率由调试设备或服务器设备通过网络指令帧控制。因为采用了Wi-Fi通信技术,为实时数据网络转发提供了高速的物理通道,可实现高速的数据转发图1.SEQ图3.\*ARABIC10私有协议软件框架Fig1.10Privateprotocolsoftwareframework(2)Modbus-TCP协议该协议用于实现物联终端与工业现场支持Modbus-TCP协议设备的通信功能。协议中实现流量仪表日志数据读取功能。物联模块中Modbus-TCP协议以FreeModbus协议栈为基础进行开发,在协议栈的基础之上设计了寄存器初始化程序、协议栈初始化程序、设备连接程序、寄存器数据读取程序。Modbus-TCP协议软件框架如图1.11所示。寄存器初始化程序实现的功能是为流量仪表日志数据分配Modbus寄存器地址。协议栈初始化程序实现的功能是为FreeModbus协议栈提供基于TCP通信数据交互函数并使能协议栈。设备连接程序实现的功能是处理Modbus-TCP主设备连接请求,建立物联模块与Modbus-TCP主设备的TCP连接。寄存器数据读取程序实现的功能是Modbus寄存器值的读取。寄存器值得读取过程中使用定时器Timer3进行超时检测。图1.SEQ图3.\*ARABIC11Modbus-TCP协议软件框架Fig1.11ModbusTCPprotocolsoftwareframework(3)网络数据接收层网络数据接收层负责接收网络设备发送的数据并调用对应的物联协议中的功能程序。网络数据接收层接收的数据包括Modbus-TCP主设备的TCP连接请求、Modbus主设备请求报文、私有协议网络报文,调用的程序是Modbus-TCP设备连接程序、FreeModbus协议栈、私有协议网络报文解析程序。网络数据接收层软件框架如图1.12所示。图1.SEQ图3.\*ARABIC12网络数据接收层软件框架Fig1.12Softwareframeworkofnetworkdatareceivinglayer(4)物联API函数层物联API函数层包括串口数据发送程序和串口数据接收程序。串口数发送程序使用查询的方式发送数据,串口数据接收程序使用中断方式接收程序。串口数据发程序发送的数据包括功能码、透传数据、日志/实时数据的标志位。串口数据接收程序负责接收所有通过串口发送至物联模块的数据。物联API函数层软件框架如图1.13所示。图1.SEQ图3.\*ARABIC13物联API函数层软件框架Fig1.13IoTAPIfunctionlayersoftwareframework1.4.2物联功能监控程序设计物联功能监控程序负责各功能模块调用与执行逻辑设计以实现流量仪表物联系统所要求的物联功能。物联功能监控程序流程如图1.14所示,具体的工作流程如下:(1)数据初始化:初始化用于控制程序状态转换的标志位、套接字描述符、用于指向动态内存空间的指针变量、指令接收缓存数组、Modbus响应数据缓存数组。(2)读取物联模块配置文件:读出配置文件中的配置信息,包括私有协议工作模式、Wi-Fi工作模式(AP/STA)、串口波特率、路由器SSID与密码、路由器网关地址、服务器设备IP地址(没有绑定之前默认为55)。(3)判断是否需要进行物联模块参数配置:如果读取物联模块配置文件中Wi-Fi模块的工作模式为AP模式则将Wi-Fi模块配置为AP工作模式。在物联模块参数配置程序中完成串口波特率、路由器SSID与密码的配置,并写入配置文件。参数配置完成后物联模块参数配置程序将Wi-Fi模块的工作模式设置为STA模式。(4)芯片外设初始化:初始化芯片定时器、UART接口。物联模块软件系统中用到了四个定时器,一个UART接口。初始配置将四个定时器都设置为定时间为1秒,但不开启定时器;将UART接口配置为中断方式接收,查询方式发送,波特率为配置文件的写入的波特率值。(5)私有协议初始化:私有协议的初始化工作在物联API函数层中的串口接收中断服务程序中完成,包括流量仪表ID信息、日志/实时数据的属性信息、仪表数据存储模式、私有协议物联功能设置。(4)连接路由器:使用配置文件中写入的路由器SSID与密码,连接指定的路由器,接入到指定局域网中;连接成功后会获取路由器的网关地址并写入配置文件。(5)Modbus-TCP协议初始化:完成了Modbus-TCP寄存器初始化、FreeModbus协议栈初始化两部分工作。(7)私有协议工作模式设置:设置私有协议工作模式为配置文件中记录的工作模式。(8)物联功能执行:当工作模式设置完成后就进入了正常工作状态,物联功能监控程序中调用网络数据接收层程序处理通过网络发送至物联模块的报文并执行对应的操作。网络数据接收层负责实现Modbus协议发送的读寄存器请求、Modbus主设备连接请求、私有协议报文解析与对应功能执行。(9)物联工作模式切换:当网络数据接收层收到物联模块工作模式切换请求时(调试模式/物联模式下发送的请求),物联模块会关闭与当前工作模式中建立的TCP套接字和UDP套接字然后重新进入新的工作模式并重新建立新的TCP套接字和UDP套接字,然后物联功能监控程序重新回到网络数据接收与处理子模块处理通过网络发送至物联模块的指令请求并执行对应的操作。(10)Wi-Fi模块工作模式切换:当按键按下触发按键中断进入按键中断服务程序后,在程序中将配置文件中的Wi-Fi模块工作模式设置为AP模式,并置位Wi-Fi模块模式切换标志位。主监控程序开始重新运行,进行物联模块参数配置。图1.SEQ图3.\*ARABIC14物联功能监控程序流程图Fig1.14FlowchartofIoTfunctionmonitoringprogram1.4.3物联API函数层程序设计物联API函数层用于对接物联API函数库,实现物联模块与流量仪表之间的串口数据交互。物联API函数层包括两个程序,分别是串口数据发送程序和串口数据接收程序。串口数据发送程序只是简单的写串口发送寄存器功能,本节主要进行串口数据接收程序设计,该程序为CC3220SF的串口接收中断服务程序。物联模块的串口数据接收程序采用模块化的方法进行程序设计。由于串口中需要接收不同种类的数据,为了实现不同数据使用单独的接收方案以提高接收效率,本文中将每种接收方案对应的标志位的值称为接收通道。程序中使用switch-case方式编程以实现通道的选择功能。接收中断服务程序流程图如图1.15所示,串口接收通道总共分为7个通道,分别是指令接收、日志数据属性信息接收、实时数据属性信息接收、仪表ID信息接收、Modbus响应数据接收、实时数据接收、日志数据接收,对应的接收通道的值为0x01~0x07。图1.SEQ图3.\*ARABIC15物联模块串口接收中断服务程序流程图Fig1.15FlowchartofserialportreceivinginterruptserviceprogramofIoTmodule1.4.4网络数据接收层程序设计网络数据接收层程序负责接收网络设备发送至物联模块的报文并检测报文发送的设备的类型对应的物联协议功能程序。网络数据接收层的流程图如图1.16所示,网络数据接收层需要接收并处理Modelbus-TCP协议和私有协议两种协议的报文。为了满足物联模块响应请求的实时性要求,需要循环检测已经建立TCP连接的套接字的文件描述符以判断缓冲区是否有数据到来。CC3220SF网络处理器提供的TCP/IP协议栈中支持多路复用的查询方式检测文件描述符对应的缓冲区是否有数据到来,该功能通过调用TCP/IP协议栈中“Sl_Select()”函数实现。图1.SEQ图3.\*ARABIC16网络数据接收与处理程序流程图Fig1.16Flowchartofnetworkdatareceivingandprocessingprogram1.4.5私有协议程序设计(1)私有协议初始化私有协议实现物联功能之前需要流量仪表提供一些必要的信息,包括流量仪表ID信息、日志/实时数据的属性信息、仪表数据存储模式、私有协议物联功能设置。私有协议的初始化流程如图1.17所示,物联模块主动发送开始初始化的请求,当流量仪表收到请求并回复应答指令后进入私有协议的初始化状态。流量仪表向物联模块发送指令帧和信息帧,物联模块接收并解析完毕后返回0x01的确认标志,流量仪表收到确认标志后继续完成后续的初始化工作。物联模块收到流量仪表发送的初始化已完成指令帧后更新物联模块中的初始化标志位,私有协议初始化完成。图1.SEQ图3.\*ARABIC17私有协议初始化流程图Fig1.17FlowchartofPrivateprotocolinitialization(2)指令帧与信息帧接收与解析流量仪表发送的指令帧和信息帧由物联API函数层接收和校验。指令帧和信息帧解析由私有协议的本地解析器完成。本地解析器中包含指令帧解析函数、信息帧解析函数。日志/实时数据的初始化的目的是将流量仪表中设置的日志/实时数据的属性信息转发至物联模块中,物联模块接收并解析属性信息,进行动态内存分配用于存储日志属性信息,同时后续的日志数据与实时数据的串口接收做好准备工作。其中日志类、实时类数据的初始化的操作流程相同。日志类数据初始化过程中指令帧如图1.18所示,该指令帧的作用是传递日志类信息属性信息占用存储空间大小的信息,为下一步的日志信息帧的接收与存储提前分配必要的内存空间。日志指令帧通过物联模块的串口接收通道接收,收到后调用日志指令帧解析函数。在该函数中第一步完成对指令帧的拆分工作,提取出指令中的数据数据内容部分获取日志类数据的个数和属性信息的存储空间需求;第二步是动态分配三个内存空间,分别是日志类属性信息存储空间(char型)、日志类数据偏移地址存储空间(int型)、日志类数据字节长度存储空间(int型),分别使用指针“LogFrame”、“LogOffSet”、“LogDataLen”指向三个内存空间的起始地址,并将三个内存空间都初始化为0。图1.SEQ图3.\*ARABIC18日志类数据指令帧解析流程图Fig1.18Flowchartofinstructionframeparsingforlogdata日志指令帧接收并解析完毕后返回0x01确认标志,流量仪表收到确认标志后开始发送日志信息帧。信息帧为不包含帧头、长度、帧尾,只包括每一个日志数据的属性标识信息。每一个日志数据标识信息之间使用“[”和“]”隔开。日志数据信息帧的接收与解析过程如图1.19所示,日志信息帧通过物联模块的串口接收通道接收,将收到的日志数据属性信息存入“LogFrame”指针指向的内存空间后调用指日志信息帧解析函数。该函数第一步是提取出每一个日志数据属性信息标识的字节数然后进行累加得到所有日志数据的总字节数,然后分配用于存储日志数据的内存空间,使用指针“LogData”指向内存空间首地址并将内存空间初始化为0;第二步是比对每一个日志数据的标志位,找出标志位为“Y”的日志数据,然后计算将该日志数据在“LogData”指向内存空间中相对与首地址的偏移量,向“LogOffSet”指针指向的内存空间首地址开始写入日志数据的偏移量,即该内存空间中只存储需要进行转发的日志数据偏移量,最后采用同样的方法提取出将每一个标志位为“Y”的日志数据的字节数,向“LogDataLen”指针指向的内存空间首地址开始写入日志数据的字节数,即该内存空间中至存储需要进行转发的日志数据字节数,即该内存空间中只存储需要进行转发的日志数据字节数。图1.SEQ图3.\*ARABIC19日志数据信息帧接收与解析流程图Fig1.19Flowchartofreceivingandparsinglogdatainformationframe(3)日志数据接收与转发日志数据的接收与转发实现的功能是物联模块获取流量仪表的日志数据然后转发至网络设备。日志数据的接收与转发的流程如图1.20所示,具体流程为:(a)网络设备发送日志上传网络指令至物联模块。(b)物联模块接收并解析网络命令,转换为日志数据请求的功能码发送至流量仪表。(c)流量仪表收到功能码后执行日志数据转发功能,发送日志数据至物联模块。(d)物联模块接收日志数据后将其转发至网络设备。图1.SEQ图3.\*ARABIC20日志数据的接收与转发的流程图Fig1.20Flowchartofreceivingandforwardinglogdata物联模块中使用网络数据接收与处理程序接收与解析网络指令并转换为功能码发送至流量仪表;使用仪表数据接收与处理程序接收流量仪表发送至物联模块的日志数据并将其转发至调试设备/服务器。网络数据接收与处理程序中使用三个子程序接收与处理日志数据上传网络指令,分别是日志标志位刷新、日志上传周期设置、关闭日志数据上传,子程序的流程图如图1.21所示。第一部分是日志数据标志位的刷新,即刷新“LogFrame”指针指向的内存空间中存储的标志位和流量仪表中日志数据属性信息中的标志位。这个过程要求物联模块中的标志位与流量仪表中的标志位必须保持一致。网络数据接收与处理程序接收到标志位刷新请求后提取出请求指令中的标志位部分,然后开始刷新“LogFrame”指针指向的内存空间中存储的标志位并重新计算“LogOffSet”指针指向的内存空间中的偏移地址和“LogDataLen”指针指向的内存空间中的日志数据字节数,最后将日志数据标志位信息转发至流量仪表,完成流量仪表中的标志位刷新工作。第二部分是日志数据开启转发请求。网络数据接收与处理程序接收到日志数据转发请求后提取出请求指令中的转发周期信息,然后关闭用于物联数据转发的定时器,按照提取出的转发周期重新初始化Timer0,最后退出网络数据接收与处理程序。Timer0用于控制日志类数据转发周期控制,Timer1用于控制实时类数据转发周期控制,且Timer0和Timer1不可同时开启,即日志数据和实时数据的转发功能为互斥关系。第三部分是日志数据关闭转发请求。网络数据接收与处理程序接收到日志数据关闭转发请求后直接关闭Timer0定时器,然后退出网络数据接收与处理程序。图1.SEQ图3.\*ARABIC21日志数据网络指令处理流程图Fig1.21FlowchartoflogdatanetworkforwardingprogramTimer0中断服务程序的执行过程如图1.22所示,进入定时器中断服务程序后,首先将串口接收中断服务程序中的接收通道切换到日志数据接收通道,然后向流量仪表发送日志数据上传请求,发送完毕后退出定时器中断服务程序。串口接收中断服务程序中日志数据接收通道中的程序执行过程如图1.23所示,日志数据接收过程中会检验每一帧日志数据的帧头、长度、帧尾是否正确,如果出现错误则丢弃该帧数据准备接收下一帧数据。在日志数据帧校验正确的情况下,接收的日志数据会按照LogOffSet”指针指向的内存空间中存储的偏移地址向“LogData”指向内存空间中写入日志数据,即“LogData”指向内存空间中每一个日志数据都有特定的存储位置。“LogData”指向内存空间中日志数据存放方式如图1.24所示,需要转发的日志数据按照指定的位置存放,尚未使用的存储空间保持之前的值且不会被其它日志数据覆盖。LogDataLen”指针指向的内存空间中存储的日志数据的字节数的作用是保证写入“LogData”指向内存空间中的日志数据的字节数不超过约定的存储空间大小,防止出现数据的覆盖。图1.SEQ图3.\*ARABIC22Timer0中断服务程序流程图Fig1.22FlowchartofTmer0interruptserviceprogram图1.SEQ图3.\*ARABIC23日志数据接收程序流程图Fig1.23FlowchartofLogdatareceivingprogram图1.SEQ图3.\*ARABIC24日志数据存储空间示意图Fig1.24Diagrammaticsketchoflogdatastoragespace(4)实时类数据接收与转发实时数据的转发与日志数据的转发规则基本相同,区别在于物联模块中设置实时数据的FIFO缓冲区,提高网络转发效率。如图1.25所示,实时数据网络转发功能的处理流程中增加了缓冲区深度设置的功能。图1.SEQ图3.\*ARABIC25实时数据网络指令处理流程图Fig1.25Flowchartofrealtimedatanetworkforwardingprogram图1.26中所设置的缓冲区的深度的含义是指实时数据接收次数。当数据接收次数到达设置的缓冲区深度时才执行实时数据的网络转发操作。串口接收中断服务程序中实时数据接收通道中的程序执行过程如图1.26所示,实时数据接收部分与日志数据的接收过程相同,实时数据网络转发部分增加了缓存深度的判断,只用当缓存深度达到设定的之后才执行实时数据网络转发功能。物联模块向流量仪表请求实时数据的频率控制由Timer1控制,Timer1定时器中断服务程序执行过程与Timer0定时器中断服务程序执行流程基本相同,不同点在于Timer1中断服务程序中将物联API函数层中的串口数据接收程序的接收通道切换到实时数据接收通道。图1.SEQ图3.\*ARABIC26实时数据接收程序流程图Fig1.26Flowchartofrealtimedatareceivingprogram1.4.6Modbus-TCP协议程序设计(1)Modbus-TCP寄存器初始化Modbus-TCP寄存器初始化的主要功能是将流量仪表中日志数据所占用的内存空间定义为Modbus-TCP协议中的输入寄存器并为每个日志数据内存空间分配寄存器地址。Modbus-TCP协议中规定输入寄存器可读但不可写,符合日志类数据的读写特点。Modbus-TCP寄存器初始化的流程图如图1.27所示,具体流程为:(a)动态分配用于存储寄存器地址的内存空间,动态分配的内存空间总长度为日志数据的总个数乘以int类型数据所占用的字节数。(b)分配寄存器地址并将地址依次存入MbLogRegAddr指针指向的内存空间。(c)动态分配用于存储每个寄存器数值长度的内存空间,动态分配的内存空间总长度为日志数据的总个数乘以int类型数据所占用的字节数。(d)计算每一个日志数据的数据的长度,即所占用的字节数并将数值依次写入MbLogRegOffset指针指向的内存空间。Modbus-TCP协议中读取寄存器的值需要两个参数,分别是寄存器地址和寄存器读取长度。在读取寄存器数据是会校验地址是否匹配、读取长度是否不超过初始化过程中计算的长度。Modbus-TCP协议中输入寄存器的地址从30001开始,本设计中从30001依次为每一个日志数据分配寄存器地址。图1.SEQ图3.\*ARABIC27Modbus寄存器初始化流程图Fig1.27FlowchartofModbusregisterinitialization(2)FreeModbus协议栈初始化FreeModbus协议栈初始化的功能是为FreeModbus协议栈提供基于TCP/IP协议的数据传输服务并使能FreeModbus协议栈。FreeModbus协议栈初始化过程如图1.28所示,具体流程为:(a)在物联模块中创建服务器端套接字,然后进行套接字的绑定和监听操作,其中端口号为固定的502端口。(b)将FreeModbus协议栈中系统事件状态标志位的值修改为无事件到来状态,使FreeModbus协议栈处于初始状态。(c)将FreeModbus协议栈中用于数据传输服务的函数指针指向使用TCP通信方式的函数,并将FreeModbus协议栈的Modbus地址模式和工作模式修改为Modbus-TCP模式,此时FreeModbus协议栈任处于未使能状态。(d)调用FreeModbus协议栈中“pvMBFrameStartCur()”函数将FreeModbus协议栈状态标志全局变量的值“eMBState”赋值为“STATE_ENABLED”,此时FreeModbus协议栈完成使能。图1.SEQ图3.\*ARABIC28Modbus-TCP协议初始化程序流程图Fig1.28FlowchartofModbusTCPprotocolinitializationprogram(3)Modbus-TCP主/从设备TCP连接Modbus-TCP主/从设备TCP连接程序在完成FreeModbus协议栈初始化之后的执行,用于实现Modbus-TCP主设备连接物联模块(从设备),建立数据交互的网络通道。在FreeModbus协议栈初始化已经实现了服务器调套接字的创建、绑定、监听功能,Modbus-TCP主/从设备TCP连接程序使用允许连接函数“sl_Accept()”完成主/从设备的TCP连接的建立。Modbus-TCP主/从设备TCP连接过程如图1.29所示,该部分是图1.16中网络数据接收层程序的Modbus连接请求子程序,具体流程为:(a)检测到Modbus-TCP服务器端套接字的缓冲区中有数据可读时代表主设备向从设备发送TCP连接去请求,然后调用允许连接函数“sl_Accept()”建立主/从设备间的TCP连接。(b)建立连接后检查当前连接数是否达到最大值,如果达到最大值则关闭当
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026江苏苏州高新区实验初级中学招聘1人笔试参考题库及答案解析
- 2026湖北荆州市石首市校园招聘卫生专业技术人员9人考试备考题库及答案解析
- 2026江苏苏州市吴江区教育系统招聘事业编制教师(第二批)236人笔试模拟试题及答案解析
- 2026年福建泉州晋江市第五实验小学语文教师招聘笔试参考题库及答案解析
- 2026年春季驻马店新蔡县引进教育、医疗卫生类高层次及其他专业技术人才59名考试参考题库及答案解析
- 2026四川成都中医药大学附属医院德阳医院春季校园招聘工作人员考试备考试题及答案解析
- 2026年中国邮政集团有限公司吉林省分公司校园招聘考试模拟试题及答案解析
- 2026年吉林联通校园招聘考试模拟试题及答案解析
- 第十课 小小玩具店教学设计小学综合实践活动二年级下册人民版
- 2026浙江中外运有限公司温州分公司 聘报关员岗位1人笔试参考题库及答案解析
- 山西省吕梁市2025-2026学年高三第二次模拟调研测试生物+答案
- 2026山东青岛海上综合试验场有限公司招聘38人备考题库含完整答案详解(全优)
- 大型赛事活动安保服务方案投标文件(技术标)
- 施工工地员工考核管理制度(3篇)
- 医院耗材监督考核制度
- 2025特变电工校园招聘200人笔试历年常考点试题专练附带答案详解2套试卷
- 2026年山东潍坊市高三一模高考生物模拟试卷(含答案详解)
- 玉林介绍教学课件
- 中建塔式起重机拆卸专项施工方案
- 2026年东莞市厚街控股集团有限公司招聘14名工作人员备考题库含答案详解
- 《DLT 2976-2025柔性低压直流互联装置技术规范》专题研究报告
评论
0/150
提交评论