SIEMENS西门子 S120伺服电机 1FK7022-5AK71-1LB5-Z
传统 (S7-1500) SCALE:缩放 (S7-1500) 说明 可以使用“缩放”指令将参数 IN 上的整数转换为浮点数,该浮点数在介于上下限值之间的 物理单位内进行缩放。通过参数 LO_LIM 和 HI_LIM 来指定缩放输入值取值范围的下限和上 限。指令的结果在参数 OUT 中输出。 “缩放”指令将按以下公式进行计算: OUT = [((FLOAT (IN) – K1)/(K2–K1)) ∗ (HI_LIM–LO_LIM)] + LO_LIM1) 输出错误代码 #8155 的原因为: 声明了一个 PLC 数据类型 (UDT1) 并创建了一个数据类型为“UDT1”的数据块 (DB2)。变量表 中含有一个数据类型为 DB_ANY 的变量 (3)。随后,在程序块 (4) 中调用了指令 “DB_ANY_TO_VARIANT”并在 IN 参数中提供变量 (3)。执行时,指令“DB_ANY_TO_VARIANT” 返回错误代码 16#8155。 通过以下步骤消除该错误代码: 1. 创建函数 (FC5) 并在 InOut 接口中声明数据类型为 VARIANT 的变量。 2. 创建另一函数 (FC6) 并在该函数中调用 FC5。 3. 在 FC6 中的 Temp 接口中创建数据类型为“UDT1”的变量 (7)。 4. 为 FC5 的 InOut 接口提供变量 (7)。 5. 编译函数块(FC5 和 FC6)并下载到 CPU 中。在用户程序中无需调用这些块(FC5 和 FC6)。 结果: 由于用户程序现已熟悉该数据类型,因此将不再输出错误代码 16#8155。 但如果在调用了“DB_ANY_TO_VARIANT”指令后调用“VariantGet”或“VariantPut”两条指令之 一,则无需执行上述程序。在“InputDB”操作数中指定的所有数据块的编号将用于生成对数据块进行寻址的 VARIANT 数 据类型的变量。由于 IN 参数的操作数具有 DB_ANY 数据类型,所以在创建程序时不需要知 道将在运行时使用的数据块(既不需要知道数据块的名称,也不需要知道其编号)。.由于 参数 RET_VAL 的操作数具有数据类型 VARIANT,所以在创建程序时不需要知道数据块的数 据类型。
常数“K1”和“K2”的值取决于参数 BIPOLAR 的信号状态。参数 BIPOLAR 可能的信号状态为: • 信号状态“1”:假设参数 IN 的值为双极性且取值范围是 -27648 到 27648。此时,常数“K1” 的值为 -27648.0,而常数“K2”的值为 +27648.0。 • 信号状态“0”:假设参数 IN 的值为单极性且取值范围是 0 到 27648。此时,常数“K1”的值 为 0.0,而常数“K2”的值为 +27648.0。 如果参数 IN 的值大于常数“K2”的值,则将指令的结果设置为上限值 (HI_LIM) 并输出一个错误。 如果参数 IN 的值小于常数“K1”的值,则将指令的结果设置为下限值 (LO_LIM) 并输出一个错 误。 如果指定的下限值大于上限值 (LO_LIM > HI_LIM),则结果将对输入值进行反向缩放。UNSCALE:取消缩放 (S7-1500) 说明 可以使用“取消缩放”(Unscale) 指令,取消在上限和下限之间以物理单位为增量对参数 IN 中 的浮点数进行缩放,并将其转换为整数。使用参数 LO_LIM 和 HI_LIM 指定取消缩放输入值 取值范围的下限和上限。指令的结果在参数 OUT 中输出。 “取消缩放”指令将按以下公式进行计算: OUT = [((IN–LO_LIM)/(HI_LIM–LO_LIM)) ∗ (K2–K1)] + K1 常数“K1”和“K2”的值取决于参数 BIPOLAR 的信号状态。参数 BIPOLAR 可能的信号状态为: • 信号状态“1”:假设参数 IN 的值为双极性且取值范围是 -27648 到 27648。此时,常数“K1” 的值为 -27648.0,而常数“K2”的值为 +27648.0。 • 信号状态“0”:假设参数 IN 的值为单极性且取值范围是 0 到 27648。此时,常数“K1”的值 为 0.0,而常数“K2”的值为 +27648.0。 当参数 IN 的值超出 HI_LIM 和 LO_LIM 定义的限值时,将输出一个错误并将结果设置为Zui接 近的限值。 如果指定的下限值大于上限值 (LO_LIM > HI_LIM),则结果将对输入值进行反向缩放。程序控制指令 (S7-1200, S7-1500) IF:条件执行 (S7-1200, S7-1500) 说明 使用“条件执行”指令,可以根据条件控制程序流的分支。该条件是结果为布尔值(TRUE 或 FALSE)的表达式。可以将逻辑表达式或比较表达式作为条件。 执行该指令时,将对指定的表达式进行运算。如果表达式的值为 TRUE,则表示满足该条件; 如果其值为 FALSE,则表示不满足该条件。参数 根据分支的类型,可以对以下形式的指令进行编程: • IF 分支: IFTHENEND_IF; 如果满足该条件,则将执行 THEN 后编写的指令。如果不满足该条件,则程序将从 END_IF 后 的下一条指令开始继续执行。 • IF 和 ELSE 分支: IFTHENELSEEND_IF; 如果满足该条件,则将执行 THEN 后编写的指令。如果不满足该条件,则将执行 ELSE 后编 写的指令。程序将从 END_IF 后的下一条指令开始继续执行。 • IF、ELSIF 和 ELSE 分支: IFTHENELSIFTHENELSEEND_IF; 如果满足第一个条件(<条件 1>),则将执行 THEN 后的指令(<指令 1>)。执行这些指令 后,程序将从 END_IF 后继续执行。 如果不满足第一个条件,则将检查第二个条件(<条件 2>)。如果满足第二个条件(<条件 2>),则将执行 THEN 后的指令(<指令 2>)。执行这些指令后,程序将从 END_IF 后继续 执行。 如果不满足任何条件,则先执行 ELSE 后的指令(<指令 0>),再执行 END_IF 后的程序部分。 在 IF 指令内可以嵌套任意多个 ELSIF 和 THEN 组合。可以选择对 ELSE 分支进行编程。 IF 指令的语法如下所示: 参数 数据类型 存储区 说明 <条件> BOOL I、Q、M、D、L 待求值的表达式 <指令> - - 在满足条件时,要执行的指令。如果不满足 条件,则执行 ELSE 后编写的指令。如果不满 足程序循环内的任何条件,则执行这些指令。 有关有效数据类型的更多信息,请参见“另请参见”。
下表列出了该指令的参数: 参数 数据类型 存储区 说明位字符串、 整数 I、Q、M、D、L 与设定的常数值进行比较的值。 <常数> 局部常量和 全局常量可 进行编程。 位字符串 - 若为位字符串,则常数可以为以下值: • 二进制数(例如,2#10) • 八进制数(例如,8#77) • 十六进制数(例如,16#AD) • 未定型的常数(例如,1000) 如果为典型字节变量,则字节常数(例如, BYTE#2)必须进行编程。 如果为典型 WORD 变量,则字节或 WORD 常 数(例如,BYTE#2、WORD# 2)必须进行编 程。 如果为典型 DWord 变量,则字节、WORD 或 DWord 常数(例如,BYTE#2、WORD#2、 DWORD#2)必须进行编程。 如果为典型 LWord 变量,则字节、WORD、 DWord 或 LWord 常数(例如,BYTE#2、 WORD#2、DWORD#2、LWORD#2)必须进 行编程。 整数 若为整数,则常数可以为以下值: • 整数(例如,5) • 整数范围(例如,15 到 20) • 由整数和范围组成的枚举(例如,10、 11、15 到 20)- - 当表达式的值等于某个常数值时,将执行的 各种指令。如果不满足条件,则执行 ELSE 后 编写的指令。如果两个值不相等,则执行这 些指令。 有关有效数据类型的更多信息,请参见“另请参见”。 如果表达式的值等于第一个常数(<常数 1>)的值,则将执行紧跟在该常数后编写的指令(< 指令 1>)。程序将从 END_CASE 后继续执行。如果表达式的值不等于第一个常量(<常量 1>)的值,则会将该值与下一个设定的常量值进 行比较。以这种方式执行 CASE 指令直至比较的值相等为止。如果表达式的值与所有设定的 常数值均不相等,则将执行 ELSE 后编写的指令(<指令 0>)。ELSE 是一个可选的语法部分, 可以省略。 此外,CASE 指令也可通过使用 CASE 替换一个指令块来进行嵌套。END_CASE 表示 CASE 指 令结束。FOR:在计数循环中执行 (S7-1200, S7-1500) 说明 使用“在计数循环中执行”指令,重复执行程序循环,直至运行变量不在指定的取值范围内。 也可以嵌套程序循环。在程序循环内,可以编写包含其它运行变量的其它程序循环。 通过指令“复查循环条件”(CONTINUE),可以终止当前连续运行的程序循环。通过指令“立 即退出循环”(EXIT) 终止整个循环的执行。有关本主题的更多信息,请参见“另请参见”。 说明 有关运行次数和运行变量的信息 程序运行时无法更改运行次数。 出于性能原因,应在块接口的“Temp”部分中声明运行变量。在循环中,该运行变量无法更改。 因此,以下示例程序将生成一个语法错误且无法编译:下表列出了该指令的参数: 参数 数据类型 存储区 说明 S7-1200 S7-1500 <执行变量 > SINT、 INT、 DINT、 USINT、 UINT、 UDINT SINT、INT、 DINT、 LINT、 USINT、 UINT、 UDINT、 ULINT I、Q、M、 D、L 执行循环时会计算其值的操作 数。执行变量的数据类型将确定 其它参数的数据类型。 <起始值> SINT, INT, DINT、 USINT、 UINT、 UDINT SINT、INT、 DINT、 LINT、 USINT、 UINT、 UDINT、 ULINT I、Q、M、 D、L 表达式,在执行变量首次执行循 环时,将分配表达式的值。 <结束值> SINT, INT, DINT、 USINT、 UINT、 UDINT SINT、INT、 DINT、 LINT、 USINT、 UINT、 UDINT、 ULINT I、Q、M、 D、L 表达式,在运行程序Zui后一次循 环时会定义表达式的值。在每个 循环后都会检查运行变量的值: • 未达到结束值: 执行符合 DO 的指令 • 达到结束值: Zui后执行一次 FOR 循环 • 超出结束值: 完成 FOR 循环 执行该指令期间,不允许更改结 束值。