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