郭福田,劉心紅,曾麗麗,趙 忖,張 昕
監(jiān)控系統(tǒng)中S7-200系列PLC的通信協(xié)議設(shè)計(jì)
郭福田,劉心紅,曾麗麗,趙 忖,張 昕
(東北石油大學(xué)秦皇島分校應(yīng)用技術(shù)學(xué)院,河北秦皇島066004)
S7-200系列PLC自由口通信方式可用于PC機(jī)對PLC的監(jiān)控,現(xiàn)有的S7-200系列PLC通信協(xié)議要么針對某一具體控制系統(tǒng),要么比較復(fù)雜,理解困難,使用不便,通用性不強(qiáng)。本文利用S7-200系列PLC自由口通信方式中靈活的接收控制功能,設(shè)計(jì)了簡單、可靠的通信協(xié)議,實(shí)現(xiàn)了簡易、高效、通用性強(qiáng),便于移植的通信程序。協(xié)議采用十六進(jìn)制,發(fā)送和接收協(xié)議格式類似,字節(jié)數(shù)固定,通過變量寄存器可讀寫PLC中任何存儲器中的數(shù)據(jù),便于實(shí)現(xiàn)PC機(jī)對PLC的遠(yuǎn)程監(jiān)控。
通信協(xié)議;PLC;自由口;異或校驗(yàn);中斷
Siemens S7-200系列PLC是廣泛適用于中小型設(shè)備控制的工業(yè)可編程控制器,以其可靠性高、豐富的指令和內(nèi)置功能、通信能力強(qiáng)、性價比較高等特點(diǎn),在工業(yè)控制領(lǐng)域中得到越來越廣泛的應(yīng)用。在工業(yè)場合通常利用PLC和PC機(jī)通信構(gòu)成PC機(jī)監(jiān)控系統(tǒng),其中PLC作為下位機(jī)完成現(xiàn)場各種信號和數(shù)據(jù)的采集、運(yùn)算和控制。PC機(jī)作為上位機(jī)可提供人機(jī)交互界面,實(shí)現(xiàn)數(shù)據(jù)的處理以及現(xiàn)場數(shù)據(jù)的實(shí)時顯示等監(jiān)視和遠(yuǎn)程控制等功能。監(jiān)控系統(tǒng)能夠充分發(fā)揮PC機(jī)與PLC在工業(yè)控制中的優(yōu)勢,實(shí)現(xiàn)PC機(jī)和PLC的結(jié)合的監(jiān)控系統(tǒng)的關(guān)鍵問題之一就是兩者之間的通信問題。將PC機(jī)的串行口RS-232轉(zhuǎn)換為RS-485后就可以和現(xiàn)場PLC等RS-485接口設(shè)備相連,實(shí)現(xiàn)對現(xiàn)場RS-485串行總線上各種設(shè)備的遠(yuǎn)程監(jiān)控。由于S7-200系列PLC基于RS-485串行總線的通信協(xié)議較多[1],最經(jīng)濟(jì)的就是采用PPI(Point to point interface點(diǎn)到點(diǎn)接口)協(xié)議和自由口(free-port)通信方式。PPI協(xié)議是西門子內(nèi)部協(xié)議,不公開,適合西門子產(chǎn)品之間的通信。而自由口通信方式對用戶完全開放,可以由用戶靈活設(shè)計(jì)通信協(xié)議以適應(yīng)不同的應(yīng)用需求。
在PC機(jī)對S7-200系列PLC的監(jiān)控監(jiān)控系統(tǒng)中,現(xiàn)有的通信協(xié)議要么針對某一具體控制系統(tǒng),要么比較復(fù)雜,理解困難,使用不便,通用性不強(qiáng)。本文針對S7-200系列PLC的通信端口0,利用其自由口通信方式中靈活的通信控制功能,設(shè)計(jì)了簡易、可靠、高效的PC機(jī)監(jiān)控通信協(xié)議。通過變量寄存器作中介可讀寫PLC中任何存儲器中的數(shù)據(jù),可實(shí)現(xiàn)PC機(jī)對PLC的遠(yuǎn)程監(jiān)控。
通信協(xié)議是監(jiān)控系統(tǒng)的重要組成部分,它關(guān)系到整個系統(tǒng)的工作效率和穩(wěn)定性。為保證PC機(jī)與多臺PLC之間能夠正確識別傳輸信息,通信協(xié)議中充分利用了s7-200的PLC自由口通信控制功能[2],考慮以下因素:
(1)協(xié)議采用十六進(jìn)制,發(fā)送和接收幀格式類似,由于PLC中數(shù)據(jù)類型最多4個字節(jié),因此信息幀中數(shù)據(jù)域采用4個字節(jié)。
(2)信息幀中包含PLC地址,可實(shí)現(xiàn)PC機(jī)與多臺PLC的通信。
(3)PLC中采用幀間時間控制信息幀的開始,采用最大字符數(shù)控制信息幀的結(jié)束,保證PLC信息接收的完整。
(4)采用異或校驗(yàn)方式檢測通信過程中的傳輸錯誤,保證監(jiān)控?cái)?shù)據(jù)的正確。
(5)PC對PLC讀取和寫入的請求幀和PLC應(yīng)答幀采用同樣幀格式,以簡化PLC控制程序?qū)π畔奶幚砗蚉C機(jī)程序的編寫。
PC機(jī)向PLC發(fā)送的命令請求幀格式:
其中PLC地址域?yàn)槟繕?biāo)PLC地址,值為01(信息幀中數(shù)值均采用十六進(jìn)制)到FF之間;讀寫域?yàn)樽xPLC中數(shù)據(jù)用00,寫入數(shù)據(jù)到PLC中用01;寄存器類型域分3種類型,輸入映像寄存器為00,輸出映像寄存器為01,變量寄存器為02;寄存器號域?yàn)樽x寫的PLC寄存器編號;讀取PLC數(shù)據(jù)時,數(shù)據(jù)域中的4個字節(jié)為無效數(shù)據(jù)。寫數(shù)據(jù)到PLC時,數(shù)據(jù)域中是寫入到指定寄存器的4個字節(jié)數(shù)據(jù);校驗(yàn)碼域是對信息幀前面所有字節(jié)異或運(yùn)算形成的異或校驗(yàn)碼。
PLC機(jī)向PC發(fā)送的應(yīng)答請求幀格式與PC機(jī)向PLC發(fā)送的命令請求幀格式基本相同,區(qū)別只在數(shù)據(jù)域的含義有差別。讀命令的應(yīng)答幀中數(shù)據(jù)域?yàn)镻LC中寄存器號開始的4個字節(jié)數(shù)據(jù)。寫命令的應(yīng)答幀中數(shù)據(jù)域?yàn)閷懭隤LC寄存器后又讀出的數(shù)據(jù),由此可判斷寫入PLC的數(shù)據(jù)是否正確。
通信程序的設(shè)計(jì)思想是通常PLC處于接收狀態(tài),當(dāng)收到信息幀后,使用接收完成中斷處理接收到的數(shù)據(jù),然后使用定時中斷延遲后發(fā)送數(shù)據(jù),在發(fā)送完成中斷中重新返回接收狀態(tài)[3]。PLC只有處于RUN模式時,才能設(shè)置為自由口通信方式。當(dāng)PLC回到STOP模式時,自動停止自由口通信方式而轉(zhuǎn)為PPI通信方式,這時PC機(jī)上編程軟件可對PLC編程。PLC通信功能的初始化包括以下內(nèi)容:
首先設(shè)置自由口控制寄存器SMB30,在PLC運(yùn)行時使端口0進(jìn)入自由口通信方式,以及設(shè)置通信端口0上常用的串行口通信參數(shù),如波特率、數(shù)據(jù)位和奇偶校驗(yàn)等參數(shù)。為了通用性,這里設(shè)置為波特率9600、8位數(shù)據(jù)和無奇偶校驗(yàn),即SMB30的值設(shè)置為9[4]。
其次控制接收信息方式。信息控制寄存器SMB87中包含了對接收信息控制的各種方法。這里結(jié)合前述信息幀的格式,設(shè)置接收信息控制功能包括:使能接收信息功能;使用SMW90設(shè)置信息幀開始空閑時間5ms;使用SMW92設(shè)置信息幀間超時時間為100ms。這樣接收信息控制寄存器SMB87的值為9C。同時由前述幀結(jié)構(gòu)可以看出,每幀有10個字節(jié),因此使用SMB94設(shè)置信息幀最多接收10個字符。
通信程序中采用了常用的XOR校驗(yàn)方法,發(fā)送方將校驗(yàn)碼附在幀后,接收方收到數(shù)據(jù)后都要進(jìn)行校驗(yàn)以確保數(shù)據(jù)正確時,一致則繼續(xù),錯誤則丟棄。例如,當(dāng)PLC接收到針對該P(yáng)LC的信息后,則對收到的數(shù)據(jù)進(jìn)行異或校驗(yàn),若校驗(yàn)正確,則對指定的寄存器進(jìn)行讀寫,讀寫完成后延時5ms后返回應(yīng)答信息。PLC發(fā)送完信息后,再進(jìn)入接收狀態(tài)[5]。
2.1 初始化程序
LD SM0.0 //該位始終為1
MOVB 9,SMB30//9600 bit/s,8位數(shù)據(jù),無校驗(yàn),1位停止位
MOVB 16#9C,SMB87//允許接收,起始時間和信息幀超時檢測
MOVW 5,SMW90//開始接收的空閑時間為5ms
MOVW+100,SMW92//接收超時時間為100 ms
MOVB 10,SMB94//接收的最大字符數(shù)為11
ATCH RCV_INT:INT0,23//接收完成事件連接到中斷程序0
ATCH SEND_INT:INT1,9//發(fā)送完成事件連接到中斷程序1
ENI//允許用戶中斷
RCV BUFFER:VB60,0//通信端口0的接收緩沖區(qū)指針指向BUFFER
2.2 接收完成中斷程序
LD SM0.0//該位始終為1
AB<>BUFADD:VB61,16#02//收到PLC地址不是2
JMP 1//退出
NOT
CALL FCS:SBR1,&BUFADD:&VB61,9,#XORCODE:LB0 //求異或校驗(yàn)碼
LDB=#XORCODE:LB0,BUFXOR:VB70//如果校驗(yàn)正確
LPS
AB= BUFREG:VB63,2 //讀寫V寄存器
MOVD&VB0,#RWADD:LD7
LRD
AB=BUFREG:VB63,1//讀寫Q寄存器
MOVD&QB0,#RWADD:LD7
LRD
AB=BUFREG:VB63,0//讀寫I寄存器
MOVD&IB0,#RWADD:LD7
LRD
MOVW BUFOFF:VW64,#OFFADD_W:LW1//讀寫偏移
LRD
ITD#OFFADD_W:LW1,#OFFADD_D:LD3//字轉(zhuǎn)換為雙字
LRD
+D#OFFADD_D:LD3,#RWADD:LD7//讀寫偏移+基地址
LRD
AB=BUFRW:VB62,0//PC讀PLC
BMB*#RWADD:*LD7,BUFVAL:VB66,4
LRD
AB=BUFRW:VB62,1//PC寫PLC
BMB BUFVAL:VB66,*#RWADD:*LD7,4//先寫
BMB*#RWADD:*LD7,BUFVAL:VB66,4//后讀
LPP
MOVB 5,SMB34//定時中斷0延時時間為5ms
ATCH TIMER_INT_0:INT2,10//啟用定時中斷0
CRETI
LBL 1
LD SM0.0
RCV BUFFER:VB60,0//啟動下一次接收
2.3 延遲發(fā)送中斷程序
LD SM0.0
DTCH 10//斷開定時器中斷
CALL FCS:SBR1,&BUFADD:&VB62,9,BUFXOR:VB71 //求校驗(yàn)碼
XMT BUFFER:VB60,0//開始發(fā)送
2.4 發(fā)送完成中斷程序
LD SM0.0
RCV BUFFER:VB60,0//準(zhǔn)備接收
2.5 異或校驗(yàn)程序
LD SM0.0
MOVB 0,#XORCODE:LB6//異或校驗(yàn)初值為0
FOR#TEMPINDX:LW7,+1,#BYTENUM:LW4
LD SM0.0
XORB*#STARTADD:*LD0,#XORCODE:LB6//異或運(yùn)算
INCD#STARTADD:LD0//指針增1,以便取下一個字節(jié)
NEXT
2.6 主程序
LD SM0.1//進(jìn)入運(yùn)行狀態(tài)時
CALL SBR0//調(diào)用通信初始化程序
…//PLC控制程序部分
為了方便本通信程序的應(yīng)用,采用符號表定義涉及到的變量寄存器,見表2。應(yīng)用時根據(jù)PLC控制程序中變量使用情況,修改表2中的變量寄存器號,就可在滿足通信程序要求的同時防止與控制程序中已使用的變量寄存器沖突。該通信程序的子程序使用了局部存儲器以及接收和發(fā)送緩沖區(qū)共用來減少變量存儲器的使用量,由表2可以看出通信程序中僅使用了11個字節(jié)變量存儲器。變量存儲器用量越少,越方便修改和應(yīng)用。
在具體PLC控制程序使用本通信程序時,必須在主程序開始運(yùn)行處,調(diào)用通信初始化程序。然后,PC機(jī)與PLC中指定的變量寄存器通信,獲取現(xiàn)場設(shè)備數(shù)據(jù),實(shí)現(xiàn)遠(yuǎn)程監(jiān)控。
在PC機(jī)與PLC構(gòu)成的監(jiān)控系統(tǒng)中,PC機(jī)上的監(jiān)控程序根據(jù)PLC的通信協(xié)議發(fā)送命令請求幀來讀寫PLC中指定的寄存器,PLC控制程序再根據(jù)這些指定寄存器進(jìn)行現(xiàn)場控制或返回現(xiàn)場運(yùn)行狀態(tài)。測試時在PC機(jī)使用串行通信調(diào)試軟件模擬PC機(jī)上的監(jiān)控程序。修改PLC中通信程序以模擬現(xiàn)場控制程序,如在PLC主程序中增加下述語句來測試PLC的功能:輸入寄存器測試;輸出寄存器測試;讀取PLC當(dāng)前時鐘信息;讀取模擬電位器值。
LD SM0.0 //調(diào)用通信程序舉例
TODR VB100//將當(dāng)前時間和日期8個字節(jié)放在VB100處,供PC機(jī)讀取
MOVW SMW28,VW108//將模擬電位器0和1的值放在VB108處,供PC機(jī)讀取
當(dāng)PC機(jī)發(fā)送寫輸出寄存器命令02 01 01 00 00 04 05 04 05 02時,PLC上Q0.2、Q1.0、Q1.2燈亮,與04 05值相符,且PC機(jī)收到相同信息幀,都說明了寫功能正確。當(dāng)PC機(jī)發(fā)送讀輸入映像寄存器命令02 00 00 00 00 01 02 03 04 06時,PC收到02 00 00 00 00 08 00 00 00 0A,其中08對應(yīng)PLC上I0.3為高,與實(shí)際相符。當(dāng)PC機(jī)發(fā)送讀取VB100內(nèi)容的命令02 00 02 00 64 01 02 03 04 60時,收到02 00 02 00 64 13 10 11 21 57,說明當(dāng)前日期為13年10月11日21時。將PLC的2個電位器的值分別調(diào)為100和200后,PC機(jī)發(fā)送讀取VB108內(nèi)容的命令02 00 02 00 64 01 02 03 04 68時,收到02 00 02 00 6C 64 C8 00 00 C0,其中64(即十進(jìn)制100)和C8(即十進(jìn)制200)即是2個電位器的當(dāng)前值。說明讀功能正確。
利用S7-200系列PLC的自由口通信功能為監(jiān)控系統(tǒng)設(shè)計(jì)了通用的PLC通信程序,占用PLC存儲器資源少,并且利用了符號表對其進(jìn)行了定義,易于修改。通信協(xié)議簡單、可靠,便于理解。這些優(yōu)點(diǎn)使其方便地用于具體的PC機(jī)和PLC構(gòu)成的監(jiān)控系統(tǒng)。該通信協(xié)議已經(jīng)用于一個太陽能熱水監(jiān)控系統(tǒng)中,通信可靠,效果良好。通信協(xié)議的設(shè)計(jì)思想和通信程序的編程方法也可用于設(shè)計(jì)其他PLC產(chǎn)品的通信。
[1]西門子(中國)有限公司.深入淺出西門子S7-200PLC[M].北京:北京航空航天大學(xué)出版社,2003:18-25.
[2]趙景波.零基礎(chǔ)學(xué)西門子S7-200 PLC[M].北京:機(jī)械工業(yè)出版社,2010:181-207.
[3]楊志剛,錢俊磊.西門子S7-200系列PLC與單片機(jī)之間的自由口通信[J].河北理工學(xué)院學(xué)報(bào),2005,27(4):77-80.
[4]劉濤.S7-200系列PLC與PC間自由口通訊的實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2004,14(4):5-6.
[5]馬啟青,劉志強(qiáng),韓建武,等.基于自由口模式實(shí)現(xiàn)S7-200系列PLC與PC機(jī)串行通信[J].微計(jì)算機(jī)信息,2003,19(11):32-33.
Designed of Communication ProtocolWith S7-200 PLC for Supervisory Control System
GUO Fu-tian,LIU Xin-h(huán)ong,ZENG Li-li,ZHAO Cun,ZHANG Xin
(School of Applied Technology,College of QingHuangDao of Northeast Petroleum University,Qinghuangdao 066004,China)
The free-port communicationmode of S7-200 PLC can be used formonitoring PLCwith PC in the supervisory control system,all existing communication protocols using for special application or it is too complex to understand and application.This paper uses flexible function of receivemessage control of S7-200 PLC’s freeportmode,designs a simple,reliable communication protocol,programs a high-performance,universal communication routine simply and easily,and easily using to special application.This protocol is hexadecimal,sending format as like as receive,fixed bytes,can read and write any register of PLC,so that it easy use formonitoring PLC with PC.
communication protocol;PLC;free-port;interrupt
TP2
B
2095-0063(2014)03-0005-05
2013-09-21
郭福田(1965-),男,陜西蒲城人,東北石油大學(xué)秦皇島分校應(yīng)用技術(shù)學(xué)院副教授,從事計(jì)算機(jī)控制、數(shù)據(jù)通信等研究。
黑龍江省教育科學(xué)“十二五”規(guī)劃課題(GZC1213020)。
DOI10.13356/j.cnki.jdnu.2095-0063.2014.03.002