王忠遠,李玉文,王小雨
(內蒙古電子信息職業技術學院,內蒙古 呼和浩特 010010)
在國內自動化控制領域中,西門子S7-200 PLC與PC機、單片機、觸摸屏等之間的串行通信,可通過PLC自帶PPI協議實現,但PLC 內部固化的PPI通信協議沒有官方公布。本文應用分支串口、串口調試工具和Step7 Micro/Win32軟件解析讀寫PLC的收發數據幀,整理PPI協議讀寫命令幀格式數據,為應用通用高級語言編寫PLC串口通信程序提供參考。
串口分支器制作需要兩個九針串口COM1、COM2,通過轉接頭將COM1的RX、TX分別接到COM2的TX、RX,即交叉接線,實現用COM2來監聽COM1的發送數據。使用PC/PPI通信電纜連接COM1和PLC串口,配置通信參數(波特率9600bit/s,數據位8位,偶校驗1位,停止位1位),從COM1中發讀寫指令,COM2上的監聽16進制報文。
PPI通信協議是一種主從式的通信協議[1],實現一個完整任務通常需要5步:(1)上位機發讀寫任務命令:上位機按照任務命令向PLC發送幀格式的通信任務命令。(2)下位機收任務命令并返回應答數據:PLC收任務命令校驗無誤后回傳上位機應答數據(E5H或F9H),表示接收數據正確。(3)上位機發執行命令:上位機收E5或E9后,及時發送執行命令:SD DA SA FC FCS ED (1002005C5E16);SD起始符,SA數據源地址,DA目的地址,FC功能碼,FCS校驗碼5E=DA+SA+FC,ED結束符。(4)下位機收執行命令并回傳執行命令相應數據:下位機收到執行命令后,完成讀寫操作,同時回傳上位機執行命令相應的數據。(5)上位機接收數據并再次進行確認。
PPI協議讀任務命令幀長為33個字節,包含幀頭、數據頭、讀命令數據和幀尾4部組成[2],幀頭7字節(開始符SD、長度LE、長度LER、開始符SD、目的地址DA、原地址SA、功能碼FC);數據頭12字節(協議ID 、遠程操作、冗余識別2字節、協議數據、參考單元、參數長度2字節、數據長度2字節、讀寫標識、變量地址數);讀命令數據12字節(恒定3字節、數據類型、恒字節、一次讀取數、數據個數2字節、存儲器類型、存儲器偏移量指針3字節);幀尾2字節(校驗碼、結束符)。例舉讀取輸入I變量的位、字節、字、雙字任務命令數據幀,如表1所示(各字節數均為16進制)。
Byte1=Byte2 數據長度(表1中1B對應Byte序號為4-30);Byte6 功能碼(6C讀、7C寫);Byte13、14 參數長度(0E=Byte18*0C+2);Byte22 存儲單元的數據類型(位Bit 01,字節Byte 02,字Word 04,雙字Double Word 06);Byte24 讀數據類型(如:讀2個IW則回傳字節數2*2=4字節數據);Byte26 存儲單元數據個數(V 01,其他00);Byte27 存儲單元類型(S 04,SM 05,AI 06,AQ 07,C 1E,T 1F,I 81,Q 82,M 83,V 84);Byte28、29、30存儲器偏移量指針值(如:讀位I0.7偏移量07,讀VB1偏移量指針為1*8=08);Byte31 校驗碼(Byte4+...+Byte30)除256取余,Byte32結束符為16。
表1 PPI協議讀命令幀格式數據
PPI協議寫任務命令幀的長度為37+N個字節,N為待寫的字節數,整幀包含幀頭、數據頭、寫命令數據、數據區和幀尾5部組成[3],例舉寫入輸出Q的位、字節、字、雙字命令數據幀,如表2所示。
表2 PPI協議寫命令幀格式數據
Byte16 數據長度N+4,寫入位或字節N=1、字N=2、雙字N=4;Byte22、24、26、27、28、29、30同讀數據幀格式;Byte32 寫入位時03,其他04;Byte34 寫入位數,1位 01,1字節 08,1字10H,1雙字 20H;寫入位或字節數據(Byte35為寫入值,幀長38字節),寫入字數據(Byte35、36為寫入值,幀長39字節),寫入雙字數據(Byte35—38為寫入值,幀長41字節);Byte35+N 校驗碼 (Byte4+...+Byte(34+N))MOD 256。
當PC機接收到PLC應答數據E5或E9后,發送6字節16進制的執行命令(1002005C5E16)到PLC,PLC接收執行命令回傳相應讀寫數據幀格式數據。
讀I0.0返回數據01:68161668000208320300000 0000002000500000401FF030001014F16;讀IB0返回數據00:681616680002083203000000000002000500000401FF0 40008005616;讀IW0返回數據0001:6817176800020832030 00000000002000600000401FF04001000015616;讀IW0IW1返回數據00010000:68191968000208320300000000000200 0800000401FF0400200001。
00007216;讀ID0返回數據與讀IW0IW1一致;寫命令返回數據:68121268000208320300000000。
0002000100000501FF4716。其中Byte21返回FF成功,返回03失??;Byte22 數據類型 位03、其他04。
本文分析了西門子S7 - 200PLC PPI協議中的讀寫任務命令報文數據幀格式和讀寫返回數據,為從事工控教學或開發技術人員提供一些可供借鑒的資料,但由于篇幅的關系沒有提供高級語言串口編程實例,讀者通過以上實例數據表分析,可寫出PPI協議的各種讀寫幀指令。