在S7300400型PLC中使用高級語言編程_第1頁
在S7300400型PLC中使用高級語言編程_第2頁
在S7300400型PLC中使用高級語言編程_第3頁
在S7300400型PLC中使用高級語言編程_第4頁
在S7300400型PLC中使用高級語言編程_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、在S7300/400型PLC中使用高級語言編程S7-SCL是一種類似于Pasical、Deliphi的高級編程語言,其符合國際標準 IEC 61131-3 ,也就是說支持該標準的任意廠家的 PLC均可以使用與之相似的語言編 程。這種語言適合于處理復雜的邏輯和大量的數(shù)學運算,由于其具有高級語言的編程結(jié)構(gòu),因此和S7的STL語句表編程方式比較起來有著更加方便的控制方式, 可以這樣說,只要是必須使用語句表的地方,我們均可以考慮使用SCL,也許STL 在執(zhí)行時比SCL更加高效,但事實上也不一定,首先 SCL可以編譯成STL,同時 SCL設(shè)計時可以優(yōu)化編程,而STL若運用不當,可能還會將低效率。當然在目

2、前 的這種系列的PLC上,效率對于我們來說已是次要的,我們更關(guān)心的是編程結(jié)構(gòu)。 就像在PC機上,舍棄了匯編語言,而主要采用 C/C+將高級語言。總體來說, SCL適合于編寫標準功能塊,由于在維護中,它和STL一樣,不象Lad 一樣利于維護,因此這些標準功能塊都應該有文檔說明,以便用戶了解其功能。下面的內(nèi)容主要是參考西門子的 S7-SCL文檔,對SCL進行了系統(tǒng)的介紹, 最后給出了示例。這里假設(shè)讀者是學過S7-300/400編程,并曾經(jīng)學過至少一種計算機高級編 程語言。一、 軟件的使用1、創(chuàng)建一個新的S7-SCL Source文件打開工程項目&選擇CPU占a選擇S7 Program a選

3、擇Sources 在右邊窗口的空白處點右鍵選 Insert New Object 6點擊SCL Source 雙擊創(chuàng)建的SCL Source文件,進入SC,輯界面。2、塊保護在SCL Source文件的開頭添加關(guān)鍵字:KNOW_HOW_PROTECT開由其創(chuàng)建的 塊時,只能顯示參數(shù),而看不到內(nèi)容。3、主菜單" Insert ”下的" Block Template ”可用于插入如OB,FB等各種塊的 結(jié)構(gòu)。" Control Structure ”菜單可插入各種流程控制結(jié)構(gòu),這些都可以簡化 編程。4、在運行程序之前,首先必須對它進行編譯,可以編譯整個Source文件

4、或者某 個被選擇的塊,通過選擇菜單 File > Compile Selected Blocks 。也可以把幾 個Source文件一起進行編譯,具方法是創(chuàng)建一個S7-SCL compilation controlfile.在該文件中依次輸入需要編譯的 SCL Source文件名,然后執(zhí)行編譯即可。二、語法規(guī)則1、編寫SCL Source文件的一般規(guī)則 FB, FC, OB, DB以及用戶定義的UDT它們使用的任意數(shù)字號均可以在 SCL Source中編輯。 每種塊類型都有它自己的結(jié)構(gòu)。 每段落或者每個變量的聲明以符號“;“標志結(jié)束。 不區(qū)分大小寫。 注釋僅存在于程序文檔中,它不影響程序運

5、行。 當一個功能塊被調(diào)用時,其背景數(shù)據(jù)塊被自動創(chuàng)建,因此它們不需要被編輯。 DB0有特定用途,因此在程序中不能創(chuàng)建 DB0.2、編寫塊的先后次序 被調(diào)用的塊必須位于調(diào)用塊之前。 UDT的定義必須位于其被使用的位置之前。 共享數(shù)據(jù)塊必須位于那些使用它的所有塊之前。三、數(shù)據(jù)類型1、數(shù)據(jù)類型預覽I、基本數(shù)據(jù)類型r 組數(shù)據(jù)類型4渤斛輝Bit Data TypesBOOL BYTE WORD DWORD1816幻依次為1位、8位,16位、 支位Chara c4er TypesCkiAR即一個ASCII字符Numeric TypesINT DINT REAL163222數(shù)值類型,依次為仿位、 m施、立位T

6、ime TypesT1毗DATtTIME OF DAYS5HME(D) (TOD) 的32163216£7中的籟慢B酊酊勒抿數(shù)據(jù)芙3!DATE AMD TIME (01)定義6破陰田)周刊樣日期耐即是S7SCU中的耽義費MSTRING最多可在低254個字符的字符串ARRAY用于酬得械描蒜的黝STPUPT自宗義結(jié)構(gòu)變量Ilk麴粼數(shù)據(jù)翹解TIMER芹節(jié)|的聲明假時等作為參數(shù)COUHTER2鐘肝聲躺涓例汕舞810clQ0(2科一押國FB& DBS以及防時踴悔POINTER杷一個內(nèi)存隆坡作為參數(shù)ANY10?T觸鼬據(jù)翹的地址作為麴2、補充日yt的存儲內(nèi)容范圍0Year1996加891M

7、onth01-122DatvId3Hour0234Minule0695Second。石962 MSD (moststgnrficantdecade) of ms第997 (4 MSB)LSD (le astsig nificantdecad e) of ms097(4 LSB)星期1-7<1>、DATE_AND_TIME Data Type其值的范圍:DT#1990-01-01-0:0:0.0DT#2089-12-31-23:59:59.999該類型以BCM形式存儲。例如 20/Oct./1995 12:20:30 and 10 milliseconds顯示如下:DATE_AND_

8、TIME#1995-10-20-12:20:30.10 DT#1995-10-20-12:20:30.10<2>STRINGe.g.聲明VARText1 : String 123; /該字符串的最大容量為123個字符Text2 : String; /該字符串的默認容量為254個字符END_VAR初始化:x : STRING7:='Address' / 在使用STRING,必須對它賦值。FUNCTION Test : STRING45VAR_TEMPx : STRING45; END_VARx := 'a'x := concat (in1 := x,

9、in2 := x); Test := x; / 返回值 END_FUNCTION<3啖組類型e.g.VARCONTROLLER1 :/聲明3行、4列的二位整數(shù)數(shù)組,并對其初始化 ARRAY1.3,1.4 OF INT:= -54, 736,-83, 77, -1289, 10362, 385, 2, 60, -37, -7, 103 ;CONTROLLER2 : ARRAY1.10 OF REAL ; / 聲明 10 個數(shù)的一維實數(shù)數(shù)組 END_VAR注:藪組的最大維數(shù)為6維,數(shù)組的索引范圍為-32768 - 32767 之間的任意 整數(shù)。所有的基本數(shù)據(jù)類型均可用于數(shù)組。數(shù)組可以使用變量

10、進行索引,例如: arrname_1 i := arrname_2 j ;<4>STRUCT 型e.g.聲明一個結(jié)構(gòu)MOTOR包含另一個結(jié)構(gòu)DATA對結(jié)構(gòu)聲明時,可以初始化 元素,也可以在使用之前再初始化。VARMOTOR : STRUCTDATA:STRUCTLOADCURR:REAL ;VOLTAGE : INT 尸 5 ;END_STRUCT;END_STRUCT;END_VAR結(jié)構(gòu)致 WORD形式結(jié)尾,否則系統(tǒng)自動把丟失的字節(jié)補到結(jié)構(gòu)中去。<5>用戶定義類型UDT (使用關(guān)鍵字TYPETYPE 定義名字為 MEASVALUE翎:據(jù)類型MEASVALUES: ST

11、RUCTBIPOL_1 : INT := 5;BIPOL_2 : WORD := W#16#FFAA ;BIPOL_3 : BYTE := B#16#F1 ;BIPOL_4 : WORD := W#16#1919 ;MEASURE:STRUCTBIPOLAR0V : REAL ;UNIPOLAR_4_20MA :REAL ;END_STRUCT;END_STRUCT;END_TYPE/在FB10中使用該類型FUNCTION_BLOCK FB10VARMEAS_RANGE : MEASVALUES創(chuàng)魅 UD微據(jù)END_VARBEGIN/使用UDT數(shù)據(jù)MEAS_RANGE.BIPOL_1 := -

12、4 ;MEAS_RANGE.MEASURE.UNIPOLAR_4_20MA := 2.7 ;END_FUNCTION_BLOCK<6>POINTER1 型e.g./定義功能塊FC100FUNCTION FC100 : VOID /VOID表明該功能不返回值VAR_IN_OUT /淀義FC100的輸入輸出型參數(shù)N_out : INT;out : POINTER; / 定義POINTEF©數(shù)據(jù)類型,參數(shù)均為臨時變量 END_VARVAR_TEMP /定義臨時變量 ret : INT;END_VARBEGIN /進入函數(shù)主體 / .ret := SFC79(N := N_out

13、, SA := out);END_FUNCTION/定義功能塊FB100FUNCTION_BLOCK FB100VAR /定義和態(tài)變量,即離開塊后仍舊保存狀態(tài)的變量ii : INT;aa : ARRAY1.1000 OF REAL;END_VARBEGIN / .FC100(N_out := ii, out := aa); 調(diào)用FC100使用指針的方式傳遞整個數(shù) 組 / .END_FUNCTION_BLOCK<7>ANYfe 型 e.g.VAR_INPUT /輸入型變量iANY : ANY; / 定義為 ANYEND_VARVAR_TEMPpANY : ANY; / 定義為 ANY

14、END_VARCASE ii OF /CASE 分支語句1:pANY := MW4; / 將 MW4勺地址賦給 pANY/ of MW43.5:/ 等于3,4,5的情況下 pANY:= aINTii; / pANY contains the address / of the ii th/ element of the aINT field;100:pANY := iANY; / pANY contains the value/ of the iANY input variableELSEpANY := NIL; / pANY contains the value/ of the NIL poi

15、nterEND_CASE;SFCxxx(IN := pANY);四、局部變量和參數(shù)的聲明1、變量靜態(tài)變量:用于保持塊的數(shù)據(jù),該數(shù)據(jù)存在背景數(shù)據(jù)塊中。臨時變量:僅在塊運行過程中存在。若多個變量的數(shù)據(jù)類型一致,可用如下方式:VALUE2, VALUE3,VALUE4,.:INT;聲明時可以初始化:VALUE :REAL := 20.25;數(shù)組的初始化有兩種方式:CONTROLLER1 : ARRAY 1.2, 1.2 OF INT := -54, 736,-83, 77;當把相鄰的數(shù)組元素賦相同的值時,例如,把 A32到A311的值設(shè)為100.0 :A3 : ARRAY1.12 OF REAL :

16、= 0.0, 10(100.0), 1.0;2、塊參數(shù)輸入?yún)?shù):用于接收當塊被調(diào)用時的輸入值,他們是只讀的。輸出參數(shù):傳輸當前值到這個調(diào)用塊,在被調(diào)用塊中應該對該參數(shù)賦值輸入/輸出參數(shù):用于接收當塊被調(diào)用時的輸入值,并可以把結(jié)果返回到調(diào)用塊。3、使用多重背景聲明方式如下:Supply1 : FB10; / Supply1 為 FB10的背景 DBSupply2,Supply3,Supply4 : FB100; /為 FB100聲明多個背景 DBMotor1 : Motor ; / Motor 為某個 FB 的符號名4、變量的聲明變量類型聲明方式FHFCo&靜態(tài)要堡VAR* - *END

17、 VARV臨時變量VAR.TEMPEND VaR4VV輸入?yún)?shù)VARJNPin-END-VAF/輸出番酸end_var7P 7就A4K崢歌* riiEND_VARVP 4五、常量S7-SCL常量分位常量、數(shù)字常量、字符常量、時間常量,使用CONSTEND_CONST 聲明。e.g.CONSTNumber := 10 ;/ 整數(shù)常量TIMEOFDAY1 := TIME#1D_1H_10M_22S_2Ms ;踮間常量NAME := 'SIEMENS' ; / 字符吊常量NUMBER2 := 2 * 5 + 10 * 4 ;NUMBER3 := 3 + NUMBER2 ;END_CO

18、NST1、位常量Bool#false 位的值為 TRUEUc者 FALSE8#177777 8 進制DW#16#0000_0000 16tt 制2、整數(shù)常量,它有多種表達方式 15 10進制值為152#1111 2進制值為1516#F 16進制值為15Value_2:=2#0101;/ 2 進制值為 5Value_3:=8#17;/ 10進制值為 14Value_4:=16#F; / 16進制值為 15Value_5:=INT#16#3f_ff/ 16進制值,類型被定義3、Real常量NUM4:= -3.4 ;NUM5:= 4e2 ;NUM6:= real#1.5;4、字符常量(單個字符)Ch

19、arac_1 := 'B'Charac_2 := char#43;Charac_3 := char#'B' / 字符'B'CHARACTER := '$41' ; / 字符'A'5、 字符串常量NAMEk'SIEMENS'6、日期常量TIMEVARIABLE1:= DATE#1995-11-11 ;TIMEVARIABLE2:= D#1995-05-05 ;7、 時間常量Interval1:= TIME#10.5S ;Interval2:= T#3D_2S_3MS ;8、Time-of-Day 常量

20、TIMEOFDAY1:= TIME_OF_DAY#12:12:12.2 ;TIMEOFDAY2:= TOD#11:11:11 ;9、Date and Time 常量TIMEOFDAY1:= DATE_AND_TIME#1995-01-01-12:12:12.2 ;TIMEOFDAY2:= DT#1995-02-02-11:11:11;六、CPU的內(nèi)存區(qū)域1、可以直接操作字節(jié)、字、位STATUSBYTE :=IB10;STATUS_3 :=I1.1;MEASVAL :=IW20;2、可以通過索引對位、字、字節(jié)操作,該索引可以是變量MEASVAL_1 :=IWCOUNTER;偌 COUNTER=5

21、® MEASVAL_1 值為 IW5OUTLABEL :=IBYTENO, BITNO; / 若 BYTENO=3BITNO=1 貝U OUTLABEL=I3.1注:當獲取的數(shù)據(jù)類型是 BYTE, WORD or DWORD,使用一個索引參數(shù),當獲取的數(shù)據(jù)類型為BOOIM,必須使用兩個索引參數(shù),分別指定字節(jié)號和位號。3、對數(shù)據(jù)塊的操作STATUS 5=tail.txii.1r.triable offratcbirg lygg5L? prtfi 耳STATUSBYTE :=DB101.DB10;/ 字節(jié)操作STATUS_2:= DB12.DXWNO, BITNO; / 位操作,支持索弓

22、ISTATUSBYTE :=Status_data.DWCOUNTER; / 字操作,支持索引MEASVAL :=Measdata.DW20;STATUS_1 :=WORD_TO_BLOCK_DB(INDEX).DW10;注:和Lad及STL語言比較起來,SCL在對數(shù)據(jù)塊中的字、字節(jié)等操作時,少一個"B'字符七、表達式、操作符和地址1、操作符預覽類別功能符號席級'i賦值操作符賦值:=ii由術(shù)操防PoweriJLilSt ibTT加3減-3ffiS4f4兩數(shù)相像眼余數(shù)MOD4兩教相除取商DIV4Wi-'一一5凝漆*5比較指令小干.下大于A6小于等干M二6痔等于A

23、=6胃于s7不等于 AIz邏輯操作符邏輯韭WOT3AND or a8艘1XOR9OR10參馥善敬口1八、控制流程1、IF選擇語句IF condition THENELSIF condition THEN / ELSIF語句可以不使用,或者使用一個或者多個ELSE / ELSE語句可以不使用END_IF ;e.g.IF ARRAYINDEX = INDEX THENCONTINUE ;END_IF ;2、CASES擇語句CASE intVariant OF1 : DISPLAYk OVEN_TEMP;2 : DISPLAYk MOTOR_SPEED;3.10: DISPLAYk INT_TO_D

24、INT (TW); / 可以指定連續(xù)的值QW4:= 16#0004;11,13,19: DISPLAYk99; 也可以把一系列值列出來QW4:= 16#0005;ELSE: / ELSE:可以省略DISPLAYk 0;TW_ERROR:= 1;END_CASE;3、FORI環(huán)語句FUNCTION_BLOCK FOR_EXAVARINDEX: INT ;IDWORD: ARRAY 1.50 OF STRING;END_VARBEGINFOR INDEX := 1 TO 50 BY 2 DO / 從 1 至U 50,增量為 2IF IDWORD INDEX = 'KEY' THEN

25、EXIT; /退出循環(huán)END_IF;END_FOR;END_FUNCTION_BLOCK注:一些關(guān)鍵字EXIT退出其所在的循環(huán)。CONTINU酸止當前循環(huán)的執(zhí)行,控制程序進入下一循環(huán)。RETURN1出當前正在被執(zhí)行的塊。4、WHILE循環(huán)WHILE INDEX <= 50 AND IDWORDINDEX <> 'KEY' DO /兩個條件均滿足才執(zhí)行循環(huán)INDEX := INDEX + 2;END_WHILE ;5、REPEAT1環(huán)REPEATINDEX := INDEX + 2 ; /該語句與 WHILE的區(qū)別是UNTIL之前的語句總是先執(zhí) 行一次UNTIL

26、 INDEX > 50 OR IDWORDINDEX = 'KEY' / 這兩條件之一若滿足,則退出 循環(huán)END_REPEAT;6、GOTOft轉(zhuǎn)語句IF A > B THENGOTO LAB1 ”/若條件滿足,則跳到LAB1處ELSIF A > C THENGOTO LAB2 ;END_IF ;/ .一LAB1: INDEX := 1 ;GOTO LAB3 ;LAB2: INDEX := 2 ; 7、調(diào)用塊絕對地址調(diào)用,例如:FB10.DB20(X1:=5,X2:=78,);/參數(shù)可以任意排列FC31 (X1:=5, Q1:=Checksum);符號地址調(diào)用

27、,例如:DRIVE.ON (X1:=5,X2:=78,);DISTANCE (X1:=5, Q1=:Checksum);每一個功能塊有一個輸入隱藏參數(shù) EN,和一個輸出隱藏參數(shù)ENO這兩個參數(shù)是 系統(tǒng)設(shè)定的,均為BOOlffl,不需要聲明,但在編程中可以使用,例如:/若MY_ENABLE FALSE則FC85不會被執(zhí)行,只有為 TRUE才會執(zhí)行Result := FC85(EN:= MY_ENABLE, PAR_1:= 27);FB30.DB30 (Parameter supply);IF ENO THEN 若FB30的調(diào)用沒有問題,貝U/ .一ELSE/ .一END_IF;九、定時器和計數(shù)器

28、1、計數(shù)器S_CU增計數(shù)器S_CD減計數(shù)器S_CUB曾/減計數(shù)器e.g.S_CUD (C_N=C12, /絕對調(diào)用定時器,指定計數(shù)器號CD:=I0.0,CU:=I0.1,S:=I0.2 & I0.3, /置位條件PV:=120,/設(shè)定計數(shù)器值R:=FALSE, /復位條件CV:=binVal, / 輸出參數(shù),二進制計數(shù)值Q:=actFlag);/ 輸出參數(shù),計數(shù)器的狀態(tài)FUNCTION_BLOCK COUNTVAR_INPUTCount: ARRAY 1.4 of STRUCTC_N INT;PV : WORD;END_STRUCT;END_VAR FOR I:= 1 TO 4 DO

29、/ 動態(tài)調(diào)用計數(shù)器S_CD(C_N=CountI.C_NO, S:=true, PV:= CountI.PV);END_FOR;FUNCTION_BLOCK COUNTERVAR_INPUTMYCounter:COUNTER;END_VAR CurrVal:=S_CD(C_N=MyCounter,.);/動態(tài)調(diào)用計數(shù)器2、定時器定時器有 5 種,依次為:S_PULSE S_PEXT S_ODT S_ODTS S_OFFDT VARCurrTime : S5time;BiVal : word;ActFlag : bool;END_VAR/在加用定時器時,部分參數(shù)可以省略,但左邊的賦值變量一定不能

30、省略。CurrTime尸S_ODT(T_N=T10,絕對調(diào)用,制定定時器號S:=TRUE, /置位條件TV:=T#1s, /設(shè)定定時器值R:=FALSE, /復位條件BI:=biVal,Q:=actFlag);FUNCTION_BLOCK TIMEVAR_INPUTMY_TIMER: ARRAY 1.4 of STRUCTT_N INT;TV : WORD;END_STRUCT;END_VAR FOR I:= 1 TO 4 DOCurrTimek S_ODT(T_N=MY_TIMERI.T_NO, S:=true, MY_TIMERI.TV);END_FOR;FUNCTION_BLOCK TI

31、MERVAR_INPUT mytimer:TIMER; END_VARCurrTime:=S_ODT(T_N=mytimer,.);十、S7-SCL中的標準功能1、數(shù)據(jù)類型轉(zhuǎn)換函數(shù) 隱式轉(zhuǎn)換,其依照的順序為: BOOL > BYTE > WORD > DWORD INT > DINT > REALe.g.VARPID_CTRLLER_1 : BYTE ;PID_CTRLLER_2 : WORD ;END_VARIF (PID_CTRLLER_1 <> PID_CTRLLER_2) THEN 止匕時 PID_CTRLLER_ft轉(zhuǎn) 換成WORD當然,也可

32、以使用以下功能顯示的轉(zhuǎn)換:BOOL_TO_BYTE BOOL_TO_DWOREBOOL_TO_WORD3YTE_TO_DWORD BYTE_TO_WORD CHAR_TO_STRING DINT_TO_REAL INT_TO_DINT、 INT_TO_REAL WORD_TO_DWORDBYTE_TO_BOO L Copies the least significant bitDINT_TO_TOD Copies the bit string YDINT_TO_BOOL DWORD_TO_BOOL(DINT_TO_DWORD(x) YDINT_TO_BYTE DWORD_TO_BYTE(DIN

33、T_TO_DWORD(x) Y DINT_TO_STRING DI_STRNG YDINT_TO_BCD(x)DINT_TO_BCD_DWORD(x)2、ROUND! TRUNCROUND()將REALM四舍五入取整返回 DINTTRUNC():舍棄REA做的小數(shù)部分取整返回DINT3、一般數(shù)學函數(shù)例子:RESULT k ABS (-5) ;/5RESULT k SQRT (81.0);/9RESULT := SQR (23); /529RESULT := EXP (4.1); /60.340 .RESULT := EXPD (3); /1_000PI := 3. 141 592 ;RESUL

34、T := SIN (PI / 6) ; /0.56、移位函數(shù)ROL ROR SHL SHR例子:,左移5位,,右移2位,,左移3位,右移2位,RESULT := ROL (IN:=BYTE#2#1101_0011, N:=5); 2#0111_1010移出的填充到右邊空位RESULT := ROR (IN:=BYTE#2#1101_0011, N:=2); /2#1111_0100 移出的填充到左邊空位RESULT := SHL (IN:=BYTE#2#1101_0011, N:=3); /2#1001_1000空余部分用0填充RESULT := SHR (IN:=BYTE#2#1101_00

35、11, N:=2); /2#0011_0100空余部分用0填充7、字符串函數(shù)由于PLC編程中字符、字符串的使用比較少,這里不詳敘,感興趣的可以參考西門子文檔中的 14.4 Functions for Processing Strings(P293-P303)8、選信函數(shù)<1>最大信函數(shù)/用于獲取這些參數(shù)中的最大值,參數(shù)最多可以有32個,其參數(shù)類型除了 S5TIME 以外,任意其他數(shù)子類型均可以,但所有的參數(shù)數(shù)據(jù)類型必須一致。A:=MAX(IN1:=a, IN2:=b, IN3:=c, IN4:=d.);<2>最小信函數(shù)/用于獲取這些參數(shù)中的最小值,參數(shù)最多可以有32個,

36、其參數(shù)類型除了 S5TIME 以外,任意其他數(shù)子類型均可以,但所有的參數(shù)數(shù)據(jù)類型必須一致。A:=MIN(IN1:=a, IN1:=b, IN1:=c, IN1:=d);<3>極限值函數(shù)A:=LIMIT(MN:=5, IN:= Execution steps, MX:= 10);<4>MUXS 數(shù)A:=MUX(K:=SELECT, IN0:= Steps, IN1:=Number, IN2:=Total);9、系統(tǒng)功能/功能塊、標準庫SCL像其他語言一樣,可以調(diào)用各種功能塊,包括系統(tǒng)功能、功能塊 SFC/SFBH一、示例(均在PLC-SIM上測試通過)1、編寫位偏移程序傳

37、遞M變量的起始字節(jié)和位、偏移量,然后根據(jù)偏移量,算出當前M變量的字節(jié) 和地址。例如針對M5.4,若給定偏移量1,則當前還是M5.4,若給定2,則為M5.5, 依次類推,若給定偏移量6,則為M6.1/根據(jù)偏移量來設(shè)定字節(jié)和位FUNCTION FC200: voidVAR_INPUT /輸入變量byteNINT; 指定M起始字節(jié)號bitNINT; / 指定起始位號bitNum:INT;/ 指定位數(shù)END_VARVAR_OUTPUT榆出變量currBit:INT; / 當前位currByte:INT; / 當前字節(jié)END_VARVAR_TEMPtmp:INT;END_VARBEGINtmp:=(bi

38、tNo+bitNum-1)DIV 8;currByte:=byteNo+tmp;currBit:=bitNo+bitNum-(8*tmp+1);END_FUNCTION 2、功能選擇程序假設(shè)某個機床有若干過手動功能,使用兩個按鈕"+"和"-“,按一次” +”,功能號加一,然后相應的功能選擇指示燈被點亮,譬如,當前功能3被選中,與之對應的指示燈亮,這時按一次按鈕"+”,則功能4被選中,與之對應的指示燈亮,而與功能3對應的指示燈滅,同時,當功能號到達最大值時,若再按一次 按鈕" +",則功能號轉(zhuǎn)到1,重新開始循環(huán),按鈕”-“與"

39、 +”正好相反,用 于控制功能號遞減。同時要求,當按住某個按鈕超過1s時,則功能號每過200ms 鐘加一或者減一。/主要控制功能FC10/FUNCTION FC10: VOIDVAR_INPUT /輸入變量fnAdd:BOOL; / 接收"+"按鈕fnSub:BOOL;/ 接收"-"按鈕byteNINT; /指定M起始字節(jié)號,這些M位與相應得某個功能對應。bitNINT; /指定起始位號bitNum:INT; / 指定總的位數(shù) END_VARVAR /靜態(tài)變量pus1:BOOL; /記錄按鈕"+"的脈沖pus2:BOOL;/記錄按鈕"-"的脈沖button:BOOL; /確定按鈕"+"或者按鈕"-"被按下currNINT; / 記錄當前的功能號currBit:INT; / 當前位 currByte:INT; / 當前字節(jié) /定時器輸出p1:BOOL;p2:BOO

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論