PPI通(tong)信(xin)協議是一種(zhong)主(zhu)從(cong)式的通(tong)信(xin)協議,上(shang)位機(ji)即PC機(ji)為主(zhu),PLC為從(cong)。通(tong)信(xin)開始由計算機(ji)發起,PLC予以(yi)響應(ying)。
1)、計算機按(an)通信任務(wu),用一定格式,向PLC發送通信命令。
2)、PLC收到命令后,進行命令校驗,如(ru)無誤,則向計算機發送數據E5H或(huo)F9H,作(zuo)出(chu)初步應答。
3)、計算(suan)機收到(dao)初(chu)步應答后,再(zai)向PLC發(fa)送SD DA SA FCFCS ED確認(ren)命令。
這(zhe)里,SD為(wei)起始字符(fu),為(wei)10H;DA為(wei)目的(de),即PLC地(di)址02H;SA為(wei)數(shu)據源,即計算機地(di)址00H;FC為(wei)功能碼(ma),取5CH;FCS為(wei)SA、DA、FC和的(de)256余(yu)數(shu),為(wei)5EH;末字節ED為(wei)結束符(fu),也是(shi)16H。如按以上設定的(de)計算機及PLC地(di)址,則發(fa)送10、02、00、5C、5E、及16,6個字節的(de)十六進制(zhi)數(shu)據,以確認所發(fa)命令(ling)。
4)、PLC收到此確認后,執(zhi)行計算(suan)(suan)機(ji)所發送的通信(xin)(xin)命令,并向計算(suan)(suan)機(ji)返回(hui)相應數據(ju)。它的通信(xin)(xin)過程(cheng)要(yao)往復兩次才完成一(yi)次的通信(xin)(xin),比較麻(ma)煩(fan),但(dan)較嚴謹,不(bu)易出錯。
SD LE LER SD DA SA FC DASP SSAP DU FCS ED
SD:(Start Delimiter)開始定(ding)界符(fu),占(zhan)1字(zi)節,為68H
LE:(Length)報(bao)文數據(ju)長度(du),占1字節,標明報(bao)文以(yi)字節計,從DA到(dao)DU的(de)長度(du);
LER:(Repeated Length)重(zhong)復(fu)數據長度,同(tong)LE
SD: (Start Delimiter)開始定界符(68H)
DA:(DestinationAddress)目標(biao)地址(zhi),占(zhan)1字節(jie),指PLC在PPI上地址(zhi),一(yi)臺PLC時(shi),一(yi)般(ban)為02,多臺PLC時(shi),則各(ge)有各(ge)的(de)地址(zhi);
SA:(Source Address)源地址,占1字節,指計算機在PPI上地址,一般(ban)為00;
FC:(Function Code)功能碼,占1字節,6CH一般為讀(du)數據,7CH一般為寫(xie)數據
DSAP:(Destination Service Access Point)目的服務存取點,占多個字節
SSAP:(Source Service Access Point)源服務存取(qu)點,占多(duo)個字節(jie)
DU:(Data Unit)數據單(dan)元,占多個(ge)字節
FCS:(Frame CheckSequence)占1字節(jie),從DA到DU之(zhi)間的(de)校驗和(he)的(de)256余數;
ED:(End Delimiter)結束分界符(fu),占1字(zi)節,為16H
命令類型
1)讀命令 讀命(ming)令長度(du)都是33個(ge)字節。字節0~21,都是相同的,為:“68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10”。而(er)從(cong)字節22開(kai)始(shi),將(jiang)根(gen)據讀取數據的軟器件(jian)類(lei)型(xing)及地(di)址(zhi)的不(bu)同而(er)不(bu)同。
字(zi)節22,表示讀取數據的(de)單位。為01時,1bit;為02時,1字(zi)節;為04時,1字(zi);為06時,雙字(zi)。
字節23,恒0。
字節24,表示數(shu)據個數(shu)。01,表示一次(ci)讀(du)一個數(shu)據。如為讀(du)字節,最多可(ke)讀(du)208個字節,即可(ke)設為DEH。
字節25,恒0.
字節26,表示軟(ruan)器(qi)件(jian)類型。為01時,V存儲器(qi);為00時,其它。
字節27,也(ye)表(biao)示軟器件類(lei)型。為(wei)04時(shi)(shi)(shi)(shi),S;為(wei)05時(shi)(shi)(shi)(shi),SM;為(wei)06時(shi)(shi)(shi)(shi),AI;為(wei)07時(shi)(shi)(shi)(shi)AQ;為(wei)1E時(shi)(shi)(shi)(shi),C;為(wei)81時(shi)(shi)(shi)(shi),I;為(wei)82時(shi)(shi)(shi)(shi),Q;為(wei)83時(shi)(shi)(shi)(shi),M;為(wei)84時(shi)(shi)(shi)(shi),V;為(wei)1F時(shi)(shi)(shi)(shi),T。
字(zi)(zi)節28、29及30,軟器(qi)件(jian)偏(pian)移量指針(存儲器(qi)地址(zhi)乘8),如:VB100,存儲器(qi)地址(zhi)為(wei)100,偏(pian)移量為(wei)800,轉(zhuan)換成十六進(jin)制(zhi)就是320H,則(ze)字(zi)(zi)節28到30這三(san)個字(zi)(zi)節就是00、03、及20.
字節31、32為FCS和ED。
返回(hui)數(shu)據(ju)(ju) 與發(fa)送命令格式數(shu)據(ju)(ju)相同,但包含(han)一條數(shu)據(ju)(ju)。具體是:
SD LE LER SD DA SA FC DASP SSAP DU FCS ED
SD LE LER SD DA SA FC DASP SSAP DU FCS ED
這(zhe)里的(de)SD、LE、Ler、SD、SA及FC與命令含義(yi)相(xiang)同。但SD為PLC地(di)址(zhi),DA為計(ji)算機地(di)址(zhi)。此(ci)外(wai):
字(zi)(zi)(zi)節(jie)16:數據(ju)(ju)塊占(zhan)用(yong)的字(zi)(zi)(zi)節(jie)數,即從字(zi)(zi)(zi)節(jie)21到校驗和前的字(zi)(zi)(zi)節(jie)數。一(yi)條數據(ju)(ju)時(shi):字(zi)(zi)(zi),為06;雙字(zi)(zi)(zi),為08;其它為05.
字(zi)(zi)節(jie)22:數(shu)據類型,讀字(zi)(zi)節(jie)為04.
字(zi)節23、24:讀字(zi)節時(shi),為數據個(ge)數,單位(wei)(wei)以位(wei)(wei)計,1個(ge)字(zi)節為08;2個(ge)字(zi)節為10(16進制(zhi)計),余類推。
字節25及(ji)其后至校驗和之(zhi)前(qian),為返(fan)回(hui)所(suo)讀值。
如(ru)讀VB100開始3個字節,其命令碼為:
68 1B 1B 68 02 00 6C 32 01 00 0000 00 00 0E 00 00 04 01 12 0A 10 02 00 03 00 01 84 00 03 20 8D 16(紅(hong)色02為字節為單位,03為讀3個字節)
68 1B 1B 68 02 00 6C 3201 00 00 00 00 00 0E 00 00 04 01 12 0A 10 04 00 01 00 01 84 00 0D 08 84 16
返回碼:
68 18 18 68 00 02 08 32 03 00 0000 00 00 02 00 07 00 00 04 01 FF 04 00 18 99 34 568B 16
(這里(li)紅色(se)99、34、56分別為VB100、VB101、VB102的值)
2)寫命令 寫一(yi)個字節,命令(ling)長為38個字節,字節0~字(zi)節21為:
68 20 2068 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10
寫一(yi)個字,命(ming)令長為(wei)39個字節,字節0~字節21為(wei):
68 21 2168 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10
寫一個(ge)雙(shuang)字數(shu)據,命(ming)令(ling)長為(wei)41個(ge)字節,字節0~21為(wei):
68 23 23 68 02 00 6C 32 01 00 0000 00 00 0E 00 00 04 01 12 0A 10
字節22~字節30,為寫(xie)入數(shu)據(ju)的長(chang)、存儲(chu)器(qi)類(lei)型、存儲(chu)器(qi)類(lei)型、存儲(chu)器(qi)偏移量。這些與讀數(shu)據(ju)的命令(ling)相同。字節32如果是寫(xie)入的是位(wei)數(shu)據(ju),這一字節為03,,其(qi)它則為04.
字節34寫入數據的位數:01:1位,08:1字節,10H:1字,20H:1雙字。
字節(jie)35~字節(jie)40為校驗碼、結束符。
如(ru)果寫(xie)(xie)(xie)入(ru)(ru)的(de)是位(wei)、字(zi)節(jie)(jie)數據,字(zi)節(jie)(jie)35就是寫(xie)(xie)(xie)入(ru)(ru)的(de)值(zhi),字(zi)節(jie)(jie)36為(wei)(wei)(wei)00,字(zi)節(jie)(jie)37為(wei)(wei)(wei)校(xiao)驗(yan)碼,字(zi)節(jie)(jie)38為(wei)(wei)(wei)16H、結束(shu)碼。如(ru)果寫(xie)(xie)(xie)入(ru)(ru)的(de)是字(zi)數據(雙字(zi)節(jie)(jie)),字(zi)節(jie)(jie)35、字(zi)節(jie)(jie)36就是寫(xie)(xie)(xie)入(ru)(ru)的(de)值(zhi),字(zi)節(jie)(jie)37為(wei)(wei)(wei)校(xiao)驗(yan)碼,字(zi)節(jie)(jie)38為(wei)(wei)(wei)16H、結束(shu)碼.如(ru)果寫(xie)(xie)(xie)入(ru)(ru)的(de)是雙字(zi)數據(4字(zi)節(jie)(jie)),字(zi)節(jie)(jie)35~字(zi)節(jie)(jie)38就是寫(xie)(xie)(xie)入(ru)(ru)的(de)值(zhi),字(zi)節(jie)(jie)39為(wei)(wei)(wei)校(xiao)驗(yan)碼,字(zi)節(jie)(jie)40為(wei)(wei)(wei)16H、結束(shu)碼。
如寫入QB0=FF,其命令(ling)為:
68 20 20 68 02 00 7C 32 01 00 0000 00 00 0E 00 05 05 01 12 0A 1002 00 01 00 00 82 00 00 0000 04 00 08 FF 86 16
如寫入VB100=12,其命令如下:
68 20 20 68 02 00 7C 32 01 00 0000 00 00 0E 00 05 05 01 12 0A 1002 00 01 00 01 84 00 03 200004 00 08 12 BF16
PLC返回數(shu)(shu)據 E5 后(hou),確認寫入命令(ling),發送(song)以(yi)下(xia)數(shu)(shu)據:
10 02 00 5C 5E 16
PLC返回數據 E5 后,寫入成(cheng)功(gong)。
如(ru)(ru)寫入(ru)VW100=1234,其命令如(ru)(ru)下:
68 21 21 68 02 00 7C 32 01 00 0000 00 00 0E 00 06 05 01 12 0A 1004 00 01 00 01 84 00 03 20 00 040010 12 34 FE 16
PLC返回數據 E5 后,確認寫入命令,發(fa)送以下數據:
10 02 00 5C 5E 16
PLC返回(hui)數據(ju) E5 后,寫(xie)入(ru)成功。
請注意(yi)以上紅體字的(de)含義。
以上(shang)命令如(ru)執行成功,則返回
68 12 12 68 00 02 08 32 03 00 0000 00 00 02 00 01 00 00 05 01 FF 47 16
否則返回:
68 0F 0F 68 00 02 08 32 02 00 0000 00 00 00 00 00 85 00 C3 16
3)STOP命令 stop命令使(shi)得S7-200CPU從(cong)run狀態(tai)轉換到stop狀(zhuang)態(此時cpu模塊上(shang)的模式(shi)開(kai)關應(ying)處于run或term位(wei)置)。計算(suan)機發出如下命令:
68 1D 1D 68 02 00 6C 32 01 00 0000 00 00 10 00 00 29 00 00 00 00 00 09 50 5F 50 52 4F 47 52 41 4D AA 16
PLC返回(hui):E5,同時PLC即轉為stop狀態。
但計(ji)算(suan)機再發確認報文(wen)(10 02 00 5C 5E 16)
PLC將返回(hui):68 10 10 68 00 02 08 32 03 00 00 00 00 00 01 00 00 00 00 29 69 16
到此,才算完成這個(ge)通(tong)信(xin)過程。
4)RUN命令 run命令(ling)使(shi)得S7-200 cpu從stop狀態轉(zhuan)換(huan)到(dao)run狀態(此時cpu模塊上的模式開(kai)關應處(chu)于run或term位置)。PC機發出如(ru)下命令(ling):
68 21 21 68 02 00 6C 32 01 00 0000 00 00 14 00 00 28 00 00 00 00 00 00 FD 00 00 09 50 5F 50 52 4F 47 52 41 4DAA 16
PLC返回:E5,同時PLC即(ji)轉為RUN狀態(tai)。
但計算機再發確(que)認報文(10 02 00 5C 5E 16)
PLC將(jiang)返回:68 10 10 68 00 02 08 32 03 00 00 00 00 00 01 00 00 00 00 29 69 16
至此,才(cai)算完成這個(ge)通信(xin)過程。
注:以上介(jie)紹的不(bu)是(shi)西門子(zi)發布的正式通信協(xie)議,還有其它內容(rong)。
建議結合些通信的例子來進行測試。
PC與PLC采(cai)用主從方式通訊,PC按如下(xia)文的(de)(de)(de)(de)(de)格式發(fa)(fa)讀寫(xie)指(zhi)(zhi)(zhi)令(ling)(ling)(ling)(ling),PLC作出接(jie)收正確的(de)(de)(de)(de)(de)響(xiang)應(ying)(ying)(返回應(ying)(ying)答數(shu)據(ju)E5H或F9H見下(xia)文分析),上(shang)(shang)(shang)(shang)位(wei)機接(jie)到(dao)(dao)此(ci)響(xiang)應(ying)(ying)則發(fa)(fa)出確認命(ming)令(ling)(ling)(ling)(ling)(1002 5C 5E 16),PLC再(zai)返回給上(shang)(shang)(shang)(shang)位(wei)機相(xiang)應(ying)(ying)數(shu)據(ju)。一(yi)般上(shang)(shang)(shang)(shang)位(wei)機要(yao)(yao)(yao)(yao)連接(jie)PLC就(jiu)要(yao)(yao)(yao)(yao)先發(fa)(fa)送(song)如下(xia)尋呼(hu)(hu)數(shu)據(ju)10 02 00 49 4B 16 同志們吶!我(wo)們可都是(shi)(shi)(shi)(shi)(shi)(shi)有(you)(you)血、有(you)(you)肉、有(you)(you)思想、有(you)(you)靈感的(de)(de)(de)(de)(de)高(gao)級(ji)動(dong)物啊(a)(a),面對(dui)這(zhe)(zhe)(zhe)么(me)(me)(me)多枯(ku)燥、無味(wei)、復雜、混亂的(de)(de)(de)(de)(de)機器(qi)數(shu)字你(ni)怎(zen)么(me)(me)(me)記呢?反正我(wo)是(shi)(shi)(shi)(shi)(shi)(shi)記不住(zhu)啊(a)(a)!(^_^開始(shi)洗腦)這(zhe)(zhe)(zhe)時(shi)(shi)你(ni)可以閉上(shang)(shang)(shang)(shang)眼(yan)睛,安靜、靜、再(zai)靜。。。。。。想一(yi)想戰(zhan)爭時(shi)(shi)期的(de)(de)(de)(de)(de)戰(zhan)地(di)對(dui)講機通話模(mo)式,那么(me)(me)(me)這(zhe)(zhe)(zhe)個指(zhi)(zhi)(zhi)令(ling)(ling)(ling)(ling)(1002 00 49 4B 16)就(jiu)可以理解為(wei)(wei):00呼(hu)(hu)叫02,聽到(dao)(dao)請回答。 10起始(shi)符(fu) 02是(shi)(shi)(shi)(shi)(shi)(shi)上(shang)(shang)(shang)(shang)位(wei)機要(yao)(yao)(yao)(yao)聯系的(de)(de)(de)(de)(de)下(xia)位(wei)級(ji)的(de)(de)(de)(de)(de)地(di)址(zhi)站號(hao)(hao),就(jiu)是(shi)(shi)(shi)(shi)(shi)(shi)要(yao)(yao)(yao)(yao)找(zhao)的(de)(de)(de)(de)(de)人 00就(jiu)是(shi)(shi)(shi)(shi)(shi)(shi)上(shang)(shang)(shang)(shang)位(wei)級(ji)本本身自己(ji)的(de)(de)(de)(de)(de)站號(hao)(hao)49尋呼(hu)(hu)指(zhi)(zhi)(zhi)令(ling)(ling)(ling)(ling) 16終止(zhi)符(fu) 其(qi)(qi)中4B為(wei)(wei)校(xiao)驗(yan)(yan)(yan)碼(ma)(ma)(ma),是(shi)(shi)(shi)(shi)(shi)(shi)這(zhe)(zhe)(zhe)樣得(de)來(lai)的(de)(de)(de)(de)(de):02+00+49的(de)(de)(de)(de)(de)最后(hou)兩位(wei)就(jiu)是(shi)(shi)(shi)(shi)(shi)(shi)校(xiao)驗(yan)(yan)(yan)碼(ma)(ma)(ma),這(zhe)(zhe)(zhe)就(jiu)是(shi)(shi)(shi)(shi)(shi)(shi)所(suo)說的(de)(de)(de)(de)(de)偶校(xiao)驗(yan)(yan)(yan)或稱和校(xiao)驗(yan)(yan)(yan)也(ye)稱余校(xiao)驗(yan)(yan)(yan),因為(wei)(wei)取的(de)(de)(de)(de)(de)是(shi)(shi)(shi)(shi)(shi)(shi)余數(shu)。計(ji)算(suan)器(qi)在16進制計(ji)算(suan)時(shi)(shi)公式(02+00+49)mod100得(de)出的(de)(de)(de)(de)(de)數(shu)就(jiu)是(shi)(shi)(shi)(shi)(shi)(shi)校(xiao)驗(yan)(yan)(yan)碼(ma)(ma)(ma),你(ni)計(ji)算(suan)一(yi)下(xia)是(shi)(shi)(shi)(shi)(shi)(shi)不是(shi)(shi)(shi)(shi)(shi)(shi)等于4B啊(a)(a)!其(qi)(qi)他(ta)(ta)的(de)(de)(de)(de)(de)所(suo)有(you)(you)PPI協議校(xiao)驗(yan)(yan)(yan)都是(shi)(shi)(shi)(shi)(shi)(shi)如此(ci)。假如02站號(hao)(hao)的(de)(de)(de)(de)(de)PLC收到(dao)(dao)尋呼(hu)(hu)信號(hao)(hao)那么(me)(me)(me)會(hui)回答: 10 00 02 0002 16 意(yi)思是(shi)(shi)(shi)(shi)(shi)(shi):報(bao)告00 ,02收到(dao)(dao),請指(zhi)(zhi)(zhi)示 這(zhe)(zhe)(zhe)樣的(de)(de)(de)(de)(de)解釋是(shi)(shi)(shi)(shi)(shi)(shi)不是(shi)(shi)(shi)(shi)(shi)(shi)有(you)(you)意(yi)思啊(a)(a)!你(ni)有(you)(you)更好的(de)(de)(de)(de)(de)解釋嗎(ma)?接(jie)下(xia)來(lai)呢,找(zhao)到(dao)(dao)了(le)要(yao)(yao)(yao)(yao)尋呼(hu)(hu)的(de)(de)(de)(de)(de)人PC就(jiu)是(shi)(shi)(shi)(shi)(shi)(shi)司令(ling)(ling)(ling)(ling)啦就(jiu)可以發(fa)(fa)號(hao)(hao)施(shi)令(ling)(ling)(ling)(ling)了(le),發(fa)(fa)號(hao)(hao)施(shi)令(ling)(ling)(ling)(ling)后(hou)PLC正確接(jie)收后(hou)就(jiu)會(hui)發(fa)(fa)送(song)E5 字符(fu),意(yi)思是(shi)(shi)(shi)(shi)(shi)(shi):“02洞兩明(ming)(ming)白(bai)(bai)”。其(qi)(qi)實啊(a)(a),說到(dao)(dao)這(zhe)(zhe)(zhe)里PLC只說他(ta)(ta)明(ming)(ming)白(bai)(bai),他(ta)(ta)已(yi)經(jing)明(ming)(ming)白(bai)(bai)了(le)上(shang)(shang)(shang)(shang)位(wei)機PC的(de)(de)(de)(de)(de)指(zhi)(zhi)(zhi)示,但并沒有(you)(you)執(zhi)行(xing)命(ming)令(ling)(ling)(ling)(ling),那么(me)(me)(me)要(yao)(yao)(yao)(yao)怎(zen)么(me)(me)(me)他(ta)(ta)才執(zhi)行(xing)命(ming)令(ling)(ling)(ling)(ling)呢?就(jiu)是(shi)(shi)(shi)(shi)(shi)(shi)上(shang)(shang)(shang)(shang)位(wei)機PC發(fa)(fa)出確認命(ming)令(ling)(ling)(ling)(ling)后(hou)才執(zhi)行(xing)。這(zhe)(zhe)(zhe)時(shi)(shi)上(shang)(shang)(shang)(shang)位(wei)機會(hui)發(fa)(fa)出(1002 5C 5E 16),意(yi)思是(shi)(shi)(shi)(shi)(shi)(shi):“請立即(ji)執(zhi)行(xing)”。然后(hou)PLC就(jiu)干(gan)他(ta)(ta)應(ying)(ying)當干(gan)的(de)(de)(de)(de)(de)工(gong)作了(le)啊(a)(a)!原(yuan)來(lai)PLC也(ye)不容易(yi)啊(a)(a),怪不得(de)叫下(xia)位(wei)機呢!
說(shuo)了這么多亂不亂吶(na)!目的就是要理清上(shang)下級關系(xi)、主(zhu)從關系(xi),指令(ling)的順序,用一個好的記憶方(fang)法記住枯燥無味(wei)的機器碼。
讀命令分析:一次讀一條數據
SD LE LER SD DA SA FC DASP SSAP DU FCS ED
SD:(Start Delimiter)開始定界符(68H)
LE:(Length)報文數據長度
LER:(Repeated Length)重復數據長度
SD: (Start Delimiter)開始定界符(68H)
SA:(Source Address)目標地址,指該地址的值,就是PLC的地址
DA:(Destination Address)本地地址,指該地址的指針,就是上位機自己的地址
FC:(Function Code)功能碼,5CH為交替周期觸發,6CH為首次信息周期觸發,7CH為交替周期觸發。
DSAP:(Destination Service Access Point)目的服務存取點
SSAP:(Source Service Access Point)源服務存取點
DU:(Data Unit)數據單元
FCS:(Frame Check Sequence)校驗碼
ED:(End Delimiter)結束分界符(16H)
報文數據長度和重復數據長度為自DA至DU的數據長度,校驗碼為DA至DU數據的和校驗,只取其中的末字節值關于這個校驗碼的計算方法同上面說明。
在讀寫PLC的變量數據中,讀數據的功能碼為 6CH,寫數據的功能碼為 7CH。
對于(yu)一次讀取一個(ge)數(shu)據,讀命令都是33個(ge)字節(jie)(jie)。前面的(de)0—21字節(jie)(jie)是相同的(de),為