• 
    <ul id="auswy"><sup id="auswy"></sup></ul>
  • <ul id="auswy"></ul>
    ABB
    關(guān)注中國自動化產(chǎn)業(yè)發(fā)展的先行者!
    CAIAC 2025
    2025工業(yè)安全大會
    OICT公益講堂
    當前位置:首頁 >> 案例 >> 案例首頁

    案例頻道

    應(yīng)用PLC和DP總線實現(xiàn)對可變速傳動裝置的通信和控制
    • 企業(yè):控制網(wǎng)     領(lǐng)域:PLC /PAC/PCC/RTU     行業(yè):網(wǎng)絡(luò)通訊    
    • 點擊數(shù):3835     發(fā)布時間:2011-03-08 11:00:34
    • 分享到:
    在現(xiàn)代的各種控制項目中都大量使用可變速傳動裝置,包括直流數(shù)字傳動、交流變頻和交流伺服系統(tǒng)。作為政府的長遠經(jīng)濟政策,大力提倡低碳經(jīng)濟和使用各種節(jié)能設(shè)備,對于感應(yīng)電動機一類的設(shè)備(特別是風機、泵類驅(qū)動),采用可變速傳動裝置是最為有效的節(jié)能措施。對其它的大型成套設(shè)備(例如軋鋼設(shè)備、造紙設(shè)備、高速彩印設(shè)備、雙向拉伸薄膜生產(chǎn)線等),不僅使用了大量的可變速傳動裝置,還有高同步精度和其它一些技術(shù)要求。

                     
       
    陳忠華
    (1938-)男,江蘇蘇州人,教授級高級工程師,1965年畢業(yè)于上海交通大學電磁理論研究生班。主要從事自動化領(lǐng)域的設(shè)計、制造工作,是國產(chǎn)第一條4米雙向拉伸薄膜生產(chǎn)線電氣控制系統(tǒng)的總負責人。近年來,還承擔“長江三峽大壩泄洪閘門控制系統(tǒng)”的設(shè)計、制造任務(wù)。曾獲多項國家科技進步獎。近期著作有《可編程序控制器與工業(yè)現(xiàn)場總線》、《可編程序控制器與工業(yè)自動化系統(tǒng)》等。

        在現(xiàn)代的各種控制項目中都大量使用可變速傳動裝置,包括直流數(shù)字傳動、交流變頻和交流伺服系統(tǒng)。作為政府的長遠經(jīng)濟政策,大力提倡低碳經(jīng)濟和使用各種節(jié)能設(shè)備,對于感應(yīng)電動機一類的設(shè)備(特別是風機、泵類驅(qū)動),采用可變速傳動裝置是最為有效的節(jié)能措施。對其它的大型成套設(shè)備(例如軋鋼設(shè)備、造紙設(shè)備、高速彩印設(shè)備、雙向拉伸薄膜生產(chǎn)線等),不僅使用了大量的可變速傳動裝置,還有高同步精度和其它一些技術(shù)要求。

        用PLC實現(xiàn)對大量的可變速傳動裝置的控制,采用傳統(tǒng)的方法(模擬量設(shè)定和開關(guān)量I/O控制),已經(jīng)不能完全滿足技術(shù)要求(例如控制精度不夠、不能保證精確同步、不能采集到大量的現(xiàn)場設(shè)備信息、不能實現(xiàn)遠程的參數(shù)設(shè)定和修改等),也很不經(jīng)濟,因為要使用大量的I/O模板,要敷設(shè)大量的控制電纜,增加了安裝和維護的成本。還增大了產(chǎn)生故障的幾率(由于節(jié)點和端子的增加)。解決上述矛盾的比較好的方法是采用PLC和現(xiàn)場總線技術(shù),用通信的方法實現(xiàn)對大量可變速傳動裝置的控制。

        本文就上述命題的實現(xiàn)方法、系統(tǒng)組態(tài)、通信協(xié)議和程序編寫進行了詳細介紹,還通過了一個具體的實例來說明程序的編寫。

        1 可變速傳動通信中的過程數(shù)據(jù)通道和參數(shù)數(shù)據(jù)通道

        為實現(xiàn)對可變速傳動裝置的通信需要區(qū)分“過程數(shù)據(jù)通道”和“參數(shù)數(shù)據(jù)通道”兩類不同性質(zhì)的數(shù)據(jù)通道。

        通過過程數(shù)據(jù)通道傳輸過程數(shù)據(jù):

        控制器由過程數(shù)據(jù)進行控制;

        過程數(shù)據(jù)的傳輸在時間上有嚴格的要求;

        在上位PLC和控制器之間,過程數(shù)據(jù)是周期傳輸?shù)模ㄟB續(xù)交換當前輸入和輸出數(shù)據(jù));

        上位PLC能直接訪問過程數(shù)據(jù)。例如,在PLC中直接分配到傳動裝置的I/O區(qū)域;

        過程數(shù)據(jù)在控制器內(nèi)不被保存(掉電時過程數(shù)據(jù)將丟失);

        作為過程數(shù)據(jù)的例子,例如:設(shè)備的控制字和設(shè)定值(寫過程數(shù)據(jù)),狀態(tài)字和實際值(讀過程數(shù)據(jù))。

        通過參數(shù)數(shù)據(jù)通道傳輸參數(shù)數(shù)據(jù):

        參數(shù)數(shù)據(jù)通道提供用來訪問所有的可變速傳動裝置的參數(shù)

        代碼;

        通常參數(shù)數(shù)據(jù)的傳輸在時間上沒有十分嚴格的要求;

        在通信行規(guī)中如果執(zhí)行的是DP-V0協(xié)議,則參數(shù)數(shù)據(jù)也需要進行周期傳送。在DP-V0協(xié)議中參數(shù)數(shù)據(jù)通道被激活后,除了過程輸入數(shù)據(jù)和過程輸出數(shù)據(jù)外,參數(shù)數(shù)據(jù)另占據(jù)4個字;

        在通信行規(guī)中如果執(zhí)行的是DP-V1協(xié)議,參數(shù)數(shù)據(jù)可以實現(xiàn)非周期的傳送;

        作為參數(shù)數(shù)據(jù)的例子,有操作參數(shù)(例如倫茨9400伺服控制器中的C00006控制方式的選擇、C00105電動機快停的執(zhí)行時間、C00070速度控制器的增益、C00072速度控制器的積分時間常數(shù)),診斷信息(C00061控制器功率單元散熱器溫度、C00062控制器內(nèi)部的溫度)和電動機數(shù)據(jù)(C00011電動機的額定速度、C00022電動機的最大允許電流、C00063電動機當前溫度值)等。

        2 實現(xiàn)任務(wù)的PLC側(cè)硬件組態(tài)

        筆者用西門子公司的S7300 PLC實現(xiàn)對西門子公司的6RA70直流傳動裝置和倫茨公司的9400交流伺服控制裝置進行通信,作為例子,介紹PLC側(cè)的系統(tǒng)硬件組態(tài),硬件包括PLC的CPU,一塊32點的DI模板和一塊32點的DO模板,6RA70的DP通信模板CBP2和9400控制器的通信模板E94AYCPM。圖1和圖2為應(yīng)用STEP 7軟件完成的項目硬件組態(tài),項目名稱為“可變速傳動裝置通信示例”。
                             
             圖1  硬件組態(tài)中對6R A7 0 裝置的“ 參數(shù)過程數(shù)據(jù)通道”和“過程數(shù)據(jù)通道”的定義
        圖1 是對6R A7 0 裝置的組態(tài), 選擇“ 參數(shù)過程數(shù)據(jù)目標”PPO1(見圖1右側(cè)紅色橢圓標記)。PPO1表示選擇4個參數(shù)數(shù)據(jù)字(PKW),它們的讀地址為PIW256至PIW263,寫地址為PQW256至PQW263,PPO1還定義2個過程數(shù)據(jù)字(PZD),它們的讀地址為PIW264至PIW267,寫地址為PQW264至PQW267(見圖1下方的紅色橢圓標記)。
                 
             圖2  硬件組態(tài)中對倫茨9400裝置的“ 參數(shù)過程數(shù)據(jù)通道”和“過程數(shù)據(jù)通道”的定義
        圖2是對倫茨9400裝置的組態(tài),選擇參數(shù)數(shù)據(jù)和3個過程數(shù)據(jù) (見圖2右側(cè)紅色橢圓標記)。選擇的4個參數(shù)數(shù)據(jù)字(PAR),它們的讀地址為PIW268至PIW275,寫地址為PQW268至PQW275,同時定義3個過程數(shù)據(jù)字(PZD),它們的讀地址為PIW276至PIW281,寫地址為PQW276至PQW281(見圖2下方的紅色橢圓標記)。

        4個參數(shù)數(shù)據(jù)字的詳細定義和報文結(jié)構(gòu)將在第Ⅳ節(jié)中介紹。

        6RA70的兩個讀PZD,一個定義成“狀態(tài)字”(16位),另一個定義成實際值(16位整型數(shù)),6RA70的兩個寫PZD,一個定義成“控制字”(16位),另一個定義成設(shè)定值(16位整型數(shù))。

        倫茨9400裝置的參數(shù)通道也定義為4個字,過程數(shù)據(jù)讀/寫的定義,和6RA70一樣,只是實際值和設(shè)定值都是32位的雙整型數(shù)。

        3 實現(xiàn)過程數(shù)據(jù)PZD的通信
                
               圖3  對倫茨9400伺服裝置實現(xiàn)“過程數(shù)據(jù)”和“參數(shù)數(shù)據(jù)”通信的程序編寫
        圖3表示對倫茨9400伺服裝置,實現(xiàn)“過程數(shù)據(jù)”和“參數(shù)數(shù)據(jù)”通信程序編寫的程序結(jié)構(gòu)。本節(jié)先說明過程數(shù)據(jù)PZD的通信程序編寫。

        首先要建立一個過程數(shù)據(jù)讀/ 寫的緩沖數(shù)據(jù)塊( 例如,DB20),數(shù)據(jù)塊中數(shù)據(jù)地址按控制字(16位)、設(shè)定值(32位)、狀態(tài)字(16位)實際值(32位)的次序排列。

        表1列出了DB20的具體內(nèi)容。
                 
        表1也同時給出了根據(jù)“PROFIdrive”(可變速傳動技術(shù)行規(guī))標準,對“控制字”和“狀態(tài)字”各個“位”的定義。

        應(yīng)用STEP 7提供的系統(tǒng)功能SFC 14(DPRD_DAT)完成過程數(shù)據(jù)的讀程序,讀到的過程數(shù)據(jù)狀態(tài)字和實際速度存放在數(shù)據(jù)塊DB20中從地址6.0開始的連續(xù)6個字節(jié)中,如圖4所示。
                     
                            圖4  應(yīng)用系統(tǒng)功能SFC 14讀過程數(shù)據(jù)的程序
        應(yīng)用STEP 7提供的系統(tǒng)功能SFC 15(DPWR_DAT)完成過程數(shù)據(jù)的寫程序,將過程數(shù)據(jù)控制字和設(shè)定速度從數(shù)據(jù)塊DB20中從地址0.0開始的連續(xù)6個字節(jié)寫到9400裝置中,如圖5所示。
                    
                          圖5      應(yīng)用系統(tǒng)功能SFC 15寫過程數(shù)據(jù)字的程序
        以上是PLC側(cè)完成的過程數(shù)據(jù)讀/寫程序。除此之外,在9400伺服控制器側(cè)還要進行相應(yīng)的組態(tài)。這里要用到倫茨公司的L-force Engineer 組態(tài)軟件。圖6是應(yīng)用該軟件對“可變速傳動裝置通信示例”項目中9400裝置組態(tài)的基本畫面。
                     
                         圖6  應(yīng)用L-force Engineer 組態(tài)軟件對傳動裝置進行的組態(tài)
        從圖6中看到,該項目配置了PROFIBUS_V1.10通信模板,放置在裝置的1號擴展槽上(見圖6左側(cè)紅色橢圓標記)。在組態(tài)時選擇該通信模板的站地址為4(在模板正面有硬件地址選擇開關(guān),同樣要設(shè)置成4),這一站地址的選擇要和PLC硬件組態(tài)時的從站站地址相一致。
                      
                 圖7  應(yīng)用L-force Engineer 軟件組態(tài)PROFIBUS通信的接收過程數(shù)據(jù)接收字PDO_RV0
        圖7是對PROFIBUS_DP通信模板的過程數(shù)據(jù)接收字PDO_RV0進行的組態(tài),第1個過程數(shù)據(jù)字定義為LPortControl 1,其Offset地址為0,第2和第3個過程數(shù)據(jù)字定義為LPort32In 1(雙字),其Offset地址為2。
                    
                 圖8  應(yīng)用L-force Engineer 軟件組態(tài)PROFIBUS通信的發(fā)送過程數(shù)據(jù)接收字PDO_TV0
        圖8是對PROFIBUS_DP通信模板的過程數(shù)據(jù)發(fā)送字PDO_TV0進行的組態(tài),第1個過程數(shù)據(jù)字定義為LPortStatus 1,其Offset地址為0,第2和第3個過程數(shù)據(jù)字定義為LPort32Out 1(雙字),其Offset地址為2。以上組態(tài)是在圖7和圖8的右側(cè)上方,選擇Process data objects項,并進入Edit PDO 對話框時進行的。這一組態(tài)步驟是在9400傳動裝置內(nèi)部設(shè)定,用PROFIBUS_DP (V0標準)進行通信時,對接收的第1個過程數(shù)據(jù)字傳送給LPortControl 1端口,對第2、第3個過程數(shù)據(jù)字,傳送給LPort32In 1(雙字)端口,同樣內(nèi)部設(shè)定從LPortStatus 1端口發(fā)送的是第1個發(fā)送過程數(shù)據(jù)字,從LPort32Out 1(雙字)端口發(fā)送的是第2、第3個發(fā)送過程數(shù)據(jù)字。
                 
                   圖9  應(yīng)用L-force Engineer 軟件組態(tài)過程數(shù)據(jù)字和內(nèi)部端口的連接
        圖9表示組態(tài)后的內(nèi)部端口選擇(高亮黑字)。

        以上只是組態(tài)的第一步,接下來還要選擇端口和內(nèi)部功能的連接,需要通過L-force Engineer軟件的FB Editor功能來完成。

        如圖10所示,應(yīng)用L-force Engineer軟件選擇參數(shù)C03000(X Speed setpoint from)的源為171:Input port 1(32bit),這樣就將過程數(shù)據(jù)接收字的第2和第3個字(LPort32In 1)內(nèi)部連接為速度設(shè)定值,如圖11所示,LPort32In 1最后連接到SpeedRamp(速度斜坡功能塊)的dnSpeedSetpointIn_n作為裝置的速度給定值,由于是32位的速度輸入,當輸入數(shù)字值為L#1073741824時,代表100%的設(shè)定速度輸入(對應(yīng)C00011參數(shù)設(shè)定的電動機最高轉(zhuǎn)速,例如3000 rpm)。
                   
                    圖10  應(yīng)用L-force Engineer 軟件選擇參數(shù) C03000
                   (X Speed setpoint from)的源為171:Input port 1(32bit)   
                   
                   圖11  應(yīng)用L-force Engineer的FB Editor功能進行LPort32In 1的連接
                    
                          圖12  應(yīng)用L-force Engineer軟件選擇參數(shù)C03009子代碼04
                         (X Activ.fixed 1 with)的源為138:Control word 1 bit08
        如圖12所示,應(yīng)用L-force Engineer軟件選擇參數(shù)C03009子代碼04(X Activ.fixed 1 with)的源為138:Control word 1 bit08,這樣就將過程數(shù)據(jù)接收字的第1個字(LPortControl 1)的第08位(bit08),作為開關(guān)信號用來控制轉(zhuǎn)換速度設(shè)定值的源,變成由Jog1的固定速度值給定,如圖13所示,SpeedRamp(速度斜坡功能塊)的bJog1的控制端是由過程數(shù)據(jù)控制字的bi t08位(ControlWord.bit08)來控制的。
                      
                     圖13   應(yīng)用L-force Engineer軟件的FB Editor功能進行LPortcontrol 1的內(nèi)部連接
                     
                     圖14   應(yīng)用L-force Enginee軟件r的FB Editor功能定義LPortstatus 1 的信號輸出
        圖13表示過程數(shù)據(jù)控制字的16個位在本項目中的定義:圖上只定義了4個位,即Bbit0(主開關(guān)接通),Bbit2(QSP快停的第2激活信號,快停的激活控制信號是“或”邏輯關(guān)系),Bbit7(故障復(fù)位控制信號),Bbit8(Jog1的固定速度值切換),其它12個位都沒有定義,用戶可以根據(jù)控制的需要,用L-force Engineer的FB Editor功能,自行定義。
                   
        傳動裝置和通信模板(例如,E94AYCPM模板)的操作說明書中都列出了包含該裝置全部參數(shù)代碼的代碼表。
     
        參數(shù)代碼的變址號:

        在DRIVECOM行規(guī)的參數(shù)數(shù)據(jù)通道中,控制器的參數(shù)不直接用倫茨的代碼號來尋址,而是通過代碼的變址號和子變址號來進行尋址,變址號放在參數(shù)通道數(shù)據(jù)字的“字節(jié)3”和“字節(jié)4”,子變址號放在參數(shù)通道數(shù)據(jù)字的“字節(jié)2”。參數(shù)代碼號和變址號之間有固定的轉(zhuǎn)換關(guān)系,兩者之間差一個偏置量(24575dec 或5FFFhex),表3用舉例來說明這一轉(zhuǎn)換關(guān)系。

                   
        參數(shù)代碼值的表示:參數(shù)代碼的值寫入?yún)?shù)通道數(shù)據(jù)字的“字節(jié)5”至“字節(jié)8”(報文的用戶數(shù)據(jù)區(qū))。

        參數(shù)通道報文結(jié)構(gòu)(綜述):DRIVECOM行規(guī)的參數(shù)通道通信報文,總共由8個字節(jié)組成,定義見表4。報文結(jié)構(gòu)各字節(jié)的具體定義如下:

        字節(jié)1(Byte 1):字節(jié)1是服務(wù)字節(jié),定義作業(yè)和對DP參數(shù)數(shù)據(jù)通道的控制響應(yīng)
                 
        字節(jié)1中8個位的具體定義如圖18所示。

        字節(jié)2(Byte2):子變址號
                
        對于倫茨公司的9400系列伺服控制裝置,有許多參數(shù)碼帶有子代碼號,因此需要增加一個子變址號,對它們進行尋址,參數(shù)通道的字節(jié)2,用來放置子變址號,沒有子代碼號的參數(shù),字節(jié)2= 0,有子代碼號的參數(shù),字節(jié)2 = 子代碼號,字節(jié)2可以表示1到256 個子代碼號。

        舉例:參數(shù)碼 C00050/子代碼號1,“Speed setpoint1(rpm)”,字節(jié)2=1;
               
                圖18  參數(shù)通道報文結(jié)構(gòu)字節(jié)1(服務(wù)字節(jié))中各個“位”的定義
        參數(shù)碼 C00050/子代碼號2,“Speed setpoint 2(rpm)”,字節(jié)2=2。

        字節(jié)3(Byte 3)和字節(jié)4(Byte 4):變址號按照以下公式用將倫茨的參數(shù)代碼號轉(zhuǎn)換成2個字節(jié)的變址號:
                  
        變址號 = 24575 – 倫茨代碼號

        舉例:

        參數(shù)C00011(電動機參考速度,單位r pm)轉(zhuǎn)換成變址號:

        24575 – 11 = 24564 = 5FF4hex

        對這一例子的輸入應(yīng)該是:

        字節(jié)3:變址號高字節(jié) = 5Fhex

        字節(jié)4:變址號低字節(jié) = F4hex

        字節(jié)5(Byte 5)-字節(jié)8(Byte 8):參數(shù)值(數(shù)據(jù))或故障信息(錯誤號)
                 
        由字節(jié)1(“服務(wù)字節(jié)”)第7位的“狀態(tài)”,決定數(shù)據(jù)場字節(jié)5到字節(jié)8的含義,見表5。

    表4 按照DRIVECOM行規(guī)的參數(shù)通道通信報文結(jié)構(gòu)

    DRIVECOM行規(guī)的參數(shù)數(shù)據(jù)通道,通信報文結(jié)構(gòu)
    Byte1
    字節(jié)1
    Byte2
    字節(jié)2
    Byte3
    字節(jié)3
    Byte4
    字節(jié)4
    Byte5
    字節(jié)5
    Byte6
    字節(jié)6
    Byte7
    字節(jié)7
    Byte8
    字節(jié)8
    Service
    服務(wù)
    Subindex
    子變址號
    IndexHigh byte
    變址號高字節(jié)
    IndexLow byte
    變址號低字節(jié)
    Date 4 /Or Error4
    數(shù)據(jù)4或錯誤號4
    Date 3 /Or Error3
    數(shù)據(jù)3或錯誤號3
    Date 2 /Or Error2
    數(shù)據(jù)2或錯誤號2
    Date 1 /Or Error1
    數(shù)據(jù)1或錯誤號1

    表5 由字節(jié)1第7位的“狀態(tài)”,決定數(shù)據(jù)場字節(jié)5到字節(jié)8的含義
    字節(jié)1的第7位0 1
    字節(jié)5到字節(jié)8的含義參數(shù)值(數(shù)據(jù)1到4)
    訪問無效,表示故障
    信息(錯誤1到4)

          參數(shù)值(數(shù)據(jù)):
          取決于數(shù)據(jù)格式,參數(shù)值的長度從一個字節(jié)到4個字節(jié)。數(shù)據(jù)的序列按照Motorola格式,亦即,第一是高字節(jié)/高字,第二是低字節(jié)/低字。
          錯誤信息:
          如果字節(jié)1(“服務(wù)字節(jié)”)第7位的“狀態(tài)”為1時,表示通信作業(yè)沒有完成,出現(xiàn)故障,則在字節(jié)5~8中表示的是錯誤信息,各錯誤信息碼的含義,見表6。
    表6 錯誤信息表,在字節(jié)5~8數(shù)據(jù)場中表示以下錯誤信息
    Data 1 Data 2 Data 3 Data 4 錯誤信息含義
    6 3
    00
    00 訪問不允許(無權(quán)訪問)
    6 5 11 無效的子代碼變址號
    6 5 12 數(shù)據(jù)長度太長
    6 5 13 數(shù)據(jù)長度太短
    6 7 00 訪問目標不存在
    6 8 00 數(shù)據(jù)類型不符合
    8 0 00 作業(yè)不能執(zhí)行
    8 0 20 作業(yè)當前不能執(zhí)行
    8 0 22 由于控制器的狀態(tài)使無法執(zhí)行
    8 0 30 只有在控制器處于禁止狀態(tài),才允
    許改變參數(shù)以及輸出值的范圍
    8 0 31 參數(shù)值太大
    8 0 32 參數(shù)值太小
    8 0 80 硬件故障
    數(shù)據(jù)內(nèi)容以16進制表示。
    讀作業(yè)和寫作業(yè)的編程過程舉例:

    舉例1: 讀參數(shù)值

          讀控制器散熱器的溫度(C00061),(例如:讀到值θ=430 C)。
          字節(jié)1:作業(yè)

               圖19 參數(shù)通道報文結(jié)構(gòu)字節(jié)1(讀參數(shù))舉例
           字節(jié)2:子變址號
          子變址號 = 0,因為參數(shù)碼C00061沒有子變址號。
          字節(jié)3/4:變址號(計算)
          變址號(讀請求) = 24575-代碼號
          變址號 = 24575-61 = 24514 = 5FC2hex (5F hex = 高字節(jié),
           C2 hex = 低字節(jié))
           字節(jié)5~8:數(shù)據(jù) (包括在響應(yīng)報文中)
          數(shù)據(jù)字節(jié)1到數(shù)據(jù)字節(jié)4 = 43 [0C] x 1 (1是參數(shù)代碼表中查得的內(nèi)部因子)=43=00 00 00 2Bhex
         運行結(jié)果見表7。
          舉例2:寫參數(shù)值
          設(shè)置控制器的快停斜坡時間(C00105),設(shè)定時間為50 ms(0.05 S)
          字節(jié)1:作業(yè)
            
                            圖20 參數(shù)通道報文結(jié)構(gòu)字節(jié)1(寫參數(shù))舉例

    表7 讀參數(shù)值報文舉例

    字節(jié)1 字節(jié)2 字節(jié)3 字節(jié)4 字節(jié)5 字節(jié)6 字節(jié)7 字節(jié)8
    作業(yè)服務(wù)子變址號
    變址號
    高字節(jié)
    變址號
    低字節(jié)
    數(shù)據(jù)4 數(shù)據(jù)3 數(shù)據(jù)2 數(shù)據(jù)1
    從主站到驅(qū)動器的請求報文
    HEX 01 00 5F C2 00 00 00 00
    BIN 0000
    0001
    0000
    0000
    0101
    1111
    1100
    0010
    0000
    0000
    0000
    0000
    0000
    0000
    0000
    0000
    等待在響應(yīng)報文中握手信號位的改變(這里是字節(jié)1的第6位:1→0)
    從驅(qū)動器到主站的響應(yīng)報文(如果沒有錯誤)
    HEX 30 00 5F C2 00 00 00 2B
    BIN 0011
    0000
    0000
    0000
    0101
    1111
    1100
    0010
    0000
    0000
    0000
    0000
    0000
    0000
    0010
    1011

    表8 寫參數(shù)值報文舉例

    字節(jié)1 字節(jié)2 字節(jié)3 字節(jié)4 字節(jié)5 字節(jié)6 字節(jié)7 字節(jié)8
    作業(yè)服務(wù)子變址號
    變址號
    高字節(jié)
    變址號
    低字節(jié)
    數(shù)據(jù)4 數(shù)據(jù)3 數(shù)據(jù)2 數(shù)據(jù)1
    從主站到驅(qū)動器的請求報文
    HEX 72 00 5F 96 00 00 00 32
    BIN 0111
    0010
    0000
    0000
    0101
    1111
    1001
    0110
    0000
    0000
    0000
    0000
    0000
    0000
    0011
    0010
    等待在響應(yīng)報文中握手信號位的改變(這里是字節(jié)1的第6位:0→1)
    從驅(qū)動器到主站的響應(yīng)報文(如果沒有錯誤)
    HEX 40 00 5F 96 00 00 00 32
    BIN 0100
    0000
    0000
    0000
    0101
    1111
    1001
    0110
    0000
    0000
    0000
    0000
    0000
    0000
    0011
    0010
    等待握手信號位的改變(這里是字節(jié)1的第6位:1→0)

    表9 將要讀/寫的參數(shù)數(shù)據(jù)列表
    地址符號名數(shù)據(jù)類型初始值說明
    Struct
    +0.0 telegram_head STRUCT telegram head: !! not overwrite
    +0.0 zerro BYTE B#16#0 breakup between lists of telegrams in one DB (value = 0)
    +1.0 servicebyte BYTE B#16#0 stored infos by the actual opened telegrams
    +2.0 telegrampointer INT 0 pointer to the actual working telegram (0 := default starting value)
    +4.0 error DWORD DW#16#0 request error, infos at Lenze Profibus manuel
    +8.0 END_STRUCT
    +8.0 telegram_001 STRUCT ##### C00011 -> Servodrive
    +0.0 servicebyte BYTE B#16#32 Servicebyte -> Lenze
    +1.0 subindex BYTE B#16#0 Subindex (Subcode)
    +2.0 index INT 24564 Index = 24575 - Code-Nr.
    +4.0 data DINT L#0 parameter value ( observe format and decimal place)
    +8.0 END_STRUCT
    +16.0 telegram_002 STRUCT ##### C00022 <- Servodrive
    +0.0 servicebyte BYTE B#16#31 Servicebyte -> Lenze
    +1.0 subindex BYTE B#16#0 Subindex (Subcode)
    +2.0 index INT 24553 Index = 24575 - Code-Nr.
    +4.0 data DINT L#0 parameter value ( observe format and decimal place)
    +8.0 END_STRUCT
    +24.0 telegram_003 STRUCT ##### C00054 <- Servodrive
    +0.0 servicebyte BYTE B#16#31 Servicebyte -> Lenze
    +1.0 subindex BYTE B#16#0 Subindex (Subcode)
    +2.0 index INT 24521 Index = 24575 - Code-Nr.
    +4.0 data DINT L#0 parameter value ( observe format and decimal place)
    +8.0 END_STRUCT
    +32.0 telegram_004 STRUCT ##### C00061 <- Servodrive
    +0.0 servicebyte BYTE B#16#31 Servicebyte -> Lenze
    +1.0 subindex BYTE B#16#0 Subindex (Subcode)
    +2.0 index INT 24514 Index = 24575 - Code-Nr. C 013
    +4.0 data DINT L#0 parameter value ( observe format and decimal place)
    +8.0 END_STRUCT
    =40.0 END_STRUCT

        字節(jié)2:子變址號

        子變址號=0,因為參數(shù)碼C00105沒有子變址號。

        字節(jié)3/4:變址號(計算)

        變址號(讀請求)=24575-代碼號

        變址號=24575-105=24470=5F96hex(5F hex=高字節(jié),96hex=低字節(jié))

        字節(jié)5~8:數(shù)據(jù) (包括在發(fā)送報文中)

        寫入的參數(shù)值=0.05S x 1000 (1000是參數(shù)代碼表中查得的內(nèi)部因子)=50 =00 00 00 32hex

        運行結(jié)果見表8。

        圖3中FC127功能和DB31數(shù)據(jù)塊程序的說明。

        下面將具體的說明“可變速傳動裝置通信示例”項目中的實際程序。程序中的Blocks文件夾包含有OB1、FC30、FC127、DB31等程序塊。

        數(shù)據(jù)塊DB31是用數(shù)據(jù)結(jié)構(gòu)格式,列出將要讀/寫參數(shù)的列表,見表9。

        現(xiàn)在來具體分析數(shù)據(jù)塊DB31,它采用數(shù)據(jù)結(jié)構(gòu)的格式存放數(shù)據(jù),該數(shù)據(jù)結(jié)構(gòu)是按參數(shù)通道的8個字節(jié)定義的,它包含將要傳送(讀/寫)的參數(shù)數(shù)據(jù)。例如,DB31方塊中的telegram_001是一個數(shù)據(jù)結(jié)構(gòu),在DB31中占據(jù)DBB 8-DBB 15共8個字節(jié),該結(jié)構(gòu)的內(nèi)容是將參數(shù)C00011(最高轉(zhuǎn)速)的值,由PLC傳送給伺服控制器,這一結(jié)構(gòu)包括不同的數(shù)據(jù)類型,DBB 8是服務(wù)字節(jié)(數(shù)據(jù)類型為Byte,符號名servicebyte),初始值為B#16#32,表示寫參數(shù), DBB 9存放子代碼號(數(shù)據(jù)類型為Byte,符號名subindex,本例中子代碼為0),DBW 10存放代碼號(數(shù)據(jù)類型為INT,符號名index,本例中代碼的變址號為5FF4H ),參數(shù)值占用4個字節(jié),存放在DBD 12雙字中(數(shù)據(jù)類型為DINT,符號名data),在FC30程序塊的Network:3中將它賦值為L#3000(3000 rpm)。類似的數(shù)據(jù)結(jié)構(gòu):telegram_002是讀參數(shù)C00022(最大電流值)的數(shù)據(jù)結(jié)構(gòu),telegram_003是讀參數(shù)C00054(電動機電流值)的數(shù)據(jù)結(jié)構(gòu),telegram_004是讀參數(shù)C00061(散熱器溫度)的數(shù)據(jù)結(jié)構(gòu)。在表9中telegram_head(報文頭)也是一個數(shù)據(jù)結(jié)構(gòu),從DBB0至DBB7,DBB 0是數(shù)據(jù)塊報文列表的分隔(數(shù)據(jù)類型為Byte,符號名zerro),初始值為B#16#0, DBB1存放實際被打開報文的信息(數(shù)據(jù)類型為Byte,符號名servicebyte,初始值為B#16#0),DBW 2是指向正被打開報文的指針(數(shù)據(jù)類型為INT,符號名telegrampointer,默認的起始值為0),DBD 4存放出現(xiàn)通信錯誤時的錯誤信息(數(shù)據(jù)類型為DINT,符號名error),錯誤信息定義見表6(錯誤信息表)。

        在FC127的程序中會看到應(yīng)用指針尋址的方法,順序執(zhí)行DB31中的telegram_001至telegram_004,在每執(zhí)行一個報文結(jié)構(gòu)時telegram_head中的內(nèi)容都是不一樣的。

        FC127程序的主要功能是完成硬件組態(tài)中有關(guān)參數(shù)通道的讀/寫,需要讀/寫的參數(shù)以報文結(jié)構(gòu)的形式存放在DB31數(shù)據(jù)塊中(見上面的說明),F(xiàn)C127功能使用指針尋址的方法,順序?qū)B31中的telegram_001至telegram_004依次讀/寫。程序共有15個Network網(wǎng)絡(luò)段組成,另外在變量登記表中定義了若干形式參數(shù),首先對定義的形式參數(shù)作一說明:
                    
              
                      圖21 FC127功能中變量登記表中的IN、OUT、IN_OUT類形式參數(shù)
        從圖21知,變量登記表中的IN包含5個形式參數(shù):peripherieadr_1st_byte,定義硬件組態(tài)中參數(shù)通道的的起始字節(jié)地址,數(shù)據(jù)類型是INT,例如,本例中起始地址是PIW 268/PQW268(見圖2),將來在調(diào)用FC127時替代該形式參數(shù)的實際參數(shù)就應(yīng)該填上268;

        DB_transferlist ,定義保存要讀/寫參數(shù)數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)塊號,數(shù)據(jù)類型是Block_DP。如果在同一項目中組態(tài)有多個倫茨傳動裝置的從站,對每一個從站的參數(shù)數(shù)據(jù)讀/寫都要建立獨立的DB數(shù)據(jù)塊(類似DB31),在調(diào)用FC127時,替代這一形式參數(shù)的實際參數(shù)就應(yīng)該是對那一個從站通信的數(shù)據(jù)塊號。

        begin_DB_transferlist,定義“DB_transferlist”數(shù)據(jù)塊號數(shù)據(jù)塊的起始字節(jié)地址(即數(shù)據(jù)結(jié)構(gòu)的起始字節(jié)地址),數(shù)據(jù)類型為INT。

        enable_transfer , 允許參數(shù)讀/ 寫的控制位, 數(shù)據(jù)類型為BOOL。

        Timeout_timer,監(jiān)控參數(shù)讀/寫過程的最大允許時間的定時器,如果在允許時間內(nèi)FC127沒有執(zhí)行完,就會發(fā)出超時報警,將參數(shù)報文服務(wù)字節(jié)的第7位置成1,數(shù)據(jù)類型為TIMER。在調(diào)用FC127時,替代這一形式參數(shù)的實際參數(shù)就應(yīng)該是不同的定時器號。

        從圖21知,變量登記表中對OUT和IN_OUT類形式參數(shù)沒有定義。
                     
                    圖22  FC127功能中變量登記表中定義了TEMP類形式參數(shù)
        從圖22知FC127功能的變量登記表中定義了TEMP類形式參數(shù)(暫存參數(shù)),其中:

        Fault_send_receive 是數(shù)據(jù)結(jié)構(gòu),包括Ret_Val_receive(類型為INT)暫存接收錯誤信號,和Ret_Val_send(類型為INT)暫存發(fā)送錯誤信號。

        L2_Adr(類型為WORD)用來暫存參數(shù)通道的首地址。

        Date_receive是一數(shù)據(jù)結(jié)構(gòu),包含服務(wù)字節(jié)service的8個位(類型為BOOL),子代碼號subindex(類型為BYTE),代碼號index(類型為INT)和數(shù)據(jù)data(類型為DINT),這一數(shù)據(jù)結(jié)構(gòu)和DB31中的telegram數(shù)據(jù)結(jié)構(gòu)有相同的定義,在FC127程序執(zhí)行讀參數(shù)時將DB31中的報文數(shù)據(jù)結(jié)構(gòu)telegram暫存到Date_receive數(shù)據(jù)結(jié)構(gòu)中,在使用指針尋址的情況下,Date_receive數(shù)據(jù)結(jié)構(gòu)的內(nèi)容是由指針指向的不同telegram的內(nèi)容。

        Date_send也是一數(shù)據(jù)結(jié)構(gòu),包含服務(wù)字節(jié)service的8個位(類型為BOOL),子代碼號subindex(類型為BYTE),代碼號index(類型為INT)和數(shù)據(jù)data(類型為DINT),這一數(shù)據(jù)結(jié)構(gòu)和DB31中的telegram數(shù)據(jù)結(jié)構(gòu)也有相同的定義,在FC127程序執(zhí)行寫參數(shù)時,將暫存在Date_send數(shù)據(jù)結(jié)構(gòu)中的內(nèi)容,復(fù)制到DB31中的報文數(shù)據(jù)結(jié)構(gòu)telegram中,在使用指針尋址的情況下,Date_send數(shù)據(jù)結(jié)構(gòu)的內(nèi)容將發(fā)送至由指針指向的不同telegram中。

        在TEMP暫存變量中的old_LAR1(類型為DWORD)、old_LAR2(類型為DWORD)和old_statusword(類型為WORD)是在調(diào)用FC127時用來保存舊的地址寄存器AR1、AR2和狀態(tài)字的內(nèi)容,因為在執(zhí)行FC127時使用了指針尋址方式,AR1、AR2以及狀態(tài)字的內(nèi)容都會隨時改變,在FC127執(zhí)行結(jié)束時應(yīng)該恢復(fù)舊的地址寄存器AR1、AR2和狀態(tài)字的內(nèi)容。

        對FC127功能的具體說明,需要使用較多的篇幅,讀者理解也會有一定難度,不在本文中敘述了。有興趣的讀者,可以閱讀參考文獻“可編程序控制器與工業(yè)現(xiàn)場總線”及該書所附光盤中的程序?qū)嵗?ldquo;DP_94V10”。

        圖23是在FC30中對FC127功能的調(diào)用和用實際參數(shù)替換FC127中的形式參數(shù)。
                           
                   圖23  在FC30中對FC127功能的調(diào)用和用實際參數(shù)替換FC127中的形式參數(shù)
        圖24是可變速傳動裝置通信示例項目的程序構(gòu)成,在主程序OB1中調(diào)用功能程序FC105、FC30和FC107。完成整個通信程序中過程數(shù)據(jù)和參數(shù)數(shù)據(jù)的讀/寫。
                    
                           圖24  可變速傳動裝置通信示例項目的程序構(gòu)成
        至此,筆者通過“可變速傳動裝置通信示例”項目,全面闡明了應(yīng)用PLC和DP現(xiàn)場總線實現(xiàn)對可變速傳動裝置的通信和控制。

        文中提供的實用程序,都經(jīng)過作者在許多工程項目中的驗證。希望本文對從事該領(lǐng)域的工程技術(shù)人員和讀者能有一定的幫助。

        參考文獻:

        [1] 陳忠華.可編程序控制器與工業(yè)現(xiàn)場總線[M]. 北京: 機械工業(yè)出版社.2010, 5.

        [2] 陳忠華. 可編程序控制器與工業(yè)自動化系統(tǒng)[M]. 北京: 機械工業(yè)出版社.2006, 1.

        [3] KHB_PROFIBUS_V3.0_EN. 倫茨公司通信手冊. 2007.

        [4] PROFIBUS & PROFINET Technical Profile (PROFIdrive Part 1: Profile specifications)April, 2008.

        [5] PROFIBUS & PROFINET Technical Profile (PROFIdrive Part 2: Mapping of Profile to Network Technologies)April, 2008. 

        摘自《自動化博覽》2010年第八期 

    熱點新聞

    推薦產(chǎn)品

    x
    • 在線反饋
    1.我有以下需求:



    2.詳細的需求:
    姓名:
    單位:
    電話:
    郵件: