3 软件设计
软件使用标准C语言编制,主要包括射频程序设计、网络通信程序设计和主程序设计[3]。程序采用模块化方式设计,各部分功能独立编程,便于程序的改进和扩展。
农产品信息管理数据处理有独特的地方,同时需要考虑操作简便,不需要用户执行底层操作。因此,设计中将不同阶段的信息作为一个记录,每个记录都有一个标识用于识别记录类型。如生产阶段定义为01,加工阶段定义为02等。当用户选择输入信息时,会弹出相应的选项供用户填写,输入完成后确定即可。输出则直接读取。各阶段信息记录主要有:
生产阶段:名称、品种、产地、批次、施用农药、生产者。
加工阶段:加工者、加工方法、加工日期、产品等级、保质期、存储条件。
运输和仓储阶段:进、出库记录。
销售阶段:名称、销售时间、销售人员。
3.1 主程序设计
主程序主要提供一些初始化操作,协调各子程序运行,同时提供中文界面、输入输出信息和参数设置的接口以及显示。还提供与远程计算机通信应用程序接口。主程序流程如图4所示,主要给出卡片操作的处理流程。
3.2 射频通信软件和网络通信软件设计
射频通信软件中模块控制指令分为两种,分别是射频模块和C8051F120之间的控制指令,射频模块和卡片之间的控制指令。第一种指令直接写入寄存器Command,第二种指令需要通过第一种指令中的TRANSCEIVE或TRANSMIT发送给卡片。各寄存器的初始值和操作流程都有一定的要求,各返回值需严格对照手册判断相应的状态并作出适当的处理。由于电路特性不同,有些初始值需要做一些调整,才能得到满意的性能[3-5]。主要需要设计射频模块与C8051F120之间的指令传输子程序、读写子程序、防冲突子程序以及中断处理程序。需要注意的是:射频模块C8051F120的指令传输子程序在指令写入指令寄存器Command之前需要打开相应的中断;读写子程序在完成后需要判断数据的准确性;防冲突子程序需要设计可靠的防冲突循环以及当冲突发生时在校验位上合理的处理。同时为了防止可能的操作失败,操作前后的数据要进行对比,如不成功则重新读写,以提高成功率。综合后的射频通信程序如图5所示。
网络通信软件设计也是一项重要的内容,CP2201已经集成了物理层和数据链路层,并且新华龙公司提供了TCP/IP协议栈,因此设计的主要工作是选择合适的协议和数据链路层之上的数据处理。嵌入式系统资源相对有限,需要合理的协议剪裁。由于上位机准备采用自己开发操作界面,因此只需利用TCP协议建立一个可靠连接来直接传输数据,所以保留了一个TCP协议;网络上的每个设备都要求有一个MAC地址和IP地址,保留IP、ARP协议。IP协议可以使互联网上的计算机之间相互通信,ARP用于在只知道MAC地址的情况下查找读写器的IP地址。为了用户方便,允许自动获取IP地址,所以保留了DHCP协议。系统初始化完成以后,就可以启动发送和接收。发送数据必须封包,以TCP为例,以太网数据帧格式为:引导符和开始帧分隔符(8字节)->目标MAC地址(6字节)->源MAC地址(6字节)->长度/类型(2字节)->数据(46~1 500字节)->CRC检测(4字节)。接收数据时则逐步剥离并判断有效性和进行适当的处理。网络传输采用中断方式处理,根据中断标志在中断处理程序中作连接、发送、接收等处理[6-8]。数据发送接收中及接收后会产生相应的标识,如TCP打开失败、ARP请求失败等,需要设计相应的处理子程序。网络通信程序流程如图6所示。