通過軟硬件攔截的方法,分析PLC內部固有的PPI通信協議,然後上位機使用VB編程,遵循PPI通信協議,讀寫PLC數據,實現人機操作任務。與壹般的自由通信協議相比,這種通信方式省略了PLC的通信編程,只需要編寫上位機的通信編程資源。
S7-226編程端口的物理層是RS-485結構。西門子提供MicroWin軟件,使用PPI(指向。
Point)協議,可用於傳輸和調試PLC程序。在現場應用中,當需要PLC和PC之間的通信時,通常使用自定義協議與PC進行通信。在這種通信模式下,程序員需要先定義自己的自由通信格式,在PLC中編寫代碼,通過中斷的方式控制通信端口的數據收發。這樣PLC編程調試復雜,占用了PLC的軟件中斷和代碼資源。而且當PLC的通訊口定義為自由通訊口時,PLC的編程軟件無法監控PLC,給PLC程序調試帶來不便。
西門子
S7-200PLC編程通訊接口,內部固化的通訊協議是PPI協議,如果上位機遵循PPI協議讀寫PLC,可以省略編寫PLC通訊代碼。如何獲得PPI協議?PLC的編程軟件在讀寫PLC數據時,可以使用第三串口監聽PLC的通訊數據,或者使用軟件的方法截取開放通訊口的數據,然後匯總分析PPI協議的數據讀寫報文。這樣,上位機就可以通過遵循PPI協議方便地讀寫PLC內部數據,實現上位機的人機操作功能。
軟件設計
系統中的測量和控制任務由西門子完成。
S7-226PLC完成,PLC工作在循環掃描模式。時間到了,它將執行數據采集或PID控制的任務,完成現場的信號控制。計算機監控軟件由VB編寫,串行數據通信由MSComm控件完成。通信協議是PPI協議。
PPI協議
西門子生產者價格指數(點
到
點)通信協議采用主從式通信方式,壹次讀寫操作的步驟包括:首先上位機發出讀寫命令,PLC做出正確響應。上位機收到此響應後,發送確認應用命令,PLC完成正確的讀寫響應,並響應上位機數據。這樣收發兩次數據,完成壹次數據的讀寫[5]。
通信數據報文格式大致如下:
1.讀寫應用程序的數據格式如下:
南達科他州
LER足球俱樂部DASP SSAP足球俱樂部
標清:(開始
分隔符)開始分隔符(68H)
LE:(Length)消息數據長度
LER:(重復長度)重復數據長度
標清:
(起始分隔符)起始分隔符(68H)
山:(來源
Address)源地址,是指地址的指針,是地址值乘以8。
達:(目的地
Address)目標地址,指的是地址的指針,是地址值乘以8。
FC:(功能代碼)功能代碼
DSAP:(目的地
服務接入點)目的地服務接入點。
SSAP:(源服務訪問
點)源服務訪問點
杜:(數據單元)數據單元
FCS:(幀校驗序列)校驗碼
艾德:(結束
分隔符)結束分隔符(16H)
報文數據長度和重復數據長度是從DA到DU的數據長度,校驗碼是從DA到DU的數據的和校驗,只取最後壹個字節值。
在讀寫PLC的變量數據時,讀取數據的功能碼是
6CH,寫數據的功能碼是7CH。
2.PLC接收讀寫命令,驗證無誤。返回的數據格式是
E5H
3.確認讀寫命令的數據格式為:
SD SA DA FC FCS ED
其中SD是初始符號,即10H。
SA是數據源地址。
DA是目的地址
FC為功能碼,取5CH。
FCS是SA+DA+FC之和的最後壹個字節。
ED是終結者,走16H。
PPI協議的軟件編程
使用PC機與PLC通信時,PC機使用VB編程,計算機使用PPI電纜或普通485串口與PLC的編程口連接,通信系統采用主從式結構。PC機遵循PPI協議格式,發出讀寫申請,PLC返回相應數據。該計劃的實施如下:
1,串口初始化程序:
MSComm1。CommPort = 1
MSComm1。設置= "9600,e,8,1 "
MSComm1。InputLen = 0
MSComm1。RThreshold = 1
MSComm1。輸入模式=
comInputModeBinary
PPI協議將串口定義為以二進制形式發送和接收數據,因此報文的通信效率高於ASCII碼。
2.串口數據讀取程序,以讀取VB100數據單元為例:
暗淡的
str _ read(0到32)'定義發送的數據是壹個以字節為元素的數組。
str _ Read(32)= & amp;H16
相應的數組元素賦值采用以下格式:
Str _ read (29) = (100 * 8) \ 256 '地址為指針值,先取高位地址指針。
Str_
Read (30) = (100 * 8) mod 256 '取低位地址指針。
Str_ Read (24) = 1
讀取數據的長度(字節數)
對於I=4到30
Temp_FCS = Temp_FCS +。
Str_Read(i)
接下來我
str _ Read(31)= Temp _ FCS Mod 256
計算FCS校驗碼,省略其他數組元素的賦值。
68 1B 1B 68 2 0 6C 32 1 0 0 0 0 0 0 E 0 0 4 1 12 A 10 2 0
1 0 1 84 0 3 20 8B 16
PLC返回數據E5後,確認讀取命令並發送以下數據:
10 2 0 5C 5E
16
然後上位機的VB程序接收以下數據:
68 16 16 68 0 2 8 32 3 0 0 0 0 0 0 2 0 0 5 0 0 4 1 FF 4 0
8 22 78
16
首先識別目標地址和源地址,確認是這個應用返回的數據。然後,經過檢查,第26個數據(&;H22)是VB100字節的數據。
3.串口寫數據程序,以寫VB100數據單元為例:
暗淡的
str _ write(0到37)'定義發送的數據是壹個以字節為元素的數組。
str _ Write(37)= & amp;H16
對應的數組元素賦值,按照以下格式
str _ Write(35)= & amp;H10 '要寫入的數據值
68 20 20 68 2 0 7C
32 1 0 0 0 0 E 0 5 5 1 12 A 10 2 0 1 0 1 84 0 3 20 0 0 4 0 8 C B9 16
PLC返回數據
在E5之後,確認寫命令並發送以下數據:
10 2 0 5C 5E 16
然後上位機的VB程序接收以下數據:
68 12 12 68 0 2 8
32 3 0 0 0 0 0 2 0 1 0 0 5 1 FF 47
16
這是PLC正確接收和寫入信息的返回數據。
4、串行接收器:
在數據接收程序中,利用VB中的MSComm控件壹次性接收緩沖區中的所有數據,以數組的形式存儲在臨時存儲單元中,然後分析各個元素的值得到讀寫數據。
暗淡的
字節形式的RCV數組()
Dim Dis_Array作為字符串
昏暗的RCV
長的
RCV _數組= MSComm1。從串行接收緩沖器中取出數據。
RCV _萊恩=
RCV陣列
ReDim Temp(0到UBound(RCV陣列))
對於i = 0到
RCV萊恩
Dis陣列= Dis陣列& amp十六進制(RCV數組(壹))& amp" "
然後
我
Text1。Text = Dis _數組
顯示接收的數據。
在程序的讀寫過程中,壹次最多可以讀寫222個字節。目前數據是以整數格式讀寫的。
數據類型Str_
閱讀(27)
第四季
SM 05H
I 81H
Q 82H
M 83H
V 84H
上面的程序,以讀寫PLC的V變量區為例,也可以讀寫S7-200PLC中使用PPI協議的各種類型的數據,包括I、Q、SM、M、V、T、C、S等數據類型,可以直接讀取位、字節、字、雙字等。在上述變量中。讀取位變量時,讀取該位的字節值,然後上位機自動識別。根據讀寫的數據類型,其中Str_
Read(27)的值變化:
在控制系統中,PLC與上位機的通信采用PPI通信協議,上位機每0.5秒讀寫壹次PLC。PLC編程時,要讀取的數據,如檢測值和輸出值,都存儲在PLC的壹個連續變量區。上位機在讀取PLC的數據時,可以壹次性讀取這組連續的數據,減少了頻繁的分階段讀取數據。當修改設定值等數據時,執行寫入數據的通信操作。