1. 数据类型: 注:还有两种类型:P:POINTER(指针数据类型)。A:ANY(任何类型) 数组的定义:M1:ARRAY[n0..m0,n1..m1] OF INT; 数组的类型 2. 寻址 绝对寻址 符号寻址 如:DB10.setpoint 'motor1data'.DW12 间接寻址 如:E[byteindex,bitindex] MB[byteindex] DB10.DW[byteindex] 三.SCL运算符和表达式 注:以上运算符的表达式基本大多和我们的数学表达式一样。这里只讲解一下AND,XOR,OR指令。 如:a1:=a1 AND W#16#FFFF a1:=a1 XOR W#16#FFFF a1:=a1 OR MW10 四.控制语句 注意:当使用程序 循环时,请确保不超过循环监测时间。 1. IF语句: IF 条件0 THEN 语句0; ELSIF 条件1 THEN 语句1; ELSIF 条件2 THEN 语句2; ELSE 语句3; END_IF; 2. CASE语句:'选择'内的值等于Const内的值就执行那个语句。其它语句不执行,就执行END_CASE; CASE 选择 OF Const1:语句1; Const2:语句2; ……… Constn:语句n; END_CASE; 3. FOR语句 FOR 变量:=n0 TO n BY m DO …………………..; ………………….; END_FOR; 注意:这里的n为整型变量或整数值。m为每循环加几。 4. WHILE语句:只要条件满足,程序循环就重复。 WHILE 条件 DO 语句; END_WHILE; 5. REPEAT语句:只要条件不满足,就重复程序循环。 REPEAT 语句; UNTIL 条件; END_REPEAT; 6. CONTINUE语句:在FOR, WHILE, REPEAT循环中终止当前程序通道。 7. EXIT语句:在FOR, WHILE, REPEAT循环中终止所有程序通道。 8. RETURN语句:语句无条件地退出当前执行的块。 9. GOTO语句: 例: LABEL //定义标签 M1,M2,M3,END; END_LABEL; …………….. CASE Selection; 1:GOTO M1; 2:GOTO M2; 3:GOTO M3; ELSE GOTO DND; END_CASE; M1:语句1; GOTO DND; M2:语句2; GOTO DND; M3:语句3; END: ; 五.常量: 1. 位常量:值为TRUE或者FALSE. 2. 字符常量:(这里是一个字符) Charac_1:='B' Charac_2:=char#43; Charac_3:=char#'B' //字符'B' Charac_4:='$41' //字符'A' 3. 字符串常量: M1:='ABCDEFJH' 4. 日期常量: T1:=DATE#1995-11-11; T2:=D#1995-11-11 5. 时间常量 N1:=TIME#10.2S; N2:=T#3D_2S_3MS; 6. TIME_OF_DAY常量: TM1:=TIME_OF_DAY#12:11:10.1; TT2:=TOD#10:10:10; 7. DATE_AND_TIME常量: TT:=DT#2012-4-26-18:12:00; 六.定时器和计数器: 1.定时器有5种,依次为:S_PULSE S_PEXT S_ODT S_ODTS S_OFFDT VARCurrTime : S5time;BiVal : word;ActFlag : bool;END_VAR//在调用定时器时,部分参数可以省略,但左边的赋值变量一定不能省略。CurrTime:=S_ODT(T_N=T10, //绝对调用,制定定时器号S:=TRUE, //置位条件TV:=T#1s, //设定定时器值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 DOCurrTime:= S_ODT(T_N=MY_TIMER.T_NO, S:=true,MY_TIMER.TV);END_FOR;FUNCTION_BLOCK 2. 、计数器S_CU 增计数器S_CD 减计数器S_CUD 增/减计数器e.g.S_CUD (C_N=C12, //绝对调用定时器,指定计数器号CD:=I0.0,CU:=I0.1,S:=I0.2 & I0.3, //置位条件PV:=120, //设定计数器值R:=FALSE, //复位条件CV:=binVal, //输出参数,二进制计数值Q:=actFlag); //输出参数,计数器的状态FUNCTION_BLOCK COUNTVAR_INPUTCount: ARRAY [1..4] of STRUCTC_N INT;PV : WORD;END_STRUCT;…END_VAR…FOR I:= 1 TO 4 DO //动态调用计数器S_CD(C_N=Count.C_NO, S:=true, PV:= Count.PV);END_FOR;FUNCTION_BLOCK 七.数学函数: 例子:RESULT := ABS (-5) ; //5RESULT := SQRT (81.0); //9RESULT := SQR (23); //529RESULT := EXP (4.1); //60.340 ...RESULT := EXPD (3); //1_000PI := 3. 141 592 ;RESULT := SIN (PI / 6) ; //0.5 八.移位函数: ROL、ROR、SHL、SHR例子:RESULT := ROL (IN:=CRC, N:=5); //CRC ,左移5位 ,移出的填充到右边空位RESULT := ROR (IN:=BYTE#2#1101_0011, N:=2); //2#1111_0100 ,右移2位 ,移出的填充到左边空位RESULT := SHL (IN:=BYTE#2#1101_0011, N:=3); //2#1001_1000 ,左移3位,空余部分用0填充RESULT := SHR (IN:=BYTE#2#1101_0011, N:=2); //2#0011_0100 ,右移2位,空余部分用0填充 九.SCL块 SCL所用的块结构与标准编程语言有完全相同的方式。 注意:没有功能值返回的功能FC是VOID数据类型。 十.实例: 1.排序 FUNCTION FC4:VOID Know_How_Protect VAR_TEMP // Temporary Variables loop_count:INT; index_1:INT; index_2:INT; Data_Store:ARRAY[0..5] OF INT; T :INT; N :INT; END_VAR // Statement Section // Block Parameters VAR_INPUT // Input Parameters INT0:INT; INT1:INT; INT2:INT; INT3:INT; INT4:INT; INT5:INT; END_VAR VAR_IN_OUT // I/O Parameters END_VAR VAR_OUTPUT // Output Parameters min_data:INT; l_0,l_1,l_2,l_3,l_4,l_5: INT; END_VAR Data_Store[0]:=INT0; Data_Store[1]:=INT1; Data_Store[2]:=INT2; Data_Store[3]:=INT3; Data_Store[4]:=INT4; Data_Store[5]:=INT5; min_data:=Data_Store[0]; N:=0; T:=0; FOR loop_count:=0 TO 5 BY 1 DO //查找最小值 IF min_data > Data_Store[loop_count] THEN min_data:=Data_Store[loop_count]; END_IF; END_FOR; FOR index_1:=0 TO 5 BY 1 DO FOR index_2:=index_1 TO 5 BY 1 DO IF Data_Store[index_1] < Data_Store[index_2] THEN T:=Data_Store[index_2]; Data_Store[index_2]:=Data_Store[index_1]; Data_Store[index_1]:=T; END_IF; END_FOR; END_FOR; l_0:=Data_Store[0]; l_1:=Data_Store[1]; l_2:=Data_Store[2]; l_3:=Data_Store[3]; l_4:=Data_Store[4]; l_5:=Data_Store[5]; END_FUNCTION |
|