1.引言
CAN总线(Controller Area Network Bus)是一种有效支持分布式控制的串行通信网络。它比一般的通信总线具有更高的可靠性、实时性和灵活性。CAN为多主方式工作,网络上任一节点均可在任意时刻主动地向网络上其他节点发送信息,而且不分主从,通信方式灵活,无需站地址等节点信息。CAN总线现已广泛应用于工业现场控制、小区安防、环境监控等众多领域中。
2.系统结构
实时通信的食堂售饭系统的通信特点非常适合于采用CAN总线。它的短帧结构非常适合系统对抗干扰能力和实时通信能力要求较高,单次通信量很小的场合;灵活的组网特点完全可以解决大型食堂售饭系统中多个食堂和营业网点较分散的问题。
基于CAN总线的食堂售饭系统网络结构如图1所示。采用总线型接法,主要包含三层:服务器、中继器和终端。其中服务器包括工作服务器和备用服务器,这两个服务器在营业时同时工作,互为备用,保证系统的稳定可靠。中继器可以延伸通信距离,增加终端数目,变换通信速率,并能起到滤波和隔离作用。终端主要是销售用的窗口机,还包括挂失机、解挂机、发卡/充值机等。
3.窗口机硬件设计
窗口机是直接与售饭人员和用户打交道的主要前台设备。图2为窗口机的硬件结构框图。采用Dallas内嵌CAN控制器的高速网络微控制器 DS80C410作为窗口机的微处理器,负责整个窗口机和键盘的监控。MMM为非接触式IC(Mifare)卡读/写器模块。该模块在微处理器的控制下,可完成对卡片的非接触式读/写等操作。窗口机的通信任务是DS80C410内嵌的CAN控制器在CPU控制下完成的,CAN控制器通过CAN总线收发器PCA82C250接收总线上的数据,供CPU读取,也可以将CPU送来的数据发送到CAN总线上。内嵌CAN控制器通过DS80C410芯片上的P5.1(C0RX-CAN接收)和P5.0(C0TX-CAN发送)脚分别与收发器的RXD(接收数据输出)和TXD(发送数据输入)脚相连。窗口机硬件还包括一个4×4键盘(10个数字键、6个功能键)、前后各10位数码显示(显示内容完全相同)、32KB的EEPROM(用来存储消费记录)、看门狗等部分电路。
4.窗口机软件设计
4.1主程序设计
窗口机具有连网和脱网两种运行方式。窗口机的默认工作方式分为连网运行,只有在出现网络故障或其他原因无法连网运行时,才通过开关设定为脱网运行。图3为窗口机运行的主程序流程图。窗口机初始化后,先进行键盘处理,LED显示处理,并判断是否回收消费记录。然后查询是否读到卡,读到卡后,调用相应连网或脱网子程序,进行营业操作。
4.1.1CAN的初始化
窗口机的初始化,包括对CAN模块的初始化。当系统硬件复位后,首先屏蔽CAN中断,然后将位于DS80C410的SFR(特殊功能寄存器)中的 C0C(CAN控制寄存器)中的CRST(复位) 位清0,即清除了CAN控制器的复位状态,同时 SWINT(软件初始化) 位要置 1,即禁止CAN 的总线活动,这样才允许程序对 CAN 模块中的控制寄存器和扩展帧的屏蔽寄存器(C0EGM0~C0EGM3)进行写操作,并设置通信波特率、窗口机ID、窗口机号、CAN状态、CAN口使能、CAN定时等参数, 初始化CAN模块。最后恢复CAN中断。初始化结束后,要清 SWINT位,恢复 CAN 总线的活动。
4.2子程序设计
4.2.1工作流程
在连网情况下,当窗口机通过MMM获取卡号后,将卡号发送给服务器,服务器收到卡号后,在数据库中查找对应卡号的用户余额并将其返回给窗口机。窗口机显示接收到的用户余额,当一次营业操作完成以后,窗口机将用户总消费额发送给服务器,服务器接收到消费额后进行相应数据库记录的更新,并将已接收消费额的确认帧(ACK)返回给窗口机。如果窗口机将读到的卡号(SNR)发送给服务器的过程中帧丢失,即窗口机没有收到服务器的余额帧,这时窗口机等待一个重发时间,仍未收到服务器的余额帧后,将重发先前的卡号。最多重发3次,当重发3次仍无法收到服务器的回应帧后,显示相应的提示信息。如果在结帐以后,窗口机发给服务器的用户消费额帧丢失,即服务器没有收到消费额帧,无法进行相应记录的更新,同样采取上述方法重发用户消费额。图4为连网子程序流程图。
脱网情况下,窗口机采用的是记帐的办法,将脱网状态下用户的卡号和消费记录全部存储在窗
口机的EEPROM中,等系统恢复连网运行以后,服务器从各窗口机中回收存储的数据,进行服务器数据库的更新。由于脱网情况下窗口机不能和服务器进行实时通信,所以程序较简单,就不再给出流程图了。
4.2.2帧的发送和接收
DS80C410中CAN模块提供了15个报文中心,作为发送或接收数据的存储器。帧的发送和接收通过这15个报文中心实现,也可以选择一个或若干个报文中心发送或接收帧。这15个报文中心发送或接收数据的优先级顺序是以报文中心的逆序排列的。报文中心1-14可设置为接收或发送数据,报文中心15只能接收数据。报文中心的控制寄存器(C0M1C~C0M15C)位于SFR中。每个报文中心有一个格式寄存器(C0MyF)、4个仲裁寄存器和8个字节(C0MyD0~C0MyD7)的数据区域。仲裁寄存器的值可以在初始化中设置,也可以在发送程序中设置,而且它的值可随着数据的接收而自动更改。另外,报文中心15的C015M0~C015M3寄存器,还可以执行附加的滤波。
当网络中某一窗口机处于发送状态时,首先对使用的报文中心初始化,把要发送的报文装入报文中心,报文中心仲裁寄存器的值作为帧的标识符发送出去。图5为使用报文中心1发送数据的程序流程图,其中MSRDY(报文中心就绪),DTUP(数据更新),MTRQ(CPU发送请求)等位是报文中心1的控制寄存器C0M1C的位。
当窗口机处于接收状态时,CAN控制器将根据屏蔽寄存器和接收报文中心的仲裁寄存器的值对接收帧的ID标识符进行判断,确定报文中心是否接收,只有当接收帧的标识符与仲裁寄存器的值相等的时候,帧才被接收;另外,CAN模块还有媒体屏蔽寄存器和媒体仲裁寄存器,可对接收的数据帧的第0和1两个字节进行额外的校验。图6是使用报文中心2接收数据的程序流程图。其中 MSRDY,DTUP,MTRQ等位是报文中心 2的控制寄存器 C0M2C的位。
5.结束语
DS80C410是带有以太网和CAN的网络微控制器。包括一个10/100以太网MAC,三个全双工硬件串行口,8个双向8位端口,一个可选的CAN2.0B控制器,1-Wire®主机和64个I/O引脚及用于存储用户应用和网络堆栈的64K字节内部SRAM。内嵌CAN模块支持标准(11位)和扩展(29位)标识符和通用掩模,媒体字节过滤, DeviceNet™,SDS和高层CAN协议,自动波特率模式和SIESTA低功耗模式。基于DS80C410内嵌CAN总线的食堂售饭系统,不仅有良好的稳定性、安全性和可靠性,而且实时响应能力强,网络维护方便,用户界面友好、软件使用、升级和移植方便,成本低廉。