《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 设计应用 > 一种S7-300与S7-200自由口无线通信实现方法
一种S7-300与S7-200自由口无线通信实现方法
王仁和 栾义忠
摘要: 本文讨论了一种S7-300与S7-200无线自由口通信方法,指出了所需硬件,并详细给出了通信程序。
關(guān)鍵詞: PLC|PAC 西门子
Abstract:
Key words :

1        項目簡介

濱州市污水處理廠占地100萬立方米。采用德國BIOLAK污水處理工藝,日處理水規(guī)模為10萬立方米。項目使用四套S7-300和兩套S7-200建成分布式控制系統(tǒng),完成整個污水處理的控制、數(shù)據(jù)采集功能,本文僅敘述了項目的一部分——S7-300S7-200通信內(nèi)容。

S7-200PLC作為小型PLC,以其功能強、性價比高在工控領(lǐng)域中被廣泛應(yīng)用。在S7-200S7-300WINCC通信時,通常需要安裝EM277CP243-1模塊,成本升高,使得S7-200性價比優(yōu)勢大打折扣。自由口通信是S7-200的突出特點之一,本文介紹了一種經(jīng)濟(jì)靈活的通信方法,其可行性、可靠性在實際工程中得到驗證。圖1為濱州污水處理廠監(jiān)控中心。

  圖1 濱州污水處理廠監(jiān)控中心

            1 濱州污水處理廠監(jiān)控中心

 

2        工程應(yīng)用中的硬件及網(wǎng)絡(luò)結(jié)構(gòu)

濱州污水處理廠自動化監(jiān)控系統(tǒng)中,兩刮泥橋上各有一臺S7-200PLC,每臺PLC控制8臺吸泥泵及刮泥橋的正反向運動。S7-200PLC的柜子安裝在刮泥橋上,處于不停地來回運動中,不適合進(jìn)行有線通信,采取了無線數(shù)傳電臺方式。

S7-200CPU上的通信口是基于RS485的,通過一個RS485/232轉(zhuǎn)換器將S7-200連接到電臺;在脫水機(jī)房的S7-300上掛一串口通信模塊CP340,并連接到數(shù)傳電臺,通過編程便可以實現(xiàn)S7-300S7-200間的通信;監(jiān)控室的上位機(jī)以MPI總線方式與S7300通信,便可間接監(jiān)控S7-200。系統(tǒng)網(wǎng)絡(luò)結(jié)構(gòu)如圖2

 圖2 通信結(jié)構(gòu)圖

 2 通信結(jié)構(gòu)圖

3        通信功能的實現(xiàn)

通信程序要實現(xiàn)S7-300向一個S7-200站發(fā)送7個字節(jié)的數(shù)據(jù),然后接收并存儲該S7-200返回的6個字節(jié)數(shù)據(jù)。S7-300發(fā)送的7個字節(jié)中,第1個字節(jié)是地址信息,第2、3、4字節(jié)是吸泥泵及刮泥橋控制數(shù)據(jù)信息,第5、6字節(jié)是1、2字節(jié)和3、4字節(jié)異或值,作為校驗判斷信息,第7位字節(jié)數(shù)據(jù)信息無意義,僅僅是為了觸發(fā)一次S7-200的字符接收中斷程序;S7-200S7-300發(fā)送的6個字節(jié)中,第1個字節(jié)是S7-200的站地址信息,第234字節(jié)是吸泥泵及刮泥橋狀態(tài)數(shù)據(jù)信息,第5、6字節(jié)為校驗信息。

3.1        S7-300端通信程序

在自由口模式下,無論S7-200還是S7-300,通信協(xié)議完全由程序控制。CP340通過調(diào)用FB2 P_RCV來接收數(shù)據(jù),調(diào)用FB3 P_SEND來發(fā)送數(shù)據(jù)。發(fā)送功能塊FB3 P_SEND的參數(shù)REQ上升沿初始化發(fā)送請求,參數(shù)DB_NO指定發(fā)送數(shù)據(jù)塊編號,參數(shù)DBB_NO是發(fā)送數(shù)據(jù)在參數(shù)DB_NO指定數(shù)據(jù)塊中起始字節(jié),LEN指定傳輸數(shù)據(jù)的字節(jié)長度;接收功能塊FB2 P_RCV參數(shù)EN_R允許讀數(shù)據(jù),參數(shù)DB_NO指定接收數(shù)據(jù)塊編號,參數(shù)DBB_NO是接收數(shù)據(jù)在參數(shù)DB_NO指定數(shù)據(jù)塊中起始字節(jié)。

S7-300采用輪循方式與兩S7-200通信,即第一秒內(nèi)向1號站發(fā)送數(shù)據(jù),然后接收1號站返回的數(shù)據(jù)(S7-200在接收到S7-300發(fā)送的數(shù)據(jù)后會立刻向S7-300發(fā)送數(shù)據(jù));第二秒內(nèi)向2號站發(fā)送數(shù)據(jù),然后接收2號站返回的數(shù)據(jù),不停地循環(huán)通信。S7-300通信程序流程如圖3

 圖3 S7-300通信程序流程圖

3 S7-300通信程序流程圖

   S7-300通信程序詳細(xì)介紹

AN   M     30.0

L    S5T#2S

SD   T     1

A    M     30.0

R    T     1

L    T     1

T    MW    40

NOP  0

A    T     1

=    M     30.0

//設(shè)一2秒定時器,定時時間到自動進(jìn)行下一次定時,當(dāng)前值存入MW40

A(

L     MW    40

L     102

>I

)

A(

L     MW40

L     200

<I

)

=     M30.1

// 定時器第一秒鐘內(nèi),即102<MW40<200,M30.11

A(   

  L     MW    40

  L     2

   >I   

   )    

  A(   

     L     MW    40

     L     100

     <I   

     )    

 =   M     30.2

//定時器第二秒鐘內(nèi)M30.21

A    (   

      A     M     30.1

      JNB   _001

      L     0

      T     MW    34

      SET  

      SAVE 

      CLR  

_001: A     BR

      )    

      JNB   _002

      L     0

      T     MW    36

_002: NOP   0

// M30.11時,即定時器第一秒內(nèi),使MW340MW360,作為起始字節(jié)值

A    (   

      A     M     30.2

      JNB   _003

      L     8

      T     MW    34

      SET  

      SAVE 

      CLR  

_003: A     BR

      )    

      JNB   _004

      L     8

      T     MW    36

_004: NOP   0

// M30.21時,即定時器第二秒內(nèi),使MW348、MW368,作為起始字節(jié)值

O     M     30.1

O     M     30.2

=     M     33.0

A     M     33.0

=     L     20.0

  BLD   103

  CALL  "P_SEND" , DB19

  REQ   :=L20.0

  R     :=

  LADDR :=320

  DB_NO :=2

  DBB_NO:=MW34

  LEN   :=7

  DONE  :=M50.1

  ERROR :=M50.2

  STATUS:=MW52

  NOP   0

// 調(diào)用發(fā)送指令,當(dāng)M30.11時(其上升沿初始化發(fā)送請求),即定時器第一秒內(nèi)發(fā)送DB2.DBB0起始的7個字節(jié),第一個字節(jié)為1站地址;當(dāng)M30.21時(其上升沿初始化發(fā)送請求),即定時器第2秒內(nèi)發(fā)送DB2.DBB8起始的7個字節(jié),第一個字節(jié)為2站地址

  A     M     33.0

  =     L     20.0

  BLD   103

  CALL  "P_RCV" , DB20

  EN_R  :=L20.0

  R     :=

  LADDR :=320

  DB_NO :=22

  DBB_NO:=MW36

  NDR   :=M60.1

  ERROR :=M60.2

  LEN   :=MW62

  STATUS:=MW64

  NOP   0

// 調(diào)用接收指令,當(dāng)M30.11時(允許讀數(shù)據(jù)),即定時器第一秒內(nèi)接收1S7-200站回傳的6字節(jié)數(shù)據(jù),存入DB22數(shù)據(jù)塊中,起始字節(jié)為DB22.DBB0;當(dāng)M30.21時,即定時器第2秒內(nèi)接收2S7-200站回傳的6字節(jié)數(shù)據(jù),存入DB22數(shù)據(jù)塊中,起始字節(jié)為DB22.DBB8

3.2  S7-200端通信程序

    S7-200 PLC程序分為主程序、子程序和中斷程序,主程序完成控制和子程序調(diào)用功能,子程序完成通信口初始化功能,中斷程序完成數(shù)據(jù)的接收和發(fā)送功能。發(fā)送數(shù)據(jù)采用發(fā)送指令XMT,接收數(shù)據(jù)采用逐字節(jié)接收方法,通信口接收每個字節(jié)都會暫存到特殊存儲器SMB2中,并且產(chǎn)生中斷,利用中斷程序控制數(shù)據(jù)的接收。由于S7-200CPU的通信是建立在RS-485半雙工通信硬件的基礎(chǔ)上,接收和發(fā)送不能同時進(jìn)行。通信中斷程序要做到:接收指令不結(jié)束,就不能執(zhí)行發(fā)送指令。

反映S7-200CPU工作方式的模式開關(guān)當(dāng)前位置的特殊存儲器位為SM0.7,它控制自由端口模式的進(jìn)入。當(dāng)模式開關(guān)處于TERM位置時,SM0.70;當(dāng)模式開關(guān)處于RUN位置時,SM0.71SMB30是自由口模式控制字節(jié),用來設(shè)定校驗方式、通信協(xié)議、波特率等通信參數(shù)(其各個位含義參閱相關(guān)手冊),中斷事件號8為端口0接收字符中斷,中斷事件號9為端口0發(fā)送完成中斷。

當(dāng)SM0.71時,調(diào)用子程序SBR_0設(shè)置SMB30,允許進(jìn)行自由口通信;SM0.70時,調(diào)用子程序SBR_1重新設(shè)置SMB30,停止自由口通信,恢復(fù)PPI通信,便于用Micro/WIN軟件對CPU運行狀態(tài)進(jìn)行監(jiān)視。S7-200通信程序流程如圖4

 圖4 S7-200通信程序流程圖

 

4 S7-200通信程序流程圖

 

S7-200通信程序詳細(xì)介紹(1號站)

 

主程序MAIN(只給出與通信有關(guān)程序)

LD     SM0.1

MOVB   1, VB1

//設(shè)置站地址

LD     SM0.7

EU

O      SM0.1

CALL   SBR_0

//首次運行或模式開關(guān)從TERM打到ON時定義通信口為自由口

LD     SM0.7

ED

CALL   SBR_1

//模式開關(guān)從ON撥到TERM時定義通信口為PPI從站

  子程序SBR_0

LD     SM0.0

MOVB   16#09, SMB30

ENI

ATCH   INT_11, 8

//定義通信口0為自由口模式,9.6K波特率,無校驗,8位數(shù)據(jù)位,連接接收字符中斷為中斷程序INT_11

  子程序SBR_1

LD     SM0.0

MOVB   16#C0, SMB30

DTCH   8

DTCH   9

//恢復(fù)普通PPI通信設(shè)置

中斷程序INT_11

LD     SM0.0

AB=    SMB2, VB1

MOVW   +5, VW200

MOVD   &VB640, VD688

ATCH   INT_12, 8

//若站地址正確,連接接收字符中斷到中斷程序INT_12,并使VW200=5來計數(shù),在INT_12中連續(xù)接收五個字節(jié);若站地址錯誤,則繼續(xù)由INT_11接收字節(jié)數(shù)據(jù),要在S7-300中程序中將其余六個字節(jié)的高位進(jìn)行設(shè)計,避免出現(xiàn)為內(nèi)容12地址信息的字節(jié),即使傳輸過程中因外界干擾,其余六個字節(jié)出現(xiàn)為12的假地址情況,程序也會在接下來12個接收過程中,因INT_13中斷程序中的校驗指令作用,得到錯誤校驗值,而恢復(fù)到正常接收狀態(tài)。

中斷程序INT_12

LD     SM0.0

MOVB   SMB2, *VD688

INCD   VD688

DECW   VW200

//接收5個字節(jié)

LD     SM1.0

MOVB   1, VB639

MOVW   VW639, VW700

XORW   VW641, VW700

ATCH   INT_13, 8

//通過異或指令進(jìn)行數(shù)據(jù)校驗,連接接收字符中斷到中斷程序INT_13,即由第七個字節(jié)觸發(fā)中斷程序INT_13

中斷程序INT_13

LD     SM0.0

DTCH   8

//中斷分離

LDW=   VW700, VW643

MOVD   VD640, VD400  //校驗正確,將控制信息數(shù)據(jù)存到VB400VB402

MOVB   6, VB600

MOVB   VB1, VB601

BMB    VB100, VB602, 5

ATCH   INT_14, 9

XMT    VB600, 0

//校驗正確,使能發(fā)送,發(fā)送6字節(jié)數(shù)據(jù)VB601VB606,連接發(fā)送指令結(jié)束到中斷程序INT_14

LDW<>  VW700, VW643

ATCH   INT_11, 8

//校驗不正確,連接接收字符中斷到中斷程序INT_11,進(jìn)行新一次接收

中斷程序INT_14

LD     SM0.0

DTCH   9

ATCH   INT_11, 8

//發(fā)送結(jié)束則連接接收字符中斷到中斷程序INT_11,進(jìn)行新一次接收

 

4        電臺選型和故障判斷

數(shù)傳電臺選擇了深圳友訊達(dá)科技發(fā)展公司的FC-201/B,該數(shù)傳電臺以其價格合理、運行穩(wěn)定在國內(nèi)得到廣泛應(yīng)用。通過友訊達(dá)提供的電臺軟件pfc5對電臺進(jìn)行參數(shù)設(shè)置,在S7-200兩個站處將電臺參數(shù)設(shè)置為:發(fā)射頻率453.00,接收頻率465.00,空中速率1200bps,工作模式為透明模式,串口波特率9600bps,串口校驗和設(shè)為無;在S7-300站處將電臺的參數(shù)中發(fā)射頻率設(shè)為465.00,接收頻率設(shè)為453.00,與S7-200站處電臺收發(fā)頻率對應(yīng),其余參數(shù)一致。

FC-201/B數(shù)傳電臺有一個發(fā)送和接收指示燈,當(dāng)發(fā)送數(shù)據(jù)時為紅燈,接收數(shù)據(jù)時為綠燈。根據(jù)此燈可以方便的判斷通訊是否正常,正常情況下,S7-300輪循方式與兩S7-200通信,即第一秒內(nèi)向1號站發(fā)送數(shù)據(jù),然后接收1號站返回的數(shù)據(jù)(S7-200在接收到S7-300發(fā)送的數(shù)據(jù)后會立刻向S7-300發(fā)送數(shù)據(jù));第二秒內(nèi)向2號站發(fā)送數(shù)據(jù),然后接收2號站返回的數(shù)據(jù),不停地循環(huán)通信。S7-300站處電臺通訊指示燈紅閃一下,接著綠閃一下,處在不停的紅-綠-紅-綠循環(huán)狀態(tài)。而S7-200站在接收S7-300發(fā)送的數(shù)據(jù)時,要經(jīng)過地址數(shù)據(jù)字節(jié)判斷,確認(rèn)地址為本站,并且對接收數(shù)據(jù)進(jìn)行校驗,確定接收數(shù)據(jù)無誤才回傳S7-300數(shù)據(jù),但是只要S7-300發(fā)送數(shù)據(jù),S7-200就接收數(shù)據(jù),即使是發(fā)送給另一個S7-200站的數(shù)據(jù)。所以在無外界干擾,數(shù)據(jù)發(fā)送沒有校驗錯誤的情況下,S7-200站處的電臺通訊燈是綠閃兩下,紅閃一下,處在不停的綠-綠-紅循環(huán)狀態(tài),即接收兩次數(shù)據(jù),發(fā)送一次數(shù)據(jù)。如果通訊出現(xiàn)故障,根據(jù)通訊燈的閃爍狀態(tài),便可很容易查出通訊故障所在。

 

5  結(jié)束語

上位機(jī)WINCC通過訪問S7-300的數(shù)據(jù)塊DB2DB22,就可以實現(xiàn)對兩個S7-200PLC站的監(jiān)控。自本系統(tǒng)投入運行以來,運行穩(wěn)定可靠,收到用戶好評。本通信方案經(jīng)濟(jì)、靈活,程序可移植性強,對于類似項目具有很高的借鑒意義。

 

 

參考文獻(xiàn)

[1] 廖常初  PLC編程及應(yīng)用  機(jī)械工業(yè)出版社 2006-9-28

[2] 西門子公司 S7-200可編程控制器手冊  西門子公司出版 2000

 

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。