SIEMENS西门子S7-300/400PLC与VB通信方法

点击数:8953 发布时间:2011年11月19日星期六 来源:

 

西门子S7-300/400 PLCVB的通信方法
刘振东 梁秀满 
河北理工大学计算机与自动控制学院 063009
摘要:本文主要介绍了用VB与西门子S7-300/400 PLC的通信方法,并把此方法应用于复杂
控制系统的调试以及PC机管理系统与PLC控制系统的信息交换中。
关键词:PLC VB 通信
中圈分类号:TP273 文献标识码:B
Research on the Communication between SIEMENS S7-300/400 and VB
LIU Zhendong ,LIANG Xiuman
(College of Computer and Automation Control, Hebei Polytechnic University, Tangshan
Hebei 063009, China)
Key words: PLC  VB  communication
Abstract: This paper introduces a Communication method between SIEMENS S7-300/400
and VB, this method has been applied to the debugging complex control system and
communication exchange between PC manager system and PLC control system.
0引言
西门子S7-300/400 PLC是目前我国应用最为广泛的大中型PLC,研究西门子PLC
其网络的通信技术有着重要意义。本文通过对贵州钢绳集团2000KN拉力机测控系统的研究,
探讨了在Windows2000环境下,用VB开发的钢丝绳破断力试验机测控软件与CPU-314通信
的实现问题。结果表明,通过适当的方法,可以使VBS7-300/400 PLC进行良好的通信,
VB构成功能强大数据采集及控制软件。
1软件总体设计
通常情况下,我们一般选用WinCC作为西门子S7-300/400 PLC控制系统的监控和数
据采集软件(HMI/SCADA)。由于WinCC内置了基于S5/S7协议的通讯系统,并提供了大量面
向这些系统和技术的组件,从而为WinCC和这些系统的最优化通讯和良好的互操作性提供了
保证。但是,作为一种作为一种通用组态软件,WinCC的应用领域主要是工业过程控制领域。
2000KN钢丝绳拉力试验机对于上位机软件的要求比较特殊:采样速率较高(20次/秒);
依采样速率同步显示曲线和数据;试验数据和曲线要能够按照试验编号查询并且调出显示。
很明显,WinCC的趋势曲线、过程值归档等功能不能满足2000KN拉力机的工艺要求。VB
为一种通用的高级编程语言,编程灵活,在开发图形曲线显示、数据库等方面有着WinCC
不可比拟的技术和成本优势。因此,我们选用VB来开发2000KN钢丝绳破断力试验机的数据
采集和控制软件。图12000KN拉力机测控软件系统及与PLC硬件连接示意图。

2数据通信

2.1通信软件接口

                              图1 2000KN拉力机测控软件系统及与PLC硬件连接示意图

该系统能否研究成功的关键问题在于VBCPU-314 PLC之间的通信。S7-300/400

MPI(多点通信接口)用于西门子公司的控制产品之间的通信,例如安装在PC上的STEP7
编程软件与PLC之间的通信,但是这些通信协议均未公开。如果用S7-300/400的点对点通
信协议实现PCPLC之间的通信,需要配置专用的通信处理器模块或带点对点通信接口的
CPU31x-2PtP。其点对点通信协议并不通用,要化较多的时间熟悉和摸索,才能编写出PLC
和计算机的通信程序。
PRODAVE是用于PCS7系列PLC之间的数据链接通信的工具软件包。PRODAVE
“Process Data Traffic”(过程数据交换)的缩写,通过PC/MPI适配器(PC-Adaptor)、
MPI通信处理器(CP5611卡)等硬件设备,可以实现PCPLC之间的数据链接。PRODAVE
的动态链接库(DLL)提供了大量基于Windows操作系统的DLL函数,供用户解决PLCPC
之间的数据交换和数据处理问题。Windows环境中的西门子公司的PRODAVE工具箱有PRODAVE
S7(完全版)和PRODAVE S7 mini(简化版)两种,PRODAVE S7(完全版)功能比较全面,可按
位或者字节读写PLC中的输入过程映像区、输出过程映像区、位存储区、定时器、计数器、
数据块等区域,PRODAVE S7 mini(简化版)则只能读写DB中的字和字节。
2.2动态链接库声明
程序中用到的PRODAVE函数主要有:
⑴load_tool函数用于PC机与PLC系统的初始化链接。
⑵unload_tool函数用于断开PC机与PLC系统的链接。
⑶db_read函数用于从PLCDB块中读数据字。
⑷db_write函数用于向PLCDB块中写数据字。
首先,在模块中应该声明程序使用的用户自定义的数据类型PlcAdrType
Type PlcAdrType
ADDRESS As Byte
SEGMENTID As Byte
SLOTNO As Byte
PACKNO As Byte
End Type
在通信开始之前,首先用load_tool函数建立与上位机与PLC的链接,通信结束时
必须用unload_tool函数断开PCPLC的链接,否则会引起上位机死机或上位机系统的异
常状况。VB在调用DLL函数之前,需要用Declare语句在模块中声明所要使用的DLL函数。

声明DLL函数的主要作用是指明该函数所在的DLL库名及路径,以及该函数的参数说明,以

便Windows能找到该函数,并能正确的执行该函数。

Declare Function load_tool Lib "w95_s7.dll" (ByVal nr As Byte, ByVal dev As
String, adr As PlcAdrType) As Long
//nrPC要激活的连接的个数(1-32个);
//dev是用户驱动设备的名称MPI接口时为“S7ONLINE”;
//adr是连接的地址列表;
Declare Function unload_tool Lib "w95_s7.dll" () As Long
//断开连接
Declare Function db_read Lib "w95_s7.dll" (ByVal blockno As Long, ByVal no
As Long, Amount As Long, value As Byte) As Long
//读取DB块号为blockno中的从地址no开始的Amount个数据字。
//读取的数据存放于PC的变量区value中。
Declare Function db_write Lib "w95_s7.dll" (ByVal blockno As Long, ByVal no
As Long, Amount As Long, value As Byte) As Long
//PC的变量存储区value中的amount个数据字写入到PLC的数据块DB
中从no开始的数据区。
2.3读写函数使用的注意事项
我们在调试过程中曾发现读入的模拟量(双字)存在突然变小的情况,在排除硬件故
障后,发现是由于VB对于字符串的处理比较特殊而造成的错误结果。因此,在使用PRODAVE
工具箱进行通信的程序中,要特别注意的是VB在处理字符串时对“0”是自动舍弃的,现举
例说明如下:
PIW2924~20mA模拟量输入信号在PLC中的地址PIW292的数据类型是整数,经过
数据转换存于DB1.DBD36中,DB1.DBD36的数据类型是双整数。转换的梯形图如图2所示。

2 模拟量转换为双整数的梯形图
VB中执行下列语句:
Res = db_read(1, 36, 4, Buffer_R(0))     // Buffer_R()是字符串型数组
Res = db_read(1, 36, 4, Buffer_R(0))执行后,DB1.DBD36中的数据被VB读入到
Buffer_R(0)~Buffer_R(3)中,将Buffer_R(0)~Buffer_R(3)中String 型数据变为
Single型数据后,得到的即为PLC上的传感器的数值。将将Buffer_R(0)~Buffer_R(3)中
String型数据变为Single型数据的方法如下:
Val=CSng(Buffer_R(0)+ Buffer_R(1)+ Buffer_R(2)+ Buffer_R(3))
Val即为Single型的模拟量采样结果。
假设DB1.DBD36中数值为16进制的“00003F12”,经过上述转换后,Val的值为
00003F12”(16进制),变为10进制为“16146”。此时实际读入的结果是正确的。但是,
Buffer_R()中的字符串有“0”字符时:例如DB1.DBD36中数值为16进制的“00003F02”,
Val中的结果应该是16进制的“00003F02  ”,即10进制的“16130”。而实际读入的数值为
10进制的“1010”,比真实的模拟量信号变小了近16倍!

为什么会出现如此错误的结果呢?原因如下:当传感器的真实值为“00003F02”时,

Buffer_R(0)=“00”;
Buffer_R(1)=“00”;
Buffer_R(2)=“3F”;
Buffer_R(3)=“02”;
执行Val=CSng(Buffer_R(0)+ Buffer_R(1)+ Buffer_R(2)+ Buffer_R(3))的语句的
过程中,Buffer_R(3)的“02 ”中的“0”被VB自动舍弃,Val变为“003F2”(16进制),
也就是“1010”(10进制)!这就是模拟量读入值突然变小的原因。要解决这一故障,需要
在执行Val=CSng(Buffer_R(0)+ Buffer_R(1)+ Buffer_R(2)+ Buffer_R(3))语句前进行一
下判断,当Buffer_R()的中的低位是“0”时,用程序补上一个“0”字符以避免错误的发
生。
3结束语
运用VB开发环境编写的PLC测控程序,具有界面友好,人机交互功能方便、数据库功
能强大灵活等优点,具有很强的通用性和实用性,而起通过调用PRODAVE S7软件包的动态
链接库实现PC机对PLC CPU-314数据的读写操作,不但数据传输速度快,而且数据传输正
确率高。相对与用WinCC开发人机界面有着突出的优势,但是,与WinCC相比,用VB开发
此类软件的工作量和难度相对比较大。尽管如此,此类通信技术对于拓宽实现西门子工控产
品的应用领域仍然具有重要意义。
参考书目:
1. 郑阿奇.Visual Basic实用教程[M].北京:电子工业出版社,2000.
2. 廖常初.S7-300/400 PLC应用技术[M].北京:机械工业出版社,2005.
3. Siemens AG. Prodave Operating Instructions,2004.

 作者简介:刘振东,男,1973年生,河北唐山人,1996年毕业于河北理工大学自动化系,在

读硕士。现为河北理工大学计算机与自动控制学院工程师。主要研究方向为智能控制理论及
其应用。发表论文二十余篇。
作者联系方式:河北唐山 河北理工大学计算机与自动控制学院自动化系  邮编:063009
邮箱:liuzhd@heut.edu.cn

相关新闻

    暂无相关新闻