1 系统组成
本文所介绍的电子存包系统是一种电脑联网集中控制的磁卡式自动存包系统。如图1所示,系统由集控计算机和分机两级监控系统对存包柜进行监视与控制。
集控计算机(简称主机)为用户分配箱位和密码,通过与其连接的磁卡读写器将密码写入磁卡中交给用户。主机使用特定的通信协议查询和控制各个分机,然后由分机对其下属箱位进行控制。主机与分机之间采用RS-485接口连接。RS-485在传输距离为1200米时速度可达100kbps、传输距离远、可靠性很高,而且用于多点互连时很方便,可以省掉很多信号线,非常适合用于分布式系统中。
分机具有接收并缓存读卡器数据、与主机通信、控制存包柜动作等功能,主要由CPLD芯片、光耦合模块、该磁卡模块、红外探测模块、电磁锁驱动模块等外围电路组成。CPLD芯片选用Altera公司的EPM3256A TC144-10,其技术参数如表1所示。
表1 EPM3256ATC144-10技术参数
在本设计中,所有的控制与通信功能全部集成到CPLD内部,充分发挥了CPLD使用灵活、测试方便、可靠性好等优点。
2.1 基本硬件组成
电子存包系统的基本硬件结构,即分机的硬件组成如图2所示。
电源模块使用变压器将220V交流电变为9V交流电,然后经过整流、稳压输出3.3V、5V、12V三路直流电对分机系统供电。其中,3.3V直流是怪CPLD供电,5V直流电对外围电路供电,12V直流电用来驱动电磁锁。
磁卡数据接收模块主要由一片MAX202和一个9帧D型接口以及五个0.1/μF电容组成,当用户刷卡动作完成时,磁卡中密码数据立即被传送至CPLD中暂存。当主机轮循至该分机时,分机将密码发送给主机。
晶振模块利用4060分频器和4020分频器对2.4576MHz晶振频率进行分频,分别得到9600Hz、153600(9600×16)Hz、2.35Hz的频率信号作为CPLD的输入时钟信号。
红外线发射与接收模块的作用是利用红外线检测各个存包柜内是否有物品,通过红外接收模块将检测结果反馈到CPLD,然后由CPLD发送给主机。
RS-485通信模块中使用了光耦器件4N25进行光电隔离以抑制噪声对通信线路的干扰,并由一片RS-485收发器芯片SN75LBC184实现TTL电平与RS-485电平之间的转换。 电磁锁驱动模块负责对CPLD输出的3.3V开门信号进行放大,以驱动电磁锁进行开关动作。为保证输出功率,采用了二极计流放大,电磁锁由末级功放管BD241驱动。每个分机控制八个箱位,因此如图3所示的驱动电路共有八路。
另外,本系统还选用了三晶公司生产的SJE-102磁卡读写器和SJE-451读卡器作为磁卡读写设备,分别与主机、分机相连接。
2.2 CPLD内部逻辑设计
CPLD内部逻辑的顶层原理图如图4所示。由图可见,CPLD内部逻辑电路由主控模块(main)、串行数据收发模块(s8)、磁卡数据接收模块(mag_s8)、磁卡数据缓冲模块(mag)以及开门信号延时模块(door)和报警模块(beep)几部分组成。
点击看原图
2.2.1 主控部分的设计
主控模块主要由一个状态机实现,采用VHDL语言描述。该状态机共有四个状态,分别是等待侦听状态、等待寻址帧状态、发送密码及箱位号码并接收主机开箱信号状态和接收主机强制开箱信号状态。
在这里采用全0帧“00000000”作为复位帧,当接收到复位帧时,系统立即返回等待侦听状态;采用全1帧“11111111”作为起始标识帧,在等待侦听状态下接收到全1帧时则转入等待寻址帧状态。寻址帧分为一般寻址帧和强制开箱寻址帧两种。一般寻址帧由四位分机编号+“1000”组成,而强制开箱寻址帧由四位分机编号+“0001”组成。当分机在等待寻址帧状态下收到这两种寻址帧时便分别转入发送密码及箱位号码状态和接收主机强制开箱信号状态。
2.2.2 串行数据收发部分的设计
本设计有两个串行数据发送与接收模块,分别用于与主机通信和接收磁卡数据,采用的通信速度都是9600bps。这两部分的设计思想是统一的,其中磁卡数据接收模块只用到串行数据的接收技术。
在发送电路的设计中,利用clk端口的9600Hz
时钟信号,根据所采用的帧格式,将主控模块得到的并行数据DATAIN[7..0]前后分别加入起始位、奇偶校验位和停止位后串行输出到端口TXD。 在接收电路的设计中,接收电路始终用16倍波特率的时钟CLK16采样串行数据接收端RXD端口的状态。在检测到由“1”到“0”的变化时,若连续采样8次,RXD一直都保持为“0”,则认定是数据的起始位;否则认为是干扰信号,计数器将被复位,重新开始采样。在确认起始位后,每隔16个CLK16信号周期读取一次数据位,这样保证了恰好在每个数据的中点读取,直至停止位。一帧接收完毕后,接收计数器复位,开始帧听下一帧的起始位。采用这种接收方法不但可以减少误判起始信号,而且还允许发送时钟和接收时钟的频率有一定的误差。
在实际应用中,如果在检测到RXD下降沿后连续采样8次为“0”才确认地起始位,那么起始位被忽略的情况时有发生。经过实验与分析,发现这是由于CPLD外围的光耦器件4N25的开关速度较慢的缘故,于是改进了设计。在检测到RXD下降沿后,从第三个CLK16信号周期开始计数,连续采样6次,如果6次全为“0”,即认定是起始位。采用这种方法后误判率为0,大大提高了系统的可靠性。
2.3 其它模块
磁卡数据缓存模块的功能相当于一个缓存器,将磁卡数据接收模块接收到的数据暂存,等待主控模块的调用;开门信号延时模块为外围的电磁锁驱动电路提供大约1秒钟宽度的开门脉冲信号以保证电磁锁动作所需要的必要通电时间;报警模块用于提示用户刷卡成功与否。
由于磁卡数据缓存模块和开门信号延时模块占用了很大一部分的片内寄存器资源,在对这两部分的设计中改用了原理图输入方法。相对于使用VHDL语言进行描述,采用这种方法可以更精确地确定寄存器的数量,减少不必要的寄存器。实践证明,采用这种输入方法,综合后的芯片使用率降低了6%(16个LC),提高了芯片功能的可扩展性。图43 软件设计
本系统的软件编程工具采用C++ Builder6.0,实现了动态分配箱位号码和密码、写磁卡、轮循分机、校验密码并发送开箱信号、显示系统运行状态、生成系统运行日志等功能。
由于在系统运行过程中有多项任务需要同时进行,设计采用了多线程技术。在后台,主机使用查询的方式不断地轮循各个分机,当进行写磁卡操作时,程序另外开辟一个线程对磁卡读写器进行操作。
串行通信控件采用TurboPower公司的Async Professional控件集中的TapdComport控件,该控件功能完善,是目前稳定性和可靠性最高的串行通信控件。
在设计时要特别注意的是一定要保证主机软件与分机硬件之间通信协议的一致性,要充分考虑到分机CPLD中状态机各状态转换的各种可能,避免出现死锁情况。