SIEMENS西门子S7-300/400PLC与VB通信方法
摘要:本文主要介绍了用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 b between SIEMENS S7-300/400
and VB, this b 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通信
的实现问题。结果表明,通过适当的方法,可以使VB与S7-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钢丝绳破断力试验机的数据
采集和控制软件。图1为2000KN拉力机测控软件系统及与PLC硬件连接示意图。
2数据通信
2.1通信软件接口
图1 2000KN拉力机测控软件系统及与PLC硬件连接示意图
该系统能否研究成功的关键问题在于VB和CPU-314 PLC之间的通信。S7-300/400的
MPI(多点通信接口)用于西门子公司的控制产品之间的通信,例如安装在PC上的STEP7
编程软件与PLC之间的通信,但是这些通信协议均未公开。如果用S7-300/400的点对点通
信协议实现PC与PLC之间的通信,需要配置专用的通信处理器模块或带点对点通信接口的
CPU31x-2PtP。其点对点通信协议并不通用,要化较多的时间熟悉和摸索,才能编写出PLC
和计算机的通信程序。
PRODAVE是用于PC与S7系列PLC之间的数据链接通信的工具软件包。PRODAVE是
“Process Data Traffic”(过程数据交换)的缩写,通过PC/MPI适配器(PC-Adaptor)、
MPI通信处理器(CP5611卡)等硬件设备,可以实现PC与PLC之间的数据链接。PRODAVE
的动态链接库(DLL)提供了大量基于Windows操作系统的DLL函数,供用户解决PLC与PC
之间的数据交换和数据处理问题。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函数用于从PLC的DB块中读数据字。
⑷db_write函数用于向PLC的DB块中写数据字。
首先,在模块中应该声明程序使用的用户自定义的数据类型PlcAdrType:
Type PlcAdrType
ADDRESS As Byte
SEGMENTID As Byte
SLOTNO As Byte
PACKNO As Byte
End Type
在通信开始之前,首先用load_tool函数建立与上位机与PLC的链接,通信结束时
必须用unload_tool函数断开PC与PLC的链接,否则会引起上位机死机或上位机系统的异
常状况。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
//nr是PC要激活的连接的个数(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”是自动舍弃的,现举
例说明如下:
PIW292是4~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开发
此类软件的工作量和难度相对比较大。尽管如此,此类通信技术对于拓宽实现西门子工控产
品的应用领域仍然具有重要意义。
GE Fanuc Bit 3 412-101HIO VME Board Module PN: 82902250
Micro Memory Inc. MM-6326 64 MB Dual-Port VME Board
NEW MOTOROLA MVME 332XT VME SINGLE BOARD COMPUTER SBC
Motorola MVME167-02B MVME 167-02B IC697CPX935 Single Board VME
Motorola MVME 147-023 MVME147-023 Single VME Board
Motorola MVME 1603-053 MVME1603-053 6U VME Board
MOTOROLA MVME / VME 712/M 712M TRANSITION MODULE CARD
Motorola MVME 167-032B MVME167-032B VME Mainframe Board
Motorola MVME712A/AM MVME-712/AM MVME Module VME
Motorola MVME167-02B MVME 167-02B Single Board VME
Motorola MVME332XTP MVME 332XTP VME Board
Motorola MVME187 MVME 187 VME Module
Motorola MVME 333S-2 MVME333-2 VME Mainframe Board
Motorola MVME 332XT MVME332XT VME Mainframe Board
Apollo Computer Excelan EXOS 302 Controller Board VME
National Inst. GPIB-1014D VME Controller Card Mainframe
Ironics IV-1620 VMEbus VME Single Board IC697CPX935 Computer
Ironics IV-1602 VMEbus VME Single Board Computer
APW MaxChassis II System Enclosure VME Mainframe
ASML 4022.471.4730 VME/CPCI DC/DC Power Supply 12V
COGNEX VME 8200 SERIES VPM-8203x/v-6000 rev.A
ADAPTEC EUROLOGIC CONTROLLER ELRC-3101U VME HOT SWAP
Mizar MZ VME8115 CPU Board VME MVME
ASML 4022.471.5027 VME Timing Control TCB Syncbus Trigg
Grass Valley E Series D/I Codec Model 4500 VME Module
Mizar MZ VME8210 512K Ram Board VME MVME
XYCOM 70240-001 REV 1.1 I/O MODULE IC697CPX935 VME BOARD NEW
Motorola MVME339 MVME-339 VME Control Board
DAWN VME PRODUCTS Power Supply
Motorola MVME712M MVME712/M Transition VME Module Board
VMIC GE Fanuc VMIVME-3115 VMIVME3115 12-Bit VME Module
KSI Odetics AITG-VME Synchronizable Timecode Generator
Thales / Matrix MD-CPU330 Board PN: 9007-30-93 VME
Mizar MZ 8311 VME Output to Coax Transition Module
Precision Filter VMF08 VMF08-F0822-LP1 Octal Filter VME
Mizar MZ 8310 CTM 8310CTM Counter / Timer VME Module
Dab DVME-626 16-Bit Digital IC697CPX935 Analog VME VMEbus Board
Communication Machinery Corp. (CMC) ENP10 6U VME Board
Apollo Computer Domain Ring Board VMEbus VME
Znyx Networks ZX478 ZX4008AB CompactPCI Hot Swap VME
Antares Microsystems MIL-1397 Input/Output VXI VME
Themis TSVME-400-1A 48 Optocoupler Isolated Input VME
National Inst. GPIB-1014 GPIB Interface VME Mainframe