APP下载

基于CAN总线的分布式仓储系统设计

2020-01-03

计算机测量与控制 2019年12期
关键词:控制站收发器寄存器

(1.中国人民解放军66294部队,北京 100042;2.中泰证券股份有限公司,济南 250000)

0 引言

在仓储管理领域中,传统仓储平台普遍存在自动化程度低、控制不便及数据存储查询节点远离现场等问题,在仓储作业中,往往仍以人力为主,缺少自动化控制体系。针对上述问题,本文设计了一种基于CAN总线的分布式仓储系统,通过远程控制货柜开闭,验证CAN总线在仓储系统自动化控制中应用的可行性。系统由控制站与现场网络两级构成,控制站为带有CAN收发设备的便携式计算机,现场网络由多个受控节点组成,每个节点以高性能单片机为核心、CAN收发设备作为外围网络接口、带有可控电磁锁的货柜为动作执行部分,操作人员可以在控制站查看货柜物资并根据需求对货柜的开启与关闭进行控制。

1 CAN总线概述

1.1 CAN总线特点

CAN(Controller Area Net,控制器局部网),作为现场总线之一,是一种有效支持分布式控制或实时控制的串行通信网络。CAN最早应用于汽车工业,由于其高性能、高可靠性以及独特的设计而越来越受到人们的重视,后在电力、制造、冶金以及航天等不同行业普及,目前CAN已经成为一种国际标准(ISO-11898),是最有前途的现场总线之一。CAN总线特点如下:

1)两线通信,只需两根线即可连接最多128个设备;

2)接口芯片支持8位、16位单片机,目前多种嵌入式微控制器均集成了CAN通信控制器;

3)CAN可以以多主机方式工作,网络上任意一个节点均可以在任意时刻向其他节点发送信息,不分主从,通信方式灵活;

4)CAN通信距离最远可达10 Km(5 KBps),通信速率最高可达1 MBps(40 m),具有优秀的帧校验及错误处理能力。

1.2 CAN总线物理结构

CAN总线的核心是控制器和收发器。CAN控制器的作用是将需要收发的数据按照CAN的帧格式和编码方式转换成协议数据流(发送),或者解码(接收)。CAN收发器的作用是将控制器发送来的TTL信号转换为CAN标准的差分信号,收发器与物理实体线直接相连。

CAN总线网络由两条信号线组成,分别为CAN_H与CAN_L,各个节点通过这两条线实现信号的串行差分传输。CAN能够使用多种物理介质,如双绞线、光纤等,最常用的就是双绞线。同时,为避免信号的干扰和反射,常在CAN_H于CAN_L间接入阻值为120 Ω的电阻。

1.3 CAN协议

CAN总线的数据传输采用“不归零码”,其数值为两种互补逻辑:“显性”及“隐性”,显性数值表示逻辑“0”,隐性数值表示逻辑“1”。CAN协议中有两种逻辑判定标准,分别为ISO11898和ISO11519,两者差分电平特性不同。ISO11898为高速传输标准,当CAN_H与CAN_L电压差为0时,逻辑信号表现为“隐性”,反之,当两线间压差等于2 V时,逻辑信号表现为“显性”。ISO11519为低速传输标准,当CAN_H与CAN_L电压差为-1.5 V时,逻辑信号表现为“隐性”,反之,当两线间压差等于3 V时,逻辑信号表现为“显性”。ISO11519标准如图1所示。

图1 ISO11519标准中的总线数值表示

CAN总线协议中约定了5个不同的报文格式:数据帧、远程帧、错误帧、过载帧以及隔离帧。其中,数据帧分为标准帧和扩展帧两种,主要功能是将数据从发送器传输到接收器;远程帧和数据帧非常类似,只是远程帧没有数据域,其主要由数据接收端发送,作为请求发送数据的标识;错误帧是当总线的某一个节点检测到错误后进行发送的,会使总线上所有节点都检测到一个错误,因此当有任何一个节点发生错误是,总线上的其他节点也会发出错误帧;过载帧是接收节点用来向发送节点告知自身接收能力的帧,当某个节点数据处理能力不足时,发送过载帧。图2是标准数据帧的结构。

图2 标准数据帧结构

2 分布式控制系统总体设计

系统分为控制站与现场网络两部分,控制站用于与操作人员交互,接受操作指令并将其传送至现场网络。现场网络由多个存储柜组成,每个存储柜自成控制节点,接受控制站送来的指令,并将其转化为控制动作。控制站及现场网络间利用CAN总线相连,拓扑结构如图3所示。

图3 系统拓扑结构

由于当总线空闲时,任何节点都能向线上发送报文,如果两个以上节点同时发送,就可能导致总线访问冲突。为了解决总线上多点竞争的问题,CAN协议中给出了总线仲裁的解决方案。即出现冲突时,每个发送节点都需要对发送的电平与被监控的总线电平进行比较。当电平相同时,这个节点可以继续发送;当电平不同,例如发送的是隐性逻辑信号而监视到的是显性逻辑信号,则该节点失去仲裁,必须退出发送状态。同时,在常用帧的优先级判定上,遵循3个原则:

1)帧标识符(ID)越小,优先级越高;

2)由于数据帧的RTR位为显性电平,远程帧为隐性电平,所以在某2帧或多帧标识符相同的情况下,数据帧具有更高的优先级;

3)由于标准帧的IDE位为显性电平,扩展帧的IDE位为隐形电平,对于前11位ID相同的标准帧和扩展帧,标准帧具有更高的优先级。

3 控制站设计

为简化系统结构,控制站采用便携式计算机加CAN总线收发器的设计,便携式计算机与CAN总线收发器以RS-232串行接口进行连接。在软件设计上,编写包含与CAN总线收发器通信等功能函数的动态链接库“controlCAN.dll”,实现了CAN总线通信功能的模块化封装,使其可以适用于多种不同语言。

同时,控制站上整合了仓储物资的数据库,在控制站上可以实现对物资的信息查询机处理。

4 控制节点设计

4.1 硬件设计

控制节点可实现三大功能,分别为中央控制、CAN总线通信、动作执行以及状态反馈及显示。

4.1.1 中央控制部分

该部分以89C52单片机为核心,主要用于通过与控制站进行信息交互,依据接收控制站发送的信息,生成控制指令,将控制指令发送给执行部分执行控制动作,同时将传感器反馈的受控对象状态返回至控制站。另外,还通过MAX232芯片扩展了备用的RS-232串行接口。

单片机与CAN总线控制器通过地址总线与数据总线的方式连接,占用P0接口,单片机的P1接口用于为动作执行部分发送控制指令,P2及部分P3接口用于接收并显示状态反馈信号。

图4 中央控制部分电路

4.1.2 CAN总线通信部分

采用CAN总线控制芯片SJA1000以及CAN总线收发芯片82C250实现CAN总线通信功能,SJA1000与82C250部分电路如图5所示。

图5 CAN总线通信部分电路

SJA1000是NXP半导体生产的CAN总线控制器芯片,是常用的CAN总线控制器之一。其支持CAN2.0A与CAN2.0B两种不同协议,两种工作模式可以通过芯片内部时钟分频寄存器CDR的CAN模式位来选择,本设计使用了CAN2.0B协议。SJA1000通过8位数据总线与单片机进行数据传递,单片机可以通过控制SJA1000的片选、读允许、写允许、地址锁存等引脚实现对数据传输的时序控制。同时,SJA1000芯片的中断输出引脚与单片机的外部中断INT0相连,以便于当接收到总线上传来的数据后,能迅速引起中断,及时对数据进行处理。CAN总线控制器的输出与CAN总线收发器PCA82C250相连,TTL信号从控制器传输给收发器后,进行编码处理。

PCA82C250芯片CAN总线收发器提供了CAN控制器与物理总线之间的接口,对总线提供差动发送能力,并对CAN控制器提供差动接收能力。SJA1000通过串行数据输出线(Tx)与串行数据输入线(Rx)连接到PCA82C250上,收发器通过有差动发送和接收功能的两个总线终端CAN_H与CAN_L连接到总线电缆,同时为了避免信号干扰,在两根数据线之间接入阻值为120 Ω的电阻。当SJA1000输出串行数据流至收发器时,收发器内部上拉功能将其拉至逻辑高电平,即总线输出默认是隐性的。若数据是逻辑低电平,则总线的输出级激活,输出级由一个源输出级与一个下拉输出级组成,激活后会在总线电缆上产生一个显性的电平信号。收发器中接收器的比较器将差分总线信号转换成逻辑信号电平,并在Rx引脚输出至总线控制器进行译码。接收器的比较器总是工作的,即当总线节点传输一个报文时,它同时也监控总线。

4.1.3 动作执行部分

动作执行部分由多路光电耦合器、固态继电器以及柜体上电磁锁组成。光电耦合器对单片机及继电器进行了隔离,接到单片机控制指令后,9 V电源通过继电器送入柜体电磁锁,使电磁锁动作。动作执行部分电路如图6所示。

图6 动作执行部分电路

对于上述控制部分,为每一路设计光电隔离,主要考虑两个方面:一是切断可能存在的信号干扰通道,避免核心电路受到外部干扰影响;二是保护内部核心电路,当外部执行机构出现瞬変脉冲等情况时,只会影响光电耦合器,不会对内部电路造成损坏。

同时,最初设计时,为了节省成本,执行机构控制部分所使用的均为电磁继电器,但在测试中发现,电磁继电器状态变化时触点上产生的火花会对CAN总线数据传输造成干扰,外加RC吸收电路后并无明显改观,因此在后续设计中执行机构控制部分一律使用固态继电器。

4.1.4 状态反馈部分

状态反馈部分通过柜体上的传感器向单片机返回箱门状态,同时利用LED显示相应状态。

4.2 软件设计

4.2.1 软件总体设计及通信格式

软件总体流程如图7所示。

图7 软件总体流程

控制站与控制节点采用的通信数据格式如图7所示。其中,以一个显性位为帧头,后以两个字节数据发送标示符,包括11位接收设备地址以及1位数据/远程帧标识位(RTR),本设计中,控制站的地址码为0x0020,4个控制节点地址码依次递增,为0x0040、0x0080、0x00A0、0x00C0、0x00E0,RTR位为0。标示符之后,为四位数据长度码,以字节为单位。长度码后为1字节数据。之后,为15位冗余校验码以及2位一致性检验位,最后由7个隐性位作为帧尾,结束本数据帧。

图8 通信数据格式示意图

4.2.2 SJA1000工作配置

CAN收发器SJA1000在工作前需要对其进行配置。SJA1000的模式寄存器各控制字如表1所示。

表1 信号调理电路输出电压试验数据

其中,Bit0位(RM)为复位模式选择,当RM=1时进入复位模式,当RM=0时退出复位模式。

配置时需通过设置模式寄存器使其进入复位模式,对SJA1000的配置主要设置工作模式、工作时钟、中断方式、本机地址、接收屏蔽、通信频率等内容,详细程序如下:

void SJA1000_Init(void){

uchar i;

MODE=0x01;// 进入复位模式

CDR=0x88;// 设置时钟分频器,设置工作模式

IER=0x0D;//开放接收中断

ACR0=0x00;//设置本机地址码为02

ACR1=0x40;

ACR2=0x00;

ACR3=0x00;

AMR0=0x00;//设置屏蔽码

AMR1=0x00;

AMR2=0xFF;

AMR3=0xFF;

BTR0=0x00;//设置通信频率为500Kbps

BTR1=0x1C;

OCR=0xAA;//设置输出控制寄存器,正常输出

TXERR=0x00;// 清除发送错误计数寄存器

i=ECC;// 清除错误代码捕捉寄存器

MODE=0x08;//设置单滤波方式,进入工作模式

}

设置传输波特率是配置SJA1000重要的一环,传输波特率由总线定时寄存器0(BTR0)与总线定时寄存器1(BTR1)进行设置。BTR0定义了波特率预设值和同步跳转宽度的值,BTR1定义了每个位周期的长度、采样点的位置和在每个采样点的采样次数。

CAN系统时钟由如下公式计算:

tSCL=2tCLK×(BTR0低6位数值+1)

(1)

通常来讲,在外部时钟为16 MHz时,总线定时器的值可以按表2参数确定。

表2 外部晶振频率16 MHz时传输波特率及所对应寄存器参数

在配置中,开启了单滤波模式的验收滤波器。验收滤波器包括验收代码寄存器(ACR)和验收屏蔽寄存器(AMR)。信息标示符和验收滤波器中预设值一致时,才会被SJA1000接收。验收滤波器原理如图9所示。

图9 验收滤波器工作原理

ACR定义所要接收信息标示符的值,AMR定义所要屏蔽的位,当AMR的某位值为1时,则对应的标示符位为需要验收,而当其为0时,则对应的标示符位不需验收。

4.2.3 数据发送与接收

数据发送时,用户首先要将所发送的数据按照相关协议规定的格式,组成数据帧。将数据帧送入SJA1000发送缓冲区后,执行发送命令。SJA1000中,和数据发送密切相关的寄存器,主要有两个,分别是用于设置发送模式的CMR寄存器以及用于监控总线状态的SR寄存器。CMR寄存器如表3所示,通过其可以对数据发送进行设置。

表3 CMR寄存器

其中,TR为发送请求位,AT为终止传送位,SRR为自接受请求位。

SR寄存器如表4所示。

表4 SR寄存器

其中,BS指示总线状态,总线关闭时为0,总线开启时为1;ES指示错误状态,侦测到错误时该位置1;TS指示发送状态,有数据正在发送时该位置1;RS指示接收状态,有数据正在接收时该位置1;TCS指示发送完毕状态,最后一次数据发送已被成功处理时,该位置1,否则置0;TBS指示发送缓冲器状态,置1时表示可以向缓冲器中写入数据,置0时表示缓冲器锁定;DOS指示数据溢出情况,置1时表示报文因存储空间不足有部分溢出丢失;RBS为接收缓冲器状态,置1时表示缓冲器中有未处理的数据,置0时表示接收缓冲器为空。

发送命令执行前,一般需要进行发送检查。检查内容包括3个状态位,一是RS,看控制器是否正在接收信息,如果是则需要等接收完成后才能申请发送;二是TCS,看是否还有未完成发送的信息,如果有,则需要等待发送完成后再申请发送;三是TBS,看发送缓冲区锁定情况,如果处于锁定状态,需要待其清零后才能向缓冲区写入数据。

接收数据时程序采用查询方式,程序流程如图10所示。

图10 数据发送流程图

为了保证较高的响应速度,程序中设置了中断的方式用于接收数据。接收数据的流程与发送数据相似,也需要判断多个状态,主要涉及中断状态寄存器IR,其结构如表5所示。

表5 IR寄存器

其中,BEI为总线错误中断位,检测到总线错误时置1;ALI为仲裁丢失中断位,出现丢失仲裁时置1;EPI为错误认可中断位,当控制器达到错误认可状态时置1;WUI为唤醒中断位,当控制器从休眠状态被唤醒时置1;DOI为数据溢出中断位,当出现数据溢出时置1;EI为错误报警中断位,当检测到错误时置1;TI为发送中断位,当一次发送完成时置1;RI为接收中断位,当出现一次数据接收时置1。

首先,读取中断状态寄存器IR,判断是否存在错误或其它异常情况,如果有异常情况,需要先读取中断寄存器把错误标志清除,然后进行相应的处理;其次看是否出现数据溢出情况,如果有数据溢出,需要释放掉接收缓冲区,将本次接收数据作废;最后检查是否存在其他错误;当以上检查均无异常后,可正常进行数据接收,程序流程如图11所示。

同时,当有数据到来时,SJA1000给单片机外部中断0(INT0)发送一个中断信号,单片机进入中断。在INT0的服务程序中,单片机分别对总线状态、数据溢出标志等进行读取,判断数据正常后,读取数据并释放缓冲区。

图11 数据接收流程图

5 结语

针对传统仓储平台普遍存在自动化程度低,控制不便,数据存储查询节点远离现场等问题,本文设计了一种基于CAN总线的由控制站与现场网络构成的分布式仓储系统。由于CAN总线具有传输距离远(传输速率5 Kbps时直接传输距离可达10 km)的优点,系统的控制站可以脱离控制现场,并与前端的数据存储与查询系统整合。得益于CAN总线特点,在总线上可挂载多达110个节点,极大方便了仓储货柜的数量扩展。同时,在远端的控制站可以有效可靠地对被控节点进行控制,说明CAN总线网络在仓储系统自动化控制设计中具有较高的实用性。

猜你喜欢

控制站收发器寄存器
Lite寄存器模型的设计与实现
光纤收发器故障排除经验谈
DCS系统在机井控制中的应用
法国水师兵营旧址 曾作为法国在长江上游的控制站
ECS-100系统控制站硬件配置及使用
常用电子测速法在某数字信号处理器中的应用*
移位寄存器及算术运算应用
Virtex5 FPGA GTP_DUAL硬核两个收发器独立使用的实现
美国无人机地面控制站的改进与发展
光纤收发器常见故障原因