陳忠華(1938-)男,江蘇蘇州人,教授級高級工程師,1965年畢業(yè)于上海交通大學(xué)電磁理論研究生班。主要從事自動(dòng)化領(lǐng)域的設計、制造工作,是國產(chǎn)第一條4米雙向拉伸薄膜生產(chǎn)線(xiàn)電氣控制系統的總負責人。近年來(lái),還承擔“長(cháng)江三峽大壩泄洪閘門(mén)控制系統”的設計、制造任務(wù)。曾獲多項國家科技進(jìn)步獎。近期著(zhù)作有《可編程序控制器與工業(yè)現場(chǎng)總線(xiàn)》、《可編程序控制器與工業(yè)自動(dòng)化系統》等。
在現代的各種控制項目中都大量使用可變速傳動(dòng)裝置,包括直流數字傳動(dòng)、交流變頻和交流伺服系統。作為政府的長(cháng)遠經(jīng)濟政策,大力提倡低碳經(jīng)濟和使用各種節能設備,對于感應電動(dòng)機一類(lèi)的設備(特別是風(fēng)機、泵類(lèi)驅動(dòng)),采用可變速傳動(dòng)裝置是最為有效的節能措施。對其它的大型成套設備(例如軋鋼設備、造紙設備、高速彩印設備、雙向拉伸薄膜生產(chǎn)線(xiàn)等),不僅使用了大量的可變速傳動(dòng)裝置,還有高同步精度和其它一些技術(shù)要求。
用PLC實(shí)現對大量的可變速傳動(dòng)裝置的控制,采用傳統的方法(模擬量設定和開(kāi)關(guān)量I/O控制),已經(jīng)不能完全滿(mǎn)足技術(shù)要求(例如控制精度不夠、不能保證精確同步、不能采集到大量的現場(chǎng)設備信息、不能實(shí)現遠程的參數設定和修改等),也很不經(jīng)濟,因為要使用大量的I/O模板,要敷設大量的控制電纜,增加了安裝和維護的成本。還增大了產(chǎn)生故障的幾率(由于節點(diǎn)和端子的增加)。解決上述矛盾的比較好的方法是采用PLC和現場(chǎng)總線(xiàn)技術(shù),用通信的方法實(shí)現對大量可變速傳動(dòng)裝置的控制。
本文就上述命題的實(shí)現方法、系統組態(tài)、通信協(xié)議和程序編寫(xiě)進(jìn)行了詳細介紹,還通過(guò)了一個(gè)具體的實(shí)例來(lái)說(shuō)明程序的編寫(xiě)。
1 可變速傳動(dòng)通信中的過(guò)程數據通道和參數數據通道
為實(shí)現對可變速傳動(dòng)裝置的通信需要區分“過(guò)程數據通道”和“參數數據通道”兩類(lèi)不同性質(zhì)的數據通道。
通過(guò)過(guò)程數據通道傳輸過(guò)程數據:
控制器由過(guò)程數據進(jìn)行控制;
過(guò)程數據的傳輸在時(shí)間上有嚴格的要求;
在上位PLC和控制器之間,過(guò)程數據是周期傳輸的(連續交換當前輸入和輸出數據);
上位PLC能直接訪(fǎng)問(wèn)過(guò)程數據。例如,在PLC中直接分配到傳動(dòng)裝置的I/O區域;
過(guò)程數據在控制器內不被保存(掉電時(shí)過(guò)程數據將丟失);
作為過(guò)程數據的例子,例如:設備的控制字和設定值(寫(xiě)過(guò)程數據),狀態(tài)字和實(shí)際值(讀過(guò)程數據)。
通過(guò)參數數據通道傳輸參數數據:
參數數據通道提供用來(lái)訪(fǎng)問(wèn)所有的可變速傳動(dòng)裝置的參數
代碼;
通常參數數據的傳輸在時(shí)間上沒(méi)有十分嚴格的要求;
在通信行規中如果執行的是DP-V0協(xié)議,則參數數據也需要進(jìn)行周期傳送。在DP-V0協(xié)議中參數數據通道被激活后,除了過(guò)程輸入數據和過(guò)程輸出數據外,參數數據另占據4個(gè)字;
在通信行規中如果執行的是DP-V1協(xié)議,參數數據可以實(shí)現非周期的傳送;
作為參數數據的例子,有操作參數(例如倫茨9400伺服控制器中的C00006控制方式的選擇、C00105電動(dòng)機快停的執行時(shí)間、C00070速度控制器的增益、C00072速度控制器的積分時(shí)間常數),診斷信息(C00061控制器功率單元散熱器溫度、C00062控制器內部的溫度)和電動(dòng)機數據(C00011電動(dòng)機的額定速度、C00022電動(dòng)機的最大允許電流、C00063電動(dòng)機當前溫度值)等。
2 實(shí)現任務(wù)的PLC側硬件組態(tài)
筆者用西門(mén)子公司的S7300 PLC實(shí)現對西門(mén)子公司的6RA70直流傳動(dòng)裝置和倫茨公司的9400交流伺服控制裝置進(jìn)行通信,作為例子,介紹PLC側的系統硬件組態(tài),硬件包括PLC的CPU,一塊32點(diǎn)的DI模板和一塊32點(diǎn)的DO模板,6RA70的DP通信模板CBP2和9400控制器的通信模板E94AYCPM。圖1和圖2為應用STEP 7軟件完成的項目硬件組態(tài),項目名稱(chēng)為“可變速傳動(dòng)裝置通信示例”。
圖1 硬件組態(tài)中對6R A7 0 裝置的“ 參數過(guò)程數據通道”和“過(guò)程數據通道”的定義
圖1 是對6R A7 0 裝置的組態(tài), 選擇“ 參數過(guò)程數據目標”PPO1(見(jiàn)圖1右側紅色橢圓標記)。PPO1表示選擇4個(gè)參數數據字(PKW),它們的讀地址為PIW256至PIW263,寫(xiě)地址為PQW256至PQW263,PPO1還定義2個(gè)過(guò)程數據字(PZD),它們的讀地址為PIW264至PIW267,寫(xiě)地址為PQW264至PQW267(見(jiàn)圖1下方的紅色橢圓標記)。
圖2 硬件組態(tài)中對倫茨9400裝置的“ 參數過(guò)程數據通道”和“過(guò)程數據通道”的定義
圖2是對倫茨9400裝置的組態(tài),選擇參數數據和3個(gè)過(guò)程數據 (見(jiàn)圖2右側紅色橢圓標記)。選擇的4個(gè)參數數據字(PAR),它們的讀地址為PIW268至PIW275,寫(xiě)地址為PQW268至PQW275,同時(shí)定義3個(gè)過(guò)程數據字(PZD),它們的讀地址為PIW276至PIW281,寫(xiě)地址為PQW276至PQW281(見(jiàn)圖2下方的紅色橢圓標記)。
4個(gè)參數數據字的詳細定義和報文結構將在第Ⅳ節中介紹。
6RA70的兩個(gè)讀PZD,一個(gè)定義成“狀態(tài)字”(16位),另一個(gè)定義成實(shí)際值(16位整型數),6RA70的兩個(gè)寫(xiě)PZD,一個(gè)定義成“控制字”(16位),另一個(gè)定義成設定值(16位整型數)。
倫茨9400裝置的參數通道也定義為4個(gè)字,過(guò)程數據讀/寫(xiě)的定義,和6RA70一樣,只是實(shí)際值和設定值都是32位的雙整型數。
3 實(shí)現過(guò)程數據PZD的通信
圖3 對倫茨9400伺服裝置實(shí)現“過(guò)程數據”和“參數數據”通信的程序編寫(xiě)
圖3表示對倫茨9400伺服裝置,實(shí)現“過(guò)程數據”和“參數數據”通信程序編寫(xiě)的程序結構。本節先說(shuō)明過(guò)程數據PZD的通信程序編寫(xiě)。
首先要建立一個(gè)過(guò)程數據讀/ 寫(xiě)的緩沖數據塊( 例如,DB20),數據塊中數據地址按控制字(16位)、設定值(32位)、狀態(tài)字(16位)實(shí)際值(32位)的次序排列。
表1列出了DB20的具體內容。
表1也同時(shí)給出了根據“PROFIdrive”(可變速傳動(dòng)技術(shù)行規)標準,對“控制字”和“狀態(tài)字”各個(gè)“位”的定義。
應用STEP 7提供的系統功能SFC 14(DPRD_DAT)完成過(guò)程數據的讀程序,讀到的過(guò)程數據狀態(tài)字和實(shí)際速度存放在數據塊DB20中從地址6.0開(kāi)始的連續6個(gè)字節中,如圖4所示。
圖4 應用系統功能SFC 14讀過(guò)程數據的程序
應用STEP 7提供的系統功能SFC 15(DPWR_DAT)完成過(guò)程數據的寫(xiě)程序,將過(guò)程數據控制字和設定速度從數據塊DB20中從地址0.0開(kāi)始的連續6個(gè)字節寫(xiě)到9400裝置中,如圖5所示。
圖5 應用系統功能SFC 15寫(xiě)過(guò)程數據字的程序
以上是PLC側完成的過(guò)程數據讀/寫(xiě)程序。除此之外,在9400伺服控制器側還要進(jìn)行相應的組態(tài)。這里要用到倫茨公司的L-force Engineer 組態(tài)軟件。圖6是應用該軟件對“可變速傳動(dòng)裝置通信示例”項目中9400裝置組態(tài)的基本畫(huà)面。
圖6 應用L-force Engineer 組態(tài)軟件對傳動(dòng)裝置進(jìn)行的組態(tài)
從圖6中看到,該項目配置了PROFIBUS_V1.10通信模板,放置在裝置的1號擴展槽上(見(jiàn)圖6左側紅色橢圓標記)。在組態(tài)時(shí)選擇該通信模板的站地址為4(在模板正面有硬件地址選擇開(kāi)關(guān),同樣要設置成4),這一站地址的選擇要和PLC硬件組態(tài)時(shí)的從站站地址相一致。
圖7 應用L-force Engineer 軟件組態(tài)PROFIBUS通信的接收過(guò)程數據接收字PDO_RV0
圖7是對PROFIBUS_DP通信模板的過(guò)程數據接收字PDO_RV0進(jìn)行的組態(tài),第1個(gè)過(guò)程數據字定義為L(cháng)PortControl 1,其Offset地址為0,第2和第3個(gè)過(guò)程數據字定義為L(cháng)Port32In 1(雙字),其Offset地址為2。
圖8 應用L-force Engineer 軟件組態(tài)PROFIBUS通信的發(fā)送過(guò)程數據接收字PDO_TV0
圖8是對PROFIBUS_DP通信模板的過(guò)程數據發(fā)送字PDO_TV0進(jìn)行的組態(tài),第1個(gè)過(guò)程數據字定義為L(cháng)PortStatus 1,其Offset地址為0,第2和第3個(gè)過(guò)程數據字定義為L(cháng)Port32Out 1(雙字),其Offset地址為2。以上組態(tài)是在圖7和圖8的右側上方,選擇Process data objects項,并進(jìn)入Edit PDO 對話(huà)框時(shí)進(jìn)行的。這一組態(tài)步驟是在9400傳動(dòng)裝置內部設定,用PROFIBUS_DP (V0標準)進(jìn)行通信時(shí),對接收的第1個(gè)過(guò)程數據字傳送給LPortControl 1端口,對第2、第3個(gè)過(guò)程數據字,傳送給LPort32In 1(雙字)端口,同樣內部設定從LPortStatus 1端口發(fā)送的是第1個(gè)發(fā)送過(guò)程數據字,從LPort32Out 1(雙字)端口發(fā)送的是第2、第3個(gè)發(fā)送過(guò)程數據字。
圖9 應用L-force Engineer 軟件組態(tài)過(guò)程數據字和內部端口的連接
圖9表示組態(tài)后的內部端口選擇(高亮黑字)。
以上只是組態(tài)的第一步,接下來(lái)還要選擇端口和內部功能的連接,需要通過(guò)L-force Engineer軟件的FB Editor功能來(lái)完成。
如圖10所示,應用L-force Engineer軟件選擇參數C03000(X Speed setpoint from)的源為171:Input port 1(32bit),這樣就將過(guò)程數據接收字的第2和第3個(gè)字(LPort32In 1)內部連接為速度設定值,如圖11所示,LPort32In 1最后連接到SpeedRamp(速度斜坡功能塊)的dnSpeedSetpointIn_n作為裝置的速度給定值,由于是32位的速度輸入,當輸入數字值為L(cháng)#1073741824時(shí),代表100%的設定速度輸入(對應C00011參數設定的電動(dòng)機最高轉速,例如3000 rpm)。
圖10 應用L-force Engineer 軟件選擇參數 C03000
(X Speed setpoint from)的源為171:Input port 1(32bit)
圖11 應用L-force Engineer的FB Editor功能進(jìn)行LPort32In 1的連接
圖12 應用L-force Engineer軟件選擇參數C03009子代碼04
(X Activ.fixed 1 with)的源為138:Control word 1 bit08
如圖12所示,應用L-force Engineer軟件選擇參數C03009子代碼04(X Activ.fixed 1 with)的源為138:Control word 1 bit08,這樣就將過(guò)程數據接收字的第1個(gè)字(LPortControl 1)的第08位(bit08),作為開(kāi)關(guān)信號用來(lái)控制轉換速度設定值的源,變成由Jog1的固定速度值給定,如圖13所示,SpeedRamp(速度斜坡功能塊)的bJog1的控制端是由過(guò)程數據控制字的bi t08位(ControlWord.bit08)來(lái)控制的。
圖13 應用L-force Engineer軟件的FB Editor功能進(jìn)行LPortcontrol 1的內部連接
圖14 應用L-force Enginee軟件r的FB Editor功能定義LPortstatus 1 的信號輸出
圖13表示過(guò)程數據控制字的16個(gè)位在本項目中的定義:圖上只定義了4個(gè)位,即Bbit0(主開(kāi)關(guān)接通),Bbit2(QSP快停的第2激活信號,快停的激活控制信號是“或”邏輯關(guān)系),Bbit7(故障復位控制信號),Bbit8(Jog1的固定速度值切換),其它12個(gè)位都沒(méi)有定義,用戶(hù)可以根據控制的需要,用L-force Engineer的FB Editor功能,自行定義。
傳動(dòng)裝置和通信模板(例如,E94AYCPM模板)的操作說(shuō)明書(shū)中都列出了包含該裝置全部參數代碼的代碼表。
參數代碼的變址號:
在DRIVECOM行規的參數數據通道中,控制器的參數不直接用倫茨的代碼號來(lái)尋址,而是通過(guò)代碼的變址號和子變址號來(lái)進(jìn)行尋址,變址號放在參數通道數據字的“字節3”和“字節4”,子變址號放在參數通道數據字的“字節2”。參數代碼號和變址號之間有固定的轉換關(guān)系,兩者之間差一個(gè)偏置量(24575dec 或5FFFhex),表3用舉例來(lái)說(shuō)明這一轉換關(guān)系。
參數代碼值的表示:參數代碼的值寫(xiě)入參數通道數據字的“字節5”至“字節8”(報文的用戶(hù)數據區)。
參數通道報文結構(綜述):DRIVECOM行規的參數通道通信報文,總共由8個(gè)字節組成,定義見(jiàn)表4。報文結構各字節的具體定義如下:
字節1(Byte 1):字節1是服務(wù)字節,定義作業(yè)和對DP參數數據通道的控制響應
字節1中8個(gè)位的具體定義如圖18所示。
字節2(Byte2):子變址號
對于倫茨公司的9400系列伺服控制裝置,有許多參數碼帶有子代碼號,因此需要增加一個(gè)子變址號,對它們進(jìn)行尋址,參數通道的字節2,用來(lái)放置子變址號,沒(méi)有子代碼號的參數,字節2= 0,有子代碼號的參數,字節2 = 子代碼號,字節2可以表示1到256 個(gè)子代碼號。
舉例:參數碼 C00050/子代碼號1,“Speed setpoint1(rpm)”,字節2=1;
圖18 參數通道報文結構字節1(服務(wù)字節)中各個(gè)“位”的定義
參數碼 C00050/子代碼號2,“Speed setpoint 2(rpm)”,字節2=2。
字節3(Byte 3)和字節4(Byte 4):變址號按照以下公式用將倫茨的參數代碼號轉換成2個(gè)字節的變址號:
變址號 = 24575 – 倫茨代碼號
舉例:
參數C00011(電動(dòng)機參考速度,單位r pm)轉換成變址號:
24575 – 11 = 24564 = 5FF4hex
對這一例子的輸入應該是:
字節3:變址號高字節 = 5Fhex
字節4:變址號低字節 = F4hex
字節5(Byte 5)-字節8(Byte 8):參數值(數據)或故障信息(錯誤號)
由字節1(“服務(wù)字節”)第7位的“狀態(tài)”,決定數據場(chǎng)字節5到字節8的含義,見(jiàn)表5。
表4 按照DRIVECOM行規的參數通道通信報文結構
DRIVECOM行規的參數數據通道,通信報文結構
Byte1
字節1
Byte2
字節2
Byte3
字節3
Byte4
字節4
Byte5
字節5
Byte6
字節6
Byte7
字節7
Byte8
字節8
Service
服務(wù)
Subindex
子變址號
IndexHigh byte
變址號高字節
IndexLow byte
變址號低字節
Date 4 /Or Error4
數據4或錯誤號4
Date 3 /Or Error3
數據3或錯誤號3
Date 2 /Or Error2
數據2或錯誤號2
Date 1 /Or Error1
數據1或錯誤號1
表5 由字節1第7位的“狀態(tài)”,決定數據場(chǎng)字節5到字節8的含義
字節1的第7位0 1
字節5到字節8的含義參數值(數據1到4)
訪(fǎng)問(wèn)無(wú)效,表示故障
信息(錯誤1到4)
參數值(數據):
取決于數據格式,參數值的長(cháng)度從一個(gè)字節到4個(gè)字節。數據的序列按照Motorola格式,亦即,第一是高字節/高字,第二是低字節/低字。
錯誤信息:
如果字節1(“服務(wù)字節”)第7位的“狀態(tài)”為1時(shí),表示通信作業(yè)沒(méi)有完成,出現故障,則在字節5~8中表示的是錯誤信息,各錯誤信息碼的含義,見(jiàn)表6。
表6 錯誤信息表,在字節5~8數據場(chǎng)中表示以下錯誤信息
Data 1 Data 2 Data 3 Data 4 錯誤信息含義
6 3
00
00 訪(fǎng)問(wèn)不允許(無(wú)權訪(fǎng)問(wèn))
6 5 11 無(wú)效的子代碼變址號
6 5 12 數據長(cháng)度太長(cháng)
6 5 13 數據長(cháng)度太短
6 7 00 訪(fǎng)問(wèn)目標不存在
6 8 00 數據類(lèi)型不符合
8 0 00 作業(yè)不能執行
8 0 20 作業(yè)當前不能執行
8 0 22 由于控制器的狀態(tài)使無(wú)法執行
8 0 30 只有在控制器處于禁止狀態(tài),才允
許改變參數以及輸出值的范圍
8 0 31 參數值太大
8 0 32 參數值太小
8 0 80 硬件故障
數據內容以16進(jìn)制表示。
讀作業(yè)和寫(xiě)作業(yè)的編程過(guò)程舉例:
舉例1: 讀參數值
讀控制器散熱器的溫度(C00061),(例如:讀到值θ=430 C)。
字節1:作業(yè)
圖19 參數通道報文結構字節1(讀參數)舉例
字節2:子變址號
子變址號 = 0,因為參數碼C00061沒(méi)有子變址號。
字節3/4:變址號(計算)
變址號(讀請求) = 24575-代碼號
變址號 = 24575-61 = 24514 = 5FC2hex (5F hex = 高字節,
C2 hex = 低字節)
字節5~8:數據 (包括在響應報文中)
數據字節1到數據字節4 = 43 [0C] x 1 (1是參數代碼表中查得的內部因子)=43=00 00 00 2Bhex
運行結果見(jiàn)表7。
舉例2:寫(xiě)參數值
設置控制器的快停斜坡時(shí)間(C00105),設定時(shí)間為50 ms(0.05 S)
字節1:作業(yè)
圖20 參數通道報文結構字節1(寫(xiě)參數)舉例
表7 讀參數值報文舉例
字節1 字節2 字節3 字節4 字節5 字節6 字節7 字節8
作業(yè)服務(wù)子變址號
變址號
高字節
變址號
低字節
數據4 數據3 數據2 數據1
從主站到驅動(dòng)器的請求報文
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
等待在響應報文中握手信號位的改變(這里是字節1的第6位:1→0)
從驅動(dòng)器到主站的響應報文(如果沒(méi)有錯誤)
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 寫(xiě)參數值報文舉例
字節1 字節2 字節3 字節4 字節5 字節6 字節7 字節8
作業(yè)服務(wù)子變址號
變址號
高字節
變址號
低字節
數據4 數據3 數據2 數據1
從主站到驅動(dòng)器的請求報文
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
等待在響應報文中握手信號位的改變(這里是字節1的第6位:0→1)
從驅動(dòng)器到主站的響應報文(如果沒(méi)有錯誤)
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
等待握手信號位的改變(這里是字節1的第6位:1→0)
表9 將要讀/寫(xiě)的參數數據列表
地址符號名數據類(lèi)型初始值說(shuō)明
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
字節2:子變址號
子變址號=0,因為參數碼C00105沒(méi)有子變址號。
字節3/4:變址號(計算)
變址號(讀請求)=24575-代碼號
變址號=24575-105=24470=5F96hex(5F hex=高字節,96hex=低字節)
字節5~8:數據 (包括在發(fā)送報文中)
寫(xiě)入的參數值=0.05S x 1000 (1000是參數代碼表中查得的內部因子)=50 =00 00 00 32hex
運行結果見(jiàn)表8。
圖3中FC127功能和DB31數據塊程序的說(shuō)明。
下面將具體的說(shuō)明“可變速傳動(dòng)裝置通信示例”項目中的實(shí)際程序。程序中的Blocks文件夾包含有OB1、FC30、FC127、DB31等程序塊。
數據塊DB31是用數據結構格式,列出將要讀/寫(xiě)參數的列表,見(jiàn)表9。
現在來(lái)具體分析數據塊DB31,它采用數據結構的格式存放數據,該數據結構是按參數通道的8個(gè)字節定義的,它包含將要傳送(讀/寫(xiě))的參數數據。例如,DB31方塊中的telegram_001是一個(gè)數據結構,在DB31中占據DBB 8-DBB 15共8個(gè)字節,該結構的內容是將參數C00011(最高轉速)的值,由PLC傳送給伺服控制器,這一結構包括不同的數據類(lèi)型,DBB 8是服務(wù)字節(數據類(lèi)型為Byte,符號名servicebyte),初始值為B#16#32,表示寫(xiě)參數, DBB 9存放子代碼號(數據類(lèi)型為Byte,符號名subindex,本例中子代碼為0),DBW 10存放代碼號(數據類(lèi)型為INT,符號名index,本例中代碼的變址號為5FF4H ),參數值占用4個(gè)字節,存放在DBD 12雙字中(數據類(lèi)型為DINT,符號名data),在FC30程序塊的Network:3中將它賦值為L(cháng)#3000(3000 rpm)。類(lèi)似的數據結構:telegram_002是讀參數C00022(最大電流值)的數據結構,telegram_003是讀參數C00054(電動(dòng)機電流值)的數據結構,telegram_004是讀參數C00061(散熱器溫度)的數據結構。在表9中telegram_head(報文頭)也是一個(gè)數據結構,從DBB0至DBB7,DBB 0是數據塊報文列表的分隔(數據類(lèi)型為Byte,符號名zerro),初始值為B#16#0, DBB1存放實(shí)際被打開(kāi)報文的信息(數據類(lèi)型為Byte,符號名servicebyte,初始值為B#16#0),DBW 2是指向正被打開(kāi)報文的指針(數據類(lèi)型為INT,符號名telegrampointer,默認的起始值為0),DBD 4存放出現通信錯誤時(shí)的錯誤信息(數據類(lèi)型為DINT,符號名error),錯誤信息定義見(jiàn)表6(錯誤信息表)。
在FC127的程序中會(huì )看到應用指針尋址的方法,順序執行DB31中的telegram_001至telegram_004,在每執行一個(gè)報文結構時(shí)telegram_head中的內容都是不一樣的。
FC127程序的主要功能是完成硬件組態(tài)中有關(guān)參數通道的讀/寫(xiě),需要讀/寫(xiě)的參數以報文結構的形式存放在DB31數據塊中(見(jiàn)上面的說(shuō)明),FC127功能使用指針尋址的方法,順序將DB31中的telegram_001至telegram_004依次讀/寫(xiě)。程序共有15個(gè)Network網(wǎng)絡(luò )段組成,另外在變量登記表中定義了若干形式參數,首先對定義的形式參數作一說(shuō)明:
圖21 FC127功能中變量登記表中的IN、OUT、IN_OUT類(lèi)形式參數
從圖21知,變量登記表中的IN包含5個(gè)形式參數:peripherieadr_1st_byte,定義硬件組態(tài)中參數通道的的起始字節地址,數據類(lèi)型是INT,例如,本例中起始地址是PIW 268/PQW268(見(jiàn)圖2),將來(lái)在調用FC127時(shí)替代該形式參數的實(shí)際參數就應該填上268;
DB_transferlist ,定義保存要讀/寫(xiě)參數數據結構的數據塊號,數據類(lèi)型是Block_DP。如果在同一項目中組態(tài)有多個(gè)倫茨傳動(dòng)裝置的從站,對每一個(gè)從站的參數數據讀/寫(xiě)都要建立獨立的DB數據塊(類(lèi)似DB31),在調用FC127時(shí),替代這一形式參數的實(shí)際參數就應該是對那一個(gè)從站通信的數據塊號。
begin_DB_transferlist,定義“DB_transferlist”數據塊號數據塊的起始字節地址(即數據結構的起始字節地址),數據類(lèi)型為INT。
enable_transfer , 允許參數讀/ 寫(xiě)的控制位, 數據類(lèi)型為BOOL。
Timeout_timer,監控參數讀/寫(xiě)過(guò)程的最大允許時(shí)間的定時(shí)器,如果在允許時(shí)間內FC127沒(méi)有執行完,就會(huì )發(fā)出超時(shí)報警,將參數報文服務(wù)字節的第7位置成1,數據類(lèi)型為T(mén)IMER。在調用FC127時(shí),替代這一形式參數的實(shí)際參數就應該是不同的定時(shí)器號。
從圖21知,變量登記表中對OUT和IN_OUT類(lèi)形式參數沒(méi)有定義。
圖22 FC127功能中變量登記表中定義了TEMP類(lèi)形式參數
從圖22知FC127功能的變量登記表中定義了TEMP類(lèi)形式參數(暫存參數),其中:
Fault_send_receive 是數據結構,包括Ret_Val_receive(類(lèi)型為INT)暫存接收錯誤信號,和Ret_Val_send(類(lèi)型為INT)暫存發(fā)送錯誤信號。
L2_Adr(類(lèi)型為WORD)用來(lái)暫存參數通道的首地址。
Date_receive是一數據結構,包含服務(wù)字節service的8個(gè)位(類(lèi)型為BOOL),子代碼號subindex(類(lèi)型為BYTE),代碼號index(類(lèi)型為INT)和數據data(類(lèi)型為DINT),這一數據結構和DB31中的telegram數據結構有相同的定義,在FC127程序執行讀參數時(shí)將DB31中的報文數據結構telegram暫存到Date_receive數據結構中,在使用指針尋址的情況下,Date_receive數據結構的內容是由指針指向的不同telegram的內容。
Date_send也是一數據結構,包含服務(wù)字節service的8個(gè)位(類(lèi)型為BOOL),子代碼號subindex(類(lèi)型為BYTE),代碼號index(類(lèi)型為INT)和數據data(類(lèi)型為DINT),這一數據結構和DB31中的telegram數據結構也有相同的定義,在FC127程序執行寫(xiě)參數時(shí),將暫存在Date_send數據結構中的內容,復制到DB31中的報文數據結構telegram中,在使用指針尋址的情況下,Date_send數據結構的內容將發(fā)送至由指針指向的不同telegram中。
在TEMP暫存變量中的old_LAR1(類(lèi)型為DWORD)、old_LAR2(類(lèi)型為DWORD)和old_statusword(類(lèi)型為WORD)是在調用FC127時(shí)用來(lái)保存舊的地址寄存器AR1、AR2和狀態(tài)字的內容,因為在執行FC127時(shí)使用了指針尋址方式,AR1、AR2以及狀態(tài)字的內容都會(huì )隨時(shí)改變,在FC127執行結束時(shí)應該恢復舊的地址寄存器AR1、AR2和狀態(tài)字的內容。
對FC127功能的具體說(shuō)明,需要使用較多的篇幅,讀者理解也會(huì )有一定難度,不在本文中敘述了。有興趣的讀者,可以閱讀參考文獻“可編程序控制器與工業(yè)現場(chǎng)總線(xiàn)”及該書(shū)所附光盤(pán)中的程序實(shí)例“DP_94V10”。
圖23是在FC30中對FC127功能的調用和用實(shí)際參數替換FC127中的形式參數。
圖23 在FC30中對FC127功能的調用和用實(shí)際參數替換FC127中的形式參數
圖24是可變速傳動(dòng)裝置通信示例項目的程序構成,在主程序OB1中調用功能程序FC105、FC30和FC107。完成整個(gè)通信程序中過(guò)程數據和參數數據的讀/寫(xiě)。
圖24 可變速傳動(dòng)裝置通信示例項目的程序構成
至此,筆者通過(guò)“可變速傳動(dòng)裝置通信示例”項目,全面闡明了應用PLC和DP現場(chǎng)總線(xiàn)實(shí)現對可變速傳動(dòng)裝置的通信和控制。
文中提供的實(shí)用程序,都經(jīng)過(guò)作者在許多工程項目中的驗證。希望本文對從事該領(lǐng)域的工程技術(shù)人員和讀者能有一定的幫助。
參考文獻:
[1] 陳忠華.可編程序控制器與工業(yè)現場(chǎng)總線(xiàn)[M]. 北京: 機械工業(yè)出版社.2010, 5.
[2] 陳忠華. 可編程序控制器與工業(yè)自動(dò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.
摘自《自動(dòng)化博覽》2010年第八期