CAN现场总线的计算机与PLC通信
1 引言 在现代工业中,plc 之间或PLC 与计算机之间的通信联网应用日益广泛。PLC 的联网功能越来越强。以欧姆龙CP1、CJ1 和CS1 系列PLC 为例,配合使用各种模块,可以支持工业以太网、Controller Link 等现场总线通信联网功能。但是,应用广泛的CPM1A、CPM2A等中小型PLC 的通信联网一般只能采用工业总线的物理层形式(如RS232 或RS485),通信的稳定性与抗干扰能力并不是很强。 本文选用欧姆龙的CPM2A 机型,配合使用RS232-CAN 适配器,实现了计算机与PLC 的通信联网,方法简单, 实用性强。 2 CAN 总线简介 CAN 总线由德国BOSCH 公司首先提出来的,CAN总线是目前工业界广泛应用的总线。 CAN 控制器工作于多主站方式,网络中的各节点都可根据总线访问优先权采用无损结构的逐位仲裁的方式竞争向总线发送数据。CAN 协议废除了传统的站地址编码, 可使网络内的节点个数在理论上不受限制, 通信实时性强, 提高系统的可靠性和系统的灵活性。 报文采用短帧格式,传输时间短,受干扰概率低, 保证了数据出错率极低。CAN 的每帧信息都有CRC 校验及其他检错措施,具有极好的检错效果。CAN 的通讯介质可以为双绞线、同轴电缆或光纤,选择灵活。CAN 节点在错误帧的情况下具有自动关闭输出功能,而总线上其它节点的操作不受影响。CAN 总线通过两个输出端CANH 和CANL 与物理总线相连,不会出现损坏某些节点的现象。CAN 节点在错误严重的情况下具有自动关闭输出功能, 以使总线上其他节点的操作不受影响, 不会出现象“死锁”状态。 3 通信结构 通信系统组成如图1 所示,上位计算机运行监控软件与OMRON 专用的PLC 编程及配置软件,并将计算机串口连接到RS232-CAN 适配器,配置为CAN 总线。下位PLC 采用多台OMRON 的CPM2A 型PLC,将CPM2A的串口连接RS232-CAN 适配器,实现CAN 总线通信。 图1 通信系统结构 通过适配器,计算机与PLC 成为CAN 总线的节点。 节点之间通过双绞屏蔽线进行总线式连接,首尾节点需要接120R 的匹配电阻。上位计算机可以通过CAN 总线实时监控PLC 系统的运行。 此方案是现场总线技术与集中控制技术的有机结合,联网后的PLC 网络可以构成一个dcs 系统。用户在计算机上可以远程监控、配置任何一台PLC 的程序或状态。并能够在投入较低硬件成本的基础上,实现良好的系统运行性能。这个方案充分发挥了CAN 总线的通信特点: 实时、可靠、高速、远距离、易维护等。 使用RS232-CAN 适配器后,通信距离扩大到5 公里(9600bps 时),组网的PLC 可增至110 台(实际上受PLC内部系统软件的限制,最多只能支持32 台PLC 联网)。 RS232-CAN 适配器采用光电隔离,大大提高了系统的抗干扰能力和安全性能。 另外,使用RS232-CAN 适配器,并不需改变PLC 系统原有的PLC 通讯协议和上位机监控软件,开发人员无须更改现在使用的串口通信程序,最大限度的节省成本。 4 HOST-LINK 通信协议 采用RS232-CAN 适配器,计算机与PLC 的串口都被配置成CAN 总线。通信方式与上位机监控软件的编程方式与串行通信完全相同。通信协议一般采用OMRON 公司的HOST-LINK 通信协议。 OMRON 公司的HOST-LINK 通信系统是由上位计算机( IBM PC 或兼容机) 通过安装在各台PLC 上的HOST-LINK 单元或串行通信接口连接多台PLC 构成的网络。上位机对系统中的PLC 进行集中管理与监控,通过与HOST-LINK 单元的通信,可以编辑或修改各台PLC 的程序,实时监控其运行过程,实现自动化系统的集散控制。对于小型PLC( 如CPM2A) , 可以通过其RS232 通信端口进行链接。 系统使用HOST-LINK 通信协议进行通信,上位机具有传送优先权, 总是首先发出命令并启动通信,HOST-LINK 单元收到命令交由PLC 执行,然后将执行结果返回上位机, 二者以通信帧为单位, 轮流交换数据。 通信时, 一组传送的数据称为“块”, 它是命令或响应的单位,从上位机发送到HOST-LINK 单元的数据块称为命令块,反过来, 从HOST-LINK 单元发送到上位机的数据块称为响应块。多点通信时,可作为单帧发送的最大数据块为131 个字符,因此当一个数据块含有132 个或更多字符时, 要分成两帧或多帧发送。 每个数据块都以设备号及标题开始,以校验码(FCS)及结束符结束。响应块中还包括反应执行结果的响应码。通信格式如图2 所示。 图2 HOST-LINK 通信帧格式 5 通信实现 用户可以采用通用的组态软件(如组态王)实现计算机与PLC 的通信,也可以编写计算机程序。 要编写计算机通信程序,可以采用VB、VC 等高级语言进行编程,编程可以有多种方式[4]。使用MSComm控件通过串行端口传送和接收数据,实现计算机与PLC之间的数据通信, 编程较简单。 MSComm 控件提供了一种有效的处理串*互作用的方法:事件驱动法。该方法利用OnComm 事件捕获并处理通信及其错误,当CommEvent 属性发生变化时,就产生事件并等待相应处理。每个MSComm 控件都有一个串口相对应。 Visual Basic 6.0(以下简称VB) 是一种功能强大、简单易学的程序设计语言,利用ActiveX 控件MSComm能十分方便地开发出使用计算机串口的计算机通信程序。本文在VB中使用MSComm控件实现上位机与PLC的串行通信。 VB 程序由串口初始化、数据发送、数据接收等几大部分组成。主要的程序段如下所示。 Rem 程序加载时进行串口初始化 以上给出了计算机与PLC 通信的主要程序段。需要注意的是,如果传送的数据大于132 个字符,可以将数据分成起始帧、若干中间帧、结束帧进行传送。起始帧必须包含设备号, 命令码等, 否则通信的过程中将会有错误发生。上位机每发送完一帧时,在收到PLC 返回的分界符(即“↙”)后再发送下一帧,只有当结束帧数据发送完毕时才返回响应代码。 6 结束语 本文基于VB 利用MSComm 控件实现了上位机与欧姆龙plc 的串行通信,充分发挥了CAN 总线实时、可靠、高速、远距离、易维护的特点。计算机能够深入地配合PLC 厂商提供的各种软件,从而实现更多强大的功能, 比如系统配置、人机界面、组态开发等。 通常,计算机与PLC 通过串口连接,实现各种通信功能。但串口的通信距离、节点数量都受到了串口本身的性能限制。比如,RS-232 标准只可以实现1:1 通信,RS-422/485 标准能够实现32 个节点以内的通信,通信距离、抗干扰能力都比较弱,并不能够满足实际工业现场多台PLC 联网应用的需求。即使借助RS232/RS485-CAN 适配器也很难突破串行通信本身的功能限制[5]。 针对这一情况,可以采用计算机内置PC-CAN 接口卡,可以建立起1 条或者多条CAN 总线网络,并通过连接在CAN 总线网络中的RS232/RS485-CAN 适配器,借助于CAN 总线网络配套的虚拟串口软件,建立多达2047 个标准的串行通信端口,从而连接多达2047 条串行网络[6]。也就是说,可以在同1 条普通双绞线上连接多达2047 台PLC 设备,工控PC 访问连接在这条CAN总线网络上的PLC 设备,也与操作标准串口完全一致。 这种方式可以充分发挥工控PC 的作用,通信效率比较高,应用灵活,是一般PLC 网络建设的主流方向。 |