1 前言
西門子S7-200系列可編程控制器(PLC)是控制領域應用最廣的小型PLC之一,它支持兩種與計算機通信方式:自由端口,PPI方式使用自由口方式進行編程時,必須定義自己的通訊協議,在上位機和PLC中都要編寫數據通信程序,占用PLC的內存。使用PPI協議進行通信時,PLC可以不用編程,而且可讀寫所有數據區,快捷方便。但是西門子公司沒有公布PPI協議的格式。用戶如果想使用PPI協議,必須購買西門子的協議模塊或其它廠家的組態軟件。只對于一些小型系統來說成本比較高,若只應用幾個數據,就購買一套軟件,實在是浪費。利用S7-200內置的PPI協議,開發自己的控制或采集系統不愧是一個捷徑。
2 部分PPI協議格式
SD |
LE |
LEr |
SD |
DA |
SA |
FC |
DSAP |
SSAP |
DU |
FCS |
ED |
SD:(Start Delimiter)開始定界符(68H)
LE:(Length)報文數據長度
LER:(Repeated Length)重復報文數據長度(從DA到DU)
SD: (Start Delimiter)開始定界符(68H)
SA:(Source Address)數據源站地址
DA:(Destination Address)數據目標站地址
FC:(Function Code)功能碼
DSAP:(Destination Service Access Point)目的服務存取點
SSAP:(Source Service Access Point)源服務存取點
DU:(Data Unit)數據單元
FCS:校驗碼(從DA到DU數據和)
ED:(End Code)結束碼(16H)
3 通訊過程
從計算機上的COM口通過一條PC/PPI編程電纜連到PLC的編程口上(最小的系統要求),計算機(為主,地址為00)與PLC(為從,地址為02)采用主從方式通訊,具體過程如下圖所示,一次讀寫操作的步驟包括:(1)首先主機(計算機)發出讀寫命令,(2)從機(PLC)作出接收正確的響應(E5),(3)主機接到此響應則發出確認指令(10 02 00 5C 5E 16),(4)PLC回應給上位機數據。這樣收發兩次數據,完成一次數據的讀寫。
|
|
![]() |
|
4.1 讀指令實例
對于一次讀取一個數據,讀命令都是33個字節。前面的0―21字節是相同的,SA=00,DA=02(PLC缺省地址),如果有多個站,DA要改成相應的站號。讀命令中從DA到DU的長度為1B即27個字節。從22字節開始根據讀取數據的類型、位置不同而不同。下表是讀不同存儲器命令的Byte22―32。
字節 |
22 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
功能 |
讀取長度 |
數據個數 |
數據類型 |
數據地址 |
校驗 |
結束 | ||||
讀VB100 |
02 |
01 |
00 |
01 |
84 |
00 |
03 |
20 |
8B |
16 |
讀VW100 |
04 |
01 |
00 |
01 |
84 |
00 |
03 |
20 |
8D |
16 |
讀vd100 |
06 |
01 |
00 |
01 |
84 |
00 |
03 |
20 |
8F |
16 |
讀命令的Byte22-32
實際輸出指令:讀VB100,Byte28-30 為100*8=&H0320
68 1B 1B 68 2 0 6C 32 1 0 0 0 0 0 E 0 0 4 1 12 A 10 2 0 1 0 1 84 0 3 20 8B 16
4.2 寫指令實例:
一次寫一個類型的數據V100,寫V區地址 Byte28-30 為100*8=&H0320
寫VB100(16):
68 20 20 68 2 0 6C 32 1 0 0 0 0 0 E 0 5 5 1 12 A 10 2 0 1 0 1 84 0 3 20 0 4 0 8 10 B9 16
寫VW100(16):
68 21 21 68 2 0 6C 32 1 0 0 0 0 0 E 0 6 5 1 12 A 10 4 0 1 0 1 84 0 3 20 0 4 0 10 0 10 B9 16
寫VD100(16):
68 23 23 68 2 0 6C 32 1 0 0 0 0 0 E 0 8 5 1 12 A 10 6 0 1 0 1 84 0 3 20 0 4 0 20 0 0 0 10 B9 16
Byte 22-- Byte 30 寫入數據的長度、存儲器類型、存儲器偏移量與讀命令相同。Byte 35-38 寫入數據的位數。
5 應用實例
在鋼管制造行業,水壓靜載試驗機(簡稱水壓機)是必備的檢驗和試驗設備。因為美國石油協會的API標準《管線鋼管 Spec 5L》和國家標準GB/T9711-1997規定,螺旋焊管和直縫焊管必須經過規定的靜水壓試驗,并且保存水壓過程的壓力曲線。該系統原來是用MCGS工控組態軟件+VB程序來完成的,采集速度較慢,最多一秒鐘采集一個,比較緩慢。現用VB語言,通過PPI協議直接采集PLC的水壓值進行處理,簡潔又迅速,懷可以開發出多種功能。采用PPI電纜將計算機COM1口與PLC的PORT0編程口連接,通訊系統采用主從結構,通訊協議遵循PPI協議格式,計算機發出讀寫申請,PLC返回相應的數據。程序實現如下
5.1 初始化程序
Private Sub Form_Load()
With MSComm1
.CommPort = 1
.Settings = "9600,e,8,1" ‘波特率9600,偶校驗,8數據位,1停止位
.InputLen = 0
.RThreshold = 1 ‘收到字符就產生事件
.InputMode = comInputModeBinary ‘二進制接收模式
End With
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True ‘打開通訊串口
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False ‘關閉通訊串口
End If
End Sub
5.2 讀VW函數
Function ppird(readaddress As String) ‘讀VW的地址,例如:1000
Dim i As Integer, temp As Integer
Dim sendbyte(32) As Byte
sendbyte(0) = &H68
sendbyte(1) = &H1B
sendbyte(2) = &H1B
sendbyte(3) = &H68
sendbyte(4) = &H2
sendbyte(5) = &H0
sendbyte(6) = &H6C
sendbyte(7) = &H32
sendbyte(8) = &H1
sendbyte(9) = &H0
sendbyte(10) = &H0
sendbyte(11) = &H0
sendbyte(12) = &H0
sendbyte(13) = &H0
sendbyte(14) = &HE
sendbyte(15) = &H0
sendbyte(16) = &H0
sendbyte(17) = &H4
sendbyte(18) = &H1
sendbyte(19) = &H12
sendbyte(20) = &HA
sendbyte(21) = &H10
sendbyte(22) = &H4
sendbyte(23) = &H0
sendbyte(24) = &H1
sendbyte(25) = &H0
sendbyte(26) = &H1
sendbyte(27) = &H84
sendbyte(28) = &H0
sendbyte(29) = (readaddress * 8) \ 256 ‘計算讀高位地址
sendbyte(30) = (readaddress * 8) Mod 256 ‘計算讀低位地址
sendbyte(31) = &H0
sendbyte(32) = &H16
For i = 4 To 30
temp = temp + sendbyte(i)
Next
sendbyte(31) = temp Mod 256 ‘計算校驗碼
ppird = sendbyte ‘‘返回讀VW 指令碼
End Function
5.3 寫VW函數
Function ppiww(adressx As Integer, datax As Integer)
‘adressx 為寫VW的地址datax 要寫入VW的整數
Dim i As Integer, temp As Integer
Dim sendbyte(38) As Byte
sendbyte(0) = &H68
sendbyte(1) = &H21
sendbyte(2) = &H21
sendbyte(3) = &H68
sendbyte(4) = &H2
sendbyte(5) = &H0
sendbyte(6) = &H6C
sendbyte(7) = &H32
sendbyte(8) = &H1
sendbyte(9) = &H0
sendbyte(10) = &H0
sendbyte(11) = &H0
sendbyte(12) = &H0
sendbyte(13) = &H0
sendbyte(14) = &HE
sendbyte(15) = &H0
sendbyte(16) = &H6
sendbyte(17) = &H5
sendbyte(18) = &H1
sendbyte(19) = &H12
sendbyte(20) = &HA
sendbyte(21) = &H10
sendbyte(22) = &H4
sendbyte(23) = &H0
sendbyte(24) = &H1
sendbyte(25) = &H0
sendbyte(26) = &H1
sendbyte(27) = &H84
sendbyte(28) = &H0
sendbyte(29) = (adressx * 8) \ 256
sendbyte(30) = (adressx * 8) Mod 256
sendbyte(31) = &H0
sendbyte(32) = &H4
sendbyte(33) = &H0
sendbyte(34) = &H10
sendbyte(35) = datax \ 256
sendbyte(36) = datax Mod 256
sendbyte(37) = &H0
sendbyte(38) = &H16
For i = 4 To 36
temp = temp + sendbyte(i)
Next
sendbyte(37) = temp Mod 256
ppiww = sendbyte ‘返回寫VW 指令碼
End Function
5.4 利用MSCOMM的事件獲取數據
Private Sub MSComm1_OnComm()
Dim rcvtemp(5) As Byte ‘定義確認發送的數組數據元素為字節
Dim rcv_array() As Byte
Dim yy As Long
Select Case MSComm1.CommEvent
Case comEvReceive
rcv_array = MSComm1.Input ‘取出串口接收緩沖器的數據。
If rcv_array(0) = &HE5 Then ‘PLC 返回應答數據E5H
SComm1.RThreshold =25
rcvtemp(0) = &H10
rcvtemp(1) = &H2
rcvtemp(2) = &H0
rcvtemp(3) = &H5C
rcvtemp(4) = &H5E
rcvtemp(5) = &H16
MSComm1.Output = rcvtemp ‘發送確認指令碼
ElseIF rcv_array(0) = &H68 AND rcv_array(1) = &H17 THEN
yy = Val(rcv_array(25)) * 256 + Val(rcv_array(26)) ‘計算讀取數據
Text1 = yy
ELSE
MSComm1.RThreshold = 1
End If
End Select
watchtimer.Enabled = False ‘監視返回數據看門狗
End Sub
5.5 主程序
程序已開始,首先寫入PLC必要的實驗數據:試驗壓力值、鋼管的直徑、保壓時間等數據,開始試驗,啟動一計時器,每隔100毫秒讀一次油壓值和水壓值,同時識別出壓力值并用曲線顯示出來,完成一次水壓試驗,保存一次水壓曲線數據,以備日后察看。在日常應用中相當可靠便捷。
6 結束語
利用PPI協議還可以讀寫S7-200PLC中的各種類型數據,包括I、Q、SM、M、V、等數據類型,能夠直接讀出以上變量中的位、字節、字、雙字等,其中讀位變量時,是讀取該位所在的字節值,計算機再識別出該位的值,一次還可以讀些多個數據,具體的指令碼可以模擬以上的指令碼寫出。PPI協議還具有豐富多彩的功能,若要全面是用PPI協議請使用西門子的授權軟件。
參考文獻:
[1]S7-200可編程控制器系統手冊西門子(中國)有限公司 2001.9
[2] SIMATIC S7 STEP7 使用手冊 西門子(中國)有限公司 2001.9