郭福田,劉心紅,曾麗麗,趙 忖,張 昕
監(jiān)控系統(tǒng)中S7-200系列PLC的通信協(xié)議設計
郭福田,劉心紅,曾麗麗,趙 忖,張 昕
(東北石油大學秦皇島分校應用技術學院,河北秦皇島066004)
S7-200系列PLC自由口通信方式可用于PC機對PLC的監(jiān)控,現(xiàn)有的S7-200系列PLC通信協(xié)議要么針對某一具體控制系統(tǒng),要么比較復雜,理解困難,使用不便,通用性不強。本文利用S7-200系列PLC自由口通信方式中靈活的接收控制功能,設計了簡單、可靠的通信協(xié)議,實現(xiàn)了簡易、高效、通用性強,便于移植的通信程序。協(xié)議采用十六進制,發(fā)送和接收協(xié)議格式類似,字節(jié)數(shù)固定,通過變量寄存器可讀寫PLC中任何存儲器中的數(shù)據(jù),便于實現(xiàn)PC機對PLC的遠程監(jiān)控。
通信協(xié)議;PLC;自由口;異或校驗;中斷
Siemens S7-200系列PLC是廣泛適用于中小型設備控制的工業(yè)可編程控制器,以其可靠性高、豐富的指令和內(nèi)置功能、通信能力強、性價比較高等特點,在工業(yè)控制領域中得到越來越廣泛的應用。在工業(yè)場合通常利用PLC和PC機通信構(gòu)成PC機監(jiān)控系統(tǒng),其中PLC作為下位機完成現(xiàn)場各種信號和數(shù)據(jù)的采集、運算和控制。PC機作為上位機可提供人機交互界面,實現(xiàn)數(shù)據(jù)的處理以及現(xiàn)場數(shù)據(jù)的實時顯示等監(jiān)視和遠程控制等功能。監(jiān)控系統(tǒng)能夠充分發(fā)揮PC機與PLC在工業(yè)控制中的優(yōu)勢,實現(xiàn)PC機和PLC的結(jié)合的監(jiān)控系統(tǒng)的關鍵問題之一就是兩者之間的通信問題。將PC機的串行口RS-232轉(zhuǎn)換為RS-485后就可以和現(xiàn)場PLC等RS-485接口設備相連,實現(xiàn)對現(xiàn)場RS-485串行總線上各種設備的遠程監(jiān)控。由于S7-200系列PLC基于RS-485串行總線的通信協(xié)議較多[1],最經(jīng)濟的就是采用PPI(Point to point interface點到點接口)協(xié)議和自由口(free-port)通信方式。PPI協(xié)議是西門子內(nèi)部協(xié)議,不公開,適合西門子產(chǎn)品之間的通信。而自由口通信方式對用戶完全開放,可以由用戶靈活設計通信協(xié)議以適應不同的應用需求。
在PC機對S7-200系列PLC的監(jiān)控監(jiān)控系統(tǒng)中,現(xiàn)有的通信協(xié)議要么針對某一具體控制系統(tǒng),要么比較復雜,理解困難,使用不便,通用性不強。本文針對S7-200系列PLC的通信端口0,利用其自由口通信方式中靈活的通信控制功能,設計了簡易、可靠、高效的PC機監(jiān)控通信協(xié)議。通過變量寄存器作中介可讀寫PLC中任何存儲器中的數(shù)據(jù),可實現(xiàn)PC機對PLC的遠程監(jiān)控。
通信協(xié)議是監(jiān)控系統(tǒng)的重要組成部分,它關系到整個系統(tǒng)的工作效率和穩(wěn)定性。為保證PC機與多臺PLC之間能夠正確識別傳輸信息,通信協(xié)議中充分利用了s7-200的PLC自由口通信控制功能[2],考慮以下因素:
(1)協(xié)議采用十六進制,發(fā)送和接收幀格式類似,由于PLC中數(shù)據(jù)類型最多4個字節(jié),因此信息幀中數(shù)據(jù)域采用4個字節(jié)。
(2)信息幀中包含PLC地址,可實現(xiàn)PC機與多臺PLC的通信。
(3)PLC中采用幀間時間控制信息幀的開始,采用最大字符數(shù)控制信息幀的結(jié)束,保證PLC信息接收的完整。
(4)采用異或校驗方式檢測通信過程中的傳輸錯誤,保證監(jiān)控數(shù)據(jù)的正確。
(5)PC對PLC讀取和寫入的請求幀和PLC應答幀采用同樣幀格式,以簡化PLC控制程序?qū)π畔奶幚砗蚉C機程序的編寫。
PC機向PLC發(fā)送的命令請求幀格式:
其中PLC地址域為目標PLC地址,值為01(信息幀中數(shù)值均采用十六進制)到FF之間;讀寫域為讀PLC中數(shù)據(jù)用00,寫入數(shù)據(jù)到PLC中用01;寄存器類型域分3種類型,輸入映像寄存器為00,輸出映像寄存器為01,變量寄存器為02;寄存器號域為讀寫的PLC寄存器編號;讀取PLC數(shù)據(jù)時,數(shù)據(jù)域中的4個字節(jié)為無效數(shù)據(jù)。寫數(shù)據(jù)到PLC時,數(shù)據(jù)域中是寫入到指定寄存器的4個字節(jié)數(shù)據(jù);校驗碼域是對信息幀前面所有字節(jié)異或運算形成的異或校驗碼。
PLC機向PC發(fā)送的應答請求幀格式與PC機向PLC發(fā)送的命令請求幀格式基本相同,區(qū)別只在數(shù)據(jù)域的含義有差別。讀命令的應答幀中數(shù)據(jù)域為PLC中寄存器號開始的4個字節(jié)數(shù)據(jù)。寫命令的應答幀中數(shù)據(jù)域為寫入PLC寄存器后又讀出的數(shù)據(jù),由此可判斷寫入PLC的數(shù)據(jù)是否正確。
通信程序的設計思想是通常PLC處于接收狀態(tài),當收到信息幀后,使用接收完成中斷處理接收到的數(shù)據(jù),然后使用定時中斷延遲后發(fā)送數(shù)據(jù),在發(fā)送完成中斷中重新返回接收狀態(tài)[3]。PLC只有處于RUN模式時,才能設置為自由口通信方式。當PLC回到STOP模式時,自動停止自由口通信方式而轉(zhuǎn)為PPI通信方式,這時PC機上編程軟件可對PLC編程。PLC通信功能的初始化包括以下內(nèi)容:
首先設置自由口控制寄存器SMB30,在PLC運行時使端口0進入自由口通信方式,以及設置通信端口0上常用的串行口通信參數(shù),如波特率、數(shù)據(jù)位和奇偶校驗等參數(shù)。為了通用性,這里設置為波特率9600、8位數(shù)據(jù)和無奇偶校驗,即SMB30的值設置為9[4]。
其次控制接收信息方式。信息控制寄存器SMB87中包含了對接收信息控制的各種方法。這里結(jié)合前述信息幀的格式,設置接收信息控制功能包括:使能接收信息功能;使用SMW90設置信息幀開始空閑時間5ms;使用SMW92設置信息幀間超時時間為100ms。這樣接收信息控制寄存器SMB87的值為9C。同時由前述幀結(jié)構(gòu)可以看出,每幀有10個字節(jié),因此使用SMB94設置信息幀最多接收10個字符。
通信程序中采用了常用的XOR校驗方法,發(fā)送方將校驗碼附在幀后,接收方收到數(shù)據(jù)后都要進行校驗以確保數(shù)據(jù)正確時,一致則繼續(xù),錯誤則丟棄。例如,當PLC接收到針對該PLC的信息后,則對收到的數(shù)據(jù)進行異或校驗,若校驗正確,則對指定的寄存器進行讀寫,讀寫完成后延時5ms后返回應答信息。PLC發(fā)送完信息后,再進入接收狀態(tài)[5]。
2.1 初始化程序
LD SM0.0 //該位始終為1
MOVB 9,SMB30//9600 bit/s,8位數(shù)據(jù),無校驗,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 //求異或校驗碼
LDB=#XORCODE:LB0,BUFXOR:VB70//如果校驗正確
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 //求校驗碼
XMT BUFFER:VB60,0//開始發(fā)送
2.4 發(fā)送完成中斷程序
LD SM0.0
RCV BUFFER:VB60,0//準備接收
2.5 異或校驗程序
LD SM0.0
MOVB 0,#XORCODE:LB6//異或校驗初值為0
FOR#TEMPINDX:LW7,+1,#BYTENUM:LW4
LD SM0.0
XORB*#STARTADD:*LD0,#XORCODE:LB6//異或運算
INCD#STARTADD:LD0//指針增1,以便取下一個字節(jié)
NEXT
2.6 主程序
LD SM0.1//進入運行狀態(tài)時
CALL SBR0//調(diào)用通信初始化程序
…//PLC控制程序部分
為了方便本通信程序的應用,采用符號表定義涉及到的變量寄存器,見表2。應用時根據(jù)PLC控制程序中變量使用情況,修改表2中的變量寄存器號,就可在滿足通信程序要求的同時防止與控制程序中已使用的變量寄存器沖突。該通信程序的子程序使用了局部存儲器以及接收和發(fā)送緩沖區(qū)共用來減少變量存儲器的使用量,由表2可以看出通信程序中僅使用了11個字節(jié)變量存儲器。變量存儲器用量越少,越方便修改和應用。
在具體PLC控制程序使用本通信程序時,必須在主程序開始運行處,調(diào)用通信初始化程序。然后,PC機與PLC中指定的變量寄存器通信,獲取現(xiàn)場設備數(shù)據(jù),實現(xiàn)遠程監(jiān)控。
在PC機與PLC構(gòu)成的監(jiān)控系統(tǒng)中,PC機上的監(jiān)控程序根據(jù)PLC的通信協(xié)議發(fā)送命令請求幀來讀寫PLC中指定的寄存器,PLC控制程序再根據(jù)這些指定寄存器進行現(xiàn)場控制或返回現(xiàn)場運行狀態(tài)。測試時在PC機使用串行通信調(diào)試軟件模擬PC機上的監(jiān)控程序。修改PLC中通信程序以模擬現(xiàn)場控制程序,如在PLC主程序中增加下述語句來測試PLC的功能:輸入寄存器測試;輸出寄存器測試;讀取PLC當前時鐘信息;讀取模擬電位器值。
LD SM0.0 //調(diào)用通信程序舉例
TODR VB100//將當前時間和日期8個字節(jié)放在VB100處,供PC機讀取
MOVW SMW28,VW108//將模擬電位器0和1的值放在VB108處,供PC機讀取
當PC機發(fā)送寫輸出寄存器命令02 01 01 00 00 04 05 04 05 02時,PLC上Q0.2、Q1.0、Q1.2燈亮,與04 05值相符,且PC機收到相同信息幀,都說明了寫功能正確。當PC機發(fā)送讀輸入映像寄存器命令02 00 00 00 00 01 02 03 04 06時,PC收到02 00 00 00 00 08 00 00 00 0A,其中08對應PLC上I0.3為高,與實際相符。當PC機發(fā)送讀取VB100內(nèi)容的命令02 00 02 00 64 01 02 03 04 60時,收到02 00 02 00 64 13 10 11 21 57,說明當前日期為13年10月11日21時。將PLC的2個電位器的值分別調(diào)為100和200后,PC機發(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(即十進制100)和C8(即十進制200)即是2個電位器的當前值。說明讀功能正確。
利用S7-200系列PLC的自由口通信功能為監(jiān)控系統(tǒng)設計了通用的PLC通信程序,占用PLC存儲器資源少,并且利用了符號表對其進行了定義,易于修改。通信協(xié)議簡單、可靠,便于理解。這些優(yōu)點使其方便地用于具體的PC機和PLC構(gòu)成的監(jiān)控系統(tǒng)。該通信協(xié)議已經(jīng)用于一個太陽能熱水監(jiān)控系統(tǒng)中,通信可靠,效果良好。通信協(xié)議的設計思想和通信程序的編程方法也可用于設計其他PLC產(chǎn)品的通信。
[1]西門子(中國)有限公司.深入淺出西門子S7-200PLC[M].北京:北京航空航天大學出版社,2003:18-25.
[2]趙景波.零基礎學西門子S7-200 PLC[M].北京:機械工業(yè)出版社,2010:181-207.
[3]楊志剛,錢俊磊.西門子S7-200系列PLC與單片機之間的自由口通信[J].河北理工學院學報,2005,27(4):77-80.
[4]劉濤.S7-200系列PLC與PC間自由口通訊的實現(xiàn)[J].現(xiàn)代電子技術,2004,14(4):5-6.
[5]馬啟青,劉志強,韓建武,等.基于自由口模式實現(xiàn)S7-200系列PLC與PC機串行通信[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-),男,陜西蒲城人,東北石油大學秦皇島分校應用技術學院副教授,從事計算機控制、數(shù)據(jù)通信等研究。
黑龍江省教育科學“十二五”規(guī)劃課題(GZC1213020)。
DOI10.13356/j.cnki.jdnu.2095-0063.2014.03.002