Compolet以太网通信
- 以太网介绍
以太网(Ethernet)是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问层协议的内容。以太网是目前应用最普遍的局域网技术,取代了其他局域网标准如令牌环、FDDI和ARCNET。
以太网的标准拓扑结构为总线型拓扑,但目前的快速以太网(100BASE-T、1000BASE-T标准)为了减少冲突,将能提高的网络速度和使用效率最大化,使用集线器来进行网络连接和组织。如此一来,以太网的拓扑结构就成了星型;但在逻辑上,以太网仍然使用总线型拓扑和CSMA/CD(Carrier Sense Multiple Access/Collision Detection,即载波多重访问/碰撞侦测)的总线技术。
- 工业以太网
1.工业以太网发展:
以太网具有传输速度高、低耗、易于安装和兼容性好等方面的优势,由于它支持几乎所有流行的网络协议,所以在商业系统中被广泛采用。由于以太网具有应用广泛、价格低廉、通信速率高、软硬件产品丰富、应用支持技术成熟等优点,目前它已经在工业企业综合自动化系统中的信息层与控制层得到了广泛应用,并呈现向下延伸直接应用于工业控制现场的趋势。从目前国际、国内工业以太网技术的发展来看,目前工业以太网在控制层已得到广泛应用,并成为事实上的标准。未来工业以太网将在工业企业综合自动化系统中的现场设备之间的互连和信息集成中发挥越来越重要的作用。
2.传统以太网缺陷
以太网要想广泛应用到工业现场必须解决如下课题:
- 确定性: 由于以太网的MAC层协议是CSMA/CD,该协议是检测网络上存在冲突。对于一个工业网络,如果存在着大量的冲突,就必须多次重发数据,使得网络间通信的不确定性大大增加,带来系统控制性能的降低。
- 实时性:在工业控制系统中,在一个事件发生之后,系统必须在一个可以准确预见的时间范围内作出反应。而工业上对数据传输的实时性要求非常高,数据的更新是在数十毫秒完成。而以太网的CSMA/CD机制,当发生冲突时重发数据,可以尝试16次,这种解决冲突的机制是以付出时间为代价的。而设备的掉线,可能会造成重大的设备或者人身安全事故。
- 可靠性:以太网是为商业设计的,但应用到工业现场,面对恶劣的工况、严重的线间干扰,必然降低其可靠性。所以工业网络要求具有高的可靠性,可恢复性以及可维护性。
3.工业以太网解决机制
由于以太网是以办公自动化为目标设计的,并不完全符合工业环境和标准的要求,将传统的以太网用于工业领域还存在着明显的缺陷,因此需要运用一下机制进行解决。
- 交换技术
将共享的局域网进行有效的冲突域划分机制。各个领域之间用交换机连接,减少冲突问题和错误传输。这样可以尽量避免冲突的发生,提高系统的确定性。
- 高速以太网
冲突的发生与负载有关,负载越大,发生冲突的概率越大。提高以太网的通讯速度,可以有想降低网络的负荷。
- IEEE1588对时机制
IEEE1588定义了一个在测量和控制网络中,与网络交流、本地计算和分配对象有关的精确同步时钟的协议(PTP)。此协议并不是排外的,但是特别适合于基于以太网的技术,精度可达微秒范围。它使用时间印章来同步本地时间的机制。即使在网络通信时同步控制信号产生一定的波动时,它所达到的精度仍可满足要求。这使得它尤其适用于基于以太网的系统。通过采用这种技术,以太网TCP/IP协议不需要大的改动就可以运行于高精度的网络控制系统之中。在区域总线中它所达到的精度远远超过了现有各种系统。此外,在企业的各层次中使用基于以太网TCP/IP协议的网络技术有着巨大的优势。
- 协议改造
对传统以太网进行改造或在传统以太网基础上加以改进,提出了基于以太网技术来实现现场总线的方案,由此诞生了POWERLINK, EtherCAT, EPA, NCUC-Bus, EtherMAC, SERCOS,EtherNet/IP, ModBusTCP, ProfinetSRT, MECHATROLINK等这些工业实时以太网技术。每种协议具体实现方式不尽相同。
- EtherNet/IP协议
EtherNet/IP(EtherNet Industry Protocol)是适合工业环境应用的协议体系。它是由两大工业组织ODVA和ControlNet International所推出的最新的成员。它是一种是面向对象的协议。
EtherNet/IP通信模型如下:
- 物理层和数据链路层
EtherNet/IP在物理层和数据链路层采用以太网,其主要由以太网控制器芯片来实现。因此所有标准的以太网通信模块,如PC接口卡、电缆、连接器、集线器和开关都能与 EtherNet/IP 一起使用。
- 网络层和传输层
EtherNet/IP在网络层和传输层采用标准的TCP/IP和UDP/IP技术。对于面向控制的实时I/0数据,采用UDP/IP协议来传送,优先级较高。而对于显式信息(如组态、参数设置和诊断等)则采用TCP/IP来传送,采用TCP/IP来传送,其优先级较低。
3. 应用层
EtherNet/IP应用层采用CIP协议,CIP是一种为工业应用开发的应用层协议,被DeviceNet、ControlNet、EtherNet/IP等3种网络所采用,因此这3种网络相应地统称为CIP网络。
CIP通信过程如下:
CIP有一个重要特点是面向连接,即在通信开始之前必须建立起连接,获取惟一的连接标识符(connection ID)。如果连接涉及到双向的数据传输,就需要两个CID。CID的定义及格式是与具体网络有关的,比如,DeviceNet的CID定义是基于CAN标识符的。通过获取CID,连接报文就不必包含与连接有关的所有信息,只需要包含CID即可,从而提高了通信效率。不过,建立连接需要用到未连接报文。未连接报文需要包括完整的目的地节点地址、内部数据描述符等信息,如果需要应答,还要给出完整的源节点地址。
CIP报文:
对应于两种CIP报文传输,CIP连接也有两种,即显式连接和隐式连接。建立连接需要用到末连接报文管理器(unconnected Message Manager—UCMM),它是CIP设备中专门用于处理未连接报文的一个部件。如果节点A试图与节点B建立显式连接,它就以广播的方式发出一个要求建立显式连接的未连接请求报文,网络上所有的节点都接收到该请求,并判断是否发给自己的,节点B发现是发给自己的,其UCMM就做出反应,也以广播的方式发出一个包含CID的未连接响应报文,节点A接收到后,得知CID,显式连接就建立了。隐式连接的建立更为复杂,它是在网络配置时建立的,在这一过程中,需要用到多种显式报文传输服务。CIP把连接分为多个层次,从上往下依次是应用连接、传输连接和网络连接。一个传输连接是在一个或两个网络连接的基础上建立的,而一个应用连接是在一个或两个传输连接的基础上建立的。
- EtherNet/IP控制器产品
型号:NJ/NX/NY Series, CS/CJ Series
硬件接口:RJ45
速率:100Mbps /1000Mbps
节点距离:100M
支持通信类型:隐式通信(Class 1,),显示通信(Class 3,UCMM)
- 通信类型区别
EIP中现有的主要三种传输类型为UCMM方式、1类和3类传输方式。
- UCMM方式,即基于无连接的报文传输。
该方式由客户端和服务器端组成,客户端发起报文传输,服务器端对客户端的请求进行响应。UCMM方式采用了重发和确认机制来保证每次请求和响应包的可靠传输。与1类和3类传输方式相比,这种传输方式效率相对较低,但由于采用基于无连接的方式,在传输请求和响应包时不需要预先进行协商。UCMM客户端可以同时向一个和多个服务器端发起多次请求/响应传输,具体传输次数大小仅由实际客户端设备的传输记录能力来决定。与此类似,UCMM的服务器端可以同时接收来自多个不同客户端传输请求/响应,具体数目也是仅由实际服务器端设备的传输记录能力来决定的。UCMM类传输方式多用在1类和3类传输初始化阶段,连接初始化工作由Connection Manager Object(连接管理器对象)来完成。
- 1类传输,即基于连接的实时数据传输。
与UCMM和3类传输方式不同,该传输方式不是由采用客户端和服务器端的组成,而是由生产者和消费者组成。 它允许连接中的双方节点可以分别同时发送和接收数据,而不再有先请求后响应的顺序要求了。1类传输可以重复进行,是进行实时控制数据传输的主要方式。
- 3类传输: 基于连接的报文传输;
与UCMM传输方式类似,3类传输方式也由客户端和服务器端组成,客户端发起报文传输,服务器端则对客户端的请求进行响应。这种方式适合于以定时方式进行的事件类触发数据的传输,传输效率高于UCMM传输方式。
- Class1传输层基于UDP ,Class3传输层基于TCP, UCMM应用层面向无连接。
- Sysmac Gateway与Compolet
SYSMAC Gateway是一种OMRON通信中间件,是一个软件套装,可在计算机上提供FA网络环境。通过支持EtherNet / IP的SYSMAC Gateway,可以构建符合ODVA定义的CIP(通用工业协议)的开放式工业以太网环境。其功能如下:
1.显示通信功能(Class3, UCMM)
支持CIP标准显式通信。可以向/从各种EtherNet / IP设备发送/接收数据。
2.隐式通信(循环通信)功能
支持CIP标准隐式通信。可以使用EtherNet / IP设备执行循环通信。这样可以在计算机和PLC之间实现高速,大容量的数据通信。使用该隐式通信的标签数据的循环通信被称为“标签数据链路”。通过Tag Data Link获得的数据存储在名为“EventMemory”的共享内存中,也可供应用程序使用。
3.标签支持
SYSMAC Gateway还支持与PLC相同的标签。可以通过应用程序的名称访问标签(定义了数据类型和地址)。标签数据实际上分配给EventMemory。标签用于启用程序开发,无需考虑数据地址或类型。
4.应用开发
使用CX-Compolet(应用程序开发包)可以实现简单的应用程序开发。 CX-Compolet支持Microsoft Visual Basic和C#,可以在不考虑协议的情况下构建PLC通信程序。 SYSMAC Gateway SDK提供通信协议的底层API。可以使用指定的物理地址进行传统通信,但现在也可以通过标记(网络变量)访问数据。
5.与传统的FINS通信环境共存
SYSMAC Gateway可以与FinsGateway(提供FINS通信服务)在同一台计算机上运行。灵活的系统可以在与传统FINS网络相结合的环境中构建。将EventMemory用于数据意味着还可以使用FINS读取标签数据链接值,从而提供无缝的系统配置。SYSMAC Gateway Runtime是FA通信中协议栈的执行环境,由CIP通信服务和FINS通信服务(FinsGateway)组成。 CIP通信服务提供CIP协议的显式服务和隐式服务(即标签数据链路)。 FinsGateway通信服务提供FINS协议的消息功能。
CX-Compolet是一个软件包,提供了通信dll库文件,用于创建在Microsoft Visual Basic和C#中轻松读/写OMRON PLC数据的程序。CX-Compolet允许您读取/写入I / O存储器,更改操作模式,读取错误历史记录以及PLC的其他操作。PLC I / O存储器可以通过名称(标签名称)而不是地址(对于CJ2,NJ和NX)来指定。数组和结构变量可用于访问。可以读/写符合ODVA的CIP数据类型变量。
Sysmac gateway,compolet以及用户应用程序相互依赖关系如下图
安装:sysmac gateway和Compolet分别有单独的安装包,同时也有二合一的安装包,安装时需注意
- Compolet分类
1.标签通讯+VariableCompolet(class1)
2.CommonCompolet +sysmac gateway服务用CIP协议读写PLC(class3)
- Compolet动态链接库介绍
- VariableCompolet
库文件:VariableCompolet.dll
类定义:(C#) public class VariableCompolet
命名空间:OMRON.CIP.Compolet.Variable
安全:静态成员线程安全,实例成员线程非安全
类成员:
- public VariableCompolet():类构造函数,无重载,有且只用一个构造函数,用于实例化对象,该构造函数为无参构造函数。
- public bool Active { get; set; }:可读可写,该属性控制着Compolet对外的接口,所有读写操作必须在该接口是激活的状态,否则会发生方法异常。
- public string[] VariableNames { get; }属性:只读,用于获取所有注册到sysmacGateway里的变量的变量名
- public System.IntPtr WindowHandle { get; set; }属性:用于设置/获取当前窗口的句柄,该属性与Compolet中的事件有关,通过设置该属性,表明将change事件注册到哪个具体窗口。如不设置窗口句柄,则change时间无效。
- public System.Object ReadVariable ( System.String variableName)方法:通过该方法获取指定变量的当前值。
- public void WriteVariable ( System.String variableName, System.Object writeData)方法:通过该方法指定变量名和写入的数据,将数据写入PLC指定变量。
- public OMRON.Compolet.Variable.VariableInfo GetVariableInfo ( System.String variableName)方法:通过指定变量名,获取变量的数据类型。
- public void SetEvent ( System.String variableName, System.Int32 eventID)方法:设定变量值改变的事件ID
- public void ClearEvent (System.String variableName)方法:根据变量名清除事件订阅
10)public void ClearAllEvents ( )方法:清除所用事件订阅
11)public System.Boolean IsSetEvent ( System.String variableName)方法:根据变量来检查该变量的事件订阅状态
12)public void ReciveEvent ( out System.String variableName, out System.Int32 eventID, System.Int32 receiveTimeLimit)方法:获取值变化事件产生的变量名和事件ID
13)public void Changed ( object sender, System.EventArgs e)事件:值改变事件,通过订阅该事件,可在检测变量值改变时,调用自定义事件处理方法。
2. CommonCompolet
库文件:CIPCompolet.dlll
类定义:(C#) public class CommonCompolet
命名空间:OMRON.Compolet.CIP
安全:静态成员线程安全,实例成员线程非安全
类成员
- public CommonCompolet ( ):构造函数,无重载,无形参,用于实例化
- public OMRON.Compolet.CIP.ConnectionType ConnectionType { get; set; }:属性,用于设置连接类型,ConnectionType为枚举类型,枚举成员有UCMM(0),Class3(1).
- public string PeerAddress { get; set; }:属性,用于设置连接目标PLC的IP地址
- public int LocalPort { get; set; }:属性,用于设置SGW的端口号,以太网端口为2或者6(扩展端口),一般使用2。
- public bool UseRoutePath { get; set; }:属性,用于设置是否路由路径的方式指定连接PLC的地址,当使用IP地址的方式连接PLC时,该属性需要设为False.
- public string RoutePath { get; set; }:属性,当不使用IP地址方式来指定目标,即UseRoutePath设为True时,RoutePath属性通过字符串的方式指定连接路径。
- public long ReceiveTimeLimit { get; set; }:属性,设置发送指令后,接收响应数据的超时等待事件,单位为ms。一般1000左:右。不宜设置过小。
- public bool Active { get; set; }:属性,用于设置完连接参数后,按照参数连接目标PLC。所有读写操作,必须在该属性为True的情况下进行。
- public object ReadVariable ( string variableName )
public object ReadVariable ( string variableName, int num )
方法,该方法有两种重载方式,即可以通过指定标签名的方式获取该变量的当前值。也可以指定数组名+元素个数的形式进行读取
- public System.Collections.Hashtable ReadVariableMultiple ( string[ ] variableNames ):方法,该方法可指定多个变量名,同时读取指定的变量的值,并返回。
- public void WriteVariable ( string variableName, object writeData )
public void WriteVariable ( string variableName, object writeData, int num )
方法,该方法有两种重载方式。即可以指定标签名+写入数据的方式,也可以指定数组标签名+数据+元素个数的形式
- public Byte[ ] ReadRawData ( string variableName )
public Byte[ ] ReadRawData ( string variableName, int num )
方法,有两种重载形式,与ReadVariable的区别在于返回值类型不同
13)public void WriteRawData ( string variableName, byte[ ] writeData )
public void WriteRawData ( string variableName, byte[ ] writeData, int num )
方法,有两种重载形式,与WriteVariable区别在于,写入数据的类型不同。
14)public OMRON.Compolet.CIP.VariableInfo GetVariableInfo:方法,用于获取标签数据类型信息
15)public event System.EventHandler OnHeartBeatTimer:事件,通过HeartBeatTimer指定间隔时间,通过绑定OnHeartBeatTimer时间,来实现定时执行某些处理,本质上,该事件为已一个定时触发的定时器,OnHeartBeatTimer设为0时为关闭。
九.通信示例
示例一:使用Variable Compolet读取PLC一个变量名为PlcOut,类型为INT的标签
- 系统结构(直接连接)
- 将PLC与电脑网卡设为同一个网段
- PLC中建立变量,公开变量为输入输出,并下载至PLC
- 启动SGW服务,并打开对应端口
- SGW中建立对应变量并保存
- NetworkConfigurator中配置NJ/NX 与 SGW的标签通讯,并下载
- 用TagMonitor检查标签通讯是否正常
- Visual Studio编程
- 引入VariableCompolet动态链接库文件
- 引入命名空间
3) 实例化类,并将Active属性置位TURE
- 读操作
示例二:使用Common Compolet读取PLC一个变量名为PlcOut,类型为INT的标签
- 系统结构(与上述相同)
- 设置IP(与上述相同)
- 启动服务和端口(与上述相同)。注意:过程不需要在SGW中建立标签,也不需要使用Network configuaraor配置标签通讯)
- VS编程
- 引入CIP Compolet动态链接库
2)引入命名空间
- 实例化对象
- 设置连接参数
- 激活连接
6)读写操作