欧姆龙数据类型及结构化文本编程.pdf
30页155附录 A数据类型基本数据类型注TIMER 和 COUNTER 数据类型不能用于结构化文本功能块中导数数据类型数据类型内容大小数值范围BOOL位数据10 (FALSE), 1 (TRUE)INT整数16-32,768 ~ +32,767DINT双整数32-2,147,483,648 ~ +2,147,483,647LINT长 (8 个字节)整数64-9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807UINT无符号整数16&0 ~ 65,535UDINT无符号双整数32&0 ~ 4,294,967,295ULINT无符号长 (8 个字节)整数64&0 ~ 18,446,744,073,709,551,615REAL实数32-3.402823 × 1038~ -1.175494 × 10-38 , 0, +1.175494 × 10-38~ +3.402823 × 1038LREAL长实数64-1.79769313486232 × 10308 ~ -2.22507385850720 × 10-308 , 0, 2.22507385850720 × 10-308 ~ 1.79769313486232 × 10308WORD16 位数据16#0000 ~ FFFF 或 &0 ~ 65,535DWORD32 位数据32#00000000 ~ FFFFFFFF or &0 ~ 4,294,967,295LWORD64 位数据64#0000000000000000 ~ FFFFFFFFFFFFFFFF 或&0 ~ 18,446,744,073,709,551,615TIMER (见注释)定时器 (见注 1)标记:1 位PV:16 位定时器数:0 ~ 4095 完成标记:0 或 1 定时器 PV:0 ~ 9999(BCD); 0 ~ 65535 (二进制)COUNTER (见注释)计数器 (见注 2)标记:1 位PV:16 位定时器数:0 ~ 4095 完成标记:0 或 1 定时器 PV:0 ~ 9999(BCD); 0 ~ 65535 (二进制)FUNCTION BLOCK功能块实例------数组1 维数组;最多 32000 元素156数据类型附录 A157附录 B结构化文本 (ST 语言)结构化文本结构化文本 (也称作 ST 语言)是一个与 PASCAL 相类似的高级编程语言。
PASCAL 使用诸如选择语句和迭代语句的语言结构使用语句来配置用结构化文本写的程序用变量和方程式来配置语句• 方程式是包含运算符和操作数(变量或常数)的程序运算符包括算术运算符、比较运算符和逻辑运算符• 语句既可是赋值语句也可是控制语句赋值语句将方程式中的计算结果保存于变量中控制语句包括选择语句和迭代语句结构化文本范例限制语句分隔符• 语句 (赋值语句和控制语句)必须以分号 (;)结束按回车不能完成语句• 不得将分号(;)用作带保留字、数值或方程式的语句分隔符除了在语句终端之外,分隔符插入语句中会导致句法发生错误注释• 注释封闭在扩号和星号内例如(* 注释 *) 除了扩号和星号之外的任何字符均可用于注释中不支持注释嵌套记号范例(* 注释 *)(* 这是注释 *)注:不可以注释嵌套例如, (*(* 不支持这种嵌套 *)*)158结构化文本 (ST 语言)附录 B空格、回车和制表符• 任何数量的空格、回车和制表符或其组合均可用于语句中任何地方因此,在保留字和方程式之间使用空格、回车和制表符以便读取• 在以下标识 (用于编辑的最小意义单位)之间不能使用空格、回车和制表符 在这种情况下,它们作为标识分隔符。
标识:保留字、变量名、特殊字符、常数 (数值)保留字 (大写或小写: AND, CASE, DO, ELSE, FOR, IT, NOT, OF, OR, REPEAT, THEN, TO, UNTIL,WHILE, XOR, TRUE, FALSE, ELSIF, BY, EXIT, RETURN变量名:不是保留字的任何文本均识别为变量名特殊字符:< =, > =, <> , :=, .., &, (*, *)常数 (数值) :仅用于十进制数的数值16# 跟十六进制数的数值2# 跟二进制数的数值8# 跟八进制数的数值如果在上述标识(用于编辑的最小意义单位)之间使用空格、回车和制表符,任一侧处的标识部分作为分隔标识来处理因此,确保空格、回车和制表符不用于单个标识中• 在保留字和变量名之间始终使用空格、回车和制表符或其他标识分隔符在下例中,框 (□)表示要求有空格、回车和制表符或其他标识分隔符的地方IF □ A > 0THEN □ X=10;ELSE □ X:=0;END_IF;大写和小写• 保留字和变量名不分大小写 (两者均可使用) 变量名禁止字符• 以下方扩号内的字符不能用于变量名。
[!], [[#], [$], [%], [&], [ 注 , [(],, [)], [-], [=], [^], [~], [\], [|], [@], [ 注 , [[], [{], [;], [+], [:], [*], []], [}], [,], [ <], [.], [ > ], [/], [?]• 数字 0 到 9 不能用作变量名的第一个字符• 在变量名中,下划线不能紧跟着另一根下划线• 空格不能用于变量名中如果这些字符中任何一个在使用,则会出现错误信息输入常数 (数值)• 如下例所示,数值可以通过十进制、十六进制、八进制或二进制来表示表示方法范例 (用于十进制值 12)十进制:仅数值12十六进制: 16# 后面跟数值 16#C八进制: 8# 后面跟数值 8#14二进制: 2# 后面跟数值 2#1100运算符优先度• 考虑到结构化文本语法中的运算符优先度或扩号内需要优先度的运算,159结构化文本 (ST 语言)附录 B例:AND 比 OR 优先因此,在 X OR Y AND Z 范例中, Y AND Z 具有优先度。
CX-Programmer 的 ST 输入屏显示文本显示颜色当输入或粘贴于 ST 输入屏中时, CX-Programmer 自动以以下颜色显示文本• 文本关键字 (反白显示) :蓝色• 注释:绿色• 错误:红色• 其他:黑色更改字体选择 Tools - Options,点击 Appearance 条然后,点击 ST Font 按钮来修改字体大小或显示颜色字体名称、字体大小 (默认为 8 点)以及颜色也可以修改语句语句功能范例语句结束结束语句;赋值(* 和 *)之间的所有文本作为注释来处理(* 注释 *)分配替换表达式结果、变量或左面变量的右面值A:=B;IF, THEN, ELSIF, ELSE, END_IF当条件正确时,评估表达式IF ( 条件 _1) THEN( 表达 1);ELSIF ( 条件 _2) THEN( 表达 2);ELSE( 表达 3);END_IF;CASE, ELSE, END_CASE在变量值基础上评估表达式CASE ( 变量 ) OF1: ( 表达 1);2: ( 表达 2);3: ( 表达 3);ELSE( 表达 4);END_CASE;FOR, TO, BY, DO, END_FOR根据初始值、最终值和增量来反复评估表达式。
FOR ( 标识 ) := ( 初始值 ) TO ( 最终值 ) BY ( 递增 ) DO( 表达 );END_FOR;WHILE, DO, END_WHILE一旦条件正确,则反复评估表达式WHILE ( 条件 ) DO( 表达 );END_WHILE;REPEAT, UNTIL, END_REPEAT反复评估表达式直到条件正确REPEAT( 表达 );UNTIL ( 条件 ) END_REPEAT;EXIT停止重复处理EXIT;160结构化文本 (ST 语言)附录 B运算符注根据数据类型运算因此,INT 数据加法结果必须是使用 INT 数据类型的变量当整数型变量运算时出现进位或借位,需特别小心例如,使用整数型变量 A=3 和 B= 2 时,如果执行运算(A/B)*2,则 A/B 结果为 1(1.5 –小数点后面的数值忽略不计) ,因此 (A/B) *2 = 2函数RETURN返回至调用功能块程序中RETURN;功能块实例调用调用另一功能块定义带 FUNCTION BLOCK 数据类型的变量名 (被调用功能块定义输入变量名:=调用功能块定义变量名或常数, 被调用功能块定义输出变量名 = > 调用功能块定义输出变量名 ...);运算符号运算符支持的数据类型优先度 1:最低 11:最高括弧和括号(表达式) ,数组(变址)1功能评估标识符取决于功能块 (参阅 2-6 指令支持和操作数限制)2指数**REAL, LREAL3补码NOTBOOL, WORD, DWORD, LWORD4乘法*INT, DINT, UINT, UDINT, ULINT, REAL, LREAL5除法/INT, DINT, LINT, UINT, UDINT, ULINT, REAL, LREAL5加法+INT, DINT, LINT, UINT, UDINT, ULINT, REAL, LREAL6减法-INT, DINT, LINT, UINT, UDINT, ULINT, REAL, LREAL6比较< , > , < =, > =BOOL, INT, DINT, LINT, UINT, UDINT, ULINT, WORD, DWORD, LWORD, REAL, LREAL7等式=BOOL, INT, DINT, LINT, UINT, UDINT, ULINT, WORD, DWORD, LWORD, REAL, LREAL8不等式<>BOOL, INT, DINT, LINT, UINT, UDINT, ULINT, WORD, DWORD, LWORD, REAL, LREAL8布尔 AND&BOOL, WORD, DWORD, LWORD9布尔 ANDANDBOOL, WORD, DWORD, LWORD9布尔专有 ORXORBOOL, WORD, DWORD, LWORD10布尔 ORORBOOL, WORD, DWORD, LWORD11功能语法数函词绝对值、三角函数等算术函数指数 (EXPT)数据类型转换函数源数据类型 _TO_ 新数据类型 ( 变量名 )语句功能范例161结构化文本 (ST 语言)附录 B数函词以下数函词可以用于结构化文本中。
注数函词返回的数据类型与指数中所用的数据类型一样因此,功能返回抵替换的变量数据类型必须与指数数据类型一致算术函数以下一般指数函数可以用于结构化文本中注数函词返回的数据类型与指数中所用的数据类型一样因此,功能返回抵替换的变量数据类型必须与指数数据类型一致数函词自变量数据类型返回值数据类型内容范例ABS (自变量)INT, DINT, LINT, UINT, UDINT, ULINT, REAL, LREALINT, DINT, LINT, UINT, UDINT, ULINT, REAL, LREAL绝对值 (自变量)a: = ABS (b)(* 存储于变量 a 中的变量 b绝对值 *)SQRT (自变量)REAL, LREALREAL, LREAL平方根:√ 自变量a: = SQRT (b)(* 存储于变量 a 中的变量 b平方根 *)LN (自变量)REAL, LREALREAL, LREAL自然对数:LOGe自变量a: = LN (b)(* 存储于变量 a 中的变量 b自然对数 *)LOG (自变量)REAL, LREALREAL, LREAL常用对数:LOG10自变量a: = LOG (b)(* 存储于变量 a 中的变量 b常用对数 *)EXP (自变量)REAL, LREALREAL, LREAL自然指数:e 自变量a: = EXP (b)(* 存储于变量 a 中的变量 b自然指数 *)SIN (自变量)REAL, LREALREAL, LREAL正弦:自变量a: = SIN (b)(* 存储于变量 a 中的变量 b正弦 *)COS (自变量)REAL, LREALREAL, LREAL余弦:自变量a: = COS (b)(* 存储于变量 a 中的变量 b余弦 *)TAN (自变量)REAL, LREALREAL, LREAL正切:自变量a: = TAN (b)(* 存储于变量 a 中的变量 b正切 *)ASIN (自变量)REAL, LREALREAL, LREAL反正弦:自变量a: = ASIN (b)(* 存储于变量 a 中的变量 b反正弦 *)ACOS (自变量)REAL, LREALREAL, LREAL反余弦:自变量a: = ACOS (b)(* 存储于变量 a 中的变量 b反余弦 *)ATAN (自变量)REAL, LREALREAL, LREAL反正切:自变量a: = ATAN (b)(* 存储于变量 a 中的变量 b反正切 *)指数函数自变量数据类型返回值数据类型内容范例EXPT (底数,指数)底数: REAL, LREAL指数:INT, DINT, LINT, UINT, UDINT, ULINTREAL, LREAL指数:底数指数(* 作为基数的变量 b 和作为指数的变量 c 的指数存储于变量 a 中 *)162结构化文本 (ST 语言)附录 B数据类型转换函数以下数据类型转换函数可以用于结构化文本中。
语法源数据类型 _TO_ 新数据类型 ( 变量名 )例子:REAL_TO_INT (C)在本例中,变量 C 的数据类型可以从 REAL 修改为 INT数据类型组合下表给出了可以转换的数据类型组合是 = 可以转换;否 = 不能转)语句详细说明赋值概述用语句 (方程式、变量或常数)右侧来替代语句 (变量)左侧保留字:=冒号 (:) 和等号 (=) 组合语句语法变量 : = 方程式、变量或常数;用法赋值语句用于变量输入值在控制语句之前或之内这是基本语句该语句可以用来设置初始值、保存计算结果和递增或递减变量描述替换 (保存)变量的方程式、变量或常数举例说明例 1:方程式 X+1 结果替代变量 AA:=X+1;例 2:变量 B 数值替代变量 AA:=B;从至BOOLINTDINTLINTUINTUDINTULINTWORDDWORDLWORDREALLREALBOOL否否否否否否否否否否否否INT否否是是是是是是是是是是DINT否是否是是是是是是是是是LINT否是是否是是是是是是是是UINT否是是是否是是是是是是是UDINT否是是是是否是是是是是是ULINT否是是是是是否是是是是是WORD否是是是是是是否是是否否DWORD否是是是是是是是否是否否LWORD否是是是是是是是是否否否REAL否是是是是是是否否否否是LREAL否是是是是是是否否否是否163结构化文本 (ST 语言)附录 B例 3:用常数 10 替代变量 A。
注意事项要赋值的方程式、变量或常数的数据类型必须与要替代的变量数据类型一致否则,语法会出现错误控制语句IF 语句 (单一条件)概述当符合指定条件时,该语句用来执行表达式如果不符合条件,则执行其他表达式保留字IF, THEN, (ELSE), END_IF注 ELSE 不能省略语句语法IF <条件> THEN<表达式 _1 > ;ELSE<表达式 _2 > ;END_IF;流程图用法使用 IF 语句来进行其他运算这将取决于是否满足单一条件 (条件方程式) 描述条件 = 如果成立 , 执行表达式 _1条件 = 如果不成立 , 执行表达式 _2注意事项• IF 必须与 END_IF 一起使用• 条件必须包括赋值结果的正确或错误方程式例子:IF(A > 10)条件还可指定为布尔变量而不是方程式 因此, 变量值为 1 (ON) = 结果成立; 0 (OFF) = 结果不成立• 用于表达式 _1 和表达式 _2 的语句为赋值语句、 IF、 CASE、 FOR、 WHILE 或 REPEAT164结构化文本 (ST 语言)附录 B例子:IF <条件 _1 > THEN IF <条件 _2 > THEN<表达式 _1 > ; ELSE<表达式 _2 > : END_IF;END_IF;流程图如下:如上图所示,在此之前, ELSE 与 THEN 立即对应。
• 在表达式 _1 和表达式 _2 内,可以执行多个语句在表达式 中,多个语句之间使用分号 (;) 分隔符• ELSE 语句可以省略当省略 ELSE 时,如果条件方程式结果不正确,则无运算执行流程图举例说明例 1:如果变量 A > 0 是正确的,则数值 10 替代变量 X如果 A > 0 是错误的,则数值 0 替代变量 XIF A > 0 THEN X:=10;ELSE X:=0;END_IF;例 2:如果变量 A > 0 和变量 B > 1 均正确,则数值 10 替代变量 X 而数值 20 替代变量 Y如果变量 A > 0 和变量 B > 1 均错误,则变量 X 和变量 Y 均被数值 0 替代165结构化文本 (ST 语言)附录 BIF A > 0 AND B > 1 THEN X:=10; Y:=20;ELSE X:=0; Y:=0;END_IF;例 3 : 布尔 (BOOL 数据类型) 变量 A=1(ON), 用数值 10 替代变量 X 如果变量 A=0(OFF), 用数值 0 替代变量 XIF A THEN X:=10;ELSE X:=0;END_IF;IF 语句 (多个条件)概述当符合指定条件时,该语句用来执行表达式。
如果不符合第一个条件但另一个条件符合的话,则执行相应表达式如果无一条件符合,则执行其他表达式保留字IF, THEN, ELSIF, (ELSE)注ELSE 不能省略语句语法IF <条件 _1 > THEN <表达式 _1 > ; ELSIF <条件 _2 > THEN <表达式 _2 > ; ELSIF <条件 _3 > THEN <表达式 _3 > ;... ELSIF <条件 _n > THEN <表达式 _n > ;ELSE <表达式 _m > ;END_IF;流程图用法根据多个条件中哪个条件是符合的来使用 IF 语句执行不同运算 (条件 方程式)166结构化文本 (ST 语言)附录 B描述条件 1 = 如果成立,执行表达式 1条件 1 = 如果不成立,条件 2 = 如果成立,执行表达式 2条件 2 = 如果不成立,条件 3 = 如果成立,执行表达式 3等条件 n = 如果成立,执行表达式 n如无一条件符合,则执行条件 m注意事项• IF 必须与 END_IF 一起使用• 条件 _ □ 包含方程式正确或错误结果 (例如, IF(A > 10)只有布尔 (布尔数据类型)变量变还可指定为条件而不是方程式。
至于布尔条件,则当变量值为 1 (ON)时结果正确而变量值为 0 (OFF)时结果错误·可以用于表达式 _ □ 的语句为赋值语句、 IF、 CASE、 FOR、 WHILE 或 REPEAT·表达式 _ □ 中可以执行多个语句在表达式 中,多个语句之间使用分号 (;) 分隔符·ELSE 语句可以省略当省略 ELSE 时,如果任何条件方程式结果不正确,则无运算执行举例说明例 1:如果变量 A > 0 是正确的,则数值 10 替代变量 X如果 A > 0 是错误的但变量 B=1,则数值 1 替代变量 X如果 A > 0 是错误的但变量 B=2,则数值 2 替代变量 X如果符合这些条件中任何一个条件,则数值 0 替代变量 XIF A > 0 THEN X:=10; ELSIF B=1 THEN X:=1; ELSIF B=2 THEN X:=2;ELSE X:=0;END_IF;CASE 语句概述该语句执行选中的与整数方程值匹配的整数 如果选中的整数值不一样,则既不能执行表达式也不能执行规定的表达式保留字CASE语句语法CASE <整数方程式> OF<整数方程式值 _1 > : <表达式 _1 > ;<整数方程式值 _2 > : <表达式 _2 > ;...<整数方程式值 _n > : <表达式 _n > ;ELSE <表达式 _m > ;END_CASE;167结构化文本 (ST 语言)附录 B流程图用法根据指定的整数值,使用 CASE 语句来执行不同运算。
描述如果整数方程式与整数方程式值 _n 匹配,则执行表达式 _n如果整数方程式与任何整数方程式值 _n 不匹配,则执行表达式 _m注意事项• CASE 必须与 END_CASE 一起使用tinteger_equation 结果必须是整数格式 (INT、 DINT、 LINT、 UINT、 UDINT 或 ULINT) • 可以用于表达式 _ □ 的语句为赋值语句、 IF、 CASE、 FOR、 WHILE 或 REPEAT• 表达式 _ □ 中可以执行多个语句在表达式 中,多个语句之间使用分号 (;) 分隔符• 整数格式(INT、DINT、LINT、UINT、UDINT 或 ULINT)中的变量或返回整数值的方程式可以在整数方程式中进行规定• 当OR逻辑用于整数方程式值_n中的多个整数时, 用逗号分隔符来隔开数值 在第一个整数和最后一个整数之间用两个句点 (..) 作为分隔符来规定整数顺序举例说明例 1:如果变量 A 是 1,数值 1 替代变量 X如果变量 A 是 2,数值 2 替代变量 X如果变量 A 是 3,数值 3 替代变量 X如果无一匹配,则数值 9 替代变量 YCASE A OF 1:X:=1; 2:X:=2; 3:X:=3;ELSE Y:=0;END_CASE;168结构化文本 (ST 语言)附录 B例 2:如果变量 A 是 1,数值 1 替代变量 X。
如果变量 A 为 2 或 5,则数值 2 替代变量 X如果变量 A 为 6 到 10之间的数值,则数值 3 替代变量 X如果变量 A 为 11、12 或 15 到 20 之间的数值,则数值 4 替代变量 X如果无一匹配,则数值 9 替代变量 YCASE A OF1:X:=1;2,5:X:=2;6..10:X:=3;11,12,15..20:X:=4;ELSE Y:=0;END_CASE;FOR 语句概述该语句用来反复执行指定的方程式直到变量 (此处作为迭代变量)到达规定值保留字FOR, TO, (BY), DO, END_FOR注BY 可以省略语句语法FOR <循环变量> := <初始值> TO <最终值表达式> BY <递增值表达式>DO<表达式> ;END_FOR;流程图用法当事先已确定迭代数时, 使用FOR 语句 当根据指定的迭代变量值在数组变量中转换元素数时, FOR特别有用169结构化文本 (ST 语言)附录 B描述当循环变量为初始值时,执行表达式执行后,从递增方程式获得的数值添加至循环变量中如果循环变量<最终值表达式(见注 1) ,则执行 表达式执行后,从递增方程式获得的数值添加至循环变量中。
如果循环变量<最终值方程式的值 (见注 1) ,执行表达式 重复该过程如果循环变量≥最终值方程式 (见注 2) ,处理结束完成注(1) 如果递增方程式值是负值,则条件是循环变量>最终值方程式值2) 如果递增方程式值是负值,则条件是循环变量≤最终值方程式值注意事项• 可以在递增方程式中规定负值• FOR 必须与 END_FOR 一起使用• 初始值、最终值方程式和最终值方程式必须是整数数据类型(INT、DINT、LINT、UINT、UDINT 或ULINT) • 最终值处理结束后,迭代值递增至最终值 + 1迭代处理结束例子:在以下结构化文本中, “a”值是 TRUEFOR i:=0 TO 100 DO array[i]:=0;END_FOR;IF i=101 THEN a:=TRUE;ELSE a:=FALSE;END_IF;• 不得直接在更改迭代变量中使用 FOR 语句这样做会导致意外运算例子:FOR i:=0 TO 100 BY 1 DO array[i]:=0; i:=i+5;END_FOR;• 可以用于表达式 _ □ 的语句为赋值语句、 IF、 CASE、 FOR、 WHILE 或 REPEAT。
• 表达式 _ □ 中可以执行多个语句在表达式 中,多个语句之间使用分号 (;) 分隔符• BY 递增方程式可以省略省略时, BY 取为 1• 在初始值、最终值方程式和递增方程式中可以规定带整数数据类型 (INT、 DINT、 LINT、 UINT、UDINT 或 ULINT)或可返回整数值方程式的变量例 1:当迭代变量 n = 0 ~ 50 (以 5 递增)和数组变量 SP[n] 被 100 替代时,执行迭代FOR n:=0 TO 50 BY 5 DO SP[n]:=100;END_FOR;170结构化文本 (ST 语言)附录 B例 2:计算数组变量 DATA[n] 的元素 DATA[1] 到 DATA[50] 总值并替代变量 SUMFOR n:=0 TO 50 BY 1 DO SUM:=SUM+DATA[n];END_FOR;例 3:检测数组变量 DATA[n] 的元素 DATA[1] 到 DATA[50] 的最大值和最小值最大值替代变量 MAX 而最小值替代变量 MIN DATA[n] 数值在 0 到 1000 之间MAX:=0;MIN:=1000;FOR n:=1 TO 50 BY 1 DO IF DATA[n] > MAX THEN MAX:=DATA[n]; END IF; IF DATA[n] < MIN THEN MIN:=DATA[n]; END IF;END_FOR;WHILE 语句概述只要指定的条件正确,该语句就一直反复执行指定表达式。
保留字WHILE, DO, END_WHILE语句语法WHILE <条件> DO<表达式> ;END_WHILE;流程图用法当事先未确定迭代数时,使用 WHILE 语句(根据符合的条件)在符合条件的期间重复规定的处理只有当条件方程式处于正确 (预测试回路)时才能执行该语句描述在执行表达式 之前,评估条件如果条件 正确,执行表达式 I然后,再次评估条件重复该过程如果条件 错误,则不执行表达式,条件 评估结束171结构化文本 (ST 语言)附录 B注意事项• WHILE 必须与 END_WHILE 一起使用• 在执行表达式之前,如果条件 方程式是错误的,则不执行表达式情况下处理结束• 可以用于表达式 的语句为赋值语句、 IF、 CASE、 FOR、 WHILE 或 REPEAT• 表达式 中可以执行多个语句在表达式 中,多个语句之间使用分号 (;) 分隔符• 条件还可规定为布尔变量 (布尔数据类型)而不是方程式举例说明例 1:计算大于 1000 的数值 (以 7 递增)并替代变量 AA:=0;WHILE A > =1000 DO A:=A+7;END_WHILE;例 2:当 X < 3000 时, X 值翻倍而且数值替代数组变量。
DATA[1]:然后, X 值再乘以 2数值替代数组变量 DATA[2]:重复该过程n:=1’WHILE X < 3000 DO X:=X*2; DATA[n]:=X; n:=n+1;END_WHIE;REPEAT 语句概述该语句用来反复执行表达式直到指定的条件正确保留字REPEAT, UNTIL, END_REPEAT语句语法REPEAT<表达式> ;UNTIL <条件>END_REPEAT流程图172结构化文本 (ST 语言)附录 B用法如果事先未确定迭代数时,在规定处理后一旦条件符合即采用 REPEAT 语句来重复处理 (取决于条件是否符合该语句可用来确定是否要根据规定处理执行结果进行反复处理 (处理后回路) 描述第一次,无条件执行表达式然后,评估条件 方程式如果条件 是错误的,再次执行表达式如果条件 是正确的,则不执行表达式情况下处理结束注意事项• REPEAT 必须与 END_REPEAT 一起使用• 即使在执行表达式 之前条件 方程式是正确的,表达式仍执行• 可以用于表达式的语句为赋值语句、 IF、 CASE、 FOR、 WHILE 或 REPEAT。
• 表达式中可以执行多个语句在表达式 中,多个语句之间使用分号 (;) 分隔符• 条件 还可规定为布尔变量 (布尔数据类型)而不是方程式举例说明例 1:递增从 1 到 10 的数值总和替代变量 TOTALA:=1;TOTAL:=0;REPEAT TOTAL:=TOTAL+A; A:=A+1;UNTIL A > 10END_REPEAT;EXIT 语句概述仅在迭代语句 (FOR、 WHILE、 REPEAT)中使用该语句从而强制迭代语句结束当规定的条件符合时,该语句也可用于 IF 语句从而强制迭代语句结束保留字EXIT语句语法 (例子:在 IF 语句中使用)FOR (WHILE, REPEAT) 表达式...IF <条件> THEN EXIT;END_IF;...END_FOR (WHILE, REPEAT);用法在结束条件符合之前,使用 EXIT 语句来强制迭代处理结束描述 (例子:在 IF 语句中使用)当条件 方程式是正确的时,迭代语句 (FOR、 WHILE、 REPEAT)强制结束不执行 EXIT 后的任何语句173结构化文本 (ST 语言)附录 B注(1) 条件 还可规定为布尔变量 (布尔数据类型)而不是方程式。
2) 即使在执行表达式 之前条件 方程式是正确的,表达式仍执行举例说明当变量 n = 1 到 50 (以 1 递增)且 n 添加至数组变量 DATA[n] 中时,重复处理但如果 DATA[n] 大于 100,则处理结束FOR n:=1; TO 50 BY 1 DO DATA[n]:=DATA[n]+n; IF DATA[n] > 100 THEN EXIT; END_IF;END_FOR;RETURN 语句概述在结构化文本中功能块完成之前必须强制其结束时,该语句用来执行调用程序中功能块处后的下一指令保留字RETURN语句语法RETURN;用法当功能块已强制结束时,使用 RETURN 语句功能块调用语句概述该语句用来调用另一功能块定义保留字无语句语法在规定了实例名 (见注释)后,在括号内规定自变量 (调用功能块输入变量传至被调用功能块输入变量)和返回值 (被调用功能块输出变量传至调用功能块输出变量) 注实例名可以是任何具有功能块数据类型的内部变量以下两种方法中的任一一个均可用来输入功能调用语句1.规格方法 A:规定被调用和调用功能块变量名实例名 (被调用功能块定义输入变量名 = 调用功能块定义变量名或常数 , ..., 被调用功能块定义输出变量名或常数 = > 调用功能块定义输出变量名 , ...);注所有输入变量规格(被调用功能块定义输入变量名:= 调用功能块定义变量名或常数)必须用逗号分开。
只有所需的输出变量规格 (被调用功能块定义输出变量名或常数 = > 调用功能块定义输出变量名)必须用逗号分开2.规格方法 B:只规定调用功能块变量名 (或常数) ,省略被调用功能块变量名;实例名 (被调用功能块定义输入变量名 = 调用功能块定义变量名或常数 , ..., 被调用功能块定义输出变量名或常数 = > 调用功能块定义输出变量名 , ...);174结构化文本 (ST 语言)附录 B注如上所示,当被调用功能块定义输入和输出变量名被省略时,调用功能块输入变量(或常数)值按注册于变量表中的变量先后次序自动传输至被调用功能块输入变量同样,被调用功能块输出变量按注册于变量表中的变量先后次序自动返回至调用功能块输出变量用法采用功能块调用语句从 ST 语言程序中调用功能块定义 (ST 或梯级程序) 描述1.以下实例注册于变量表中的内部变量中2.如下例所示,在注册的实例名(本例中的 Calcu_execute)后的扩号内,指定在变量之间传输的数值语句结束用分号表示Calcu_execute (A:=B,C= > D) ;输入变量 B (在调用功能块中)数值传输至输入变量 A (在被调用功能块中) 。
象输出变量 C (在被调用功能块中)数值那样,该值返回至输出变量 D (在调用功能块中) 举例说明在下例中,从功能块 1 (FB1)中调用功能块• 用 ST 语言写功能块 1• 既可用梯级语言也可用 ST 语言写功能块 2• 下表所示的是功能块 1 中的变量和接收 / 传输数据的功能块 2 中对应的变量内部变量元素内容范例名称任何实例名Calcu_execute数据类型FUNCTION BLOCKFUNCTION BLOCKFB 定义选择被调用功能块定义计算变量类型变量名传输至 FB2/ 从 FB2 中上传输入变量FB1_IN1传输至 FB2_IN1FB1_IN2传输至 FB2_IN2FB1_IN3传输至 FB2_IN3175结构化文本 (ST 语言)附录 B• 下表所示的是功能块 2 中的变量和接收 / 传输数据的功能块 1 中对应的变量例 1:规格方法 A (指定 FB1 和 FB2 变量)Instance_FB2(EN:=A,FB2_IN1:=FB1_IN1,FB2_IN2:=FB1_IN2,FB2_IN3:=FB1_IN3,FB2_OUT1=>FB1_OUT1,FB2_OUT2= > FB1_OUT2,FB2_OUT3= > FB1_OUT3,ENO= > B)• 自变量和返回值以不规则次序排列,这没有关系。
• 输入变量的自变量必须以列表开始或如果列出 EN 变量时列在 EN 变量后面• 规格方法 B 不能与规格方法一起用于相同的功能块调用语句中其他语句变化:• 无 EN 的语句Instance_FB2(FB2_IN1:=FB1_IN1,FB2_IN2:=FB1_IN2,FB2_IN3:=FB1_IN3,FB2_OUT1=>FB1_OUT1,FB2_OUT2= > FB1_OUT2,FB2_OUT3= > FB1_OUT3,ENO= > B)• 无 EN 和 ENO 的语句Instance_FB2(FB2_IN1:=FB1_IN1,FB2_IN2:=FB1_IN2,FB2_IN3:=FB1_IN3,FB2_OUT1=>FB1_OUT1,FB2_OUT2= > FB1_OUT2,FB2_OUT3= > FB1_OUT3)• 无 ENO 语句Instance_FB2(EN:=A,FB2_IN1:=FB1_IN1,FB2_IN2:=FB1_IN2,FB2_IN3:=FB1_IN3,FB2_OUT1=>FB1_OUT1,FB2_OUT2= > FB1_OUT2,FB2_OUT3= > FB1_OUT3)• 无 FB2_OUT2 (不需要 FB2_OUT2 数据。
)的语句Instance_FB2(EN:=A,FB2_IN1:=FB1_IN1,FB2_IN2:=FB1_IN2,FB2_IN3:=FB1_IN3,FB2_OUT1=>FB1_OUT1,FB2_OUT3= > FB1_OUT3,ENO= > B)• 无 FB2_OUT2 (不需要 FB2_OUT2 数据 )的语句Instance_FB2(EN:=A,FB2_IN1:=FB1_IN1,FB2_IN2:=FB1_IN2,FB2_IN3:=FB1_IN3,FB2_OUT1=>FB1_OUT1,FB2_OUT3= > FB1_OUT3,ENO= > B)• 不规则次序的语句Instance_FB2(EN:=A,FB2_IN1:=FB1_IN1,FB2_OUT1= > FB1_OUT1,FB2_IN2:=FB1_IN2,FB2_OUT2= >FB1_OUT2,FB2_IN3:=FB1_IN3,FB2_OUT3= > FB1_OUT3,ENO= > B)输入变量FB1_OUT1从 FB2_OUT1 中接收FB1_OUT2从 FB2_OUT2 中接收FB1_OUT3从 FB2_OUT3 中接收内部变量A注:数据类型 = 布尔传输至 ENB注:数据类型 = 布尔传输至 ENO内部变量 (实例)实例 _FB2注:数据类型 =FUNCTION BLOCK被调用功能块定义:功能块 2变量类型变量名传输至 FB2/ 从 FB2 中上传变量类型变量名传输至 FB2/ 从 FB2 中上传输入变量FB2_IN1从 FB1_IN1 中接收FB2_IN2从 FB1_IN2 中接收FB2_IN3从 FB1_IN3 中接收输出变量FB2_OUT1传输至 FB1_OUT1FB2_OUT2传输至 FB1_OUT2FB2_OUT3传输至 FB1_OUT3176结构化文本 (ST 语言)附录 B例 2:规格方法 B (仅规定 FB1 变量)Instance_FB2(FB1_IN1,FB1_IN2,FB1_IN3,FB1_OUT1,FB1_OUT2,FB1_OUT3)Instance_FB2(FB1_IN1,FB1_IN2,FB1_IN3,FB1_OUT1)• 必须定序列出笔变量和返回值。
输入变量 1, 输入变量 2, ..., 输出变量 1, 输出变量 2, ...• 输入变量的自变量必须以列表开始或如果列出 EN 变量时列在 EN 变量后面• 如果实际正在使用的数据和输出变量不在输出变量列表中间,则输出变量可以省略例如: Instance_FB2(FB1_IN1,FB1_IN2,FB1_IN3,FB1_OUT1,B1_OUT3)在本例中,列表末端处的 FB1_OUT3 返回 FB2_OUT2 值• EN 和 ENO 数据不能作为自变量或返回值输入• 规格方法 A 不能与规格方法 B 一起用于功能块调用语句例 3:平均功能块在下例中,功能块 1 调用计算平均值的功能块 2功能块 1• 变量表• ST- 语言算法如果 b 检查正确,则调用功能块 2 来计算平均值3 个数值 -- 数据 1、数据 2 和数据 3 分别传输至功能块2 的输入变量—输入 1、输入 2 和输入 3计算结果 (平均)返回至 AVG注下表所示的是采用规格方法 A 调用的 Average_FB 功能块 (列出的功能块变量) IF bCheck = TRUE THENAverage(input1:=data1,input2:=data2,input3:=data3,average= > AVG);ELSERETURN;END_IF;变量类型变量名数据类型传输至 FB2/ 从 FB2 中上传输入变量ENBOOL---输入变量data1INT传输至输入 1输入变量data2INT传输至输入 2输入变量data3INT传输至输入 3输入变量bCheckBOOL---输出变量ENOBOOL---输出变量AVGINT从平均值中接收内部变量Average_FBFUNCTION BLOCK 被调用功能块定义:功能块 2---177结构化文本 (ST 语言)附录 B功能块 2• 变量表tST- 语言算法计算输入 1、输入 2 和输入 3 的平均值并将结果保存于 average 中。
average:=(input1+input2+input3)/3;结构化文本编程范例例 1:BCD 数据 (#0000-#9999)转换至 BIN 数据(* 检查输入参数 “Input_BCD” (BCD 数据) *)IF (Input_BCD > =0 & Input_BCD < =16#9999) THENENO:=true;ELSEENO:=false;RETURN;END_IF;(*BCD 数据 4 次除以 16 以获得 BIN 数据每个数字 -- 从 BCD 数据中转换而来 *)DIV_1:=Input_BCD/16;DIV_2:=DIV_1/16;DIV_3:=DIV_2/16;DIV_4:=DIV_3/16;(* 计算 BIN 数据每个数字 -- 从 BCD 数据中转换而来 *)BIN_1:=Input_BCD-16*DIV_1; (*a number of 16 数 *)BIN_2:=DIV_1-16*DIV_2; (*a number of 16 数 *)BIN_3:=DIV_2-16*DIV_3; (*a number of 16 数 *)BIN_4:=DIV_3-16*DIV_4; (*a number of 16 数 *)(* 计算 BIN 数据 “Output_BIN” (输出参数) *)Output_BIN:=BIN_1+BIN_2*10+BIN_3*10*10+BIN_4*10*10*10;例 2:BIN 数据 (#0000-#FFFF)转换至 BCD 数据(* 检查输入参数 “Input_BIN” (BIN 数据 ) *)IF (Input_BIN > =0 & Input_BIN < =16#FFFF) THEN ENO:=true;ELSE ENO:=false; RETURN;END_IF;(*BIN 数据 4 次除以 10 以获得 BCD 数据每个数字 -- 从 BIN 数据中转换而来 *)DIV_1:=Input_BIN/10;DIV_2:=DIV_1/10;DIV_3:=DIV_2/10;DIV_4:=DIV_3/10;变量类型变量名数据类型传输至 FB2/ 从 FB2 中上传输入变量ENBOOL---输入变量input1INT从数据 1 接收输入变量input2INT从数据 2 接收输入变量input3INT从数据 3 接收输出变量ENOBOOL---输出变量averageINT传输至 AVG0213178结构化文本 (ST 语言)附录 B(* 计算 BCD 数据每个数字 -- 从 BIN 数据中转换而来 *)BCD_1:=Input_BIN-10*DIV_1; (*a number of 10 数 *)BCD_2:=DIV_1-10*DIV_2; (*a number of 10 数 *)BCD_3:=DIV_2-10*DIV_3; (*a number of 10 数 *)BCD_4:=DIV_3-10*DIV_4; (*a number of 10 数 *)(* 计算 BCD 数据 “Output_BCD” ( 输出参数 ) *)Output_BCD:=BCD_1+BCD_2*16+BCD_3*16*16+BCD_4*16*16*16;限制嵌套用于 IF、 CASE、 FOR、 WHILE 或 REPEAT 语句的嵌套数没有限制。
数据类型限制• 整数只能分配于数据类型 WORD、 DWORD、 INT、 DINT、 UINT、 UDINT 或 ULINT 的变量例如,如果 A 是 INT 数据类型,则 A:=1 ;如果数值不是整数数据类型,则出现语法错误例如,如果 A 是INT 数据类型,则 A:=2.5; 时会出现语法错误• 如果实数 (浮点十进制数据) 只可分配于数据类型 REAL 和 UREAL 的变量 例如, A 是 REAL 数据类型,则 A:=1.5;如果数值不是实际数据类型,则会出现语法错误例如,如果 A 是 REAL 数据类型,则 A:=2; 时会出现语法错误使用 A:=2.0;• 位 (TRUE 和 FALSE)只可分配于 BOOL 数据类型的变量例如,如果 A 为 BOOL 数据类型,则A:=FALSE;如果不采用 BOOL 数据类型,则会出现语法错误例如,如果 A 为 INT 数据类型,则A:=FALSE; 时会出现语法错误• 数据类型在结构化文本中一致 例如, 如果 A、 B 和 C 为 INT 数据类型, 则 A:=B+C; 但如果 A 和 B 是INT 数据类型而 C 是 REAL 数据类型或 LINT 数据类型,则 A:=B+C; 时会出现语法错误。
结构化文本错误错误信息错误信息错误原因范例数值不能赋值于 %s' 输入变量数值已替代了变量s' 数据类型不支持 %s' 运算符采用运算符不支持的数值或数据类型变量A:=B+1; (*A 和 B 为 WORD 类型变量 *)%s' 变量已有只读存储器 AT地址而且赋值数值已替代了分配于只读存储器地址的变量 (只读辅助区域地址或条件标记)数组变址超出范围数组变址大于数组大小数组 [100]:=10; (*Array 是一个数组大小 100 的数组变量*)0123179结构化文本 (ST 语言)附录 B不能从 %s 转换到 %s运算结果的数据类型数字方程式与替代目的地处的变量不匹配替代了与数据类型不一致的变量Y:=ABS(X); (*X 是 INT类型变量; Y 是 UINT 类型变量 *)除 0数字表达式中有除数除以 0未找到注释结束处注释中对应于打开的括号和星号 “(*”的另一括号和星号“*)”未封闭 注释文字格式 '%s' 无效数字格式不合法X:=123_; (* 下划线后无数字 *)X:=1__23; (* 下划线后立即跟另一根下划线 *)X:=2#301; Y:=8#90; (* 使用了不能用于二进制或八进制值的数字 *)注下划线插在数字之间以便读取。
将 2#、8# 和 16# 置于数字起始处以分别表示数字是二进制、八进制和十六进制值无效文字值数字值不合法X:=1e2; (* 变址已用于不是 REAL 数据类型的数值 *)注“e”表示指数是 10无效数组变址有非整数类型运算或非整数变量的数字方程式已指定于数组变址中Array[Index]:=10; (*Index 是 WORD 类型变量 *)无效常数有非整数类型运算或非整数变量的数字方程式已指定于CASE 语句的整数方程式CASE A OF (*A 是 REAL 类型变量 *)1: X:=1;2: X:=2;END_CASE;无效表达式数字方程式不合法例如,整数方程式或条件方程式不合法或已指定于语法 (IF、WHILE、 REPEA、 FOR、CASE) WHILE DO (* WHILE 语句不包含条件方程式 *) X:=X+1;END_WHILE;FOR 回路说明中有无效参数数据类型不是 IF、 WHILE、REPEA、 FOR、 CASE 的变量已用于 FOR 语句中的变量FOR I:=1 TO 100 DO (*I 为 WORD 类型变量 *) X:=X+1;END_FOR;无效语句语句不合法。
例如,语句(IF、 WHILE、 REPEA、FOR、 CASE)在语法中不包含 IF、 WHILE、 REPEA、FOR、 CASEX:=X+1; (* 语法中无 REPEAT*)UNTIL X > 10END_REPEAT;错误信息错误原因范例180结构化文本 (ST 语言)附录 B功能输出无效变量功能输出的指定变量不合法(非布尔 (BOOL)变量或数字已规定为 ENO 转送目的地)Y:=SIN(X1, ENO= > 1);无 (数据格式转换指令或功能调用不包含 “( “ (开口括号) Y:=INT_TO_DINT X);无)运算符括号或数据格式转换指令或功能调用不包含 “)“ (封闭括号)与 “( “ (开口括号)对应Y:=(X1+X2/2无:CASE 语句的整数方程式中无“:” (冒号) CASE A OF1 X:=1;END_CASE;无 =“=”不在赋值方程式中无;语句中无 “;” (分号) 无 DOFOR 或 WHILE 语句中无“DO” 无 END_CASECASE 语句结束处无“END_CASE” 无 END_FORFOR 语句结束处无“END_FOR” 无 END_IFIF 语句结束处无 “END_IF” 。
无 END_REPEATREPEAT 语句结束处无“END_REPEAT” 无 END_WHILEWHILE 语句结束处无“END_WHILE” 无输入参数必须设置所有输入变量未规定功能自变量或功能自变量不足Y:=EXPT(X);无 OFCASE 语句中无 “OF” 无 THENIF 语句中无 “THEN” 无 TOFOR 语句中无 “TO” 无 UNTILREPEAT 语句中无“UNTIL” 无 [未指定数组变量的数组变址X:=Array ; (*Array 是数组变量 *)无 ]未指定数组变量的数组变址X:=Array [ 2; (*Array 是数组变量 *)错误信息错误原因范例181结构化文本 (ST 语言)附录 B警告信息经常会被提及的问题问题:如何表示十六进制值 ?回答:在数值之前添加 “16#” 例如, 16#123F也可添加前缀 8# 和 2# 分别用来表示八进制和二进制数无这些前缀的数作为十进制数问题:FOR 语句可以使用多少次 ?回答:在下例中, FOR 语句内容执行 101 次当 “i”值等于 101 时,回路处理结束无常数CASE 语句的整数方程式不含常数CASE A OF2..: X:=1;2,: X:=2;END_CASE;文字数中不支持 NOT 运算NOT 运算符用于数值。
Result:=NOT 1;%s 数据类型不支持负值在数据类型不支持负值(UINT、UDINT、ULINT)的变量之前已使用了减符号Y:=-X; (*X 是一个 UINT 型变量, Y 是一个 INT 型变量 *)必须有一行有效码 (不包括注释)无一行有效码 (不包括注释)有太多变量指定于函数中设置了太多函数参数Y:=SIN(X1,X2);未定义的识别符 '%s'使用了未在变量表中定义的变量意外语法 '%s'已非法使用关键字 (保留字)或变量FOR I:=1 TO 100 DO BY -1 (*DO 位置非法 *) X:=X+1;END_FOR;用法与函数变量不匹配函数参数非法使用Y:=SIN(X1,EN= > BOOL1); (* 输入参数 EN 已用作输出参数 *)变量超出范围在变量中,已用超出变量数据类型范围的值替代X:=32768; (*X 是 INT 类型变量 *)变量 '%s' 不是函数参数 '%s'在参数中已规定了不能指定于函数参数中的变量X 和 Y 是 REAL 类型变量而 Z 不是 SIN 函数参数 *)警告信息警告原因范例关键字 '%s' 冗余关键字已用于无效地方。
例如,在回路语法范围外使用EXIT 语句从 '%s' 转换到 '%s' 期间,可能数据丢失由于在大数据量的数据类型转换到小数据量的数据类型期间,数据可能被丢失Y:=DINT_TO_INT(X); (*X 是一个 DINT 类型变量; Y 是一个 INT 类型变量 *)错误信息错误原因范例182结构化文本 (ST 语言)附录 BFOR i:=0 TO 100 BY 1 DO a:=a+1;END_FOR;问题:当超出数组下标时回发生什么情况 ?回答:如果数组变量 INT[10] 有 10 个元素,则以下类型的语句不能检测到错误当执行语句时,运算不稳定i:=15;INT[i]:=10;问题:结构化文本编辑器中的变量是否会自动注册于变量表?回答:不会在使用变量之前,将变量注册于变量表中问题:是否可以直接调用梯级编程指令 ?回答:不可以183附录 C外部变量注这些字是 OMRON FB 库的外部变量不得用这些字创建功能块分类名称CX-Programmer 中的外部变量数据类型地址条件标记大于或等于 (GE)标记P_GEBOOLCF00不等于 (NE)标记P_NEBOOLCF001小于或等于 (LE)标记P_LEBOOLCF002指令执行错误 (ER)标记P_ERBOOLCF003进位 (CY)标记P_CYBOOLCF004大于 (GT)标记P_GTBOOLCF005等于 (EQ)标记P_EQBOOLCF006小于 (LT)标记P_LTBOOLCF007负数 (N)标记P_NBOOLCF008溢出 (OF)标记P_OFBOOLCF009下溢 (UF)标记P_UFBOOLCF010存取错误标记P_AERBOOLCF011始终 OFF 标记P_OffBOOLCF114始终 ON 标记P_OnBOOLCF113时钟脉冲0.02 秒时钟脉冲位P_0_02sBOOLCF1030.1 秒时钟脉冲位P_0_1sBOOLCF1000.2 秒时钟脉冲位P_0_2sBOOLCF1011 分钟时钟脉冲位P_1mimBOOLCF1041.0 秒时钟脉冲位P_1sBOOLCF102辅助区域标记 / 位第一个循环标记P_First_CycleBOOLA200.11步骤标记P_StepBOOLA200.12第一个任务执行标记P_First_Cycle_TaskBOOLA200.15最大循环标记P_Max_Cycle_TimeUDINTA262当前扫描时间P_Cycle_Time_ValueUDINTA264循环时间错误标记P_Cycle_Time_ErrorBOOLA401.08电池电量低标记P_Low_BatteryBOOLA402.04I/O 验证错误标记P_IO_Verify_ErrorBOOLA402.09输出 OFF 位P_Output_Off_BitBOOLA500.15OMRON FB 库字(见注释)CIO 区域规格P_CIOWORDA450HR 区域规格P_HRWORDA452WR 区域规格P_WRWORDA451DM 区域规格P_DMWORDA460EM0 到 C 区域规格P_EM0 to P_EMCWORDA461 to A473184外部变量附录 C。

卡西欧5800p使用说明书资料.ppt
锂金属电池界面稳定化-全面剖析.docx
SG3525斩控式单相交流调压电路设计要点.doc
话剧《枕头人》剧本.docx
重视家风建设全面从严治党治家应成为领导干部必修课PPT模板.pptx
黄渤海区拖网渔具综合调查分析.docx
2024年一级造价工程师考试《建设工程技术与计量(交通运输工程)-公路篇》真题及答案.docx
【课件】Unit+3+Reading+and+Thinking公开课课件人教版(2019)必修第一册.pptx
嵌入式软件开发流程566841551.doc
生命密码PPT课件.ppt
爱与责任-师德之魂.ppt
制冷空调装置自动控制技术讲义.ppt


