APP下载

基于CAN的网控器的设计

2010-08-24

制造业自动化 2010年15期
关键词:子网缓冲区中断

冯 林

FENG Lin

(东华理工大学,抚州 344000)

0 引言

中核抚州金安铀业有限公司是我国第一批开发建设的铀矿山之一。主要从事铀矿的采冶,用于国防军工和核电发展,现已建成具备采矿、选矿、水冶综合生产能力及社会职能齐全的铀矿冶联合企业,天然铀年产量占全国产量的四分之一左右,素有“铀都”之称。目前主要的矿区有:山南工区、邹家山工区、沙洲工区,它们彼此相距2至3公里。

由于矿区地理位置分散,相隔较远, 矿区面积不断扩大,各消费点又非常分散,需要有一种网络设备能将各消费点与服务器连接起来,实现消费信息的高效实时传输。这样的网络设备一般采用的网控器,本文提出了采用CAN网控器的方案。系统中所设计的CAN网控器不仅具有中继的功能,而且具有一定的网桥功能,它充分利用了CAN总线控制器可灵活配置的特点,在两个CAN子网之间实现报文的过滤,使各个子网都能高效运转,而这些对于各CAN节点和服务器而言都是透明的。

本文重点介绍我们研制的基于CAN的网控器的设计。

1 网控器的硬件设计

CAN网控器是系统组网的关键设备之一,它不仅仅是网控器,而且具有一定的网桥功能。因为只要对网控器的初始化参数进行适当配置,就能使网控器既具有报文转发功能,又具有报文过滤功能。如图1所示,CAN网控器主要由89C58和两路CAN控制器接口组成,89C58作为CAN网控器的微控制器,负责整个网控器的监控任务。两路CAN控制器接口电路基本相同,都是由CAN通信控制器SJA1000,光电耦合电路和CAN总线收发器82C250组成。两路CAN接口的CAN总线收发器都采用带隔离的DC/DC模块单独供电。这样就不仅实现了两路CAN接口之间的电气隔离,也实现了网控器与CAN总线的隔离。虽然为此在一定程度上增加了网控器硬件的复杂性,但却是值得的。采取隔离措施,可使故障局限在某一网段内,而不至于影响其它网段,即便于维护又保证了系统设备的安全。网控器硬件除了以上主要部分以外,还有LED指示,EEPROM和看门狗等部分。网控器中共设计了7个LED,一个用于网控器上电指示,四个用于两路CAN接口的当前接收和发送状态指示,还有两个用于两路CAN接口的通信故障(如总线脱离)指示。这样从网控器面板上LED的指示就可以基本了解网控器的整个运行情况。网控器的看门狗部分使用的一片X25045。X25045除具有看门狗和上电复位功能以外,其内部还集成了512个字节的EEPROM,EEPROM可用于保存网控器的配置参数等信息,以便于系统的灵活配置。

图1 网控器硬件结构框图

2 网控器的软件设计

因为网控器一旦出故障,影响的将是整个子网。网控器的软件设计除了尽量满足上面的要求以外,还基于这样一个原则,就是让网控器除了完成信息的过滤和中继任务以外,使其功能尽量简化。因为要保证服务器和窗口机之间传输信息的可靠性,唯有通过应用层的端端差错控制才能满足要求,而在网控器中加入过多的差错控制和流量控制功能不仅达不到目的,同时还降低了网控器的运行效率,增加了故障隐患。由于网控器的缓冲区RAM有限,其本身又没有流量控制功能,所以对于缓冲区满时接收的数据帧只能采用丢弃的办法。当然,在总线通信正常的情况下,缓性区溢出的可能性是很小的。既使由于溢出而丢弃了后面接收到的数据帧,应用层通信协议也可以保证端端通信的可靠性。至于网控器软件的具体设计,下面分几个模块来分别进行说明。

2.1 网控器初始化模块

网控器的初始化模块主要用于网控器的参数配置。网控器在初次使用或者由于某种特殊情况需要时,都必须进行参数的配置。如图2所示为网控器初始化程序流程图。从图中可以看出,对于需要进行参数配置的网控器,服务器在参数配置完成以前不能有通过该网控器发送给其它网控器或窗口机的数据帧,否则网控器就会退出参数配置状态而进入网控器正常运行状态。之所以这样设计,主要是考虑网控器需要进行参数配置的情况很少,平时服务器只须任意发送一帧通过网控器的信息,就可以启动网控器进入正常运行状态。而不必象窗口机那样要求开机命令,这样网控器对于用户来说才是真正透明的。网控器在完成了参数配置时,必须将配置成功与否的消息返回给服务器作相应处理。

2.2 网控器监控模块

网控器的接收采用的是外部中断方式接收,发送是在监控程序中完成的。如图3所示为网控器监控程序流程图。监控程序根据接收缓冲区中是否有数据,决定是否发送以及发送给谁。如接收服务器数据缓冲区中有数据则向子网转发,如接收窗口机数据缓冲区中有数据则向服务器转发。另外在主监控程序中对任一方CAN总线脱离的情况也作了处理,脱离标志的建立和清除都是在中断处理程序中完成的。当任一方CAN控制器的发送错误计数器(TXERR)大于或等于256时,都会进入总线脱离状态。进入总线脱离状态的节点,只有在将方式寄存器(MODE)中的Reset Request位清0(因为总线脱离后Reset Request位会自动变为1),并监测到总线上128次11个连续的隐性位发生后,才可以由总线脱离状态再次进入错误激活状态。当CAN总线脱离时,说明总线错误已非常严重,网控器碰到这种情况则将缓冲区全部清除,并对未脱离方随后接收到的数据也采用丢弃的办法。同时,在主监控程序中对允许脱离的次数也作了一个限制,最多不能超过三次,这样可以避免某些确已被严重干扰的节点影响到其它正常节点的工作。

2.3 中断处理模块

网控器的外部中断共有两个,包括接收服务器数据中断和接收窗口机数据中断。接收服务器数据中断相对要复杂一些,因为必须处理服务器发来的相关命令。在本节中就以接收服务器数据中断为例进行分析。

图2 网控器初始化程序流程图

图3 网控器监控程序流程图

图4 网控器中断处理程序流程图(接收服务器数据)

实际上网控器的大部分工作是在中断处理程序中完成的,包括数据的接收,脱离标志的建立和清除,脱离后Reset Request位的清0,请求状态标志的建立和子网状态查询命令的修改等等。如图4所示,为网控器接收服务器数据中断处理程序流程图。

在中断处理程序中真正复杂的地方还是数据的接收部分。在数据接收前,要根据接收数据的长度判断接收缓冲区是否会溢出。若会溢出,则判断是否状态查询命令,是则置位请求状态标志,对于接收的其它数据帧则丢弃。若缓冲区不会溢出,则接收服务器数据。接收服务器数据后取出命令字节,判断是否网控器状态查询命令,若是则置位请求状态标志,不进行缓冲区参数调整(因为是服务器发送给网控器的命令,只要求网控器作出响应,不要求其转发,所以不能放入缓冲区中)。若不是网控器状态查询命令,再判断是否子网状态查询命令,若是子网状态查询命令,则在置请求状态标志的同时将子网查询命令修改为窗口机查询命令(因为子网状态查询命令在要求网控器返回其状态的同时,还要求其所连子网中各窗口机也返回自身状态,所以网控器要向其所连子网各窗口机采用广播方式发送一条状态查询命令。采用这种方式,提高了服务器对各网络设备进行状态查询的效率)。若不是子网状态查询命令,则不作处理,只进行缓冲区参数调整,接收数据有效。随后是释放CAN接收缓冲区,恢复现场和中断返回等工作。

3 结束语

按上述方法设计的网控器已成功应用于某地质采矿单位“一卡通”设计方案中,该系统已运行多年,非常稳定,取得了较好的经济效益,具有推广的价值。

本文创新点:论文首次设计了基于普通单片机的CAN网控器,该网控器是“一卡通”底层网络设计的关键设备,它提高了网络设计的灵活性,极大的扩展了其应用范围。网控器的研制成功为较大规模的信息管理提供了一种操作方便而又性价比高的设计方案。

[1] 王爱英.智能卡技术-IC卡[M].北京:清华大学出版社,2000.

[2] 周航慈.单片机应用程序设计技术[M].北京:北京航空航天大学出版社,1991.

[3] 李庆文,移动环境下多数据项请求广播时效性研究[J].微计算机信息,2010,26(21),1115-117.

[4] 汪小澄,池诚.基于S3C2410嵌入式系统的网络接口设计[J] .微计算机信息(嵌入式与SOC),2007,23.131-133.

[5] 徐建俊,等.基于神经元芯片MC143150和单片机AT89C51的LON节点研究与设计[J] .电测与仪表,2007,44(499),57-60.

猜你喜欢

子网缓冲区中断
考虑荷电状态的交直流微电网多模式协调控制策略
子网划分问题研究及应用
基于FPGA的中断控制器设计*
Linux中断线程化分析及中断延时测试
航天器多子网时间同步系统设计与验证
基于ARC的闪存数据库缓冲区算法①
跟踪导练(二)(5)
千里移防,卫勤保障不中断
一类装配支线缓冲区配置的两阶段求解方法研究
初涉缓冲区