0 引言
精细农业的核心问题可叙述为信息获取、农田信息管理和分析、决策分析、决策的农田实施四大部分。其中农田基础信息(土壤养分、湿度、理化性状、苗情、病虫草害)的获取和处理是精细农业技术的起点。如果这个问题解决不好就很难真正地实施精准农业。农田信息主要包括地理环境、土壤环境、小气候、水环境、与作物生长状况相关的信息以及管理信息等,具有量大、多维(信息多种多样)、动态、不确定(系统的噪声或随机噪声)、不完整、时空变异性强等特点。在精细农业研究中,目前优先需要考虑的是土壤水分、土壤养分、土壤压实、耕作层深度和作物病虫草害及作物苗情分布信息等,要求能够定位、快速、精确、连续地测量。传统的实验室分析方法已很难满足这一要求,为此,需要开发适用于精细农业的农田信息快速采集技术。本设计以S3CA4B0X为主体,构建农田信息采集系统的硬件平台,并在S3CA4B0X内部嵌入μC/OS-Ⅱ实时操作系统,可大大提高系统的稳定性和实时响应能力,增强系统的可靠性、可扩展性、可移植性。
1 μC/OS-Ⅱ简介
嵌入式实时操作系统μC/OS-Ⅱ的全名是Micro-Controller OperatingSystemVersion2,是基于优先级的抢占式实时多任务操作系统,包含了实时内核、任务管理、时间管理、任务间通信同步(信号量,邮箱,消息队列)和内存管理等功能。
μC/OS-Ⅱ采用微内核设计,使用C语言编写,追求编程的灵活性,可配置、可裁剪、可扩充、可移植。μC/OS-Ⅱ是基于优先级的可剥夺型实时多任务内核,优先级算法采用查表法,切换速度快。μC/OS-Ⅱ可以处理和调度多达64个任务,目前有8个留给系统使用,应用程序可使用多达56个任务。
2 硬件系统设计
2.1 农田信息采集系统结构
系统主要由通讯模块、农田数据采集模块、数据处理及存储模块几部分组成。主要完成以下几个方面功能:
(1)在农田信息采样时,通讯模块接收全球定位系统GPS经纬度位置信息,数据采集模块完成田间土壤参数信息的采集,系统的多个模拟信号输入通道与田间土壤水分、温度、养分等传感器探针相连,测量田间土壤的水分、养分、温度等参数值,然后与上位计算机相连,进行处理。
(2)在工作室进行农田数据处理时,通讯模块将采集的农田数据传给计算机,计算机上的软件进行一系列处理,最终生成田间土壤水分分布图、养分分布图和温度变化图等并保存。
(3)农田信息采集系统扩展CAN总线数据收发接口后,可与农机机械的(拖拉机、收割机等)CAN控制总线相连接,帮助驾驶员驾驶农业机械在田间实施农业操作。在需要进行自动变量施肥、变量喷洒农药等农业作业中,要求农机机械在特定的农田中采取特定的行进速度,以达到喷撒物的剂量与农田作业的要求相适应。并依据农业信息采集系统和专家系统提供的农机机械作业路线,使驾驶员操作农机机械按照电子地图上设计的行走路线行走,从而完成播种、施肥、灭虫、灌溉、收割等工作,包括完成耕地深度、施肥量、灌溉量的控制任务等。
2.2 农田信息采集系统的硬件方案
本系统以嵌入式微处理器ARMS3C44B0X芯片为核心,包括传感器信息采集电路、串口通讯电路、GPS通讯电路、扩展的CAN总线、数据存储电路、液晶屏显示电路、键盘接口电路以及功能键盘等构成。系统结构如图1所示。
3 农田信息采集系统软件设计实现
3.1 μC/OS-Ⅱ嵌入式操作系统在S3CA4B0X芯片上的移植
在嵌入式操作系统应用中,每个任务都是相互独立的,而且会发生频繁的任务转换,为了使转换的任务能够返回到原来的断点,所以必须得把与转换的任务运行环境密切相关的各种寄存器和变量全部保存起来。这就是定义构造一个用户任务堆栈结构,来保证多任务嵌入式操作系统的正常运行,这种堆栈结构保存了与各个转换的任务运行环境密切相关的所有寄存器变量,而且所有任务的堆栈结构必须完全一致,这样才能用统一的任务切换程序在任务之间作频繁的任务转换,而且还要求不会破坏各个任务的实时运行环境。因此在建立每一个新任务的同时,必须为该任务分配一定的系统资源,包括一个任务栈、一个任务控制块,并将与该任务密切相关的各个变量,比如任务优先级别、堆栈大小等变量保存到任务控制块中,同时还得完全按照任务堆栈初始化结构那样初始化该任务的任务堆栈,然后将任务堆栈的栈顶指针保存到该任务控制块的相应位置。
移植工作主要是改写OS_CPU.H,OS_CPUA.ASM,OS_CPU.C,OS_CFGH,INCLUDES.H,其中与处理器相关的文件为:OS_CPU.H,OS_CP U.C,OS_CPU_.A.ASM.μC/OS-Ⅱ嵌入式操作系统硬件和软件体系结构如图2所示。
在数据类型定义中,S3C44B0X芯片是32位处理器,但是,μC/OS-Ⅱ嵌入式操作系统所处理的仍然是INT16U.用户必须将任务堆栈的数据类型告诉给μC/OS-Ⅱ嵌入式操作系统。这个过程是通过为OS_STK声明正确的C数据类型来完成的。S3C44B0X芯片的堆栈成员是16位的,所以将OS_TsK声明为无符号整形数据类型,定义如下:
tyPedefunsignedlong OS_STK;
堆栈增长方向OS_STK_GROWTH定义如下:
#defin OS_STK_GROWTH左堆栈增长方向为从上往下增长
#define STACKSIZE256/μC/OS-Ⅱ嵌入式操作系统需要先禁止中断访问代码的临界区,并且在访问完毕后重新允许中断。
与所有的实时内核一样,μC/OS-Ⅱ嵌入式操作系统需要先禁止中断再访问代码的临界区,并且在访问完毕后重新允许中断。这就使得μC/OS-Ⅱ嵌入式操作系统能够保护临界区代码免受多任务或中断服务例程的破坏。在S3CA4B0X芯片上是通过两个函数(OS_ENTER_CRITICAL()和OS_EXIT_RITICAL())实现开关中断的。
3.2 任务优先级及任务关联设计
在本项目中,为实现农田信息采集系统的功能要求,在μC/OS-Ⅱ中设计以下任务:时钟节拍任务、键盘任务、显示任务、数据采集任务(土壤水分、土壤养分、土壤压实、多点温度数据采集)、数据处理及存储任务、串口通讯任务。数据采集任务、数据处理与存储任务设置为周期性任务。在这些任务中,μC/OS-Ⅱ时钟节拍服务是通过中断服务子程序调用时钟节拍函数来实现的。因而采用定时器1产生中断,定时周期10ms.除此以外,该函数还要启动A/D转换以及每隔一段时间发送消息给相应的任务,从而触发相应的任务执行等。因此,优先级最高;数据采集任务、串口接收任务和串口发送任务实时性要求比较高。其中,串口接收任务是关键任务和紧迫任务,遗漏接收内容是不允许的;数据采集任务是紧迫任务,但不是关键任务,遗漏一个数据还不至于发生重大问题;在串行口发送任务中,CPU是主动方,慢一些也可行,只要将数据发出去就可以。显示任务和键盘任务是人机接口任务,实时性要求较低。由于显示任务要等数据处理及存储任务所得的数据,故数据处理及存储任务的优先级可安排得比键盘任务和显示任务高一些。农机设备控制任务的实时性要得到保证,因此要设为较高优先级。
由于系统的实际运行效果是各个任务配合运行的结果,这种配合过程又是通过操作系统的管理来实现的,即通过调用操作系统服务函数来实现的。"何时调用系统服务"和"调用什么系统服务"是任务设计中的关键问题,这个问题与任务之间的相互关联程度有关,需要通过分析这种关联关系才能确定。为了进行任务设计,必须把这些任务之间的相互关系搞清楚。
根据农田信息采集系统功能需求,设计任务关联图如图3所示。系统应用软件包含10个任务:传感器数据采集任务为周期性任务,以一定的时间间隔采集数据,通过消息队列将所采集数据传输给LCD显示任务,并通过邮箱1#传递给数据处理与存储任务,同时,GPS接收的位置信息通过邮箱2#及时插入采集的数据当中;数据处理与存储任务以信号量1#将数据通过串口通讯任务传递给计算机,并在计算机上生成田间土壤水分分布图、养分分布图和温度变化图等数据,计算机生成的数据又经串口通讯任务由信号量2#发给扩展CAN总线任务,以此来控制农田机械设备执行相应的程序,完成自动变量施肥、变量喷洒农药等;键盘扫描任务、数据处理与存储任务等和显示任务同步,以消息队列1#通知显示任务更新显示。
4 结束语
本文以嵌入式微处理器S3CA4B0X芯片为主体,构建农田信息采集系统的软硬件平台,分析了μC/OS-Ⅱ操作系统的特点,并在嵌入式微处理器S3C44B0X芯片内嵌入μC/OS-Ⅱ实时操作系统,阐述了基于μC/OS-Ⅱ操作系统的农田信息采集系统的设计与实现方法。由此开发的农田信息采集系统的实时响应速度快,并实现软件设计模块化,可大大提高系统的稳定性和实时响应能力,增强系统的可靠性、可扩展性、可移植性,有着广泛的应用前景。