在Labview环境下利用PRODAVE实现PC与PLC数据通信
时间:2020-09-14 07:56:15 来源:达达文档网 本文已影响 人
摘要:文章介绍了PC和PLC通信的硬件连接和软件实现。虚拟仪器开发平台LabVIEW开发测控程序,具有界面友好,人机交互方便,开发效率高等特点,而且通过调用PRODAVES7软件包的动态链接库实现PC机对PLC数据的读写操作,不但数据传输速度快,而且数据传输正确率高。
关键词:PLC;LabVIEW;PRODAVE;数据通信;适配器连接
中图分类号:TP273文献标识码:A
文章编号:1009-2374(2010)25-0091-03
0引言
PLC具有极高的可靠性,一般用来执行现场的控制任务,但是它的人机接口功能较差。PLC与个人计算机(PC)通过通信连接起来,用PC作为上位计算机,实现系统的监控、人机接口和与上一级网络(例如工业以太网)的通信等功能,可以使二者的优势互补,组成一个功能强、可靠性高、成本低的控制系统。因此在工业控制系统中,PC与PLC之间的通信是最常见的和最重要的通信之一。
1PLC与PC的硬件连接
在此以SIMATICCPU314C-2DP为例来讲。SIMATICCPU314C-2DP有两个接口:一个是MPI/DP,通过MPI,PLC可以同时与多个设备建立通信连接,可以连接的设备包括编程器或运行STEP7的计算机、人机界面(HMI)及其它SIMATICS7,M7和C7;另一个接口为DP口,可以通过该接口将PLC接入PROFIBUS现场总线网络中,PROFIBUS-DP的传输速率最高为12Mbit/s。
PC机与CPU314C-2DP的连接可以有两种:
1.1通过PC/MPI适配器连接
S7-300/400的MPI(多点通信接口)和S7-200的PPI(点对点通信接口)用于西门子公司控制产品之间的通信,例如安装在PC上的STEP7编程软件与PLC之间的通信,但是这些通信协议均为公开。如果用S7-300/400点对点通信协议实现PC与PLC之间的通信,需要配置专用的通信处理器模块或带点对点通信接口的CPU31x-2PtP。其点对点通信协议并不通用,要花较多的时间熟悉它,才能编出PLC和计算机的通信程序。
PRODAVE是用于PC与S7系列PLC之间的数据连接通信的工具箱。PRODAVE是“ProcessDataTraffic”(过程数据交换)的缩写,可以用于S7-200、S7-300/400、M7和C7等西门子的S7系列PLC。通过下列硬件,可以方便地在PLC与PC之间建立数据连接:
用于PC的MPI通信处理器,例如CP5511、CP5611和CP5612,通信速率可达12Mbit/s;
用于S7-300/400的PC/MPI适配器(PC-Adaptor);
用于S7-200的PC/PPI电缆。
对于S7-300,第一种方式需要用到通讯卡CP5511/5611/5512,而第二种方式除了PC机和PLC硬件外,只用到了程序下载电缆PC/MPI适配器,而下载电缆是PLC编程所必须用的,在此又可以用到PC机和PLC的通讯上。
用户在安装了PRODAVE软件包后,需要配置PG-PC(PG是编程器的缩写)的接口参数,对硬件进行配置,使用PC/MPI适配器时,配置步骤如下:
在桌面执行菜单命令“开始”→“程序”→“PRODAVE_S7”→“PG-PC Interface”打开接口参数配置对话框(见图2)。
在“Interface Parameter Assignment”(接口参数配置)列表框中如果没有实际使用的硬件接口,点击右下方的【Select】按钮,打开“Installing/Uninstalling Interfaces”对话框,安装实际使用的硬件接口的驱动程序。
在图3中选中接口参数配置列表框中的“PCAdapter(MPI)”,在上面的“Access Pointofthe Application”(应用程序访问点)列表框内选择“S7ONLINE(STEP7)”。
点击【Properties…】(属性)对话框,打开属性对话框。将“MPI”栏中的“Transmission Rate”(传输速率)设置为187.5kbit/s,其他参数可以采用默认的设置。在“Local Connection”选项卡的“COMPort”选择框中设置实际使用的PC串口的编号,传输速率可以设置为19.2kbit/s。
点击【OK】按钮,完成设置。
1.2通过PROFIBUS总线
如图4所示:
但是这种方法需要Profibus总线和硬件通信处理器,占用很大的硬件资源。
2PC机与PLC通信软件实现
2.1PRODAVE通信软件
PRODAVE的动态链接库(DLL)提供了大量的基于Windows操作系统的DLL函数,供用户解决PLC与PC之间的数据交换和数据处理问题,可以在LabVIEW编程环境中调用这些函数。PRODAVE有以下特点:
(1)使用简单方便,编程人员不需要熟悉复杂的通信协议,通过调用PRODAVE提供的动态连接库(DLL)中的函数就可以实现通信。
(2)上位机用通信函数直接读写PLC中的数据,用户不用编写PLC一侧的通信程序。
(3)如果使用PC/PPI适配器或用于PC的通信处理器作通信接口,它们同时还可以兼作编程软件与PLC的通信接口。
Windows环境中的西门子公司的PRODAVE工具箱有PRODAVE S7(完全版)和PRODAVE S7 mini(简化版)两种,PRODAVE S7(完全版)功能比较全面,可按位或者字节读写PLC中的输入过程映像区、输出过程映像区、位存储区、定时器、计数器、数据块等区域,PRODAVE S7 mini(简化版)则只能读写DB中的字和字节。
PRODAVE中有两个已经编译好的DLL文件:W95_S7.DLL包含PRODAVE的一些基本通信函数和电话服务函数(TeleService Function),电话服务函数是PRODAVE的扩展功能,允许S7控制器与公众电话网连接,但这种功能需要安装SIMATIC TeleService SW-Option package才能实现;KOMFORT.DLL包含一些增强型函数,用于PC中用户数据的转换和处理,与PC与PLC之间的通信没有直接关系。
2.2PLC控制程序调试软件用到的PRODAVE函数
(1)load_tool用于PC机与PLC系统初始化链接;
函数原型为:
intload_tool(char,char*device,char*adr_table);
此函数传送以下3个参数:
:PC要激活的连接的个数(1~32个),此系统=1;
device:是用户驱动设备的名称,对于MPI驱动器,dev为“S7ONLINE”;
adr_table:连接的地址列表。
load_tool初始化适配器,检查是否已装载驱动器,初始化连接的地址,激活选定的接口。
如果没有错误,此函数返回0,否则返回错误信息的相应l6进制代码。
(2)unload_tool断开PC机与PLC系统链接;
函数原型:intunload_tool(void);
如果没有错误,此函数返回0,否则返回错误信息的相应l6进制代码。
(3)db_read从PLC的DB块中读数据字,在下面的库函数调用中有介绍;
(4)db_write向PLC的DB块中写数据字,函数参数与db_read类似。
在通信开始之前,首先用load_tool函数建立上位机与PLC的连接,通信结束时必须用unload_tool函数断开PC与PLC的连接,否则可能引起上位机死机,或者造成上位机系统的异常状况。
2.3 在LabVIEW中,可以有两种方法利用PRODAVE与PLC通信
(1)库函数调用。DLL是建立在客户端/服务器通信的概念上,包含若干函数、类或资源的库文件,函数和数据被存储在一个DLL服务器上,并有一或多个客户导出使用,这些客户可以是应用程序,或者是其它的DLL。DLL库不同于静态库。在静态库情况下,函数和数据被编译进一个二进制文件(通常扩展名为.LIB),对VisualC++的编译器,它在处理程序代码时将从静态库中恢复这些函数和数据,并把它们和应用程序中的其它模块组合在一起,生成可执行文件,这个过程称为“静态连接”,此时,因为应用程序所需的全部内容都是从库中复制出来的,所以静态库本身并不需要与可执行文件一起发行。
在动态链接库的情况下,有两个文件,一个是引入库(.LIB)文件,一个是DLL文件,引入库文件包含从DLL导出的函数名称和位置,DLL包含实际的函数和数据。应用程序使用LIB文件连接到所需使用的DLL文件,库中的函数和数据并不复制到可执行文件中,因此,在应用程序的可执行文件中,存放的不是被调用的函数代码,而是在DLL中所要调用的函数的内存地址,这样当一个或多个应用程序运行时,再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。
LabVIEW中动态链接库的调用是通过CIF(CallLibraryFunction)节点实现的,CLF节点位于LabVIEW功能模板中的Advanced子模板中。
单击Advanced子模板中的CLF节点的图标,将CLF节点的图标放至LabVIEW框图程序中,此时的CLF节点没有任何用处,必须对它进行配置以后才能使用。
在LabVIEW中调用库函数的关键是要了解被调用的函数名称,功能及其输入输出参数。
下面以调用动态链接库W95_S7.DLL中的db_read从PLC的DB块中读数据字为例讲一下如何使用CLF节点。
第一步:在CLF节点的右键菜单中选择“Configure…”,弹出CLF节点配置对话框,利用配置对话框可以实现CLF节点对动态链接库的调用。如图4所示:
第二步:点击“Browse…”按钮,在随后弹出的选择DLL文件对话框中找到W95_S7.DLL(C:\Windows\System32\W95_S7.DLL)文件,单击“打开按钮”,此时,LabVIEW就会自动装载选定的DLL文件,并且检测DLL文件中所包含的函数。但是LabVIEW不会自动检测函数中的参数和参数的数据类型,这需要根据函数的输入、输出参数手动设置。
动态链接库W95_S7.DLL中包含db_read函数,其功能是从PLC的DB块中读数据字,其函数原型为:
intdb_read(intdbno,intdwno,int*amount,void*buffer);
dbno:要读取的PLC的数据块。
dwno:读取开始地址。
amount:要读的数据字字数。
buffer:要存放的缓冲区。
读取PLC数据块dbno中从地址dwno开始的amount个数据字,存放在缓冲区buffer中。如果没有错误,返回值为零,如果有错误则返回一个非零的错误数字,可以通过错误信息函数error_message给出错误信息文本。
第三步:在Function Name下拉列表框中选择db_read,在FunctionName下拉列表框右侧的下拉列表框中选择RunInVIThread。
第四步:在Calling Conventions下拉列表框中选择C。
第五步:设置db_read函数的返回参数。
在Parameter中选择returntype,同时在Type下拉列表框中选择Numeric,在随后出现的Datatype下拉列表框中选择Unsigned32-bitInteger。这是因为db_read函数的返回值是一个整数。
第六步:根据db_read函数原型,设置db_read函数的输入dbno,dwno,amount和buffer。
点击AddaParameterAfter按钮,就可以添加新的输入参数,表1给出了参数的相关设置:
表1db_read函数的参数设置
ParameterTypeDataTypePass
dbnoNumericUnsigned32-bitIntegerValue
dwnoNumericUnsigned32-bitIntegerValue
amountNumericUnsigned32-bitIntegerValue
BufferArrayUnsigned32-bitIntegerValue
配置完成的CLF节点的配置对话框如图5所示。
配置完成后单击“OK”按钮,CLF节点配置对话框消失,此时CLF节点变成如图6所示的图标。
(2)利用CIN节点。在LabVIEW中,除了可以通过动态链接库的方式实现与其它高级语言接口之外,还可以通过Advanced功能子模板中的CIN节点来实现与C语言的直接接口。
CIN与LabVIEW的其它节点类似,是通过输入、输出端口来实现两种语言之间的数据和参数的传递的。当LabVIEW执行到CIN节点时,通过CIN的输入端口获取数据和参数。然后传递给C语言代码,转去执行CIN节点之后的G语言程序。
3结语
针对以上的研究工作,还可以做进一步的研究,例如通过PRODAVE,LabVIEW有两种方法可以实现与PLC的通信,作者只研究了一种方法,另一种还有待研究;LabVIEW和PLC通信还有其它的方法需要研究等。
参考文献
[1] 刘振东,梁秀满.西门子S7—300/400PLC与VB的通信方法[J].微计算机信息,2006,22(1).
[2] 廖常初.S7-300/400PLC应用技术[M].北京:机械工业出版社,2005.
[3] 李红梁.基于OPC的PC与PLC实时通讯的LabVIEW实现[J].计算机应用研究,2003,(12).
[4] 张凯,等.LabVIEW虚拟仪器工程设计与开发[M].北京:国防工业出版社,2004.
作者简介:杨艳霞(1982-),女,河南周口人,西安工业大学北方信息工程学院助教,硕士,研究方向:电子通信。