基于CAN总线的PLC通信技术的研究*

2016-08-10 03:43牟宏均
计算机与数字工程 2016年7期
关键词:CAN总线

牟宏均

(宝鸡职业技术学院 宝鸡 721013)



基于CAN总线的PLC通信技术的研究*

牟宏均

(宝鸡职业技术学院宝鸡721013)

摘要CAN总线如果能与PPI协议进行转换,那么CAN总线上的智能节点便能访问S7-200系列PLC,从而实现异型网络间的数据通信。论文对实现PPI协议与CAN协议的硬件设计方案进行研究,对PPI接口电路和CAN接口电路进行设计,分析了CAN应用层协议,对整体软件结构和运行进行分析,最后对转化协议进行测试。

关键词PLC; PPI; CAN总线

Class NumberTP273

1引言

现场总线的实时、可靠、低成本、使用方便等特点使其在被控现场得到了广泛的应用。以现场总线为核心的现场总线控制系统必将成为未来工业生产的重要组成部分[1]。如果能够在现场总线的智能节点上实现PPI协议,那么就很容易实现对S7-200的内部存储区域的访问,并且S7-200通信的过程中无需要任何程序支持,如果需要配合智能设备一起完成控制功能,只需对自己的存储区域的某些区域进行读和写,进而完成控制功能[2]。作为现场总线的一种,控制器局域网CAN是一种多主总线系统,通信介质可以是双绞线、同轴电缆或光导纤维,适合工业领域和汽车领域的设备间的互联,因此,被视为最有前途的现场总线之一。如果能够实现CAN总线与PPI协议的转换,那么CAN总线上的智能节点便能访问S7-200系列PLC,从而实现异型网络间的数据通信,这样,CAN网络与PPI网络上的节点便能一起完成更复杂的控制,因此,CAN-PPI协议的转换成为最关键的问题。如果能够实现CAN与PPI的协议转换,在应用时,只需要在此基础上根据应用需求做二次开发即可。

2硬件设计方案

实现PPI协议与CAN协议的转换,即实现PPI协议到CAN协议的透明传输,CAN总线上的节点无需关心PPI协议,只需通过CAN-PPI网关控制器,就可以访问S7-200系列PLC[3]。由于PPI协议是主/从的协议[4],另外,PPI协议是和S7-200系列PLC存储单元相关的,而CAN节点和CAN-PPI网关控制器上没有对应的存储单元,因此把S7-200系列PLC作为从站,CAN节点或CAN-PPI网关控制器作为主站,即通信是由CAN节点或CAN-PPI网关控制器发起,S7-200系列PLC是被动地响应,从而实现对S7-200存储区域的访问。图1是课题系统硬件设计方案。

2.1PPI接口电路设计

PPI接口电路如图2所示。PPI协议的物理层基于RS-485,图中使用了SP3485作为收发器,SP3485的工作电压使用的3.3V,之所以使用SP3485,是为了实现与LPC2292之间的电平匹配[5]。SP3485的收发引脚与LPC2292的UART0的收发引脚连接,另外,SP3485的收发使能管脚与LPC2292的一个普通IO口连接。为了减少PPI总线上的信号反射,在PPI的总线终端并接了120Ω的电阻。

图1 硬件设计方案

图2 PPI接口电路

2.2CAN接口电路设计

CAN接口电路如图3所示。使用TJA1050T作为CAN总线的收发器,TJA1050符合ISO 11898国际标准,它具有两个特性,一个是它很好的EMC特性,相对PCA82C250,它的辐射要低20DB;另一个重要特性是它在不上电时,总线上程序无源特性,从而减低功耗[6]。TJA1050的收发管脚与LPC2292内部的CAN控制器的收发管脚连接。TJA1050的S管脚接地,即选择高速模式[7]。总线终端连接一个120欧的电阻减少辐射,从而增强抗干扰性能。

图3 CAN接口电路

3CAN应用层协议设计

CAN应用层协议为CAN-PPI网关控制器与其他CAN节点进行CAN总线通讯制定的,CAN与CAN之间的软件接口必须根据此应用层协议进行设计。

3.1协议参数说明

CAN应用层的协议很大程度上是由PPI参数决定的,在使用PPI协议对S7-200系列的PLC进行访问时,涉及以下参数[8]:ParaAccessDir,访问S7-200系列PLC的方向,即是读操作还是写操作,占1个字节;ParaMemoZone,访问存储区域,即访问的是S7-200系列的PLC哪个存储区域,占1个字节;ParaOffsetAddr,访问区域的偏移地址,即访问的是S7-200系列的PLC某个区域的哪个位置,占2个字节;ParaUnitType,访问的单元类型,即访问的是S7-200系列的PLC的某个区域的一个字节,一个字还是一个双字,占1个字节;ParaData,写操作时的数据参数,即写入S7-200系列PLC的数据,由于可能写入的是双字,因此,它占4个字节。

当进行读操作时,涉及ParaAccessDir、ParaMemoZone、ParaOffsetAddr和ParaUnitType共4个参数,占5个字节;当进行写操作时,所有参数均涉及到,占9个字节。然而,CAN的一帧数据帧最多只能包含8个字节,由此可见,在进行读操作时,一帧数据足以涵盖所有的参数,而当进行写操作时,需要两帧数据才能涵盖所有的参数[9]。

3.2协议规定

3.2.1读操作的协议

读操作时的协议如图4所示。CAN节点首先发送读PLC请求帧,此帧携带了ID_GATEWAY、ParaAccessDir、ParaMemoZone、ParaOffsetAddr和ParaUnitType这些信息,当CAN-PPI网关控制器接收到读PLC请求帧时,会进行PPI读,接着把读取到的数据发送给CAN节点,当CAN节点接收到数据后,给CAN-PPI返回一个读成功帧以示读取成功。

图4 读操作的协议示意图

3.2.2写操作的协议

写操作时的协议如图5所示,CAN节点首先发送写PLC请求帧,此帧携带了ID_GATEWAY、ParaAccessDir、ParaMemoZone、ParaOffsetAddr和ParaUnitType这些信息,当CAN-PPI网关控制器接收到写PLC请求帧时,会发送写请求数据帧给CAN节点,当CAN节点接收到写请求数据帧,会把要写入PLC的数据发送给CAN-PPI网关控制器,CAN-PPI网关控制器接收到要写入的数据后,会根据写参数把要写入的数据写入PLC,最后反馈一个写成功帧给CAN节点。

图5 写操作的协议成功示意图

4整体软件结构设计

软件的最上层是由八个任务和两个中断组成。这八个任务分别是起始任务、读PLC任务、发送RdRi任务、处理RdAi任务、写PLC任务、发送WrRi任务、处理WrAi任务和发送CI任务。两个中断分别是CAN接收中断和串口中断。图6为整体软件结构图。图中Rn表示读操作时信号量的发送顺序,Wn表示写操作时信号量的发送顺序。

PPI参数结构体:

typedef struct

{

INT32U m_OprFlag :1;

INT32U m_RecCrFlag :1;

INT32U m_RdAiOrWrRiNums :8;

INT32U m_Reserved :22;

INT8U m_MemoZoneType;

INT8U m_DataType;

INT16U m_ByteOffset;

INT32U m_PPIValue;

}PPI_CtlStr,*pPPI_CtlStr;

PPI_CtlStr g_PPI_CtlStr;

这个结构体是读写操作公用的一个结构体,用来存放读写的参数等信息。m_OprFlag是用来指示当前是读操作还是写操作;

m_RecCrFlag是应来控制Cr帧的接收流程的;

m_RdAiOrWrRiNums用来确定RdAi或者WrRi帧的字节数的;m_MemoZoneType、m_DataType和m_ByteOffset是用来存放读写参数;m_PPIValue存放读写的数据。

图6 整体软件结构图

4.1起始任务TaskStart()

起始任务主要是完成硬件、软件的初始化和任务的创建以及自身任务的删除[10]。硬件初始化主要包括串口的初始化和CAN控制器的初始化;软件的初始化包括读RI帧常量的初始化、写RI帧常量的初始化和信号量的初始化,由于RI帧的是由一些常量数据和变量数据组成的,因此,可以在读写之前将RI帧的常量先包装好,以后在进行读写之前,只需要包装RI帧的变量即可,这样提高读写速度。

在完成初始化和任务创建之后,起始任务的任务就完成了,因此,在任务的最后将自身删除,从而释放起始任务所占用的系统资源。

4.2读PLC任务TaskCAN_CmdRdPLC()

该任务是由信号量SemReqRd触发的,这个信号量是在CAN中断程序中被发送的,读PPI任务在任务的开始等待这个信号量,即当接收到数据产生中断,并且判断是读请求帧时,便发送这个信号量,从而让读PLC任务继续得以执行,当读PLC任务得到这个信号量后,会根据读请求帧中的参数更新PPI参数结构体g_PPI_CtlStr,然后发出信号量SemRdRi触发其他任务完成PLC读时序,最后在任务的末尾等待读取结果的信号量SemTakeRiSdResult,从而将数据发给CAN节点。

4.3发送RdRi帧任务TaskRdRiSend()

发送RdRi帧任务是完成读PLC时RI帧的发送,在此任务的开始等待允许发送RdRi帧的信号量SemRdRi,当获取到信号量后,便进行RdRi帧变量的包装,RdRi帧常量的包装是在起始任务初始化中进行的,包装完毕RdRi帧后,便进行RdRi帧的发送,发送是调用SendCommonData(),并配合串口发送中断完成数据的发送。

4.4发送CI帧任务TaskCiSend()

这是一个公共任务,即读写PPI公用的一个任务,它完成读写PLC时CI帧的发送。由于CI帧全都是常数,因此,在任务的超循环之前,定义并初始化CI帧。在超循环中,首先等待允许发送CI帧的信号量SemCiSd,当获取到该信号量后,表示串口中断已经接收到CR帧,但这时不可以立刻发送CI帧,这是因为PLC在发送完CR帧后,并不能立即接收CI帧。因此,为了与PLC同步,这个地方必须延时3~5个时钟节拍,使自身挂起,等到3~5个时钟过后,该任务重新得以运行再进行CI帧的发送,同样,CI帧的发送也是调用SendCommonData(),并配合串口发送中断完成的。

4.5处理RdAi帧任务TaskRdAiPro()

这个任务主要是完成RdAi帧的校验工作和提取读取的数据。程序首先等待允许处理RdAi帧的信号量SemRdAiPro,获取到该信号量后,证明RdAi已接收完毕,接着根据RdAi的长度求得RdAi帧的某段数据的检验和,并比较检验和,如果校验和正确,则提取读取的数据并发送允许取走读取结果的信号量SemTakeRdResult。

4.6写PLC任务TaskCAN_CmdWrPPI()

该任务是由信号量SemReqWr触发的,这个信号量是在CAN中断程序中被发送的,写PPI任务在任务的开始等待这个信号量,即当中断中接收到数据,并且判断是写请求帧时,发送这个信号量。当写PLC任务得到该信号量后,会发送请求写数据帧给CAN节点,请求要写的数据,接着等到信号量SemWrData,当得到该信号量后,根据写请求帧中的参数和写数据更新PPI参数结构体g_PPI_CtlStr,然后发出信号量SemWrRiSd触发其他任务完成PLC写时序,最后等待允许发送写成功信号量SemWrSuc,获取到该信号量后,将写成功帧发送给CAN节点。

4.7发送WrRi帧任务TaskWrRiSend()

它完成写PLC时RI帧的发送,在此任务的开始等待允许发送WrRi帧的信号量SemWrRiSd,当获取到信号量后,便进行WrRi帧变量的包装,WrRi帧常量的包装是在起始任务初始化中进行的,包装完毕WrRi帧后,便进行WrRi帧的发送,发送仍然是调用SendCommonData(),并配合串口发送中断完成数据的发送。

4.8处理WrAi帧任务TaskWrAiPro()

这个任务主要是完成WrAi帧的校验工作。程序首先等待允许处理WrAi帧的信号量SemWrAiPro,获取到该信号量后,证明WrAi已接收完毕,接着计算WrAi帧的检验和,并比较检验和,如果校验和正确,则发送允许发送写成功信号量。

4.9CAN中断服务程序CAN_Exception()

它负责数据的接收和CAN应用层协议的顺序控制。它首先判断当前发生的中断是否是接收中断,从而保证接收中断的可靠性。如果是接收中断,那么将数据和ID存入缓冲区。接着对ID进行判断,如果ID正确,再通过判断标志位g_WrPLCFlag,了解当前接收到的数据是不是写数据帧。如果是,则发送接收到写数据帧的信号量SemWrData,如果当前接收到的不是写数据帧,接着判断接收到是不是读参数帧。如果是,则发送信号量SemRdPara,如果不是读参数帧,那么接收到的无疑是写参数帧,发送信号量SemWrPara,并将g_WrPLCFlag置位,指示下次接收的数据是写数据帧。程序最后释放CAN控制器的接收缓冲区。

5系统测试结果与分析

系统测试是指对CAN-PPI网关控制器进行测试,测试的目标主要有:CAN-PPI网关控制器能否通过CAN总线接收读操作命令,并通过PPI协议实现对S7-200系列的PLC的读操作,继而将读取的数据通过CAN总线反馈回去;CAN-PPI网关控制器能否通过CAN总线接收写操作命令,并通过PPI协议实现对S7-200系列的PLC的进行写操作;CAN节点通过CAN-PPI网关控制器读取一次数据的时间;CAN节点通过CAN-PPI网关控制器写入一次数据的时间;CAN-PPI网关控制器直接读取一次数据的时间;CAN-PPI网关控制器直接读取一次数据的时间。

系统测试结果如表1所示。从表中的数据来看,读写的时间将近100ms,时间非常长。CAN-PPI中的协议转换程序是基于嵌入式实时操作系统的,协议转换的过程是通过并行的任务来实现的,另外,数据的发送也是通过中断的方式去实现的,因此,从程序的结构上来说,只要PLC立即响应产生事件,事件就会立即得到响应。但是,从测试的结果来看,时间是相当长的,这可以归结为以下两个原因:

PLC在接收到RdRi或WrRi帧后,并没有立即发出CR帧,而是经过一段时间后才发送的;PLC在接收到CI帧后,并没有立即发出RdAi帧或WrAi帧,而是经过一段时间后才发送的。

表1 系统测试一览表

6结语

随着通信技术的发展,针对当前西门子S7-200系列PLC无法直接与异型网络上的智能设备相互通信的问题,提出了使用CAN-PPI网关控制器进行协议转换,从而,实现S7-200系列PLC与CAN网络上节点的透明传输。

参 考 文 献

[1] 邬宽明.CAN总线原理和应用系统设计[M].北京:北京航空航天大学出版社,2012.

WU Kuangming. Theory of CAN-Bus and system design.[M]. Beijing: Beihang University Press,2012.

[2] 阳宪惠.现场总线及其应用[M].北京:清华大学出版社,2015.

YANG Xianhui. Theory and application of fieldbus.[M]. Beijing: Tsinghua Press,2015.

[3] 温照方.SIMATIC S7-200可编程程序控制器教程[M].北京:北京理工大学出版社,2013.

WEN Zhaofang. Programmable Logic Controller Textbook[M]. Beijing: Beijing Institute of Technology Press,2013.

[4] 俞洁,李旭芳.西门子S7-200系列PLC通讯功能与应用[M]. 机械工业自动化,2012.

YU Jie, LI Xufang. PLC communication function and Application of Siemens S7-200 series[M]. Institute of automation for machinery industry,2012.

[5] 甘永梅,李庆丰,刘小娟.现场总线技术及其应用[M]. 北京:机械工业出版社,2004.

GAN Yongmei, LI Qingfeng, LIU Xiaojuan. Fieldbus technique and application[M].Institute of Automation for Machinery Industry,2012.

[6] 温克强.Modbus通讯协议在DCS与PLC通讯中的应用[J].石油化工自动化,2005(5):65-68.

WEN Keqiang. Application of Modbus protocol in DCS and PLC[M]. Institute of Automation for Petrochemical Industry,2005(5):65-68.

[7] 袁飞,程恩.基于Modbus规约的智能仪表与PC机通信技术实现[J].微计算机信息,2004,20(9):15-17.

YUAN Fei, CHENG En. Communication technology realization of intelligent instrument and PC based on Modbus protocol[J]. Microcomputer Information,2004,20(9):15-17.

[8] 李喜东,刘波涛,刘刚.Modbus RTIJ串行通讯协议在工业现场的应用[J].自动化技术与应用,2005,24:37-40.

LI Xidong, LIU Botao, LIU Gang. The application of RTIJ Modbus serial communication protocol in the field of industry[J]. Techniques of Automation and Application,2005,24:37-40.

[9] 袁飞,程恩.基于Modbus规约的智能仪表与PC机通信技术实现[J].微计算机信息,2004(9):56-57.

YUAN Fei, CHENG En. Communication technology realization of intelligent instrument and PC based on Modbus protocol[J]. Microcomputer Information,2004,20(9):15-17.

[10] 吴立新.论智能大厦的集散型楼宇自控系统[J].工业控制计算机,2012(7):50-51.

WU Lixin. The distributed automatic control system of intelligent building[J]. Industrial Control Computer,2012(7):50-51.

收稿日期:2016年1月10日,修回日期:2016年3月2日

作者简介:牟宏均,男,高级工程师,研究方向:自动控制、自动检测。

中图分类号TP273

DOI:10.3969/j.issn.1672-9722.2016.07.043

PLC Communication Technology Based on CAN Bus

MOU Hongjun

(Baoji Vocational Technology College, Baoji721013)

AbstractIf CAN bus can convert with PPI protocol, then the intelligent nodes on the CAN bus can access S7-200 series PLC, thus realizing the data communication between different networks. In this paper, the realization of the hardware design scheme of PPI protocol and CAN protocol is researched. The PPI interface circuit and CAN interface circuit are designed. The CAN application layer protocol is analyzed. The whole software structure and operation is analyzed. Finally, the conversion protocol is tested.

Key WordsPLC, PPI, CAN bus

猜你喜欢
CAN总线
论网络通信技术
基于嵌入式的汽车辅助制动系统研究
CAN总线通信技术在电梯监控系统中的应用
基于CANoe的J1939协议在ECU通信中的应用