CAN总线基础知识简介
CAN总线(CONTROLLER AREA NETWORK,控制器局部网络)由德国BOSCH公司首先提出来的,CAN总线是目前工业界广泛应用的总线。其特点简要归纳如下:
1)CAN控制器工作于多主站方式,网络中的各节点都可根据总线访问优先权(取决于报文标识符)采用无损结构的逐位仲裁的方式竞争向总线发送数据。而利用RS-485只能构成主从式结构系统,通信方式也只能以主站轮询的方式进行,系统的实时性、可靠性较差。
2)CAN协议废除了传统的站地址编码,而代之以对通信数据进行编码,其优点是可使网络内的节点个数在理论上不受限制,加入或减少设备都不影响系统的工作。同时可使不同的节点同时接收到相同的数据,这些特点使得CAN总线构成的网络各节点之间的数据通信实时性强,并且容易构成冗余结构,提高系统的可靠性和系统的灵活性。
3)CAN总线通过CAN控制器接口芯片的两个输出端CANH和CANL与物理总线相连,而CANH端的状态只能是高电平或悬浮状态,CANL端只能是低电平或悬浮状态。这样就保证不会出现类似在RS-485网络中系统有错误时会导致出现多节点同时向总线发送数据而导致总线呈现短路从而损坏某些节点的现象。而且CAN节点在错误严重的情况下具有自动关闭输出功能,以使总线上其他节点的操作不受影响,从而保证不会出现象在网络中,因个别节点出现问题,使得总线处于“死锁”状态。
4)CAN具有的完善的通信协议可由CAN控制器芯片及其接口芯片来实现,从而大大降低了用户系统开发的难度,缩短了开发周期,这些是仅仅有电气协议的RS-485所无法比拟的。
5)与其它现场总线比较而言,CAN总线通信最高速率可达1MBPS,传输速率为5KBPS时,采用双绞线,传输距离可达10KM,并且数据传输可靠性高;CAN总线是具有通信速率高、容易实现、且性价比高等诸多特点的一种已形成国际标准的现场总线。这些也是目前 CAN总线应用于众多领域,具有强劲的市场竞争力的重要原因。
CAN总线与RS485方式的区别:
特性 |
RS-485方式 |
CAN总线 |
拓扑结构 |
直线拓扑 |
直线拓扑 |
传输介质 |
双绞线 |
双绞线 |
硬件成本 |
很低 |
每个节点成本有所增加 |
总线利用率 |
低 |
高 |
网络特性 |
单主结构 |
多主结构 |
数据传输率 |
低 |
最高可达1Mbps |
容错机制 |
无 |
由硬件完成错误处理和检错机制 |
通讯失败率 |
很高 |
极低 |
节点错误的影响 |
故障节点有可能导致整个网络瘫痪 |
故障节点对整个网络无影响 |
通讯距离 |
<1.2Km |
可达10Km(5Kbps) |
后期维护成本 |
较高 |
很低 |
CAN总线系统结构:CAN总线每个节点需要带有CAN协议控制芯片及适当的接口电路,节点之间通过双绞屏蔽线进行总线式连接,首尾节点需要接120R的匹配电阻,通信最高速率可达1MBPS,传输速率越低,传输距离越远。系统结构如下:
CAN协议的报文格式:CAN协议支持两种报文格式CAN2.0A和CAN2.0B; CAN2.0A为标准格式,CAN2.0B为扩展格式;格式分别如下:
CAN2.0A协议报文结构图如下
CAN2.0B协议报文结构图如下
标准格式和扩展格式唯一的不同是标识符(ID)长度不同,标准格式为11位(ID10-ID0),扩展格式为29位(ID10-ID0,EID17-EID0)。
在标准格式和扩展格式中,报文的起始位称为帧起始(SOF),帧起始标志数据帧或远程帧的起始,由一个单独的“显性”位(0)组成。由控制芯片自动完成,不需要用户在程序中体现。
然后是由11位标识符(ID10-ID0)(扩展格式为29位(ID10-ID0,EID17-EID0))和远程发送请求位 (RTR)组成的仲裁场。RTR位标明是数据帧还是请求帧,在请求帧中没有数据字节。
控制场包括标识符扩展位(IDE),指出是标准格式还是扩展格式。它还包括一个保留位 (RBO),为将来扩展使用。它的最后四个位用来指明数据场中数据的长度(大小就是由DLC3-DLC0组成的2进制数据)。数据场范围为0~8个字节(DATA FIELD),其后有一个检测数据错误的循环冗余检查(CRC)。
应答场(ACK)包括应答位和应答分隔符。发送站发送的这两位均为隐性电平(逻辑1),这时正确接收报文的接收站发送主控电平(逻辑0)覆盖它。用这种方法,发送站可以保证网络中至少有一个站能正确接收到报文.
报文的尾部由帧结束标出。在相邻的两条报文间有一很短的间隔位,如果这时没有站进行总线存取,总线将处于空闲状态。
艾默生CT PLC集成CAN总线功能介绍
ECCT的CAN通信功能支持CAN2.0A协议和CAN2.0B协议,通信波特率设置范围为5-100KBPS,可以通过艾默生CT PLC编程软件CONTROLSTAR FOR ECCT进行设置。具体使用步骤如下:
1)基本设置:在工程管理器里双击“系统块”,在弹出的窗口选择“CAN口设置”,在“CAN口参数设置”里选择“自由协议”,然后单击后面的“自由口设置”按扭。在弹出的窗口选择协议类型“2.0A”或“2.0B”,然后再下拉选择“波特率”最后单击“确定”,把系统块下载到PLC里。
2)数据发送:使用指令CANXMT,并以CAN2。0A协议为例描绘了它们之间的对应关系。
3)数据接收:使用CANRCV指令(参数含义如下)或使用CAN接收中断功能。我推荐对初使用者采用中断更方便,具体用法参考下面的例子程序。
笔者根据ECCT集成的CAN总线功能,在纺织机械上的得到了成功的应用,现介绍如下:其CAN系统总体结构图如下:
此系统的具体工艺不做介绍,这里只介绍CAN通信部分的应用。
程序使用说明如下:
1.首先根据要求在“系统块”里对CAN通信口进行设置。
2.数据发送部分:对ID为5的地址发送4个字数据“16#1122,16#3344,16#6789,16#1234”需要编写的程序为如下:
其中要注意的是:1)CANXMT为上升沿执行指令,M1000为指令执行条件,当其出现OFF—>ON的变化时,执行CANXMT指令;2)使用CANXMT指令前先把该赋值的地址写好;3) 发送数据只取D元件的低8位; 4)网络上没有CANID、数据完全相同的CAN帧同时出现;5)ID保留0。6)CAN程序的校验部分全部由硬件自动完成,用户程序不需要参与。
3.数据接收部分:此部分以使用中断方式接收数据为例,分2部分步骤:
1)先在主程序中设置CAN中断使能.
2)设置中断程序属性,把其中断事件选为48(即CAN接收中断),然后编写程序把接收到的数据传递到需要的地址.注意ID地址为双字结构,SD282-290依次为数据的高低字节,把他们传递到相应的数据寄存器然后合并就可以得到完整的数据了。
总结:由于CAN协议格式比较简单,并且相当部分工作由CAN控制芯片硬件完成,所以编写程序比较简单,实现起来很容易,此纺织系统采用CAN通信方式后,速度大大提高并且系统更加稳定,受到用户的肯定。
(转载)