当前位置:首页 >> 能源/化工 >>

浙大中控DCS ST语言


Page 1 of 30

ST语 ST语言概述
ST语言在图形编程中和其它图形编程语言组合使用。实现了IEC1131-3标准的一个子集。 使用方法 在工程中加入ST语言段落。 可以在梯形图和功能块图中插入文本代码模块。在模块中用ST语言编程。 可以在顺控图中的步的操作中使用 = 操作限定词,然后可以用ST语言编程。 在顺控图的转换条件中可以使用ST

语言的逻辑表达式来指定条件。 在SFC编辑器中,当指定转换条件时可以使用ST语言逻辑表达式。 在操作中用 = 操作符可以使用ST的语句,双击该条操作即可弹出编辑界面。

注意:使用循环语句会明显增加编译时间,为获得更快的编译速度建议尽可能不使用WHILE语 注意 句并且少使REPEAT/FOR语句。

ST语 ST语言语法 ST语言在图形编程软件中和其它图形编程语言组合使用。实现了IEC61131-3标准的一个 子集。支持多种数据类型,支持函数、结构和数组,可以操作各种系统变量。 表达式 ??? 表达式为变量、操作符、常量、函数的组合,求值结果为单个值。 ??? 表达式的求值按运算符的优先级进行,优先级高的运算符先被处理。相同优先级的运算 符按从左到右的顺序执行。 ??? 以下为几个合法的表达式举例: ???? A + B * (C-3) + FUNC1(2,D) ???? B1?? ???? FUNC1() 使用方法 变量、函数等标识符的命名必须满足下列条件: 以英文字母开头;

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 2 of 30

续以英文字母、数字或下划线; 字符长度最多为24个字符。 标识符包括变量、函数、功能块、常数。

关键字 关键字
关键字 CASE…OF…ELSE…END_CASE BOOL WORD DWORD INT LONG 数据类型 UINT ULONG SFLOAT FLOAT EXIT FALSE FOR…TO…BY…DO…END_FOR FUNCTION…END_FUNCTION FUNCTION_BLOCK 功能块定义 END_FUNCTION_BLOCK IF…THEN…ELSEIF…ELSE…END_IF ON OFF REPEAT…UNTIL…END_REPEAT RETURN TRUE VAR…END_VAR VAR_INPUT…END_VAR VAR_OUTPUT…END_VAR WHILE…DO…END_WHILE WHILE语句 变量定义 IF语句 逻辑真 逻辑假 REPEAT 语句 函数返回 逻辑真 终止循环 逻辑假 FOR语句 函数定义 描述 CASE 语句

运算符
按运算优先级从高到低有:

运算符 () . [] NOT

描述 表达式运算 取结构成员 取数组成员 单目负 取反

类型 ? ? ? ? 逻辑运算

优先级 9 8 8 7 7

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 3 of 30

* (MUL) / (DIV) MOD + (ADD) - (SUB) > >= <= < = <> AND XOR OR

乘 除 取余 加 减 大于 大于等于 小于等于 小于 等于 不等于 与 异或 或

算术运算 算术运算 算术运算 算术运算 算术运算 比较运算 比较运算 比较运算 比较运算 比较运算 比较运算 逻辑运算 逻辑运算 逻辑运算

6 6 6 5 5 4 4 4 4 4 4 3 2 1

语句
以下为允许的语句列表。

No. 1

语句 赋值语句

例子 A = B; A = B + 1; A = FUNC(P1,P2);

2

函数调用、功能块调 用 FB1(IN1,OUT1,OUT2); A = FUNC(P1,P2);

3

RETURN RETURN A; IF A > 0 THEN B = 1; ELSEIF A > -5 THEN

4

IF

B = 2; ELSE B = 3; END_IF;

TW = FUNC1(); 5 CASE CASE TW OF 1 : I = 1; 2 : I = 2;

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 4 of 30

ELSE I = 3; END_CASE; J = 10; FOR I = 1 TO 100 BY 2 DO IF B1 THEN 6 FOR J = 1; EXIT; END_IF; END_FOR; J = 1; WHILE J <= 100 AND B1 DO 7 WHILE J = J + 2; END_WHILE; J = 1; REPEAT 8 REPEAT J = J + 2; UNTIL J = 101 OR B1 END_REPEAT; J = 1; WHILE J <= 100 AND B1 DO J = J + 2; 9 EXIT IF J>= 50 THEN EXIT; ???????? END_IF; END_WHILE; FOR I = 1 TO 100 BY 2 DO 10 EMPTY ? ??????????; END_FOR;

赋值语句
赋值语句将“=”右边表达式的值赋给左边的变量。

函数调用语句
函数和功能块的调用包括函数名或功能块名加小括号对,括号内为参数,参数间由逗号 隔开。 函数的调用规则:

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 5 of 30

ret = Func(in1,in2);?(*作为表达式返回值*) Func(in1,in2);(*作为子程序处理*) 功能块的调用规则: 调用功能块时要严格按照输入输出顺序,先输入输入参数,再输入输出参数,参数顺序 按照定义时的顺序。 输出参数必须是变量:??FuncBlock(in1,in2,out1,out2)。

ST语言函数和功能块 ST语言函数和功能块 函数定义 ???只有一个输出(变量类型可以自行确定),根据输入可以唯一确定输出。 功能块 功能块定义 ???有多个输出,或输出不但和当前输入有关还和上次内部状态有关。 除系统内部的函数和功能块外,用户可以自定义函数和功能块。自定义的函数和功能块 可以在工程内LD/FBD段落中调用。 函数的调用规则 ????ret = Func(in1,in2);?(*作为表达式返回值*) ??? Func(in1,in2); (*作为子程序处理*) 功能块 功能块的调用规则 ???调用功能块时要严格按照输入输出顺序,先输入输入参数,再输入输出参数,参数顺序按 照定义时的顺序。 ???输出参数必须是变量。 ???FuncBlock(in1,in2,out1,out2); 使用限制 ST 的 FUNCTION 模块 可以调用其它 ST FUNCTION,允许嵌套 可以调用标准函数 ST 的 FUNCTION_BLOCK 模块 可以调用ST FUNCTION 可以调用其它ST FUNCTION_BLOCK,但是所调用的FUNCTION_BLOCK不允许嵌套

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 6 of 30

可以调用标准函数 TEXTCODE 模块 可以调用ST FUNCTION 可以调用ST FUNCTION_BLOCK 可以调用标准函数 可以调用各种编程语言生成的功能块 编译速度 编译速度 由于当前SCControl所使用的ARM编译器(SDT251)的缘故,使用循环语句,尤其是其中 的WHILE语句,会明显增加编译时间,为获得更快的编译速度建议尽可能不使用WHILE语句以 及少使用REPEAT/FOR语句。

FUNCTION FUNCTION FUNC3 : BOOL VAR_INPUT ?????? ???? IN1:BOOL; END_VAR VAR ??? ???????? TEMP1 : BOOL; END_VAR ??? ? FUNC3 := DoSomething(); END_FUNCTION ? 说明: VAR_INPUT/END_VAR用于说明功能块的输入变量; VAR/END_VAR用于说明功能块内部的临时变量(临时变量存储在系统堆栈中,不能维持状 态到下一周期); 各类变量声明的次序不能颠倒; 调用时要严格按照声明的先后次序。 FUNCTION_BLOCK

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 7 of 30

FUNCTION_BLOCK FB3 VAR_INPUT ??? ???????? IN1:BOOL; END_VAR ? VAR_OUTPUT ??? ???????? OUT1 : BOOL; END_VAR ? VAR ??? ???????? TEMP1 : BOOL; END_VAR ? DoSomething(); ? END_FUNCTION_BLOCK 说明: VAR_INPUT/END_VAR用于说明功能块的输入变量; VAR_OUTPUT/END_VAR用于说明功能块的输出变量; VAR/END_VAR用于说明功能块内部的临时变量(临时变量存储在系统堆栈中,不能维持状 态到下一周期); 各类变量声明的次序不能颠倒; 不能对输出变量进行自操作; 功能块调用时要严格按照声明的先后次序。

ST语言程序实 ST语言程序实例 赋值语句

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 8 of 30

赋值语句将“=”右边表达式的值赋给左边的变量。 ??? A = B ; ??? A = B + C; ??? A = B * C + D; ??? A = B AND C AND D OR E; ??? A =?AND_DWORD ( B,C); IF 语句 IF (A AND (B > C) OR (E > F + 1) )? THEN ????????????? AA = BB; ELSEIF ( B > G)? THEN ???????????????????? AA = CC; ELSE ?????? AA = DD; END_IF; IF语句规定了一组语句在规定的逻辑表达式为TRUE时执行。当逻辑表达式为FALSE时,这 些语句不被执行,或在ELSE(ELSEIF)中规定的另一组语句被执行。 CASE 语句? CASE?? A??? OF 1: ??????? AA = BB; 2: ??????? AA = CC; 3: ??????? ???? AA = DD; ELSE ????????????? ???? AA = EE; END_CASE;

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 9 of 30

CASE语句规定了整数类型的选择项,以及选择项在不同的值时的几组语句组。当选择项 等于某个规定的值时,相应的语句组被执行,当没有规定的值符合时在ELSE中的语句组将被 执行(在CASE 语句中定义了ELSE分支)。 FOR 语句 FOR I = 1 TO 100 BY 2 DO ????????????? DOSOMETHING(); END_FOR; 在以上FOR语句中,I为控制变量,1为初始值,100为终止值,2为步进值。在FOR语句中 控制变量的初始值、终止值、步进值必须是相同的整型。步进值缺省为1。终止条件的判断一 开始就进行,当初始值大于终止值时,规定的语句组一次都不会执行。 WHILE 语句 WHILE 条件 DO ? ??? 语句组 END_WHILE; 条件的判断一开始就进行,如条件一开始就变FALSE时,规定的语句组一次都不会执行。 REPEAT 语句 REPEAT 语句组 UNTIL 终止条件 END_REPEAT; 终止条件的判断在语句组执行一次后才进行,所以规定的语句组至少会执行一次。当终 止条件成TRUE时,循环被终止。

ST可 用函数 ST可调用函数列表

算术运算 比较函数 转换函数 逻辑运算 数学函数 选择函数

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 10 of 30

通讯辅助函数 系统时间函数 特殊函数 其他函数 输入处理函数 智能通讯卡处理函数

返回上层 算术运算 术运算
加法函数 加法函数 这些函数的功能是将输入值相加,并将结果赋给输出值。函数类型如下: ??? FLOAT? ?????? ADD_FLOAT(FLOAT a, FLOAT b) ??? INT??? ???????ADD_INT(INT a, INT b) ??? LONG?? ????? ?ADD_LONG(LONG a, LONG b) ??? UINT?? ???????ADD_UINT(UINT a, UINT b)??? ??? ULONG? ????? ?ADD_ULONG(ULONG a, ULONG b) ??? SFLOAT????????ADD_SFLAOAT(SFLOAT a,SFLOAT b) 平均函数 平均函数 这些函数的功能是求输入值的平均值,并将结果赋给输出值。函数类型如下: ??? FLOAT? ?????? AVE_FLOAT(FLOAT a, FLOAT b) ??? INT??? ???????AVE_INT(INT a, INT b) ??? LONG?? ????? ?AVE_LONG(LONG a, LONG b) ??? UINT?? ???????AVE_UINT(UINT a, UINT b) ??? ULONG? ????? ?AVE_ULONG(ULONG a, ULONG b) ??? SFLOAT????????AVE_SFLOAT(SFLOAT a,SFLOAT b) ??? 对于AVE_FLOAT函数,两个输入之和不能超出浮点的量程。 除法函数 除法函数 这组函数的功能是将输入值相除,并将结果赋给输出值。函数类型如下:

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 11 of 30

??? FLOAT? ?????? DIV_FLOAT(FLOAT a, FLOAT b) ??? INT??? ???????DIV_INT(INT a, INT b) ??? LONG?? ????? ?DIV_LONG(LONG a, LONG b) ??? UINT?? ???????DIV_UINT(UINT a, UINT b) ??? ULONG? ????? ?DIV_ULONG(ULONG a, ULONG b) ??? SFLOAT????????DIV_SFLOAT(SFLOAT a,SFLOAT b) 求模函数 求模函数 该组函数的功能是将输入值相除,并将余数赋给输出值。函数类型如下: ??? INT??? ?????? MOD_INT(INT a, INT b); ??? LONG?? ????? ?MOD_LONG(LONG a, LONG b); ??? UINT?? ???????MOD_UINT(UINT a, UINT b); ??? ULONG? ????? ?MOD_ULONG(ULONG a, ULONG b); 赋值函数 ??? 该组函数的功能是将输入赋给输出值。函数类型如下所示: ??? BOOL?? ?????? MOVE_BOOL(BOOL a); ??? BYTE ?????????MOVE_BYTE(BYTE A); ??? DWORD? ???? ? MOVE_DWORD(DWORD a); ??? FLOAT? ?????? MOVE_FLOAT(FLOAT a); ??? INT??? ???????MOVE_INT(INT a); ??? LONG?? ????? ?MOVE_LONG(LONG a); ??? UINT?? ???????MOVE_UINT(UINT a); ??? ULONG? ????? ?MOVE_ULONG(ULONG a); ??? WORD?? ???? ? MOVE_WORD(WORD a); ??? SFLOAT????????MOVE_SFLOAT(SFLOAT a); ?乘法函数 乘法函数 ??? 该组函数的功能是将输入值相乘,并将结果赋给输出值。函数的类型如下所示:

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 12 of 30

??? FLOAT? ?????? MUL_FLOAT(FLOAT a, FLOAT b); ??? INT??? ???????MUL_INT(INT a, INT b); ??? LONG?? ????? ?MUL_LONG(LONG a, LONG b); ??? UINT?? ???????MUL_UINT(UINT a, UINT b); ??? ULONG? ????? ?MUL_ULONG(ULONG a, ULONG b); ??? SFLOAT????????MUL_SFLOAT(SFLOAT a,SFLOAT b); ?减法函数 法函数 ??? 该组函数的功能是将输入值相减,并将结果赋给输出值。函数类型如下所示: ??? FLOAT? ?????? SUB_FLOAT(FLOAT a, FLOAT b); ??? INT??? ???????SUB_INT(INT a, INT b); ??? LONG?? ????? ?SUB_LONG(LONG a, LONG b); ??? UINT?? ???????SUB_UINT(UINT a, UINT b); ??? ULONG? ????? ?SUB_ULONG(ULONG a, ULONG b); ??? SFLOAT????????SUB_SFLOAT(SFLOAT a,SFLOAT b)’;

比较函数
等于比较 等于比较 ??? 该组函数功能是检查第一个输入值是否等于第二个输入值,若是,则输出值为ON,否则 为OFF。函数类型如下所示: ??? BOOL?? ?????? EQ_BOOL(BOOL a, BOOL b); ??? BOOL ?????????EQ_BYTE(BYTE A,BYTE B); ??? BOOL?? ?????? EQ_DWORD(DWORD a, DWORD b); ??? BOOL?? ?????? EQ_FLOAT(FLOAT a, FLOAT b); ??? BOOL?? ?????? EQ_INT(INT a, INT b); ??? BOOL?? ?????? EQ_LONG(LONG a, LONG b); ??? BOOL?? ?????? EQ_UINT(UINT a, UINT b); ??? BOOL?? ?????? EQ_ULONG(ULONG a, ULONG b); ??? BOOL?? ?????? EQ_WORD(WORD a, WORD b);

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 13 of 30

??? BOOL??????????EQ_SFLOAT(SFLOAT a,SFLOAT b); ?大于等于比较 大于等于比较 ??? 该组函数功能是检查第一个输入值是否大于等于第二个输入值,若是,则输出值为ON, 否则为OFF。函数类型如下所示: ??? BOOL?? ?????? GE_FLOAT(FLOAT a, FLOAT b); ??? BOOL?? ?????? GE_INT(INT a, INT b); ??? BOOL?? ?????? GE_LONG(LONG a, LONG b); ??? BOOL?? ?????? GE_UINT(UINT a, UINT b); ??? BOOL?? ?????? GE_ULONG(ULONG a, ULONG b); ??? BOOL??????????GE_SFLOAT(SFLOAT a,SFLOAT b); 大于比较 大于比较 ?? 该组函数功能是检查第一个输入值是否大于第二个输入值,若是,则输出值为ON,否则为 OFF。函数类型如下所示: ??? BOOL?? ?????? GT_FLOAT(FLOAT a, FLOAT b); ??? BOOL?? ?????? GT_INT(INT a, INT b); ??? BOOL?? ?????? GT_LONG(LONG a, LONG b); ??? BOOL?? ?????? GT_UINT(UINT a, UINT b); ??? BOOL?? ?????? GT_ULONG(ULONG a, ULONG b); ??? BOOL??????????GT_SFLOAT(SFLOAT a,SFLOAT b); 小于等于比较 小于等于比较 ?? 该组函数功能是检查第一个输入值是否小于等于第二个输入值,若是,则输出值为ON,否 则为OFF。函数类型如下所示: ??? BOOL?? ?????? LE_FLOAT(FLOAT a, FLOAT b); ??? BOOL?? ?????? LE_INT(INT a, INT b); ??? BOOL?? ?????? LE_LONG(LONG a, LONG b); ??? BOOL?? ?????? LE_UINT(UINT a, UINT b); ??? BOOL?? ?????? LE_ULONG(ULONG a, ULONG b); ??? BOOL??????????LE_SFLOAT(SFLOAT a,SFLOAT b);

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 14 of 30

小于比较 小于比较 ??? 该组函数功能是检查第一个输入值是否小于第二个输入值,若是,则输出值为ON,否则 为OFF。函数类型如下所示: ??? BOOL?? ?????? LT_FLOAT(FLOAT a, FLOAT b); ??? BOOL?? ?????? LT_INT(INT a, INT b); ??? BOOL?? ?????? LT_LONG(LONG a, LONG b); ??? BOOL?? ?????? LT_UINT(UINT a, UINT b); ??? BOOL?? ?????? LT_ULONG(ULONG a, ULONG b); ??? BOOL??????????LT_SFLOAT(SFLOAT a,SFLOAT b); 不等比较 不等比较 ?? 该函数的功能是对两个输入值进行比较,若输入值不等,则输出值为ON,否则为OFF。 ?? N和ENO能作为附加参数加以设置。 函数类型如下所示: ??? BOOL?? ?????? NE_BOOL(BOOL a, BOOL b); ??? BOOL ?????????NE_BYTE(BYTE A,BYTE B);??? ??? BOOL?? ?????? NE_DWORD(DWORD a, DWORD b); ??? BOOL?? ?????? NE_FLOAT(FLOAT a, FLOAT b); ??? BOOL?? ?????? NE_INT(INT a, INT b); ??? BOOL?? ?????? NE_LONG(LONG a, LONG b); ??? BOOL?? ?????? NE_UINT(UINT a, UINT b); ??? BOOL?? ?????? NE_ULONG(ULONG a, ULONG b); ??? BOOL?? ?????? NE_WORD(WORD a, WORD b);??? ??? BOOL??????????NE_SFLOAT(SFLOAT a,SFLOAT b);

转换函 转换函数
LONG?? DWORD_TO_LONG(DWORD a); ??? 该函数功能是将DWORD型的输入值转化为LONG型数据类型。 ?

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 15 of 30

INT??? FLOAT_TO_INT(FLOAT a); ??? 该函数功能是将FLOAT型的输入值转化为INT型数据类型。 ? FLOAT? INT_TO_FLOAT(INT a); ??? 该函数功能是将INT型的输入值转化为FLOAT型数据类型。 ? LONG?? INT_TO_LONG(INT a); ??? 该函数功能是将INT型的输入值转化为LONG型数据类型。 ? UINT?? INT_TO_UINT(INT a); ??? 该函数功能是将INT型的输入值转化为UINT型数据类型。 ? WORD?? INT_TO_WORD(INT a); ??? 该函数功能是将INT型的输入值转化为WORD型数据类型。 ? DWORD ?LONG_TO_DWORD(LONG a); ??? 该函数功能是将LONG型的输入值转化为DWORD型数据类型。 ? FLOAT? LONG_TO_FLOAT(LONG a); ??? 该函数功能是将LONG型的输入值转化为FLOAT型数据类型。 ? INT??? LONG_TO_INT(LONG a); ??? 该函数功能是将LONG型的输入值转化为INT型数据类型。 ? ULONG ?LONG_TO_ULONG(LONG a); ??? 该函数功能是将LONG型的输入值转化为ULONG型数据类型。

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 16 of 30

? INT????UINT_TO_INT(UINT a); ??? 该函数功能是将UINT型的输入值转化为INT型数据类型。 ? ULONG ?UINT_TO_ULONG(UINT a); ??? 该函数功能是将UINT型的输入值转化为ULONG型数据类型。 ? WORD? ?UINT_TO_WORD(UINT a); ??? 该函数功能是将UINT型的输入值转化为WORD型数据类型。 ? DWORD ?ULONG_TO_DWORD(ULONG a); ??? 该函数功能是将ULONG型的输入值转化为DWORD型数据类型。 ? LONG???ULONG_TO_LONG(ULONG a); ??? 该函数功能是将ULONG型的输入值转化为LONG型数据类型。 ? UINT???ULONG_TO_UINT(ULONG a); ??? 该函数功能是将ULONG型的输入值转化为UINT型数据类型。 ? BYTE???WORD_TO_BYTE(WORD A); ??? 该函数功能是将WORD型的输入值转化为BYTE型数据类型。 ? WORD???BYTE_TO_WORD(BYTE A); ??? 该函数功能是将BYTE型的输入值转化为WORD型数据类型。 ? INT??? WORD_TO_INT(WORD a);

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 17 of 30

??? 该函数功能是将WORD型的输入值转化为INT型数据类型。 ? UINT???WORD_TO_UINT(WORD a); ??? 函数功能是将WORD型的输入值转化为UINT型数据类型。 ? FLOAT? SFLOAT_TO_FLOAT(SFLOAT A);????? ??? 函数功能是将SFLOAT型的输入值转化为FLOAT型数据类型。 ? SFLOAT FLOAT_TO_SFLOAT(FLOAT A); ??? 函数功能是将FLOAT型的输入值转化为SFLOAT型数据类型。 ? INT ?? SFLOAT_TO_INT(SFLOAT A); ??? 函数功能是将SFLOAT型的输入值转化为INT型数据类型。 ? SFLOAT INT_TO_SFLOAT(INT A); ??? 函数功能是将INT型的输入值转化为SFLOAT型数据类型。

INT ???DEC_TO_BCD(BYTE dec);????????? ??? 函数功能:同十进制转换为BCD码模块,具体见FBD说明书。

逻辑运算 逻辑运算
逻辑与 逻辑与函数 该组函数的功能是将输入值进行该逻辑与操作,并将结果赋给输出值。函数类型如下所 示: ??? BOOL?? ?????AND_BOOL(BOOL a, BOOL a); ??? BYTE ???????AND_BYTE(BYTE A,BYTE B);

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 18 of 30

??? DWORD? ???? AND_DWORD(DWORD a, DWORD b); ??? WORD?? ???? AND_WORD(WORD a, WORD b); 逻辑取反函数 逻辑取反函数 取反函 ?? 该组函数的功能是将输入值进行逻辑取反操作,并将结果赋给输出值。函数类型如下所 示: ??? BOOL?? ?????NOT_BOOL(BOOL a); ??? BYTE ???????NOT_BYTE(BYTE A); ??? DWORD? ???? NOT_DWORD(DWORD a);??? ??? WORD? ????? NOT_WORD(WORD a); 逻辑或函数 逻辑或函数 或函 ???该函数的功能是将输入值进行逻辑或操作,并将结果赋给输出值。函数类型如下所示: ??? BOOL?? ?????OR_BOOL(BOOL a, BOOL b); ??? BYTE ???????OR_BYTE(BYTE A,BYTE B); ??? DWORD? ???? OR_DWORD(DWORD a, DWORD b); ??? WORD?? ???? OR_WORD(WORD a, WORD b); 循环左移函数 左移函数 ?? 该组函数功能是将输入值IN进行循环左移,并将结果赋给输出值。 函数类型如下所示: ??? DWORD? ???? ROL_DWORD(DWORD a, UINT b); ??? WORD?? ???? ROL_WORD(WORD a, UINT b); 循环右移函数 右移函数 ?? 该组函数功能是将输入值IN进行循环右移,并将结果赋给输出值。函数类型如下所示: ??? DWORD? ???? ROR_DWORD(DWORD a, UINT b); ??? WORD?? ???? ROR_WORD(WORD a, UINT b); 逻辑左移函数 逻辑左移函数 左移函 该组函数功能是将输入值IN进行左移(从右边填零),并将结果赋给输出值OUT。函数类 型如下所示: ??? DWORD? ???? SHL_DWORD(DWORD a, UINT b);

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 19 of 30

??? WORD?? ???? SHL_WORD(WORD a, UINT b); 逻辑右移函数 逻辑右移函数 右移函 ??? 该组函数功能是将输入值IN进行右移(从左边填零),并将结果赋给输出值OUT。函数类 型如下所示: ??? DWORD? ???? SHR_DWORD(DWORD a, UINT b); ??? WORD?? ???? SHR_WORD(WORD a, UINT b); 逻辑异或函数 逻辑异或函数 该组函数的功能是将输入值进行逻辑异或操作,并将结果赋给输出值。函数类型如下所 示: ??? BOOL?? ?????XOR_BOOL(BOOL a, BOOL b); ??? BYTE ???????XOR_BYTE(BYTE A,BYTE B); ??? DWORD? ???? XOR_DWORD(DWORD a, DWORD b); ??? WORD?? ???? XOR_WORD(WORD a, WORD b);

数学函 数学函数
FLOAT? ? ABS_FLOAT(FLOAT a); ???? INT??? ??ABS_INT(INT a); ???? LONG?? ??ABS_LONG(LONG a); ??? 这三个函数的功能是计算输入值的绝对值并将结果赋给输出值。 ? FLOAT? ? ACOS(FLOAT a); ??? 该函数功能是计算输入值的反余弦值,并将结果以弧度的形式赋给输出值。 ? FLOAT? ? ASIN(FLOAT a); ??? 该函数功能是计算输入值的反正弦值,并将结果以弧度的形式赋给输出值。 ? FLOAT? ? ATAN(FLOAT a);

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 20 of 30

该函数的功能是计算输入值的反正切值,并将结果以弧度的形式赋给输出值。 ? FLOAT? ? ATAN2(FLOAT a, FLOAT b); ??? 该函数的功能是计算坐标(x,y)对应的反正切值,并将结果以弧度的形式赋给输出值。 ? FLOAT? ? COS(FLOAT a); ??? 该函数功能是计算输入值的余弦值,并将结果赋给输出值。 ? FLOAT? ? COSH(FLOAT a); 该函数功能是计算输入值的工程余弦值,并将结果赋给输出值。输入值必须是弧度形 式。 ? FLOAT? ? EXP(FLOAT a); 该函数功能是计算以e为底,输入值IN为指数的幂级数,并将结果赋给输出值。 ? FLOAT? ? LN(FLOAT a); ??? 该函数功能是计算输入值自然对数,并将结果赋给输出值。 ? FLOAT? LOG(FLOAT a); ??? 该函数功能是计算以10为底的对数,并将结果赋给输出值。 ? FLOAT??? POW(FLOAT a, FLOAT b); ??? 该函数功能是计算y为指数,x为底的幂级数,并将结果赋给输出值OUT。 ? FLOAT??? SIN(FLOAT a); ??? 该函数功能是计算输入值IN的正弦值,并将结果赋给输出值OUT。 ?

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 21 of 30

FLOAT??? SINH(FLOAT a); ??? 该函数功能是计算输入值IN的工程正弦值,并将结果赋给输出值。 ? FLOAT??? SQRT_FLOAT(FLOAT a); ???? SFLOAT? SQRT_SFLOAT(SFLOAT a); ??? 这两个函数功能是计算输入值IN的平方根,并将结果赋给输出值OUT。 对于 SQRT_SFLOLAT函数,其输入值在0到1之间。 ? FLOAT??? TAN(FLOAT a); ??? 该函数功能是计算输入值IN的正切值,并将结果赋给输出值OUT。 ? FLOAT??? TANH(FLOAT a); ??? 函数功能是计算输入值IN的工程正切值,并将结果赋给输出值OUT。

选择函 选择函数
限幅函数 限幅函数 该组函数的功能是限幅,即当输入大于上限值时输出上限值,当输入小于下限值时输出 下限值,否则输出输入值。函数类型如下所示: ??? FLOAT? ?????? LIM_FLOAT(FLOAT max, FLOAT a, FLOAT min); ??? INT?? ?? ?????LIM_INT(INT max, INT a, INT min); ??? LONG?? ????? ?LIM_LONG(LONG max, LONG a, LONG min); ??? UINT?? ???????LIM_UINT(UINT max, UINT a, UINT min); ??? ULONG? ????? ?LIM_ULONG(ULONG max, ULONG a, ULONG min); ??? SFLOAT????????LIM_SFLOAT(SFLOAT max,SFLOAT a,SFLOAT min); 最大值 最大值函数 该组函数的功能是将输入值中的最大值赋给输出值。函数类型如下所示: ??? FLOAT? ?????? MAX_FLOAT(FLOAT a, FLOAT b);

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 22 of 30

??? INT??? ???????MAX_INT(INT a, INT b); ??? LONG?? ????? ?MAX_LONG(LONG a, LONG b); ??? UINT?? ???????MAX_UINT(UINT a, UINT b); ??? ULONG? ????? ?MAX_ULONG(ULONG a, ULONG b); ??? SFLOAT????????MAX_SFLOAT(SFLOAT a,SFLOAT b); 最小值函数 最小值 该组函数的功能是将输入值中的最小值赋给输出值。函数类型如下所示: ??? INT??? ???????MIN_INT(INT a, INT b); ??? LONG?? ????? ?MIN_LONG(LONG a, LONG b); ??? UINT?? ???????MIN_UINT(UINT a, UINT b); ??? ULONG? ????? ?MIN_ULONG(ULONG a, ULONG b); ??? SFLOAT????????MIN_SFLOAT(SFLOAT a,SFLOAT b); 选择函 选择函数 该组函数的功能是当SW=OFF时,将输入值IN1赋给输出值;当SW=ON时,将输入值IN2赋给 输出值。函数类型如下所示: ??? BOOL?? ?????? SEL_BOOL(BOOL sw, BOOL a, BOOL b); ??? DWORD? ???? ? SEL_DWORD(BOOL sw, DWORD a, DWORD b); ??? FLOAT? ?????? SEL_FLOAT(BOOL sw, FLOAT a, FLOAT b); ??? INT??? ???????SEL_INT(BOOL sw, INT a, INT b);??? ??? LONG?? ????? ?SEL_LONG(BOOL sw, LONG a, LONG b); ??? UINT?? ???????SEL_UINT(BOOL sw, UINT a, UINT b); ??? ULONG? ????? ?SEL_ULONG(BOOL sw, ULONG a, ULONG b); ??? WORD?? ???? ? SEL_WORD(BOOL sw, WORD a, WORD b); ??? SFLOAT????????SEL_SFLOAT(BOOL sw,SFLOAT a,SFLOAT b);

BOOL ??? ??? SEL_1IN3(BOOL pv1,BOOL pv2,BOOL pv3); ??? 函数功能:同三选一开关信号选择模块,具体见FBD说明书。

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 23 of 30

? BOOL?????? ? SEL_1IN5(BOOL pv1,BOOL pv2,BOOL pv3,BOOL pv4,BOOL pv5); ??? 函数功能:同五选一开关信号选择模块,具体见FBD说明书。??

通讯辅助函数 讯辅助函数 助函
BOOL?????? GETBIT(DWORD num, UINT serial); 函数功能:从输入的DWORD型变量num中取出指定位的标号,如果该标号为1,则输出为 ON,如果为0,则输出为OFF。 serial取值范围是0~31,如果serial大于31,那么输出OFF。 ? FLOAT? ? ? GETFLOAT(DWORD num); ??? 函数功能:将输入DWORD型变量用FLOAT型来解释输出。 ? INT????????GETINT(DWORD num, UINT serial); 函数功能:从32位的DWORD型输入变量num的指定位置取出16位的INT型变量,当SERIAL= 0时,取低16位;当SERIAL≠0时,取高16位。 ? DWORD?? ?? GETMSG(UINT nStation, UINT serial); 函数功能:该模块根据输入的控制站序号nStation和消息序号serial,直接从接收缓冲 区中读出指定控制站指定位置的信息。 ? UINT???????GETUINT(DWORD num, UINT serial); ??? 函数功能:从32位的DWORD型输入变量num的指定位置取出16位的UINT型变量,当serial =0时,取低16位;当serial≠0时,取高16位。 ? WORD???? ? GETWORD(DWORD num, UINT serial); 函数功能:从32位的DWORD型输入变量num的指定位置取出16位的WORD型变量,当serial =0时,取低16位;当serial≠0时,取高16位。

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 24 of 30

? SFLOAT?? ? GETSFLOAT(DWORD num,UINT serial); 函数功能:该模块的功能是从输入的32位DWORD型值的指定位置取16位的SFLOAT型值, 当serial=0,取低16位;当serial≠0,取高16位。 ? void???????SENDMSG(UINT size); 函数功能:该模块根据输入的消息个数,使能控制站共享信息广播,广播所指定的消息 个数到SCnetII网络,其他控制站通过SCnetII网络收到该控制发送的信息。具体功能见 SENGMSG功能块。 ? DWORD?? ?? SETBIT(DWORD num, BOOL val, UINT serial); ??? 函数功能:设置输入num的serial位的值,当val为OFF时,该位为0,反之则为1。 ??? serial取值范围是0~31,当serial>31时,返回0。

DWORD ???? SETFLOAT(FLOAT val); ??? 函数功能:将输入val安DWORD型来解释输出。 ? DWORD ???? SETINT(DWORD num, INT val, UINT serial); 函数功能:当serial=0,将输入num的低16位设置为val,当serial≠0,将输入num的高 16位设置为val。 ? DWORD ???? SETUINT(DWORD num, UINT val, UINT serial); 函数功能:当serial=0,将输入num的低16位设置为val,当serial≠0,将输入num的高 16位设置为val。 ? DWORD ???? SETWORD(DWORD num, WORD val, UINT serial); 函数功能:当serial=0,将输入num的低16位设置为val,当serial=1,将输入num的高 16位设置为val。 ?

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 25 of 30

DWORD ???? SETSFLOAT(DWORD num,SFLOAT val,UINT serial); 函数功能:当serial=0,将输入num的低16位设置为val,当serial=1,将输入num的高 16位设置为val。

系统时间函数 统时间函
INT ???????????? CENTURY(); ??? 函数功能:得到当前年份的前两个数字,与YEAR()函数得到的值组成当前年份。 ? INT ???????????? YEAR(); ??? 函数功能:得到当前年份后两个数字,与CENTURY()函数得到的值组成当前年份。 ? INT ???????????? MONTH(); ??? 函数功能:得到当前月份。 ? INT ???????????? DAY(); ??? 函数功能:得到当前日期。 ? INT ???????????? HOUR(); ??? 函数功能:得到当前时钟值。 ? INT ???????????? MINUTE(); ??? 函数功能:得到当前的分钟值。 ? INT ???????????? SECOND(); ??? 函数功能:得到当前的秒数。

特殊函数 特殊函数

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 26 of 30

BOOL ???? LIMITOR(INT IN1,INT IN2,INT IN3,INT IN4,INT IN5,INT IN6,INT IN7,INT IN8,INT S9,INT S10); ??? 函数功能:用来监视8个以下的数字量输入,并根据S9和S10设置的状态产生一个bool量 输出。具体见FBD说明书。 ? SFLOAT ?? NEWSQRT(SFLOAT IN,SFLOAT KP,SFLOAT DIS); ??? 函数功能:用来计算半浮点输入IN的平方根,输出= KP×SQRT(IN)+DIS 。

其他函数 其他函数
BOOL ?????????? ISSTANDBY(); ??? 函数功能:取得主控卡冗余状态,返回为ON表示处于备用状态,OFF则为工作状态。

输入处理函数 理函数
WORD? ? GETPATFLAG(INT N); ??? 函数功能:得到第N通道PAT卡工作标志,具体见FBD说明书。

WORD? ? GETPATSTATE(INT N); ??? 函数功能:取得第N通道PAT卡状态,具体见FBD说明书。 ? SFLOAT ?GETPATPV(INT N); ??? 函数功能:取第N通道的PAT卡PV值。

FLOAT ??SATENTHA(FLOAT P);??? ??? 函数功能:计算压力范围是0.1MPa-16.0MPa的饱和蒸汽的焓值。输入的压力单位是KPa。 具体见FBD说明书。 ? SFLOAT ?SATSTEAM(float press,float press0,SFLOAT Flow0); ??? 函数功能:饱和蒸汽的温压补偿,具体可见FBD说明书。

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 27 of 30

? SFLOAT ?SATSTEAM_DP(float PRESS,float DENSITY0,SFLOAT FLOW0); ??? 函数功能:饱和蒸汽的温压补偿,具体可见FBD说明书。 ? SFLOAT ?SATSTEAM_EX(BOOL SIGNALSEL,float PRESS,float DENSITY0,SFLOAT SIGNAL); ??? 函数功能:饱和蒸汽的温压补偿模块,具体见FBD说明书。 ? SFLOAT ?COMPENSATE(SFLOAT SteamFlow0,FLOAT SteamTemperture,FLOAT SteamPress,FLOAT DesignV); ??? 函数功能:过热蒸汽的温压补偿模块,具体可参见FBD说明书。??? ? SFLOAT ?FXY(SFLOAT x,INT n);??? ??? 函数功能:折线表处理函数,x是输入值,n是指采用第几个折线表进行插值。 ? SFLOAT ?GET_FXY_X(INT num,INT n); ??? 函数功能:得到第n个折线表第num个x的值。 ? SFLOAT ?GET_FXY_Y(INT num,INT n); ??? 函数功能:得到第n个折线表第num个y的值。 ? void?? ?SET_FXY_X(SFLOAT x,INT num,INT n); ??? 函数功能:设置第n个折线表第num个x的值。 ? void?? ?SET_FXY_Y(SFLOAT x,INT num,INT n); ??? 函数功能:设置第n个折线表第num个y的值。 ?

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 28 of 30

SFLOAT ?LINECPS(SFLOAT IN,SFLOAT KP,SFLOAT DIS); ??? 函数功能:输出= IN×KP+DIS。 ? void ?? SETPATCON(WORD CON,INT N); ??? 函数功能:设置第N个PAT通道的特殊标志字节。 ?

智能通讯 智能通讯卡处理函数 理函数
ULONG GW_DEFBUF( UINT Size ) 功能:定义命令的发送缓冲区 输入: ?????? ????? Size:?????????UINT(缓冲区大小,最大不超过1024) 输出:????????????????? ULONG(缓冲区指针) void ?GW_WRITEBUF( ULONG MsgBuf, UINT Serial, ?BYTE Char) 功能:向缓冲区写入一个元素 输入: ???? ???? MsgBuf: ???????? ULONG (缓冲区指针) ?????? ?Serial: ???????? UINT? (写入位置) ?????? ???? Char:?? ???????? BYTE? (写入数据) 输出: ?????? ????? 无,????? (注:如果Serial越限,则放弃操作) BYTE GW_READBUF(ULONG MsgBuf, UINT Serial ) ??? 功能:从缓冲区读入一个元素 输入: ?????? ???? MsgBuf:????????? ULONG (缓冲区指针) ?????? ???? Serial: ???????? UINT (写入位置) 输出:

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 29 of 30

?????????? ???? BYTE (返回数组内指定位置数据,如果Serial越限,则返回0) BYTE? GW_ISCMDFINSHED( BYTE CmdId ) 功能:判断命令是否执行完毕 输入: ?????? ????? CmdId: BYTE (命令号 0-255)? 输出:??? ????? BYTE ???????????????????? ????0: 正在执行 ???????????????????? ??? 1: 正常结束 ???????????????????? ??? 2: 异常结束 UINT GW_GETRCVLEN(BYTE CmdId ) 功能:取得接收长度 输入: ?????? ????? CmdId:???????? BYTE (命令号 0-255 ) 输出:????????????????? UINT(返回接收到信息的长度) ULONG ?GW_GETRCVMSG( BYTE CmdId ) 功能: 拷贝接收到的数据到指定缓冲区 输入: ?????? ????? CmdId:?? ??? BYTE (命令号 0-255 ) 输出:??? ??????????? ULONG (接收数据区指针) WORD GW_CRC16(ULONG MsgBuf, WORD Len) 功能: 对缓冲区中指定长度元素进行CRC检验 输入: ???? ? MsgBuf: ??????? ULONG (缓冲区指针) ???? ? Len:??????????? WORD(指定长度) 输出:????????????????? WORD (16位的CRC校验) void? GW_STARTCMD( BYTE CmdId )

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20

Page 30 of 30

功能:手动启动命令执行 输入: ?????? ????? CmdId: ???? BYTE (命令号 0-255)?? 输出:无 BYTE GW_FIRSTRUN(BYTE Any) 功能: 判断是否首次运行 输入: ?????? ???? Any :?? BYTE 任何数 输出:?????????? BYTE (0:非首次运行, 1:首次运行) ? WORD GW_CRC16x(ULONG MsgBuf,WORD Len);

功能:对缓冲区中指定长度元素进行CRC 检验(CCITT标准CRC16校验)。MsgBuf为缓 冲区指针,Len为指定长度。函数返回16位CRC校验值。 输入: ?????? ?MsgBuf:ULONG (缓冲区指针) ?????? ?Len:?? WORD(指定长度) 输出:??? ????? WORD(16位的CRC校验)

file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh557.htm

2011-9-20


相关文章:
浙大中控DCS个人总结
浙大中控DCS个人总结_工作总结/汇报_总结/汇报_实用文档。纯属个人总结 ...FBD 段落,LD 段落,SFC 段落,ST 语言;按段类型可将段落 分类为:程序段落,...
浙大中控DCS系统学习笔记
浙大中控DCS系统学习笔记_IT/计算机_专业资料 暂无评价|0人阅读|0次下载|举报文档 浙大中控DCS系统学习笔记_IT/计算机_专业资料。在浙江中控学习时的笔记...
浙大中控DCS系统配置清单
浙大中控DCS系统配置清单_机械/仪表_工程科技_专业资料。设计选型大桥糖厂锅炉汽机 DCS(浙大中控)系统配置 (浙大中控)一、系统规模 序号 1 2 3 4 信号类型 4~...
浙大中控DCS
浙大中控DCS_信息与通信_工程科技_专业资料 暂无评价|0人阅读|0次下载|举报文档 浙大中控DCS_信息与通信_工程科技_专业资料。今日推荐 ...
浙大中控和和利时对比
浙大中控和和利时系统对比浙大系统 浙大系统共有四个系列:JX-300、 JX-300XP、ECS-100、 ECS-700. 、、、 JX-300:浙大中控早期 DCS 系统,现在已经不再生产,...
浙大中控dcs
浙大中控dcs_信息与通信_工程科技_专业资料。浙大中控简称中控, 中控的 DCS 是分布式控制系统的英文缩写 , 自控行业又称之为集散控制系统。即所谓的分布式控制系统,...
浙江中控DCS培训总结
浙江中控DCS培训总结_信息与通信_工程科技_专业资料。培训总结 浙江中控培训总结 ...选修课包 括各种组态语言编程、上机模拟、典型控制回路的设计(手操器、单回路、...
论浙大中控的DCS页面控制与IO点设定以及流程设计
浙大中控DCS页面控制与IO点设定以及流程设计_电力/水利_工程科技_专业资料。浙大DCS的ECS100流程应用详解,FW系列硬件综合应用,在现在最流行的环保系统中应用。...
浙大中控JP300X使用手册(第二册)
信号点设置 SUPCON WebField JX-300X DCS 控制系统 培训教材 3-16 3.4.1 ...?ST 语言 在 SCControl 中可以把ST 语言和其它图形编程语言组合使用,其使用...
浙大中控DCS控制系统(zhaojia)
浙大中控DCS控制系统(zhaojia)_能源/化工_工程科技_专业资料。第一章硬件介绍 1.1 主控制卡(部件号 SP243X)主控制卡(SP243X)是控制站的软硬件核心,完成控制...
更多相关标签:
浙大中控dcs系统 | 浙大中控dcs | 浙大中控dcs软件下载 | 浙大中控dcs视频教程 | 浙大中控dcs编程实例 | 浙大中控dcs培训 | 浙大中控dcs组态软件 | 浙大中控dcs组态视频 |