西門子6RA8081-6DV62-0AA0維修報F60004代碼
西門子S7-300/400在OB1中調(diào)用多重背景
給OB1編程之前,打開符號表,輸入FB 10和DB 10的符號名,保存后退出。“發(fā)動機(jī)控制”項(xiàng)目中OB1對FB1的兩次調(diào)用,被圖6-18中OB1對符號名為“發(fā)動機(jī)”的FB I0的調(diào)用代替,調(diào)用時還了符號名為“多重背景數(shù)據(jù)塊”的背景數(shù)據(jù)塊DB 10(見圖6-19)。
FB 10的輸出信號“PE_DE_OverSpeed”送給符號名為“兩臺發(fā)動機(jī)超速”的共享數(shù)據(jù)Q5.1。調(diào)用FC 1的汽油機(jī)的風(fēng)扇控制程序與圖6-8中的相同。
圖6-18 OB1中調(diào)用多重背景功能塊FB 10
FB 10的背景數(shù)據(jù)塊DB 10見圖6-19,多重背景的名稱“Petrol_Engine”和“Diese_Engine”加在FB 1的局部變量之前,例如“Petrol_Engine. Engine_On”??梢孕薷牟裼蜋C(jī)的預(yù)置轉(zhuǎn)速“Diesel_Engine. Preset_Speed”的實(shí)際值,修改后需要下載到PLC。

生成多重背景功能塊FB 10時,應(yīng)激活功能塊屬性對話框的“常規(guī)-第1部分”選項(xiàng)卡中的多選框“多實(shí)例能力”(即多重背景功能)。
生成FB 10時,應(yīng)首先生成FB 1。為調(diào)用FB 1,在FB 10的變量聲明表中(見圖6-16),聲明了名為“Petrol_Engine”(汽油發(fā)動機(jī))和“Diesel_Engine”(柴油發(fā)動機(jī))的靜態(tài)變量( STAT),其數(shù)據(jù)類型為FB 1。變量聲明表的文件夾“Petrol_Engine”和“Diesel_Engine”內(nèi)的6個變量來自FB 1的變量聲明表,不是用戶輸入的。生成FB 10后,“Petrol_Engine”和“Diesel_Engine”將出現(xiàn)在程序編輯器左邊目錄窗口的“多重實(shí)例”文件夾內(nèi)(見圖6-16)。將它們“拖放”到FB 10的程序區(qū)中(見圖6-17),然后它們的輸入、輸出參數(shù)。
有時需要多次調(diào)用同一個功能塊,每次調(diào)用都需要生成一個背景數(shù)據(jù)塊,但是這些背景數(shù)據(jù)塊中的變量又很少,這樣在項(xiàng)目中就出現(xiàn)了大量的背景數(shù)據(jù)塊“碎片”。在用戶程序中使用多重背景可以減少背景數(shù)據(jù)塊的數(shù)量。
例程“多重背景”與例程“發(fā)動機(jī)控制”的控制要求相同,兩個例程中的FB 1和FC 1亦相同。原來用FB 1控制汽油機(jī)和柴油機(jī)時,分別使用了背景數(shù)據(jù)塊DB 1和DB 2。使用多重背景時只需要一個背景數(shù)據(jù)塊DB 10(見圖6-15),但是需要增加一個功能塊FB 10來調(diào)用作為“局部背景”的FB 1,FB 1的數(shù)據(jù)存儲在FB 10的背景數(shù)據(jù)塊DB 10中。不需要給FB 1分配背景數(shù)據(jù)塊,即原來的DB 1和DB 2被DB 10代替,但是需要在FB 10的變量聲明表中聲明數(shù)據(jù)類型為FB 1的兩個靜態(tài)變量(STAT)。
圖6-15 多重背景的程序結(jié)構(gòu)
1.基本數(shù)據(jù)類型
基本數(shù)據(jù)類型包括位( Bool)、字節(jié)(Byte)、字(Word)、雙字(Dword)、整數(shù)(INT)、雙整數(shù)( DINT)和浮點(diǎn)數(shù)(Float,或稱實(shí)數(shù)Real)等。
2.復(fù)雜數(shù)據(jù)類型
復(fù)雜數(shù)據(jù)類型包括日期和時間( DATE_AND_TIME)、字符串(STRING)、數(shù)組(ARRAY)、結(jié)構(gòu)(STRCT)和用戶定義的數(shù)據(jù)類型(UDT)。
(1)日期和時間
數(shù)據(jù)類型日期和時間( DATE_AND_TIME)占用8個字節(jié)的BCD碼。第0~5個字節(jié)分別存儲年、月、日、時、分和秒,毫秒存儲在第6字節(jié)和第7個字節(jié)的高4位,星期存放在第7個字節(jié)的低4位。星期日的代碼為1,星期一~星期六的代碼為2~7。例如2004年7月27日12點(diǎn)30分25.123秒可以表示為DT#04-07-27-12:30:25.123。
通過調(diào)用IEC功能,可以實(shí)現(xiàn)DATE_AND_TIME數(shù)據(jù)類型與基本數(shù)據(jù)類型之間的相互轉(zhuǎn)換。調(diào)用SFC 0“SET_CLK”,可以設(shè)置和啟動CPU時鐘的時間和日期。調(diào)用SFC 1“READ_CLK”,可以讀取CPU系統(tǒng)時鐘當(dāng)前的日期和時間。
(2)字符串
字符串( STRING)是字符(CHAR)組成的一維數(shù)組,每個字節(jié)存放1個字符。*個字節(jié)是字符串的大字符長度,第二個字節(jié)是字符串當(dāng)前有效字符的個數(shù),字符從第3個字節(jié)開始存放,一個字符串多有254個字符。字符串的默認(rèn)長度為254,通過定義字符串的長度可以減少它占用的存儲空間。
3.?dāng)?shù)組
數(shù)組( ARRAY)是同一類型的數(shù)據(jù)組合而成的一個單元,數(shù)組的維數(shù)多為6維。圖6-12給出了一個二維數(shù)組ARRAY[1..2,1..3]的內(nèi)部結(jié)構(gòu),它共有6個整數(shù)元素,圖中的每一小格為二進(jìn)制的1位,每個元素占兩行(2 B)。ARRAY后面的方括號中的數(shù)字用來定義每一維的起始元素和結(jié)束元素在該維中的編號。各維之間的數(shù)字用逗號隔開,每一維開始和結(jié)束的編號用兩個小數(shù)點(diǎn)隔開,如果某一維有n個元素,該維的起始元素和結(jié)束元素的編號一般采用1和n,例如ARRAY[1..2,1..3]。
圖6-12 二維數(shù)組的結(jié)構(gòu)
(1)生成數(shù)組

可以在數(shù)據(jù)塊中定義數(shù)組,也可以在邏輯塊的變量聲明表中定義。下面介紹在數(shù)據(jù)塊中定義的方法。在SIMATIC管理器中用菜單命令“插入”→“S7塊”→“數(shù)據(jù)塊”生成數(shù)據(jù)塊DB 4,點(diǎn)擊該數(shù)據(jù)塊的圖標(biāo),在出現(xiàn)的程序編輯器窗口中,用聲明視圖方式來生成一個用戶定義的數(shù)組。
在新生成的數(shù)據(jù)塊的聲明表的*行和后一行,標(biāo)有STRUCT(結(jié)構(gòu))和END_STRUCT(結(jié)構(gòu)結(jié)束)。在這兩行中間一行的“名稱”列輸入數(shù)組的名稱“PRESS”,用右鍵點(diǎn)擊該行的“類型”列,執(zhí)行彈出的快捷菜單中的“復(fù)雜類型”→“ARRAY”(數(shù)組)命令,在出現(xiàn)的“ARRAY[]”的方括號中輸入“1..2,1..3”,即二維數(shù)組PRESS有2×3個元素。ARRAY下面一行的“INT”定義數(shù)組元素為16位二進(jìn)制整數(shù),INT所在行的地址列自動生成的“*2.0”表示一個數(shù)組元素占用2B。地址列的“+12.0”表示該數(shù)組的6個元素一共占用12B,地址列的數(shù)字和加號等都是自動生成的。
數(shù)組的第1個元素為PRESS[1,1],第3個元素為PRESS[1,3](見圖6-14),第4個元素為PRESS[2,1],第6個元素為PRESS[2,3]。
(2)給數(shù)組元素賦初值
定義數(shù)組時可以在ARRAY所在的行的“初始值”列中給數(shù)組元素賦初值,各元素的初值之間用英語逗號分隔,例如上例中6個元素的初值可以寫成“22,30,-5,0,0,0”,結(jié)束時不用標(biāo)點(diǎn)符號。若相鄰元素的初值相同,寫法可以簡化,例如上述初值可以簡寫為“22,30,-5,3(0)”(見圖6-13)。
在數(shù)據(jù)視圖方式,顯示數(shù)組中各元素的初始值和實(shí)際值(見圖6-14)。用戶只能改變每個元素的實(shí)際值。如果用戶輸入的實(shí)際值與變量的數(shù)據(jù)類型不符,將用紅色顯示錯誤的數(shù)據(jù)。在數(shù)據(jù)視圖方式執(zhí)行菜單命令“編輯”一“初始化數(shù)據(jù)塊”,可以恢復(fù)變量的初始值。
圖6-14 數(shù)據(jù)視圖方式的數(shù)組元素及初值
(3)訪問數(shù)組中的數(shù)據(jù)
本例中的數(shù)組是數(shù)據(jù)塊的一部分,訪問數(shù)組中的數(shù)據(jù)時,需要指出數(shù)據(jù)塊和數(shù)組的名稱,以及數(shù)組元素的下標(biāo),例如“TANK”.PRESS[2,1]。其中的TANK是數(shù)據(jù)塊DB 4的符號名,PRESS是數(shù)組的名稱,它們用英語的句號分開。方括號中是數(shù)組元素的下標(biāo),該元素是數(shù)組中的第4個元素(見圖6-12)。
(4)用數(shù)組傳遞參數(shù)
如果在塊的變量聲明表中聲明形參的類型為ARRAY,可以將整個數(shù)組而不是某些元素作為參數(shù)來傳遞。在調(diào)用塊時也可以將某個數(shù)組元素賦值給同一類型的參數(shù)。
將數(shù)組作為參數(shù)傳遞時,作為形參和實(shí)參的兩個數(shù)組應(yīng)有相同的結(jié)構(gòu),例如都是由整數(shù)組成的2×3格式的數(shù)組,數(shù)組元素的數(shù)據(jù)類型應(yīng)該相同。
(5)用數(shù)組定義數(shù)據(jù)塊的大小
數(shù)據(jù)塊的大小與數(shù)據(jù)塊中定義的變量的個數(shù)和數(shù)據(jù)類型有關(guān)。如果需要一個容量很大的數(shù)據(jù)塊,并且用地址來訪問數(shù)據(jù)塊中的變量,可以用數(shù)組來定義數(shù)據(jù)塊的大小。例如在數(shù)據(jù)塊中只定義一個數(shù)組ARRAY[1..500],數(shù)組元素為字節(jié),則該數(shù)據(jù)塊的大小為500 B。實(shí)際上可以用地址和任意的數(shù)據(jù)類型來訪問該數(shù)據(jù)塊中的存儲單元。
4.結(jié)構(gòu)

結(jié)構(gòu)( STRUCT)是不同類型的數(shù)據(jù)的組合??梢杂没緮?shù)據(jù)類型、復(fù)雜數(shù)據(jù)類型(包括數(shù)組和結(jié)構(gòu))和用戶定義數(shù)據(jù)類型( UDT)作為結(jié)構(gòu)中的元素,例如一個結(jié)構(gòu)可以由數(shù)組和結(jié)構(gòu)組成,結(jié)構(gòu)可以嵌套8層。用戶可以把過程控制中有關(guān)的數(shù)據(jù)統(tǒng)一組織在一個結(jié)構(gòu)中,作為一個數(shù)據(jù)單元來使用,而不是使用大量的單個的元素,為統(tǒng)一處理不同類型的數(shù)據(jù)或參數(shù)提供了方便。
(1)結(jié)構(gòu)的生成
與數(shù)組一樣,結(jié)構(gòu)可以在數(shù)據(jù)塊中定義,也可以在邏輯塊的變量聲明表中定義,下面介紹在數(shù)據(jù)塊中定義的方法。在圖6-13的數(shù)據(jù)塊DB 4中,同時定義了一個數(shù)組和一個結(jié)構(gòu)。名為STACK的結(jié)構(gòu)由一個整數(shù)、一個實(shí)數(shù)和一個位變量組成。
為了生成結(jié)構(gòu),選中圖6-13“ARRAY”下面的“INT”,按回車鍵,在該單元的下面生成一個空白行。在“名稱”列輸入結(jié)構(gòu)的名稱“STACK”,用右鍵點(diǎn)擊空白行的“類型”單元,執(zhí)行彈出的快捷菜單中的“復(fù)雜類型”→“STRUCT”,(也可以直接輸入STRUCT),連續(xù)按回車鍵后,在該行的下面出現(xiàn)新的行,新的行下面一行增加的“END_STRUCT”(結(jié)束結(jié)構(gòu))是自動生成的,表示該結(jié)構(gòu)的結(jié)束。在新的行輸入結(jié)構(gòu)的*個元素“AMOUNT”。如果沒有輸入該元素的初值,將會自動生成默認(rèn)的初值0。用同樣的方法生成數(shù)組的其他元素。選中結(jié)構(gòu)的“END_STRUCT”單元后按回車鍵,在下面出現(xiàn)的新的行中輸入一個名為VOLTAGE的獨(dú)立的整型變量。
圖中STACK所在行的地址列中的+12.0表示結(jié)構(gòu)在數(shù)據(jù)塊中的起始地址為DBB12。結(jié)構(gòu)各元素的地址列中的“+2.0”等表示結(jié)構(gòu)元素在結(jié)構(gòu)中的相對起始地址,“=8.0”表示該結(jié)構(gòu)一共占用8B。后一行地址列中的“=22.0”表示表中的數(shù)組、結(jié)構(gòu)和獨(dú)立變量一共占用22B。
可以為結(jié)構(gòu)中各個元素設(shè)置初始值和加上注釋。在圖6-13中輸入實(shí)數(shù)的初值102.4后,被自動轉(zhuǎn)換為1. 024000e +002。
用鼠標(biāo)選中結(jié)構(gòu)的*行或后一行(即有關(guān)鍵字STRUCT或END_STRUCT的那一行)的地址列中的單元,將選中整個結(jié)構(gòu),結(jié)構(gòu)各行的背景變?yōu)楹谏肿優(yōu)榘咨ǚQ為反色)。若要選中結(jié)構(gòu)中的某一參數(shù),用鼠標(biāo)點(diǎn)擊該行的地址單元,僅該行反色。
(2)訪問結(jié)構(gòu)中的元素
可以用結(jié)構(gòu)中的元素的地址或符號地址來訪問結(jié)構(gòu)中的元素。訪問結(jié)構(gòu)中的數(shù)據(jù)時,需要指出結(jié)構(gòu)所在的數(shù)據(jù)塊的名稱、結(jié)構(gòu)的名稱,以及結(jié)構(gòu)元素的名稱,數(shù)據(jù)塊TANK內(nèi)結(jié)構(gòu)STACK的元素AMOUNT應(yīng)表示為“TANK”.STACK. AMOUNT。因?yàn)?/span>AMOUNT從數(shù)據(jù)塊TANK( DB 4)的第12個字節(jié)開始存放,它的地址為DB4. DBW12。
(3)用結(jié)構(gòu)傳遞參數(shù)
如果在塊的變量聲明表中,聲明形參的類型為STRUCT,可以將整個結(jié)構(gòu)而不是某些元素作為參數(shù)來傳遞。在調(diào)用塊時也可以將某個結(jié)構(gòu)元素賦值給同一類型的參數(shù)。
將結(jié)構(gòu)作為參數(shù)傳遞時,作為形參和實(shí)參的兩個結(jié)構(gòu)必須具有相同的數(shù)據(jù)結(jié)構(gòu),即相同數(shù)據(jù)類型的結(jié)構(gòu)元素和相同的排列順序。
5.用戶定義數(shù)據(jù)類型
用戶定義數(shù)據(jù)類型( User-Defined Data Types)簡稱為UDT,是一種特殊的數(shù)據(jù)結(jié)構(gòu),用戶只需要對它定義一次,定義好以后可以在用戶程序中作為數(shù)據(jù)類型使用??梢杂盟鼇懋a(chǎn)生大量的具有相同數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)塊,用這些數(shù)據(jù)塊來輸入用于不同目的的實(shí)際數(shù)據(jù)。例如生成用于顏料混合配方的UDT后,可以用它生成用于不同顏色配方的數(shù)據(jù)組合。用戶定義數(shù)據(jù)類型由基本數(shù)據(jù)類型和(或)復(fù)雜數(shù)據(jù)類型組成。定義好以后可以在符號表中為它一個符號名,使用UDT可以節(jié)約錄入數(shù)據(jù)的時間。

西門子6RA8081-6DV62-0AA0維修報F60004代碼