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