基于Prodave的西门子PLC与PC以太网通信研究

2017-11-01 05:19祝广场余小敏
化工自动化及仪表 2017年4期
关键词:调用西门子以太网

祝广场 余小敏

(华电电力科学研究院中南分院)

基于Prodave的西门子PLC与PC以太网通信研究

祝广场 余小敏

(华电电力科学研究院中南分院)

提出了基于Prodave工具包的西门子PLC与PC的通信方法,该方法不需要在PLC侧进行编程,只需要在PC侧采用高级语言调用若干函数即可,成本较低且通信可靠。

以太网通信 西门子PLC Prodave

S7-300 PLC拥有高性能的处理器、丰富的IO和通信模块,在工业控制中应用广泛,但它的人机接口功能较弱。如果将PLC与PC通过通信连接起来,用PC作为上位机,通过对PLC的数据存储器中各区域进行读取与写入,实现系统的监控、人机接口通信等功能,就能够组成功能强、可靠性高、成本低的控制系统[1]。

目前,由于西门子公司没有公开通信协议,上位机程序设计主要有两种方式:采用专门的组态软件(如WinCC、组态王等)开发或是通过编程语言自行开发。第1种方法操作简单、效率高,对开发人员的要求相对较低,但成本较高;第2种方法相对复杂,要求开发者具有较高的编程水平,开发周期长,但与第1种方法相比具有灵活、成本低的优点[2]。

Prodave(Proces Data Traffic)是西门子公司开发的S7系列PLC和PC通信的工具包,它为PLC和PC通信提供了一种桥梁,既避免了组态软件的高昂成本,又不要求开发人员有很高的编程水平。笔者通过对Prodave进行研究,以S7315-2PN/DP PLC为下位机,采用VS2008编程工具,开发了一种PLC与PC机之间的以太网通信软件。

1 Prodave简介

Prodave是用于PC与S7系列PLC间数据通信的工具软件包[3]。Prodave提供了大量基于Windows操作系统的DLL函数,以解决PLC与PC之间数据交换和处理的问题,可以在高级语言编程环境中调用这些函数来建立或断开通信连接、读写CPU的系统存储器。它具有以下特点:

a. 支持PC上的标准以太网卡和Simatic S7的以太网口(CPU31XX-PN、CP31X-PN、CP343和CP443);

b. 能读写PLC中DB块和内存的数据;

c. 支持S7-200 PLC、S7-300 PLC和S7-400 PLC;

d. PLC侧无需编程,只需在PC中编写程序,调用Prodave的DLL即可,支持VB、VC及DEPHI等高级语言。

2 Prodave函数

连接PLC函数LoadConnection_ex6()用于初始化适配器,检查是否装载了驱动,并将选择的通信接口激活。可以用来通过MPI或IP地址建立对PLC的连接。函数原型为LoadConnection_ex6(int ConNr, char* pAccessPoint, int ConTableLen, CON_TABLE_TYPE * pConTable)。ConNr是连接PLC的序号(0~63),最多可以连接64个;pAccessPoint为访问点,“S7ONLINE”表示MPI方式,“1”表示TCP/IP方式,“2”表示MAC方式;ConTableLen为地址表的长度;pConTable为地址表,用于存放PLC的地址。

激活PLC函数SetActiveConnection_ex6()用于激活PLC和PC之间建立的连接。函数原型为int SetActiveConnection_ex6(int ConNr),ConNr是连接序号。

读取PLC数据函数。函数db_read_ex6()和field_read_ex6()分别用来读取PLC中的任意存储区数据和DB数据,可采用字、双字的方式,读取的数据放在PC的数据缓冲区。field_read_ex6()的函数原型为int field_read_ex6 (char FieldType, unsigned short BlkNr, unsigned short StartNr, unsigned long Amount, unsigned long BufLen, unsigned char * pBuffer, unsigned long * pDatLen),其参数见表1,db_read_ex6()与它类似。

表1 读取PLC数据函数参数

写数据至PLC。函数field_write_ex6()和db_write_ex6()用于向PLC中写入数据,其参数和读取PLC数据函数类似。

位状态读取和写入函数。函数mb_bittest_ex6()和mb_setbit_ex6()分别用来读取和写入PLC中的某个位变量,mb_bittest_ex6()的函数原型为int mb_bittest_ex6 (unsigned short MbNr, unsigned short BitNr, int * pValue),其中MbNr为字节号,BitNr为位号,pValue为状态(“1”表示TRUE,“0”表示FALSE)。两个函数的参数意义相同。

3 PLC和PC通信实例

3.1 动态链接库及其特点

动态链接库(Dynamic Link Library, DLL)是微软公司在微软视窗操作系统中实现共享函数库概念的一种方式。这些库函数的扩展名是.DLL、.OCX(包含ActiveX控制的库)或者.DRV(旧式的系统驱动程序)。

动态链接库是不能直接执行的,也不能接收消息,它只是一个独立的文件,它提供了一种方法使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个DLL中,该DLL包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL还有助于共享数据和资源。多个应用程序可同时访问内存中单个DLL副本的内容。

动态链接库在电脑中可以更容易地将更新应用于各个模块,而不会影响该程序的其他部分。例如,一个大型的软件,如果把整个数百MB甚至数GB的程序代码都放在一个应用程序里,日后的修改工作将会十分费时,而如果把不同功能的代码分别放在数个动态链接库中,无需重新生成或安装整个程序就可以应用更新,更有利于软件的模块化设计。

3.2 Visual Studio2008对Prodave6.0 DLL文件的引用

在VS2008中调用DLL时,需要添加如下代码:

using System.Runtime.InteropServices; //用于调用动态库的接口;

在调用DLL中的某个函数时,首先必须要有一个声明,使用的是DllImport关键字:[DllImport("Prodave6.dll")],代码中DllImport关键字的作用是告诉编译器入口点在哪里,并将打包函数捆绑在类Prodave中。

然后对函数进行声明:

public extern static int LoadConnection_ex6(int ConNr, string pAccessPoint, int ConTableLen, ref CON_TABLE_TYPE pConTable);// 连接PLC操作;

进行以上操作之后,便可以在程序中使用DLL中的函数了。

3.3 西门子STEP7对PLC的设置

在进行通信之前,需要对西门子的PG/PC接口进行设置。在开始菜单中,打开“设置PG/PC接口”(图1),在选项中选择TCP/IP所对应的网卡,确定即可。

3.4 PLC和PC之间的通信流程

在PLC和PC进行通信之前,需要对通信参数进行设置,笔者采用以太网通信方式,故在监控界面中输入PLC的IP地址,之后才能建立连接。建立连接之后,系统启动定时器和数据库,定时器以一定间隔执行读写函数和数据处理函数,并在画面中实时显示;数据库对需要记录的数据及时保存。定时器函数的执行周期可以在画面中设置。

图1 西门子STEP7中对PLC的设置

在通信过程中,系统每执行一次函数,都会返回一个代码,软件通过对代码进行解析,判断函数是否被正确执行,如果错误,则会触发报警提示,并中断此函数的执行。

4 PC和PLC的通信程序设计

4.1 PC和PLC通信程序要实现的功能

上位机程序框架如图2所示。

图2 PC和PLC通信程序框架

定时器周期执行函数。本系统中,定时器更新周期设定为100ms和500ms,其中,数据读写函数周期为100ms,以适应工业控制中快速变化的参数;数据库记录函数和状态信息显示函数周期为500ms。

画面设置、操作和显示。本部分主要实现人机接口功能。参数设置主要是通信方式和通信参数的选择,分为TCP/IP、MPI和MAC共3种通信方式,笔者选用TCP/IP方式,则需把PLC的IP地址设置到画面中,在设置过程中,必须使PLC和PC的IP地址在同一网段。实时趋势显示系统中主要设备参数的实时数据,采TeeChart控件实现,可以同时显示8条实时曲线。报警光字牌显示系统中重要的报警信息,当报警触发时,以闪烁方式做出提醒。操作记录显示模块记录软件运行中,画面中的主要操作,包括操作人、操作时间及操作事件等信息。模拟键盘为软件的输入提供了操作接口。

PLC信息。主要包括PLC内部的状态信息、数据块信息及诊断缓冲区信息等。

辅助功能。主要包括程序对Prodave动态链接库的调用和数据处理函数。

4.2 PC和PLC通信程序的实现

采用Prodave进行PC和PLC通信的流程如图3所示。

图3 PC和PLC的通信流程

由于通信过程中PLC侧不需要编写程序,因此只需在PC侧进行编程即可。建立并激活链接的程序代码如下:

short ConNr = 6;//定义链接号,0~63可选;

string AccessPoint = "S7ONLINE"; // 默认访问点为“S7ONLINE”;

ConTable.AdrType = 2; //PC和PLC的通信方式,此处选择为TCP/IP;

ConTable.SlotNr = 2; //PLC的插槽号;

ConTable.RackNr = 0; //PLC的机架号;

RetValue_ConnectPlc=ProdaveTest.Prodave.LoadConnection_ex6(ConNr, AccessPoint, ConTableLen, ref ConTable);//连接PLC;

以上为PC连接PLC的函数代码,RetValue_ConnectPlc为函数的返回值,若为“0”表示执行成功。连接成功之后,需要将此链接激活,代码为:

RetValue_ActivePLC=ProdaveTest.Prodave.SetActiveConnection_ex6(UConNr);//激活链接;

若激活成功,则可继续进行数据传输。如果函数执行不成功,可以通过GetErrorMsg()函数来确定返回值所表示的意思。

设计中,PLC中的数据存放在DB1数据块中,以下程序代码读取的是DB1中从地址0开始的8个浮点型数据:

UInt16 BlkNr = 1;//PLC中DB数据库块的序号;

Prodave.DatType DType = Prodave.DatType.BYTE;//以字节的形式读取数据;

UInt16 StartNr = 0;//DB数据块中要读取数据的起始地址号;

UInt32 pAmount = 32;//读取数据的数量;

UInt32 BufLen = 32;//定义缓冲区长度;

byte[] pReadBuffer = new byte[32];//开辟存储空间;

UInt32 pDatLen = 0;//初始化缓冲区;

RetValue_ReadDB=ProdaveTest.Prodave.db_read_ex6(BlkNr, DType, StartNr, ref pAmount, BufLen, pReadBuffer, ref pDatLen);//读取函数;

读取PLC中M存储区数据的代码为:

RetValue_ReadMzone=ProdaveTest.Prodave.field_read_ex6(FType, BlkNr, StartNr, pAmount, BufLen, pReadBuffer, ref pDatLen);//读取M存储区数据;

其参数和读取DB数据的函数类似。值得注意的是,在PLC系统中,很多设备的状态变量、报警变量等都是以BOOL型数据存在的,在Prodave工具包中,有专门读写PLC中某一位的函数,但是,如果状态变量较多,需要反复调用函数,效率太低,使用field_read_ex6()函数可以解决这一难题。在PLC中定义变量的时候,可以定义一段连续的存储空间用来存放系统中的状态变量,再采用field_read_ex6()函数以字节的形式读取,进行简单的逻辑运算之后即可得到一个字节中8个位变量的信息。

5 结束语

通过对西门子Prodave工具包的研究,提出了西门子PLC和PC的以太网通信方法。Visual Studio2008编程方便、性能稳定、可靠性高,通过它对Prodave动态链接库的调用,实现了PC对PLC的读写操作。编写的以太网通信程序界面友好、人机交互方便、数据库功能较强。笔者提出的通信方法,对西门子S7-200 PLC、S7-300 PLC和S7-400 PLC具有通用性,可以推广应用。

[1] 马健,韩晓华,黄旭平,等.PC上位机与S7-300系列PLC进行通讯的研究[J].制造技术与机床,2011,(3):169~172.

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

[3] 唐东明,聂诗良.PRODAVE在S7-300PLC监控系统中的应用[J].可编程控制器与工厂自动化, 2007,(8):41~42.

TheStudyonEthernetCommunicationbetweenSiemensPLCandPCBasedonProdave

ZHU Guang-chang, YU Xiao-min
(ZhongnanBranch,HuadianElectricPowerResearchInstitute)

The Prodave toolkit-based communication between Siemens PLC and PC was proposed, which asks for no programming at PLC and only adopts high-level language to call some functions at PC. This communication method costs lower and has high reliability.

Ethernet communication, Siemens PLC, Prodave

TH862+.7

B

1000-3932(2017)04-0397-04

2016-10-10,

2016-10-31)

祝广场(1984-),工程师,从事火电厂热工自动化控制和保护工作,14815197@qq.com。

猜你喜欢
调用西门子以太网
基于1500以太网养猪场的智能饲喂控制系统的设计与实现
基于西门子VCS的大型五轴机床空间误差补偿
核电项目物项调用管理的应用研究
西门子重型燃机出海
谈实时以太网EtherCAT技术在变电站自动化中的应用
基于系统调用的恶意软件检测技术研究
浅谈EPON与工业以太网在贵遵高速公路中的应用
万兆以太网在连徐高速公路通信系统改造中的应用
西门子 分布式I/O Simatic ET 200AL
西门子引领制造业的未来