APP下载

Libnodave库的TCP协议剖析

2018-03-20夏正龙

计算机技术与发展 2018年3期
关键词:工控西门子上位

夏正龙,耿 浩

(1.江苏师范大学 电气工程及其自动化学院,江苏 徐州 221116;2.徐州上若科技有限公司 自动化事业部,江苏 徐州 221116)

1 概 述

现代工控领域多采用数字化智能装置代替传统的模拟仪表作为前端控制器,而数字智能装置一般都具备独自监测监控功能,能实时向上位集控后台实时上传工作状态。当前工控领域的集控方式由集中控制向分散控制,由分散管理向集中管理转变。西门子公司的PLC(programmable logic controller)设备在工控领域应用广泛,其产品系列的丰富与可靠已经得到了广大用户的信赖。目前工控领域控制的实时性要求越来越高,自然需要一个高速的通讯网络。

随着以太网通讯在工业控制领域的普及,其通讯速率高、可靠性高,在实际应用中越来越广泛。西门子系列PLC以太网通讯模块有cp243,cp343,cp443。200SMART和1200自带以太网口。西门子以太网协议众多,有ISO,ISO-on-TCP,TCP,UDP等。ISO协议是西门子早期的以太网通讯协议,通讯使用的是MAC地址。TCP、UDP协议,属于用户自定义协议,PLC端和上位机都需要用户写程序。ISO-on-TCP协议是在TCP/IP协议层,按照ISO协议重新定义,通讯使用的是IP地址。因为PLC本身就支持ISO-on-TCP协议,所以PLC不用添加任何程序,只需要上位机按照规定的协议格式写程序就可以和PLC进行数据交换。

西门子公司开源驱动库Libnodave是一个开源驱动库,但该库的使用需要硬件匹配,它支持的通讯方式主要由daveProtoMPI(针对西门子300/400系列PLC的MPI协议)、daveProtoMPI2(针对不带STX的Andrew版本西门子300/400系列PLC的MPI协议)、daveProtoMPI3(针对step7版本300/400系列PLC的MPI协议)、daveProtoMPI4(针对带STX的Andrew版本西门子300/400系列PLC的MPI协议)、daveProtoPPI(针对西门子200系列PLC的PPI协议)、daveProtoAS511(针对S5编程口协议)、daveProtoS7online(针对s70nlinx.dll动态链接库通信)、daveProtoISOTCP(针对带路由功能的ISO on TCP协议)、daveProtoISOTCP243(针对西门子200系列PLC设备中以太网模块CP243的ISO on TCP协议)、daveProtoISOTCPR(针对具有路由功能的ISO on TCP协议)、daveProtoMPI_IBH(针对通过网关联结的MPI协议)、daveProtoPPI_IBH(针对通过网关联结的PPI协议)、daveProtoNLpro、daveProtoUserTransport组成。上述协议主要是PPI协议和ISO on TCP协议。

上位机软件连接西门子PLC可以通过四种方法。一是opc server连接PLC,opc server可以选用Simatic Net、Kepserver等[1]。二是组态软件连接PLC。例如组态王驱动库,Intouch的DAServer等。三是用自由口实现通讯[2]。四是编程方式连接PLC,如开源的Libnodave和西门子的prodave库[3-4],而PRODAVE是用于上位机与S7系列PLC之间数据连接通信的商业软件包,它提供了一个接口函数库,DLL和LIB库,以此完成PLC与上位机之间的数据通信。使用PRODAVE进行控制系统开发,需要调用开发包提供的动态链接库中的函数即可实现通信,而最新发布的6.2版新增加了对Window 7操作系统的支持。

以上四种方法,除了Libnodave是开源免费的,其他都需要授权。Libnodave是跨平台的库,其支持MPI协议和以太网协议。以太网具有传输速率高、传输距离远、可靠性以及开放性较好等优点[5-12]。西门子公司S7系列PLC的通信可以通过开源驱动库Libnodave实现[13-14]。

文中参考Libnodave库,去掉MPI等协议,只保留需要的以太网协议,直接给出发包和收包的数据格式,代码结构清晰明了。Libnodave库只提供了cp243,cp343的连接方式,文中在其基础上增加了S7-200smart、西门子1200系列PLC的连接方式。

2 研究环境

设计的Libnodave库的TCP协议解析工作,都是在微软Windows 7环境下完成。后台PC机的IP地址为192.168.1.18,子网掩码为255.255.255.0。

操作系统:Windows 7;

编程软件:Visual Studio 2012;

西门子S7-200smart编程软件:S7-200 PC Access;

西门子S7-300编程软件:Step7 v5.5;

西门子S7系列PLC:S7-300PLC+cp343,200SMART。

测试的PLC的IP地址是192.168.0.25,子网掩码为255.255.255.0。

由于西门子以太网中的ISO on TCP协议所采用的数据传输端口为102,所以port设置为102。

3 Libnodave程序流程

在软件编写方面,鉴于通过工控组态软件或者OPC服务器/客户端的PLC远程连接上位机监测监控具有实时性较低、实施成本高等缺点,根据西门子S7-300与S7-200SMART的实际对象,采用西门子Libnodave开源免费函数库结合高级语言可以开发基于以太网通讯的监控软件,一定程度上优化远程监控计算机与PLC之间的通信。该方法对数据的采集与存储、故障分析与处理非常便利,具有实施难度低、数据交换方式灵活多变、实时性高等优点,具有极高的程序独立性,独立于西门子其他任何软件。

图1给出了Libnodave测试程序流程。

图1 Libnodave库测试程序流程

该程序用socket同步通讯,Libnodave库协议握手需要调用7个函数。函数首先打开通信接口句柄后保存到相应变量中,该变量在电泳daveNewInterface时传递给新生成的daveNewInterface结构体。调用daveNewConnection时需要把已经生成的daveInterface结构体指针传送到新生成的daveConnection结构中保存。在调用其他功能函数时,硬件连接方面的信息通过daveConnection来传递,实现功能函数调用的协议不相关性。由上可见,发送的数据包分布在多个结构体中初始化,牵扯到多个函数的调用,代码结构纷繁复杂。

4 改进后的库函数

文中参考Libnodave库,改进后的库只有握手、读包、写包三个函数。数据包以unsigned char数组的形式给出,并标识出每一位的含义,代码清晰明了,方便移植。

由于所有的数据都是从PLC的内部存储空间获取,主要包括数据库DB、位存储区M、输入映像区Inputs和输出映像区Outputs。针对上述四个区域,开发读取功能,并通过位逻辑BOOL、字节BYTE、整形INT、双字节WORD、长整型DINT、双字DWORD以及实数REAL7中形式读取。

下面是封装的函数列表:

BOOL ConnectPLC();

BOOL ReadBytes(int area, int db, int start, int len, unsigned char* buffer);

BOOL WriteBytes(int area, int db, int start, int len, unsigned char* buffer);

area:读取的数据区,m区是0x83,DB区0x84。

db:m区,值为0;db区,值为db区号。

start:读取的数据地址开始位置。

len:读取几个字节。

buffer:读取到的数值保存的缓冲区。

如:读取“DB1,W10”的数据,(W表示一个字,所以是2个字节),函数应该写为:ReadBytes(0x84,1,10,2,buffer)。

4.1 握手数据包

每种以太网通讯模块的握手数据包都不相同。发送接收串都是unsigned char类型的数据。客户端向PLC发送握手数据包,如果数据包是不匹配的,PLC是不会回数据的。所以接收到数据包并且数据包的长度是22,就说明握手成功。握手通过后,就可以和PLC进行数据交换了。表1给出cp243,cp343,1200,200smart的握手数据包。所有发送的数据包前2个字节都是0x03、0x00,第3和第4字节表示数据包的长度,计算公式为:串[2]*256+串[3]。

表1 cp243,cp343,1200,200smart的握手数据包

4.2 读数据包

表2为读数据包(“口”占一个字节);表3为读数据返回包。

表2 读数据包

如果读取PLC的数据包是不正确的,PLC是不会回数据的。所以接收到数据包,说明读取成功。返回的数据包中包含了要读取的数据。

4.3 写数据包

文中设计数据可以向数据库DB、位存储区M、输入映像区Inputs和输出映像区Outputs中写入的功能,并可通过BOOL、BYTE、INT、WORD、DINT、DWORD以及REAL七种形式写数据。以BYTE为基本单元,以一帧数据为写入数据包为例,如表4所示。

表4 写数据包

如果写入PLC的数据包是不正确的,PLC是不会回数据的。所以接收到数据包并且数据包的长度是22,就说明写入成功。

写数据包返回包0x03,0x00,0x00,0x16,0x02,0xf0,0x80,0x32,0x03,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x01,0x00,0x00,0x05,0x01,0xff

5 测试程序

测试程序主要有4个部分,分别为建立端口连接、设备联络握手、读写数据以及句柄释放,详细流程如图2所示。

图2 测试程序流程

(1)建立连接。

connect(sockClient,(SOCKADDR*)& addrSrv,sizeof(SOCKADDR));

//tcp 连接与初始化连接与端口号

(2)协议握手。

ConnectPLC();

//通过协议握手数据的发送与接收情况启动相关校验程序,从而判断是否握手成功

(3)数据交换。

unsigned char v2[2]={0};

daveReadBytes(AREA_DB, 1, 10, 2, (void *)v2);

unsigned char v4[2]={0};

Put16(v4,2);

WriteBytes(AREA_M,0,20,2,(void *)v4);

//通过读写数据部分,启动数据帧的发送与接收工作,主要完成上位机与PLC的数据交换与处理。

(4)断开连接

closesocket(sockClient);

//关闭套接字

测试程序截图如图3所示。

图3 测试程序截图

6 结束语

通过研究西门子开源设备Libnodave驱动库,解析西门子系列PLC通信原理以及该开源库的编程结构,使得根据不同硬件或者平台需求借用源代码实现同西门子系列PLC通信成为可能。鉴于Libnodave驱动库的免费、开源、稳定、灵活等特点,取代PRODAVE来开发基于西门子S7-300与S7-200SMART的监控系统软件,从而降低成本,提高西门子相关产品的局限性。Libnodave库是C语言编写的开源跨平台的库,但是仍然不方便在跨语言方面的移植,比如在VB、C#等中调用它,需要把Libnodave封装成二进制文件,并提供接口函数。文中通过研究西门子开源设备Libnodave库,直接给出send,recv的字节码,非常方便跨语言、跨平台的移植,对于嵌入式应用环境中有限的运算资源是一个有利的支撑,其研究成果可以为工控行业各生产企业现场设备的升级改造与建设提供一定的借鉴,具有一定的参考价值。

[1] 任思成,王书鹤,亓克贵.新一代工业过程控制软件接口标准-OPC技术[J].仪器仪表学报,2002,23:265-267.

[2] 沈世斌.基于PLC自由口通信的应用[J].仪表技术与传感器,2004(12):26-28.

[3] 周广颖,张金金,闫 隆.基于LIBNODAVE的上位机与西门子PLC的通信[J].微计算机信息,2010,26(11-1):28-30.

[4] 赵 军,时良平,黄春阳.基于Prodave技术的西门子PLC监控调试软件开发[J].自动化应用,2011(10):26-28.

[5] 张晓丽,马 俊,刘轶斐.炼钢厂实时数据通信系统的研究与开发[J].仪器仪表学报,2005,26:553-556.

[6] 魏立新,冯 曦,王洪庆,等.LIBNODAVE在PLC上位机监控软件中的运用[J].仪表技术与传感器,2014(7):82-84.

[7] DILIP P S,JAGTAP S R.Remote monitoring & controlling of real time industrial parameters with GSM & Ethernet[J].International Journal of Electronics Communication & Instrumentation Engineering Research & Development,2013,3(2):1-10.

[8] SCHNEIER B.Cryptanalysis of Microsoft’s point-to-point tunneling protocol (PPTP)[C]//Proceedings of the 5th ACM conference on computer and communications security.[s.l.]:ACM,1998:132-141.

[9] HU M,ZHAO Q,KURAMOTO M,et al.Research and implementation of layer two tunneling protocol (L2TP) on carrier network[C]//4th IEEE international conference on broadband network and multimedia technology.[s.l.]:IEEE,2011:80-83.

[10] 桂 芳,全书海.网络控制系统传输时延分析与测试[J].计算机应用,2005,25(10):2264-2266.

[11] 张晓倩,宋晓茹,曹建建.基于CAN总线的网络控制系统的仿真研究[J].计算机技术与发展,2016,26(7):192-195.

[12] 党安喜,裴少婧,尚耀东,等.以太网时延仿真与性能分析[J].计算机工程与应用,2009,45(2):119-121.

[13] IANNONE F,BERTOCCHI A,BONCAGNI L,et al.Open source solutions in control and data acquisition systems:FTU case studies[J].Fusion Engineering and Design,2010,85(3-4):321-324.

[14] 孙书欢,孔祥成,吴雪婷.西门子PLC设备开源驱动库Libnodave的研究与改进[J].核电子学与探测技术,2013,33(7):847-851.

猜你喜欢

工控西门子上位
工控编程编译工具应用现状分析及展望
工控系统脆弱性分析研究
基于蜜罐的工控网络安全防护技术研究进展
西门子(中国)有限公司
智能矿井工控网络安全防护系统研究与实践
特斯拉 风云之老阿姨上位
浅谈西门子LOGO在空调新风机控制系统中的应用
基于ZigBee和VC上位机的教室智能监测管理系统
50MW级SGT-800型西门子燃气轮机的性能验证
基于VC的PLC数据采集管理系统