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