1、中文 3055 字 基于 ETHERNET/IP 的 CONTROLLOGIX 系列 PLC 的接口 凯瑟米尔 , L.R.戴勒丝 , 美国 摘要 由美国 A-B公司生产的 ControlLogix系列可编程序逻辑控制器 (PLC)提供了多种接口类型:如以太网、 ControlNet、 DeviceNet、 RS-232 等等。 ControlLogix 以太网连接模块“ 1756-ENET”使用了 EtherNet/IP、 ControlNet 等协议,并采用了专业的服务代码封装于以太网协议包中。针对“实验性物理和工业控制系统” (EPICS)开发的驱动程 序使用了EtherNet/IP 协
2、议,从而使得控制器可以运行 vxWorks RTOS、 Win32 和 Unix/Linux 的测试程序。现在来分析一下这个接口的特点和使用场合。 1 引言 散裂中子源项目 (SNS)的几个子系统使用了 A-B 公司的 ControlLogix 系列 PLC。通过集成这些 EPICS 加速器控制系统和输入输出控制器 (IOC),系统可以直接进行读取和写入PLC 数据。有了输入输出控制器 (IOC), Unix 或 Win32 系统的计算机和所有装有以太网连接口的个人计算机都可以对 PLC 进行编程,但它同时要求必须使用 相同的技术来传输 PLC 数据。在现有的综合布线、网络硬件、配置和维护等技
3、术知识的支持下,该产品完全可以使用。 2 ETHERNET/IP ControlNet 是一种确定性的串行通信系统,它的协议模型同七层的 ISO OSI 模型相似,采用了从物理层到应用层分层方式。 ControlNet2.0 版本引入了数据包的 TCP/IP 封装,而代替了基于以太网( IP/UDP/TCP)的物理层和数据链路层,最终形成“基于以太网的 ControlNet”,称为 EtherNet/IP。默认地,使用 TCP/IP 的端口 0xAF12 连接到EtherNet/IP 目标之后,遵循封装协议建立一个身份 ID,就可以直接进行信息交换了。他们定义了目标对象控制和信息协议 (CIP
4、),此协议被列为 ControlNet 协议的一部分。对于ControlNet 传送层,协议区别“无关联”和“关联” CIP 信息。虽然他们封装方式不同,但都可以通过默认的 TCP 协议进行连接。 3 CONTROLLOGIX 的以太网接口 ControlLogix 系列 PLC 使用 ControlNet 总线来联接本地 I/O 板卡作为平台,1756-ENET 以太网模块支持 EtherNet/IP。只要遵循 EtherNet/IP 协议,我们就可以使用SendRRData 等封装命令,发送 CIP 消息即可: Service: Get_Attribute_Single(0x0E) Pat
5、h: Identity Object(class 0x01, instance 1), Product Name(attrib.7) 作为回复,接口送回如下信息: Service: Get_Attribute_Single-Reply(0x8E) Response: length=12, “1756 -ENET/A” CIP 对象模型同样包括“模拟输入点 ” (0x0A)和“离散输入组” (0x1D)对象,但是到目前为止,我们一切试图使用它们来访问 ControlLogix 模拟或数字输入模块的行为都失败了。原因是没有一个标准的 CIP 对象可以用来访问 PLC 的标签名称。 与此同时, A-
6、B 公司针对 ControlLogix 推出了新的 CIP 服务编码,包括使用 CIP 路径来命名梯形图逻辑标签、单独使用读写的服务代码以及结合了传输二进制数据格式而使用的一些传输协议。 使用 SendRRData 封装命令来发送 CIP 数据到 PLC,必须通过连接管理器对象1756-ENET 模块来寻址,见 下例: Service: CM_Unconnected_Send(0x52) Path: Connection Manager(class 0x06, instance 1) , Path: Port1(back plane), Link # (slot # of PLC)。 这则消息
7、是读取一个标签 TEST: Service: CIP_Read_Data(0x4C) Path: TEST(ANSI extended symbol segment ) Elements: UINT1 当从 PLC 的回复显示端口连接成功则连接管理器开始传输: Service: CIP_Read_Data-Reply(0xCC) Response: CA 00 00 80 38 3B=REAL 0.002815 CIP_Write_Data 服务 (0x53) 允许在 PLC 上通过相似嵌入修改标签。 与其它通信协议相比,它对梯形逻辑图的要求并没有改变! CIP 读写服务能够访问所有控制器标签
8、而不需要预先在 PLC 编程的软件标记他们为“生产”或“消费”类型,这包括对 I/O模块的接入:模拟输入模 块可利用在槽 1上的第一通道,即“ Local:1:I.Ch0Data”。 这种类型的传输称为明确无关联传输,因为标签名被明确地提出,各个协议包是单独寻址。对于连接信息, 在 PLC 上的消息路由器被要求打开连接: Service: CM_Forward_Open(0x54) Path: Connection Manager(class 0x06, instance 1) Connection Path: Port1, Link0(back plane, PLC slot), Messa
9、ge Router(class 0x02, instance 1) 回复信息中提供一个号码。 CIP_Read_Data 请求能够按照 SendUnitData 封装命令的连接消息立即发送, 同时在信息前加上一个顺序编号,发送 CM_Unconnected_Send 消息则并不需要嵌入这些。 4 设计的方案 因为 ControlNet 连接信息的优势不能在 EtherNet/IP 上体现,这时就可以使用无关联信息:以太网不预留带宽;通过 TCP 协议来保证传输。对于 CIP_Read_Data 请求,比起关联信息,无关联信息有效地压缩了信息,并且在传输中提高了 3%的速率。而缺点是,客户端应用
10、程序必须在建立更新连接时发送请求,或者更快。以太网的延迟将导致 PLC断开连接。 ControlLogix 多请求服务 (0x0A)是用作合并 CIP_Read/Write_Data 请求,即当总请求或期望的请求值的大小到达 PLC 的缓冲极限(大约 500 字节)的时候使用。 5 EPICS 技术支持的实施 根据请求的更新率, vxWorks 驱动代码针对各个 PLC 在扫瞄列表中都安排了标签名。一周期内每个 PLC 将处理所有读写请求 。 EPICS 设备的输入和输出驱动支持:模拟量、二进制数和多位记录类型。当使用单个数组元素或结构体元素,以及并非数组或结构体的全部时,标签名就必须使用标量
11、值。可以处理的 PLC 数据类型包括 BOOL、 SINT、 INT、 DINT 和 REAL。也可以在运行时改变记录的配置,这些是不需要重新起动输入输出控制器 (IOC)的,即所涉及的标签名记录能实时替换。当发生通信错误或超时,驱动将默认断开 PLC 连接并尝试再连接。 数组元素进入数组时,驱动默认要求传输顺序是从第一个元素到请求最高的元素。这样就决定了传送时间会大量减少,但 可能会产生其他作用:每当输出改变的记录超过一个元素时,输入输出控制器 (IOC)总将重写整个数组。因为持续传输,同样的 PLC 数组被其它数据来源也修改了 (由 PanelView 显示 ),输入输出控制器 (IOC)对这些变动忽略而重写他们。数组传输同样是受到上述 PLC 缓冲极限和大小限制的。针对这些情况,记录配置允许个别的数组元素传输到工作区。 对于输出记录, 每当记录被处理时,驱动都将发送一个 CIP_Write_Data 消息。否则