来源:网络转载更新时间:2021-07-06 14:52:41点击次数:1687次
嵌入式称重物联网的开发,包括硬件设计和软件设计两个过程。近年来,随着微控制器MCU)内部Flash存储器可靠性的提高以及擦除/写入方法的变化,内部RAM及Flash存储器容量的增大,以及外部模块内置化程度的提高,设计复杂性、设计规模及开发手段已经发生了根本变期化,使得硬件设计变得越来越复杂,软件的份量也急剧增加。但是,我们的开发方法却显得比较落后。如在硬件设计时,开发人员缺乏统一的设计规范,往往是凭个人工作经验和习惯的积累进行设计,当开发完一个嵌入式应用系统再进行下一个应用系统开发时,硬件电路原理图往往需要从零开始,重新绘制,造成时间和精力的浪费,而且还容易出错;在软件开发时,开发人员缺乏软件工程的思想支撑,缺少标准化、文档化的管理,软件的通用性、可移植性和可复用性较差,给开发人员之间的交流及日后系统的维护带来很大的困难。以上问题导致的结果是系统开发周期长,效率低。基于构件重用技术的开发思想,在一定程度上能解决这些问题。
一、构件重用技术
(一)构件与构件模型
构件是系统中实际存在的可更换部分,它实现特定的功能,符合一套接口标准并实现一组接口。构件代表系统中的一部分物理实施,包括软件代码(源代码、二进制代码或可执行代码)或其等价物(如脚本或命令文件)。
构件模型(model)是对构件本质特征的抽象描述。目前,国际上已经形成了许多构件模型,这些模型的目标和用途各不相同。国内许多学者在构件模型的研究方面做了不少工作,取得了一定成绩,其中较为突出的是北京大学杨芙清院士等人提出的“青鸟构件模型”,如图1所示,该模型充分吸收了国内外构件模型的优点,并与它们相容,它由外部接口(interface)与内部结构两部分组成。
(二)构件的获取
可重用信息具有领域特性,领域具有内聚性
(cohesion)和稳定性(stability)。领域是一组具有相似或相近软件需求的应用系统所覆盖的功能区域,领域工程(domainengineering)是一组相似或相近系统的应用工程(applicationengineering)建立基本能力和必备基础的过程。领域工程过程可划分为领域分析、领域设计和领域实现等多个活动,其中的活动与结果,如图2所示。
在建立基于构件的软件开发(CBSD,Compo-nent-BasedSoftwareDevelopmen)t中,构件获取可以有多种不同形式,如:
(1)从现有构件中获得符合要求的构件;
(2)通过遗留工程(Legacyengineering),将具有潜在重用价值的构件提取出来,得到可重用的构件;
(3)从市场上购买现成的构件;
(4)开发新的符合要求的构件。
(三)构件库
在构件重用过程中,建立构件库以进行可重用构件的推广和使用,为后继嵌入式产品的开发提供良好的可重用基础。构件库的组织应方便构件的存储和检索。可重用技术对构件库组织方法的要求是:
(1)支持构件库的各种维护动作,如增加、删除以及修改构件,尽量不要影响构件库的结构;
(2)不仅要支持精确匹配,还要支持相似构件的查找;
(3)不仅能进行简单的语法匹配,而且能够查找在功能或行为方面等价或相似的构件;
(4)对应用领域具有较强的描述能力和较好的描述精度;
(5)库管理员和用户容易使用。
目前,已有的构件分类方法可以归纳为三类,分别是关键字分类法、刻面分类法和超文本分类法。构件库的关键字分类结构示例,如图3所示,它支持图形用户界面设计。
(四)构件的体系结构
在软件设计时采用层次式软件体系结构,将产品的系统结构模型定义为四个层次,如图4所示。
通过系统构件的分层,将频繁变动的业务逻辑层分离出来,实现通用类构件的完全重用,并且在各个模块之间设计统一的接口,当某一模块业务逻辑改变时,使系统之间的影响最小。系统实现即插即用(plugandplay),容易升级。
二、嵌入式称重物联网的构件化设计
嵌入式称重物联网是软件与硬件的综合体,硬件设计和软件设计相辅相成。嵌入式系统中的驱动程序是直接工作在各种硬件上的软件,是硬件和高层软件之间的桥梁。正是通过驱动程序,各种硬件设备才能正常运行,达到既定的工作效果。
(一)嵌入式称重物联网组成结构
嵌入式称重物联网主要由秤台、数字称重传感器、网络型称重显示控制仪、PC机、大屏幕显示器和打印机等硬件组成,其组成结构示意图,如图5所示。
(1)数字式称重传感器(简称“数字传感器”),是嵌入式称重物联网的关键部件,它的作用是将被称物体的重量转换成数字信号传给网络型称重显示仪表,本系统采用最新型的数字传感器,它具有称量精度高、抗干扰、防雷击、防作弊能力强、可在各种恶劣环境下工作等优点。
网络型称重显示仪具有界面图形化、接口网络化、存储海量化、格式多样化、维护简单化等特点,采用了不同于传统仪表的设计方法,在设计中间采用了一些最新的技术,如智能与诊断、网络通讯识别等,使整个系统能达到最高的精度及超低的故障率。它的核心部件采用高端32位MCU,具有4GB的地址空间,能在单片内提供以太网控制器及以太网物理层和闪存,它在远程数据采集、以太网供电等嵌入式物联网中得到了广泛的应用。
(3)网络接口构件是指实现异步串行通信的模块,又称为串行通信接口(SerialCommunicationInterface,SC)I,它可以将终端或个人计算机连接到MCU,也可以将几个分散的MCU连接成通信网络。在台式计算机上带的两个串口,COM1口和COM2口,部分笔记本上也带有串口COM。网络接口构件,如图6所示。
(二)嵌入式硬件构件和软件构件的层次模型嵌入式软件构件(EmbeddedSoftwareCompo-nent,ESC)是实现一定嵌入式功能的一组封装的、规范的、可重用的、具有嵌入特性的软件单元,是组织嵌入式系统的功能单位。
嵌入式软件结构分为高层软件结构和底层软件结构(以下简称为高层构件和底层构件)。高层构件与硬件无关,而底层构件与硬件密不可分,是硬件驱动程序的封装。
在硬件构件中,核心构件为MCU的最小系统。通常,MCU内部包含GPIO(即通用I/O)口和一些内置功能模块,我们将通用I/O口的驱动程序封装为GPIO构件,各内置功能模块的驱动程序封装为功能构件,相对于核心构件而言,中间构件和终端构件是核心构件的“外设”,由这些“外设”的驱动程序封装而成的软件构件称为底层外设构件。注意,并不是所有的中间构件和终端构件都可以作为编程对象。例如键盘、LED、LCD等硬件构件与编程有关,而电平转换硬件构件就与编程无关,因而不存在相应的底层驱动程序,当然也就没有相应的软件构件。嵌入式硬件构件与软件构件的层次模型,如图7所示。
底层外设构件可以调用底层内部控件,如LCD构件可以调用GPIO构件,PCF8563构件(时钟构件)可以调用IZC构件等。高层构件可以调用底层外设构件和底层内部构件中的功能构件,而不能直接调用GPIO构件。另外,考虑到几乎所有的底层内部构件都涉及到MCU各种寄存器的使用,因此将MCU的所有寄存器定义组织在一起,形成MCU头文件,以便其它构件头文件中包含该头文件。
(三)底层构件的实现方法与编程思想
(1)底层构件的组成
底层构件是与硬件直接打交道的软件,由头文件和源程序两部分组成。
头文件中的主要内容有:包含下层头文件的#include语句、用以描述构件属性的宏定义语句以及对外接口函数原型说明。在头文件中使用函数原型,对于建立代码模块和外部接口的规范,便于他人使用,都是很有帮助的。使用这些函数的用户,不需要查找源代码去了解参数的具体类型,直接查看函数原型即可。
源程序文件中存放构件的内部函数和外部函数的定义,即函数的实现代码,以完成函数所要实现的功能。
在对底层构件进行设计时,最关键的工作是要对构件的共性和个性进行分析,抽取出构件的属性和对外接口函数。尽可能做到:当一个底层构件应用到不同系统中时,仅需修改构件头文件,对于构件的源程序文件则不必修改或改动很小。
(2)编写构件时注意事项
1)构件的头文件和源程序文件的主文件名一致,且为构件名;
2)属性和操作的命名统一以构件名开头。这样的好处是:当使用底层构件组装软件系统时,避免构件之间出现同名现象。同时,名称要使人有“顾名思义”的效果;
3)对MCU内的模块寄存器名和端口名进行重定义,在其他的代码里都将使用宏名对模块寄存器端口进行操作。这样,当底层驱动程序移植到其他MCU时,只要修改重定义语句即可;
4)内部函数与外部函数要设计合理,函数参数个数及类型要考虑全面。内部函数仅提供给同一构件中的其他内部函数或外部函数调用,作用域仅限于定义该函数的文件。外部函数是对外接口函数,供上层应用程序调用。在定义外部函数时,应该对函数名、函数功能、入口参数、函数回值、使用说明、函数适用范围等进行详细描以增强程序的可读性。上层应用程序不能直接对构件的属性进行读取或设置,必须借助于该构件提供的接口操作函数来实现;
5)应用程序在使用底层构件时,严格禁止通过全局变量来传递参数,所有的数据传递都要通过函数的形式参数来接收。这样做不但使得接口简捷,更加避免了全局变量可能引发的安全隐患。
(四)软件构件设计
软件构件设计包括低端软件设计和高端软件设计两部分。
(1)底层构件设计
底层构件是硬件的驱动程序,是构建低端软件的基石。在进行低端软件设计时,首先要结合软件所要实现的功能,按照构件化思想设计并规划底层构件。本系统涉及到的底层构件有:
1)通用I/O构件:初始化端口,设置端口状态以及获取端口状态等;
2)指示灯(Light)构件:点亮火熄灭出错指示灯、运行指示灯;
3)Flash构件:将指定内容写入Flash的指定单元中,用于设置系统工作参数;
4)以太网物理层收/发器(EPHY)构件:初始化EPHY模块,获取网络连接状态;
5)快速以太网控制器(FEC)构件:初始化FEC模块、发送以太帧、接收以太帧;
6)定时器(GPT)构件:初始化定时器;
7)模数转换(AD)构件:初始化A/D转换模块、启动A/D转换、均值滤波等;
8)键盘(KeyBoard)构件:扫描并获取键盘按键值;
9)液晶指示(LCD)构件:初始化LCD、显示字符数据等。
(2)主程序设计
低端软件的主程序负责获取A/D采集数据,再将A/D值转换为物理量,并在LCD显示屏上显示。当检测到用户按键时,根据不同的按键,完成不同的功能,流程如图8所示。
(3)中断程序设计
低端软件的中断程序主要响应PC需要数据的请求。当接收到PC发生的一条命令后,低端软件进入FEC接收中断。在中断服务子程序中,首先获取接收帧内容并分析,根据命令的不同,将相关数据组装成以太帧,并将帧内容写入到FEC模块的发送缓冲区中,然后再通过发送缓冲区描述激活寄存器TDAR将其发送出去。
(4)高端软件设计
PC的高端软件需要实现的功能是:向低端程序提出称重数据请求并等待接收,对接收到的数据进行存储、显示、磅单以及报表打印等。其开发环境使用MicrosoftVisualStudio2010,编程语言使用VB.NET。运行界面如图9所示。
三、结语
构件重用技术在嵌入式称重物联网开发中的应用,使得整个开发过程构件化,减少了开发时间、提高了开发效率,保证了开发质量和产品的可靠性,使得应用系统的开发流程标准化、易于管理,降低了维护难度和工作量。同时,也需要我们加强构件库的建设与管理,积累更多的可重用构件,使得应用系统更好更快地开发。
本文源于网络转载,如有侵权,请联系删除
×