取模运算符在整数除法运算中给出了余数。
实例:
6 Mod 2 = 0 --> 6 / 2 = 3;无余数
11 Mod 4 = 3 --> 11 / 4 = 2,余数为 3;
通过取模功能,可以检查一个数是否可以被另一个数整除 - 取模运算中结果是否为 0。
取模运算符通常在高级编程语言中使用,例如 C、Basic、Java 等等。但是它主要用作除法器,仅用于在特定周期执行特定函数或切换特定函数 (在循环中)。 实例:
FOR x=1 TO 20
IF x MOD 2 = 0 THEN CALL Anything
NEXT
在此实例中,一个循环执行二十次,此外每第二个周期额外调用一次子程序 (功能) “Anything”。
使用取模库的程序如实例 1 所示。
库中的每个取模块除了提供除法的余数外,还提供了一个输出位,它能立即表明是否存在除法余数。这样就节省了随后必须将除法余数与零相比较所需要的运算,并且节省了程序存储器中的空间。您需要做的所有工作仅仅是评估输出位 DWR (无余数的除法运算)。 参数说明: step7_microwin_modulo_operator_1.gif)
图 1:字节的取模块
参数 | 变量类型 | 说明 | EN | BOOL | 执行块
E、A、M、SM、T、C、V、S、L | IN1 | BYTE | 输入值
VB、EB、AB、MB、SB、SMB、LB、AC、常数、*VD、*AC、*LD | IN2 | BYTE | 除数
VB、EB、AB、MB、SB、SMB、LB、AC、常数、*VD、*AC、*LD | DWR | BOOL | 输出位
1 (高) = 除法运算无余数;
0 (低) = 除法运算有余数,
A, M, V, L, SM | OUT | BYTE | 除法运算余数
VB、EB、AB、MB、SB、SMB、LB、AC、*VD、*AC、*LD | 表 1:Modulo_B 的块参数step7_microwin_modulo_operator_2.gif)
图 2:字的取模块
参数 | 变量类型 | 说明 | EN | BOOL | 执行块
E、A、M、SM、T、C、V、S、L | IN1 | WORD | 输入值
VW、EW、AW、MW、SW、SMW、T、C、AC、LW、AEW、常数、*VD、*LD、*AC | IN2 | WORD | 除数
VW、EW、AW、MW、SW、SMW、T、C、AC、LW、AEW、常数、*VD、*LD、*AC | DWR | BOOL | 输出位
1 (高) = 除法运算无余数;
0 (低) = 除法运算有余数,
A, M, V, L, SM | OUT | WORD | 除法运算余数
VW、EW、AW、MW、SW、SMW、LW、AC、*VD、*LD、*AC | 表 2:Modulo_W 的块参数step7_microwin_modulo_operator_3.gif)
图 3:双字的取模块
参数 | 变量类型 | 说明 | EN | BOOL | 执行块
E、A、M、SM、T、C、V、S、L | IN1 | DWORD | 输入值
VD、ED、AD、MD、SMD、SD、LD、AC、HC、常数、*VD、*LD、*AC | IN2 | DWORD | 除数
VD、ED、AD、MD、SMD、SD、LD、AC、HC、常数、*VD、*LD、*AC | DWR | BOOL | 输出位
1 (高) = 除法运算无余数;0 (低) = 除法运算有余数,
A、M、V、L、SM | OUT | DWORD | 除法运算余数
VD、ED、AD、MD、SMD、SD、LD、AC、*VD、*LD、*AC | 表 3:Modulo_DW 的块参数下面是两个如何实现取模块的实例。可以在这些块的注释中找到相关说明。 实例 1 - 程序循环
For..Next 循环运行二十次。每第二个周期临时变量“Indirect_Address”的数值增加 4。如果没有除法运算余数,位 V10.0 始终为高 (1),(即,在第 2 个、第 4 个、第 6 个、第 8 个、第 10 个周期内,如此等等)。
循环计数器 VW0 在 FOR 命令的每个周期末尾自动增加 1 (关于此命令的更多信息可以在 STEP 7 - Micro / WIN 帮助中找到)。 step7_microwin_modulo_operator_4.gif)
图 4:程序周期实例实例 2 - 时钟发生器
MOD_B (IN2) 的除数在此实例中已经保持为变量 (VB1)。子程序 SBR_0 每三个周期执行一次。
周期计数器 VB0 始终在程序段 3 中复位,否则可能会达到 (超过) 最大值范围,此时将会重新从零开始。在零周期内可能会发生偏离,子程序不是严格在第三个周期内调用。 step7_microwin_modulo_operator_5.gif)
图 5:时钟发生器实例通过下列库,您还可以在软件中使用取模运算符。
该库为每种变量访问宽度 (字节、字、双字) 各提供了一个独立的程序例程。
|