基于嵌入式网络的信息录入系统
2010-03-16苏双琴汪一鸣
苏双琴,汪一鸣,陈 峰
(1.苏州大学电子信息学院,江苏 苏州215021;2.苏州市轻工业学校,江苏 苏州 215008;3.苏州韵语信息科技有限公司,江苏 苏州 215002)
随着办公自动化水平的不断提高,很多人力资源市场采用了电子信息化办公平台,如专用的服务器、大型LED电子显示屏、触摸屏、电脑、打印机、电话和传真机以及招聘信息查询系统等硬件设备,还专门开发了相关的信息发布软件,建立有自己的专用网站,内部实现了局域网的联网、对外开通了互联网,给求职者和用人单位都带来了极大的便利。但对一些低端人力资源市场而言,其特点是用人单位是劳动密集型企业,有大量用工需求,而求职人员文化程度相对较低。这使得一方面由于求职者太多,对求职登记情况不熟悉,填写求职登记表耗时费力,效率低下,给人力资源市场管理带来不便。另一方面由于则求职人员素质差异比较大,还有些人甚至连字都不会写,错失了求职的机会。
为了改变这种状况,笔者设计了一套身份信息识别与求职信息录入系统。进场求职人员只需出示身份证,在身份识别设备上轻轻一扫,立刻形成一张具有该求职人员基本信息的登记表,求职者随后在与企业交流、沟通的过程中,进一步交互式录入相关求职信息(包括个人专长,以往就业信息以及企业对个人的基本评价等),从而形成一张完整的求职登记表。这样不仅极大方便了求职者,同时,也实现了无纸化办公,人力资源市场本身的工作效率也明显提高。
1 录入系统的解决方案
通过采集求职者二代身份证形成个人基本资料,根据自动下载的企业招聘信息,配合企业工作人员的操作,快速形成个人求职登记电子表格。这就要求该系统具有身份证信息识别功能,多终端功能、联网功能以及网络集中管理控制功能。信息录入系统整体网络拓扑图如图1所示,集中控制电脑通过交换机或路由器与智能填表装置网络连接,智能填表装置发出的检索请求,由集中控制电脑向若干个远程数据服务器请求检索,检索结果由集中控制电脑汇总后传输给智能填表装置实现填表录入。
图1 信息录入系统整体网络拓扑图
智能填表装置框图如图2所示,包括信息处理模块(S3C2440核心板)、输入模块(二代证阅读器及键盘)、输出模块(液晶驱动及蜂鸣器)、本地存储器(SD卡)、数据传输模块(10/100M网络)。其中第二代身份阅读器读取用户身份信息,并将用户信息传输给核心板处理。核心板通过RS232C电路连接身份证阅读器[1]。并根据用户信息在预制的电子表格内填充用户信息,然后将电子表格输出给液晶屏显示。由用户通过键盘输入填写电子表格中未能实现智能填表的区域。信息处理模块通过网络向集中控制电脑发出检索请求,将请求结果填入表中。核心板将最终的电子表格存储在SD卡中。蜂鸣器提示用户操作过程及结果。电源及系统控制模块,向其他电路提供电源管理及电源供应。
图2 智能填表装置框图
根据以上描述,主芯片要求如下:主频400 M及以上;内置TFT驱动电路;UART接口;SD卡接口。本文采用友善之臂的Micro 2440,其资源配置如下:CPU为Samsung S3C2440A,主频400 MHz;在板64MSDRAM;在板256 MNAND Flash,掉电非易失;在板2MNor Flash,掉电非易失[2],可以满足系统要求。设备采用wince操作系统,应用程序采用EVC编写[1~6]。
2 录入系统的关键技术
本录入系统整体设计比较复杂,现就其软件设计部分关于集中管理软件中多设备的可靠性及实时性进行研究。
2.1 关键问题
众所周知,采用总线结构的网络上,只要有一个设备在发送数据,总线的资源就会被占用。因此,在某一时刻只允许一台设备发送数据,否则所有设备都无法通信。以太网采用CSMA/CD解决这个问题。对于集中控制电脑而言,指定的端口只允许一个线程接收数据。这样,当管理设备需要与多个设备同时进行通信时,实际在某一时刻仅仅能与一台设备进行信息交互,这就需要建立一个与多个设备通信的机制。传统的处理方法是单线程技术,即在接收线程中与一个设备的通信有结果(通信成功或失败)之后再处理下一个设备的通信。由于传输中总有收到物理干扰带来的误码,或者设备在处理更高级线程而不能够立即响应的情况,有可能导致通信失败。
2.2 类多线程技术
类多线程技术是一种类似于多线程的技术,使用两个线程来实现原本需要多个线程(线程数量由通信设备的数量决定)才能完成的通信,两个线程分别是UDP接收线程和定时器管理线程。技术的关键在于,使用设备状态变量来决定在超时中如何继续处理,在定时器线程中可以让偶然失败的通信能继续下去。为了解决上述多个设备需要同时通信可能失败的问题,使用类多线程技术,达到在占用资源最少的情况下,与多个设备同时通信而无需操作者等待超时时间。由于采用了类多线程技术,可以在定时器处理程序里面,对通信指令发出后的时间间隔进行判断,超过一定时间没有接收到返回的响应帧,采取超时自动重发命令,减少偶然的干扰导致通信失败的概率。若多次重发仍然得不到响应,则向用户反馈通信失败。在发送多个数据记录过程中,为了能够连续读取多个记录,给每个记录编号,若出现超时情况,会重新发送上一次命令,避免一个出错所有记录都要重发,即断点续传,提高了通信效率。
该类多线程技术由两个线程来实现,一个是网络UDP接收线程,一个是定时器线程。实现机制如下所述。
(1)设备结构体定义。每个设备所定义的变量使用一个结构体封装,然后用该类结构体构成的数组表示所有通信设备,结构体定义如下:
TSendSessions=record
Status:TSendStatus;//发送状态,有空闲等待响应成功失败,记录命令执行状态
SendCmd:integer;//记住发送命令,以便重新发送
RdZpInfoState:integer;//0-读入总数1...n为读入求职信息数据包
TotalZpInfo:integer;//总的数据记录数量
ThreadTimer:byte;//超时重新发送次数,小于最大超时数C_SEND_TIMERS
DeviceConnectState:integer;//设备连接状态0-未连接1-连接
DeviceSearchTimes:integer;//搜索设备,如果超过3次找不到,认为设备不存在
IPAddress:string;//记录设备号对应的IP地址,以便重新发送命令
end;
在发送数据时要准备好发送的命令内容,设置超时重发次数变量ThreadTimer为0,用SendCmd保存当前发送的命令字,用Status标记为命令发送状态,进入等待设备响应过程,为超时重发做准备,然后将命令发送出去。
(2)两种情况的处理。接下来有两种情况,第一种情况是在超时时间到来之前,接收UDP线程中接收到来自对应设备的响应;第二种情况是超时。
第一种情况处理很简单,流程图如图3所示,首先因为收到来自设备的命令,所以可以认为设备是连接的,标记设备连接状态为连接,设置Device Connect State为1,设置Device Search Times为0。然后根据协议命令进入不同的处理,将设备状态从等待响应变为成功(防止重发),最后清零变量Thread Timer。
图3 UDP接收数据线程流程图
第二种情况是没有收到任何来自设备的响应命令。在定时器程序中处理,每过一段时间检查每个设备的状态,根据设备状态判断是否处在等待命令状态,流程图如图4所示。如果处在等待命令状态,超时时间到了以后将上一次命令重新发送,然后继续等待。如果重发次数大于预设值,就通过用户界面提示,通信失败需要人工处理。只要有一次成功收到来自设备的响应,通信就会成功。在请求读取多个记录时,使用Rd Zp Info State变量记录当前的记录号码,使用Total Zp Info保存总的记录号码,这样就可以在超时的时候重新发送前一个请求的记录号,实现断点续传,提高通信的可靠性。
图4 定时器中断线程流程图
3 测试结果
测试环境如图1所示,集中控制电脑与交换机连接,交换机与外网相连,设备与交换机连接,测试10次,每次传输数据为900个数据包,同时与10台设备通信。分别使用单线程技术和类多线程技术测试数据,结果如表1表2所示。
表1 使用单线程技术的测试数据
表2 使用类多线程技术的测试数据
由表1表2比较可以看出,使用本文类多线程技术后,通信的时间缩短了,即使增加更多的设备也是如此,这样大大节省了时间。另外,在测试过程中,由于通信都是100%成功,所以采用人工故意断开网线3 s后接通进行测试,采用之前的程序,无法继续通信,必须人工再次读取数据;采用此技术后,软件会自动重新在原来基础上继续传输,实现了通信的可靠性和实时性。
4 结束语
本系统投入使用后,与预期效果一致,采用先进的嵌入式系统技术体系,响应速度快,体积小,功耗低,系统成熟稳定,能满足人力资源市场信息化发展需要。为进一步提高通信的可靠性和可扩展性,可采用自定义的协议以及CRC校验。
[1]刘 琳,吴国英,刘小杰,李轶南.第二代居民身份证阅读器原理与应用[J].警察技术,2004,(5):30-32.
[2]广州友善之臂计算机科技有限公司.Micro2440用户手册 [K].广州:广州友善之臂计算机科技有限公司,2009.
[3]周立功,等.ARM&WinCE实验与实践[M].北京:北京航空航天大学出版社,2007.
[4]汪 兵,等.Windows CE嵌入式高级编程及其实例详解(用C++实现)[M].北京:中国水利水电出版社,2008.
[5]张冬泉,谭南林.Windows CE开发实例精粹[M].北京:电子工业出版社,2008.
[6]张 嵛.32位嵌入式系统硬件设计与调试[M].北京:机械工业出版社,2005.