SIEMENS西門子S7-300/400PLC與VB通信方法
摘要:本文主要介紹了用VB與西門子S7-300/400 PLC的通信方法,并把此方法應(yīng)用于復(fù)雜
控制系統(tǒng)的調(diào)試以及PC機(jī)管理系統(tǒng)與PLC控制系統(tǒng)的信息交換中。
關(guān)鍵詞:PLC VB 通信
中圈分類號:TP273 文獻(xiàn)標(biāo)識碼: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是目前我國應(yīng)用最為廣泛的大中型PLC,研究西門子PLC及
其網(wǎng)絡(luò)的通信技術(shù)有著重要意義。本文通過對貴州鋼繩集團(tuán)2000KN拉力機(jī)測控系統(tǒng)的研究,
探討了在Windows2000環(huán)境下,用VB開發(fā)的鋼絲繩破斷力試驗(yàn)機(jī)測控軟件與CPU-314通信
的實(shí)現(xiàn)問題。結(jié)果表明,通過適當(dāng)?shù)姆椒?,可以使VB與S7-300/400 PLC進(jìn)行良好的通信,
用VB構(gòu)成功能強(qiáng)大數(shù)據(jù)采集及控制軟件。
1軟件總體設(shè)計(jì)
通常情況下,我們一般選用WinCC作為西門子S7-300/400 PLC控制系統(tǒng)的監(jiān)控和數(shù)
據(jù)采集軟件(HMI/SCADA)。由于WinCC內(nèi)置了基于S5/S7協(xié)議的通訊系統(tǒng),并提供了大量面
向這些系統(tǒng)和技術(shù)的組件,從而為WinCC和這些系統(tǒng)的最優(yōu)化通訊和良好的互操作性提供了
保證。但是,作為一種作為一種通用組態(tài)軟件,WinCC的應(yīng)用領(lǐng)域主要是工業(yè)過程控制領(lǐng)域。
而2000KN鋼絲繩拉力試驗(yàn)機(jī)對于上位機(jī)軟件的要求比較特殊:采樣速率較高(20次/秒);
依采樣速率同步顯示曲線和數(shù)據(jù);試驗(yàn)數(shù)據(jù)和曲線要能夠按照試驗(yàn)編號查詢并且調(diào)出顯示。
很明顯,WinCC的趨勢曲線、過程值歸檔等功能不能滿足2000KN拉力機(jī)的工藝要求。VB作
為一種通用的高級編程語言,編程靈活,在開發(fā)圖形曲線顯示、數(shù)據(jù)庫等方面有著WinCC
不可比擬的技術(shù)和成本優(yōu)勢。因此,我們選用VB來開發(fā)2000KN鋼絲繩破斷力試驗(yàn)機(jī)的數(shù)據(jù)
采集和控制軟件。圖1為2000KN拉力機(jī)測控軟件系統(tǒng)及與PLC硬件連接示意圖。
2數(shù)據(jù)通信
2.1通信軟件接口
圖1 2000KN拉力機(jī)測控軟件系統(tǒng)及與PLC硬件連接示意圖
該系統(tǒng)能否研究成功的關(guān)鍵問題在于VB和CPU-314 PLC之間的通信。S7-300/400的
MPI(多點(diǎn)通信接口)用于西門子公司的控制產(chǎn)品之間的通信,例如安裝在PC上的STEP7
編程軟件與PLC之間的通信,但是這些通信協(xié)議均未公開。如果用S7-300/400的點(diǎn)對點(diǎn)通
信協(xié)議實(shí)現(xiàn)PC與PLC之間的通信,需要配置專用的通信處理器模塊或帶點(diǎn)對點(diǎn)通信接口的
CPU31x-2PtP。其點(diǎn)對點(diǎn)通信協(xié)議并不通用,要化較多的時(shí)間熟悉和摸索,才能編寫出PLC
和計(jì)算機(jī)的通信程序。
PRODAVE是用于PC與S7系列PLC之間的數(shù)據(jù)鏈接通信的工具軟件包。PRODAVE是
“Process Data Traffic”(過程數(shù)據(jù)交換)的縮寫,通過PC/MPI適配器(PC-Adaptor)、
MPI通信處理器(CP5611卡)等硬件設(shè)備,可以實(shí)現(xiàn)PC與PLC之間的數(shù)據(jù)鏈接。PRODAVE
的動態(tài)鏈接庫(DLL)提供了大量基于Windows操作系統(tǒng)的DLL函數(shù),供用戶解決PLC與PC
之間的數(shù)據(jù)交換和數(shù)據(jù)處理問題。Windows環(huán)境中的西門子公司的PRODAVE工具箱有PRODAVE
S7(完全版)和PRODAVE S7 mini(簡化版)兩種,PRODAVE S7(完全版)功能比較全面,可按
位或者字節(jié)讀寫PLC中的輸入過程映像區(qū)、輸出過程映像區(qū)、位存儲區(qū)、定時(shí)器、計(jì)數(shù)器、
數(shù)據(jù)塊等區(qū)域,PRODAVE S7 mini(簡化版)則只能讀寫DB中的字和字節(jié)。
2.2動態(tài)鏈接庫聲明
程序中用到的PRODAVE函數(shù)主要有:
⑴load_tool函數(shù)用于PC機(jī)與PLC系統(tǒng)的初始化鏈接。
⑵unload_tool函數(shù)用于斷開PC機(jī)與PLC系統(tǒng)的鏈接。
⑶db_read函數(shù)用于從PLC的DB塊中讀數(shù)據(jù)字。
⑷db_write函數(shù)用于向PLC的DB塊中寫數(shù)據(jù)字。
首先,在模塊中應(yīng)該聲明程序使用的用戶自定義的數(shù)據(jù)類型PlcAdrType:
Type PlcAdrType
ADDRESS As Byte
SEGMENTID As Byte
SLOTNO As Byte
PACKNO As Byte
End Type
在通信開始之前,首先用load_tool函數(shù)建立與上位機(jī)與PLC的鏈接,通信結(jié)束時(shí)
必須用unload_tool函數(shù)斷開PC與PLC的鏈接,否則會引起上位機(jī)死機(jī)或上位機(jī)系統(tǒng)的異
常狀況。VB在調(diào)用DLL函數(shù)之前,需要用Declare語句在模塊中聲明所要使用的DLL函數(shù)。
聲明DLL函數(shù)的主要作用是指明該函數(shù)所在的DLL庫名及路徑,以及該函數(shù)的參數(shù)說明,以
便Windows能找到該函數(shù),并能正確的執(zhí)行該函數(shù)。
Declare Function load_tool Lib "w95_s7.dll" (ByVal nr As Byte, ByVal dev As
String, adr As PlcAdrType) As Long
//nr是PC要激活的連接的個數(shù)(1-32個);
//dev是用戶驅(qū)動設(shè)備的名稱MPI接口時(shí)為“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個數(shù)據(jù)字。
//讀取的數(shù)據(jù)存放于PC的變量區(qū)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的變量存儲區(qū)value中的amount個數(shù)據(jù)字寫入到PLC的數(shù)據(jù)塊DB
中從no開始的數(shù)據(jù)區(qū)。
2.3讀寫函數(shù)使用的注意事項(xiàng)
我們在調(diào)試過程中曾發(fā)現(xiàn)讀入的模擬量(雙字)存在突然變小的情況,在排除硬件故
障后,發(fā)現(xiàn)是由于VB對于字符串的處理比較特殊而造成的錯誤結(jié)果。因此,在使用PRODAVE
工具箱進(jìn)行通信的程序中,要特別注意的是VB在處理字符串時(shí)對“0”是自動舍棄的,現(xiàn)舉
例說明如下:
PIW292是4~20mA模擬量輸入信號在PLC中的地址PIW292的數(shù)據(jù)類型是整數(shù),經(jīng)過
數(shù)據(jù)轉(zhuǎn)換存于DB1.DBD36中,DB1.DBD36的數(shù)據(jù)類型是雙整數(shù)。轉(zhuǎn)換的梯形圖如圖2所示。
圖2 模擬量轉(zhuǎn)換為雙整數(shù)的梯形圖
在VB中執(zhí)行下列語句:
Res = db_read(1, 36, 4, Buffer_R(0)) // Buffer_R()是字符串型數(shù)組
Res = db_read(1, 36, 4, Buffer_R(0))執(zhí)行后,DB1.DBD36中的數(shù)據(jù)被VB讀入到
Buffer_R(0)~Buffer_R(3)中,將Buffer_R(0)~Buffer_R(3)中的String 型數(shù)據(jù)變?yōu)?br />
Single型數(shù)據(jù)后,得到的即為PLC上的傳感器的數(shù)值。將將Buffer_R(0)~Buffer_R(3)中
的String型數(shù)據(jù)變?yōu)镾ingle型數(shù)據(jù)的方法如下:
Val=CSng(Buffer_R(0)+ Buffer_R(1)+ Buffer_R(2)+ Buffer_R(3))
Val即為Single型的模擬量采樣結(jié)果。
假設(shè)DB1.DBD36中數(shù)值為16進(jìn)制的“00003F12”,經(jīng)過上述轉(zhuǎn)換后,Val的值為
“00003F12”(16進(jìn)制),變?yōu)?0進(jìn)制為“16146”。此時(shí)實(shí)際讀入的結(jié)果是正確的。但是,
當(dāng)Buffer_R()中的字符串有“0”字符時(shí):例如DB1.DBD36中數(shù)值為16進(jìn)制的“00003F02”,
Val中的結(jié)果應(yīng)該是16進(jìn)制的“00003F02 ”,即10進(jìn)制的“16130”。而實(shí)際讀入的數(shù)值為
10進(jìn)制的“1010”,比真實(shí)的模擬量信號變小了近16倍!
為什么會出現(xiàn)如此錯誤的結(jié)果呢?原因如下:當(dāng)傳感器的真實(shí)值為“00003F02”時(shí),
Buffer_R(0)=“00”;
Buffer_R(1)=“00”;
Buffer_R(2)=“3F”;
Buffer_R(3)=“02”;
執(zhí)行Val=CSng(Buffer_R(0)+ Buffer_R(1)+ Buffer_R(2)+ Buffer_R(3))的語句的
過程中,Buffer_R(3)的“02 ”中的“0”被VB自動舍棄,Val變?yōu)椤?03F2”(16進(jìn)制),
也就是“1010”(10進(jìn)制)!這就是模擬量讀入值突然變小的原因。要解決這一故障,需要
在執(zhí)行Val=CSng(Buffer_R(0)+ Buffer_R(1)+ Buffer_R(2)+ Buffer_R(3))語句前進(jìn)行一
下判斷,當(dāng)Buffer_R()的中的低位是“0”時(shí),用程序補(bǔ)上一個“0”字符以避免錯誤的發(fā)
生。
3結(jié)束語
運(yùn)用VB開發(fā)環(huán)境編寫的PLC測控程序,具有界面友好,人機(jī)交互功能方便、數(shù)據(jù)庫功
能強(qiáng)大靈活等優(yōu)點(diǎn),具有很強(qiáng)的通用性和實(shí)用性,而起通過調(diào)用PRODAVE S7軟件包的動態(tài)
鏈接庫實(shí)現(xiàn)PC機(jī)對PLC CPU-314數(shù)據(jù)的讀寫操作,不但數(shù)據(jù)傳輸速度快,而且數(shù)據(jù)傳輸正
確率高。相對與用WinCC開發(fā)人機(jī)界面有著突出的優(yōu)勢,但是,與WinCC相比,用VB開發(fā)
此類軟件的工作量和難度相對比較大。盡管如此,此類通信技術(shù)對于拓寬實(shí)現(xiàn)西門子工控產(chǎn)
品的應(yīng)用領(lǐng)域仍然具有重要意義。
Tektronix TMS817
TEKTRONIX TMS818 PROBE MOTOROLA XVME-957 ADAPTER BUS Support PCI EXPRESS
Agilent 54855A 6GHz 4CH 20GSa/s Infiniium Oscilloscope
Agilent E4402B ESA-E SERIE
Agilent N4697-60100 N4697-60200 1.85MM
HP AD173-60001 ETHERNET MOTOROLA XVME-957 SWITCH BLADE
CISCO SPA-IPSEC-2G IPSec VPN SPA
SMAC LAR30-025-55CV MOD 282
TEKTRONIX TDS 784A 4 CH COLOR
Agilent 5087-7064 TBR Doubler 5022-3676 5064-3961
JSR Ultrasonics DPR500 Dual Channel P
Agilent N2780A 2 MHz 500A AC/DC
MAXSYS TECHNOLOGIES MOTOROLA XVME-957 RF SWITCH 3020-7000
TEKTRONIX TDS724A TDS 724A 500MHz 1GS/s OSCILLOSCOPE
HP/Agilent 85131-60013 3.5mm Flexible Test Port Cable
HP/Agilent 85131-60012 3.5mm Flexible Test Port Cable
Rofin Sinar 130400369 Focus 348mm LiNOS 1064nm lens
Rofin Sinar 130400369 MOTOROLA XVME-957 Focus 348mm RODENSTOCK 1064nm len
BRAINCHILD VR18 18-Channel PAPERLESS RECORDER
FLUKE 2645A
Agilent 5087-7703
Agilent W2641A
RVSI 53115 REV K
RVSI 53115 REV K
RVSI 53115 REV G
Tektronix P6964 34 Channel Logic Analyzer Probe
Polaroid DMC 1 Digital Microscope MOTOROLA XVME-957 Camera
ZEISS EPIPLAN APOCHROMAT 150X/1.25W DIC OBJECTIVE
HP 85131D 85131-60009 85131-60010 Cable Set
ICOS PCB6601/0/1 MVS 6002 MVS6000 SL101
DISCO DAIICHI BASE05A10W SE05A-10W Spindle Motor Driver
Agilent E9300A E-Series Average MOTOROLA XVME-957 Power Sensor
ZHONE MALC-G SHDSL-24
Agilent QUAD APG E7088 66534 4426 BOARD
OPHIR NOVA DISPLAY POWER METER + SENSOR 150C-Y-3/12 YAG
Rofin leistungsmessung Laser
FORCE SPARC CPU-8VT CPU-8VT/64-170-2 VME MAINFRAME CPU
Agilent 5086-7471 TBR Step Generator
Vision Engineering Oblique and MOTOROLA XVME-957 Direct Viewer 360° Lynx
RVSI 63552 REV-A VME SLAVE PROCESSOR with TTM610-E
RVSI 53003 VME MASTER BOARD REV-B
RVSI 63551 X63551 VME MASTER BOARD REV-B
RVSI 63552 REV-B VME SLAVE PROCESSOR with TTM610-E - 11