[摘 要]本文主要描述了工控领域中,基于CAN总线的通讯系统软件框架设计。文中分别介绍了该框架的总体结构,结构中各模块的主要软件流程,通讯帧的定义以及最后对整个机制的说明。该系统有比较好的实际应用性,能够适应很多产品的开发。
[关键词]CAN总线;软件框架;通讯系统
[中图分类号]TP336
Software Framework Design of Communication System
Based on the CAN-bus
WU Hao-yu
(Urban Vocational College of Chongqing, Yongchuan, Chongqing 402160, China)
Abstract: This article mainly describes software framework design of communication system based on the CAN-bus in areas of industrial control. Introduced in the framework of the overall structure, the structure of each module in the main software processes, address frames, as well as the definition of the final description of the mechanism as a whole. The system has good practical application, to adapt to the development of many products.
Key words: CAN-bus; software framework; communication system
引言
在科技日新月异发展的今天,工业控制系统作为计算机技术应用领域的一个分支,越来越体现出其巨大的潜力以及不可替代的价值。而在工业控制系统中,控制器局部网(CAN-CONTROLLER AREA NETWORK)由于自身特点,已成为国际上应用最广泛的现场总线之一。
CAN总线最早出现在20世纪80年代末的汽车工业中,由德国BOSCH公司为解决现代汽车中众多的控制与测试仪器之间的数据交换而开发的一种串行数据通信协议,它是一种多主总线,通信介质可以是双绞线、同轴电缆或光导纤维。此后,CAN 通过ISO11898及ISO11519 进行了标准化,在欧洲已是汽车网络的标准协议。现在,CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。现场总线是当今自动化领域技术发展的热点之一,被誉为自动化领域的计算机局域网。它的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持。
CAN总线具备相当多的优点,使其成为许多领域的主要选择。这些优点包括:较长的通讯距离(10Km)、较高的传输速率(1Mbps)、可靠的错误处理机制、可自由配置的节点间接受发送、较强的抗干扰能力等。
1 总体框架
工控领域中,对于一个功能相对完整的产品来说,软件部分基本可以分为控制算法、逻辑、HMI、对外通讯等几部分。由于一个机器一般具备不止一个的独立功能,可能需要多个芯片对其进行控制,并且需要提供一系列接口供用户了解机器运行状态或操作机器,所以我们可以采用各功能模块使用相应的控制芯片(如TI的DSP),然后使用一个ARM来完成HMI以及对外接口功能。这样基本可以根据不同功能各自开发不同的软件,并将各个功能发挥到最好。于是,这些不同模块之间的通讯问题便浮出了水面,基于抗干扰能力,通讯速率、效率,稳定性等特点,CAN总线成为我们的首选。
主要框架图(详见图1)。
图1 主要框架图
在通讯系统中,可以将所需要交互的数据大致分为模拟量(电压、电流、功率等)、状态量(标识当前机器运行的状态)、告警量(标识当前需要提醒用户的故障)、设置量(机器运行的相关参数配置)、命令(一次有效,使机器完成相应的动作)五部分。
图中有2路CAN总线,CAN总线1主要用于将各功能模块的信息(模拟量、状态量、告警量)传递给监控模块,监控模块通过CAN总线采集整个机器的信息,加工以后通过LCD、LED、蜂鸣器,或者串口、网口、USB等设备提供给用户;或者用户通过操作HMI接口或者后台软件从监控向各功能模块下达指令(设置量、命令),进行人为控制。
CAN总线2主要用于几个功能模块间交互信息以用于整机逻辑控制,独立于CAN总线1的原因是CAN总线1在模块较多时数据量较大,而有的逻辑对某些状态数据有时间要求,所以单独使用CAN总线2来传递信息,并且这些数据并不需要提供给用户,只是内部使用。
2 功能模块软件流程
各模块(无论是ARM还是DSP),只要具备在CAN总线上通讯的功能,我们就认为它是一个通讯节点。以下为各通讯节点的处理流程示意图(详见图2)。
图2 通讯节点的处理流程示意图
我们首先定义各模块的ID(可以为硬件拨码,也可以为软件设置)。这个ID可以识别各节点的身份,任一节点的信息在通讯总线上可以任意传输到任何指定节点。在节点接收并判断到是自己的信息后,将会把缓冲区中的信息取出来,进行解析。然后我们可以根据上文提到的消息类型进行分类处理,处理后发送或响应(也可能不需要响应)处理好的帧。
3 通讯帧的定义及划分
CAN总线以报文(Message)为单位进行信息传送, 报文中包含标识符ID,该ID同时表示了报文的优先权:
发生报文发送冲突时,采用标识符ID来进行仲裁,发送具有最高优先权的报文的节点无影响地继续发送,其它节点自动停发。当总线空闲时,这些节点自动重发报文,下面是报文的具体结构(详见表1):
表1 报文具体结构
Start of Frame |
CAN Identifier. 11 bits(29bits) |
Control Field |
Data Field (up to 8 byte) |
CRCField | ACK Field | End of Frame |
BYTE/BIT | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | Destination MAC ID | |||||||
1 | Message Type | |||||||
2 | Data Content | |||||||
3 | ||||||||
4 | ||||||||
5 | ||||||||
6 | ||||||||
7 | ||||||||