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