崔 洪 亮,张 继 平,唐 懋 清,于 忠 得
(1.大连工业大学 信息科学与工程学院,辽宁 大连 116034;2.大化集团有限公司 仪控部,辽宁 大连 116031)
在食品生产过程中,和面、发酵、搅拌是其生产的重要的环节,而时间、温度和湿度的监测又是这些环节的重要因素,它直接影响产品质量和经济效益。为此生产过程中的温湿度检测系统就显得十分关键。传统的温湿度实时检测系统,是以8位的单片机为核心,通过按键操作、数码管显示,不能存储大量数据,而是通过PC机加智能仪表来存储数据[1]。随着嵌入式技术的发展,食品行业的温湿度实时检测系统有待改善。本设计以ARM9微处理器为硬件核心,以Linux操作系统为软件核心,不仅实现了原有的功能,同时实现了人性化的人机交互,将数据的显示与记录融于一机,节约了生产成本;以太网的引入,实现了数据的远程浏览。本研究为食品生产过程的标准化、规范化、人性化提供了技术条件[2]。
以ARM920T为核心的S3C2440A处理器,其外部提供了丰富的接口功能、总线和GPIO。其具备了单片机所不具备的运行速度快、可以驱动大容量存储设备、可驱动大型LCD和触摸屏,以及网络功能等优点。使得系统具备PC机风格、大量数据储存和以太网接入的功能。充分利用这些外部资源再配以温湿度检测电路,就可以满足系统的设计要求[3]。硬件系统框图如图1所示。
图1 硬件系统框图Fig.1 Hardware of temperature and humidity detection system
(1)温度、湿度、时间监测接口。该电路的功能是实现将温度、湿度传感器的信号,经过处理转变为A/D转换电路需要的电压信号,再进行A/D转换为处理器能处理的数字信号[4]。时间监测是通过搅拌机的开启和关闭,实时测试搅拌机的开关时间。
(2)USB接口。用于连接U盘、移动硬盘等大容量存储设备,方便数据和配置文件导入系统以及导出系统历史数据。
(3)网卡接口。用于连接以太网,可以通过以太网远程浏览实时数据、历史数据,通过分析数据进行以太网远程控制。
(4)64MB SDRAM。用于设置程序堆栈和存放各种变量。
(5)UART。用于与PC机通讯连接,将历史数据上传至PC机。
(6)LCD(带触摸屏)。用于显示实时曲线、历史数据,通过触摸屏设置系统参数等。
(7)256MB NAND FLASH。用于存储代码和历史数据。
软件部分的设计主要包括:U-Boot的移植、Linux内核的移植、Linux根文件系统的构建、设备驱动的开发和基于QT的应用程序的开发。与以单片机为核心的系统相比,引入了Linux操作系统使软件设计变得更加简单,系统升级也变得更加方便。
U-Boot是系统上电后运行的第一段代码,用于初始化硬件设备,准备好软件环境,最后调用操作系统内核。针对于本系统的硬件平台,采用1.3.4版本的 U-Boot,阅读 Makefile文件、修改Makefile文件和平台相关文件,执行“make smdk2410_config”、“make all”命 令,生 成U-Boot.bin文件,通过 HJTAG下载写到NOR FLASH中。
本系统采用Linux2.6.31版本的内核,其中涵盖了大部分外围设备的驱动代码,根据需要进行简单修改即可,温度、湿度、时间监测电路的驱动需要自行编写。以下对部分驱动作简要介绍。
2.2.1 NAND FLASH驱动的配置
首先修改分区表,修改内核目录中的文件arch/arm/plat-s3c24xx/common-smdk.c,使其与256MB的NAND FLASH匹配。接下来修改NAND的读写匹配时间,修改结构static struct s3c2410_platform_nand smdk_nand_info中的tacls=10,twrph0=25,twrph1=10。最后修改driver/mtd/nand/Kconfig文件[5]。
配置内核时,一定要选上S3C2410NAND Hardware ECC这个选项,然后再配置内核支持yaffs2文件系统。这样就构成了一个完整的操作系统。
2.2.2 LCD驱动的移植
内核中有很完善的LCD驱动,只要根据所选用的LCD进行简单的修改。内核源码中drivers/video/s3c2410fb.c是LCD驱动的源码。首先设置LCD的时钟频率,修改函数static void s3c2410fb_activate_var(struct fb_info*info)中的struct s3c2410fb_mach_info*mach_info=fbi->platform_data;struct s3c2410fb_display*default_display = mach_info->displays+mach_info-> default_display;S3C2410_LCDCO N1_CLKVAL(default_display- >setclkval);在 arch/arm/mach-s3c24 10/include/mach/fb.h中加入:unsigned setclkval;然后查看LCD手册,修改arch/arm/mach-s3c2440.c中LCD参数。配置内核支持LCD,完成对LCD驱动的支持。
2.2.3 温湿度采集接口驱动设计
系统需要采集4个搅拌机的温度和发酵室的温度、湿度6个参数,然后将数据存储为.txt文件,系统根据这6组数据绘制实时曲线和数据列表。根据实际需要每1min采集一组数据。
在内核中没有温湿度采集电路的驱动代码,需要自己编写,驱动程序只需打开一个参数采集的通道,采集完成后打开下一个通道即可。将驱动程序的源码加入到drivers/char目录下,并修改这个目录下的Makefile和Kconfig文件,加入这个驱动程序,配置内核。可将这个驱动程序动态加载到内核,便于修改,减小内核的大小。
Linux内核启动后会挂载根文件系统用来存取和管理的内核文件。根文件系统的制作分为4个步骤:
(1)准备制作。遵循FHS标准(Filesystem Hierarchy Standard)创建根文件系统目录,可以参照Linux操作系统制作相应的目录。
(2)编译busybox。解压busybox-1.15.2的源码包,修改Makefile,执行make menuconfig配置busybox,配置完成后,执行 make、make install,然后将生成内容复制到第一步建立的相应的目录下。
(3)制作文件系统。完善相应目录下的内容,主要包括etc下的inittab、init.d/rcS、fatab文件,以及dev和lib目录下的内容。
(4)完善文件系统。主要是向文件系统中加入应用程序。
作者基于Trolltech的Qt/Embedded来开发图形用户界面系统,使用“一次编写,随处编译”的方式为开发跨平台的图形用户界面应用程序提供了一个完整的C++应用程序开发框架。
开机后直接进入动态曲线显示界面,如图2所示。图2显示内容有:
(1)菜单栏。它包括:参数设置、数据导出、列表、帮助。
(2)系统时间显示。显示当前系统时间。
(3)温湿度变化曲线。以动态曲线形式显示当前时间以前采集的10组数据。
2.4.1 菜单栏的建立
可以通过触摸屏点击相应菜单,对系统进行操作。参数设置是对所采集的6个参数进行设置,包括:报警上下限,传感器的类型,参数设置界面如图3所示。数据导出菜单通过USB接口将历史数据存入移动存贮设备;列表菜单是将数据以列表的方式显示;帮助菜单显示如何操作系统。
图2 动态曲线显示界面Fig.2 The display interface for dynamic curve
图3 参数设置对话框Fig.3 Setting dialog
以上菜单利用QT的信号(SIGNAL)和槽(SLOT)机制来实现其功能。例如:connect(settingAction,SIGNAL(triggered()),this,SLOT(setting())),通过对settingAction对象的点击(triggered())发出信号,就会自动在this对象上调用setting()这个槽,从而弹出参数设置对话框。
2.4.2 系统时间的建立
通过QT的QLabel控件来显示系统时间,并把其与timeout()信号连接就完成了系统时间的建立。
label= new QLabel(this);
QTimer*timer=new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(showTime()));
2.4.3 温湿度变化曲线的建立
温湿度变化曲线的建立利用了QT的双缓冲技术,它包括把一个窗口部件渲染到一个脱屏像素映射(off-screen pixmap)中以及把这个像素映射复制到显示器上[6],QT的双缓冲技术的利用,可以使实时曲线的显示更加流畅。利用1min的时间中断来采集数据更新曲线,其中断程序流程图如图4所示。
图4 中断程序流程图Fig.4 Interruption flow chart
由图4可见,进入中断服务程序后,采集一组数据。如果数据无效进行无效处理,如果数据有效进行存储,存储到.txt文件和列表文件。存储完成后,利用void Plotter::refreshPixmap()函数绘制最新的100组数据,并映射到屏幕上[7]。
通过以上的工作,完成了食品生产线温湿度实时检测系统的硬件平台和软件开发环境的关键技术的研究工作。经过模拟实验,系统满足了实际生产线的需要。本课题的研究将ARM处理器和Linux操作系统引入到温湿度检测系统的设计中来,提高了系统运行速度和实时性,使系统拥有了良好的人机界面和以太网接口,方便远程参数的设置和数据的查看。Linux系统和Qt/Embedded的使用,使软件的开发更容易。该系统通过改进也可以实现其他工业参数数据的采集,实现更强大的工业控制系统。
[1]张沛然,成广友.食品生产线温湿度实时检测系统[J].电子技术,1995(5):213-214.
[2]于忠得,林敏,申华.嵌入式系统基础教程[M].北京:国防工业出版社,2009:1-14.
[3]韦东山.嵌入式Linux应用开发完全手册[M].北京:人民邮电出版社,2008:76-114.
[4]黄贤斌,郑筱霞,曲波,等.传感器实际应用电路设计[M].成都:电子科技大学出版社,2003:128-134.
[5]冯国进.嵌入式Linux驱动程序设计[M].北京:清华大学出版社,2008:57-66.
[6]BLANCHETTE J,SUMMERFIELD M.C++ GUI Qt 4编程[M].闫锋欣,曾泉人,张志强,译.北京:电子工业出版社,2008:92-107.
[7]于忠得.单片机原理与工程设计实例[M].北京:清华大学出版社,2011:264-288.