字逻辑运算(S7-1200, S7-1500) AND:“与”运算 (S7-1200, S7-1500) 说明 可以使用“与”运算指令将输入IN1 的值和输入 IN2 的值按位进行“与”运算,并在输出 OUT 中查询结果。如果程序段 1中操作数“TagIn1”的信号状态为“1”,则将执行该指令。通过第一次调用该指令来设置运行时间测量的起始点,将其作为该指令第二次调用的引用缓存到“TagMemory” 操作数中。 在程序段 2中,调用“Best_before_date”程序块 FB1。 执行了 FB1程序块后且“TagIn1”操作数的信号状态为“1”时,执行程序段 3 中的该指令。第二次调用该指令将计算出该程序块的运行时间,将结果写入输出 RET_VAL 中。有关以上示例中编程代码的更多信息,请参见“Sample Library for Instructions (页 713)”。有关测量程序总循环时间的详细信息示例,请访问西门子工业在线支持网站,条目 ID:执行该指令时,输入 IN1 的值的位 0 和输入IN2 的值的位 0 进行“与”运算。结果存储在 输出 OUT 的位 0 中。对指定值的所有其它位都执行相同的逻辑运算。可以在指令功能框中展开输入的数字。在功能框中以升序对相加的输入进行编号。指令该执行时,将对所有可用输入参数的值进行“与”运算。结果存储在输出 OUT 中。只有该逻辑运算中的两个位的信号状态均为“1”时,结果位的信号状态才为“1”。如果该逻辑运算的两个位中有一个位的信号状态为“0”,则对应的结果位将复位。如果操作数“TagIn”的信号状态为“1”,则执行该指令。将操作数“Tag_Value1”的值与操作数“Tag_Value2”的值进行“与”运算。结果按位映射并输出到操作数“Tag_Result”中。使能输出 ENO和输出“TagOut”的信号状态都将设置为“1”。 有关以上示例中编程代码的更多信息OR:“或”运算 (S7-1200,S7-1500) 说明 可以使用“或”运算指令将输入 IN1 的值和输入 IN2 的值按位进行“或”运算,并在输出 OUT中查询结果。 执行该指令后,将 IN1 输入的值的位 0 和 IN2 输入的值的位 0 进行“或”运算。结果存储 在输出 OUT 的位0 中。对指定变量的所有位都执行相同的逻辑运算。 可以在指令功能框中展开输入的数字。在功能框中以升序对相加的输入进行编号。指令该执行时,将对所有可用输入参数的值进行“或”运算。结果存储在输出 OUT 中。只要该逻辑运算中的两个位中至少有一个位的信号状态为“1”,结果位的信号状态就为“1”。如果该逻辑运算的两个位的信号状态均为“0”,则对应的结果位将复位。
XOR:“异或”运算 (S7-1200, S7-1500) 说明 可以使用“异或”运算指令将输入 IN1 的值和输入IN2 的值按位进行“异或”运算,并在输 出 OUT 中查询结果。 执行该指令后,将 IN1 输入的值的位 0 和 IN2输入的值的位 0 进行“异或”运算。结果存 储在输出 OUT 的位 0 中。对指定值的所有其它位都执行相同的逻辑运算。可以在指令功能框中展开输入的数字。在功能框中以升序对相加的输入进行编号。指令该执行时,将对所有可用输入参数的值进行“异或”运算。结果存储在输出 OUT 中。当该逻辑运算中的两个位中有一个位的信号状态为“1”时,结果位的信号状态为“1”。如果该逻辑运算的两个位的信号状态均为“1”或“0”,则对应的结果位将复位。如果操作数“TagIn”的信号状态为“1”,则执行该指令。将操作数“Tag_Value1”的值和操作数“Tag_Value2”的值进行“异或”运算。结果按位映射并输出到操作数“Tag_Result”中。使能输 出 ENO和输出“TagOut”的信号状态都将设置为“1”。DECO:解码 (S7-1200, S7-1500) 说明可以使用“解码”指令,将输入值指定的输出值中的某个位置位。 “解码”指令读取输入 IN的值,并将输出值中位号与读取值对应的那个位置位。输出值中的 其它位以零填充。当输入 IN 的值大于 31 时,则将执行以 32为模的指令。 参数 下表列出了“解码”指令的参数: 参数 声明 数据类型 存储区 说明 EN Input BOOL I、Q、M、D、L或常量 使能输入 ENO Output BOOL I、Q、M、D、L 使能输出 IN Input UINT I、Q、M、D、 L、P或常量 输出值中待置位位的位置。 OUT Output 位字符串 I、Q、M、D、 L、P 输出值可以从指令框的“???”下拉列表中选择该指令的数据类型。 有关有效数据类型的更多信息,请参见“另请参见”。ENCO:编码(S7-1200, S7-1500) 描述 可以使用“编码”指令读取输入值中Zui低有效位的位号并将其发送到输出 OUT。“编码”指令选择输入 IN 值的Zui低有效位,并将该位号写入到输出 OUT 的变量中。如果操作数“TagIn”的信号状态为“1”,则执行该指令。该指令选择输入“TagIn_Value”的Zui低有效位,并将位号“3”写入输出“TagOut_Value”的变量中。 如果该指令执行成功,则使能输出 ENO的信号状态为“1”,置位输出“TagOut”。SEL:选择 (S7-1200, S7-1500) 说明 “选择”指令根据开关(输入G)的情况,选择输入 IN0 或 IN1 中的一个,并将其内容复制 到输出 OUT。如果输入 G 的信号状态为“0”,则移动输入IN0 的值。如果输入 G 的信号状态为 “1”,则将输入 IN1 的值移动到输出 OUT 中。所有参数的所有变量都必须具有相同的数据类型。MUX:多路复用 (S7-1200, S7-1500) 说明可以使用指令“多路复用”将选定输入的内容复制到输出 OUT。可以扩展指令框中可选输 入的编号。Zui多可声明 32个输入。输入会在该框中自动编号。编号从 IN0 开始,每次新增输入后将连续递增。可以使用参数 K 定义其内容要复制到输出 OUT中的输入。如果参数 K 的值大于可用输入数,则参数 ELSE 的 内容将复制到输出 OUT 中,并且使能输出 ENO的信号状态会被指定为“0”。 仅当所有输入和输出 OUT 中变量的数据类型都相才能执行“多路复用”指令。参数 K有所例外,因为只能为其指定整数。 如果满足下列条件之一,则使能输出 ENO 的信号状态为“0”: • 使能输入 EN的信号状态为“0”。 • 参数 K 的输入超出了可用输入。这不受是否使用输入 ELSE 的影响。输出 OUT 中的值将 会改变。 •执行该指令期间出错。DEMUX:多路分用 (S7-1200, S7-1500) 说明 可以使用指令“多路分用”将输入 IN的内容复制到选定的输出。可以在指令框中扩展选定 输出的编号。在此框中自动对输出编号。编号从 OUT0 开始,对于每个新输出,此编号连续递增。可以使用参数 K 定义要将输入 IN 的内容复制到的输出。其它输出则保持不变。如果 参数 K 的值大于可用的输出数目,则将输入IN 的内容复制到参数 ELSE 中,并将使能输出 ENO 的信号状态指定为“0”。 只有当所有输入 IN与所有输出具有相同数据类型时,才能执行指令“多路分用”。参数 K 有 所例外,因为只能为其指定整数。如果满足下列条件之一,将复位使能输出 ENO: • 使能输入 EN 的信号状态为“0”。 • 参数 K 的值大于可用输出数。 •执行该指令期间出错。移位和循环 (S7-1200, S7-1500) SHR:右移 (S7-1200, S7-1500) 说明可以使用“右移”指令将输入 IN 中操作数的内容按位向右移位,并在输出 OUT 中查询结果。 参数 N 用于指定将指定值移位的位数。如果参数 N 的值为“0”,则将输入 IN 的值复制到输出 OUT 的操作数中。 如果参数 N 的值大于位数,则输入 IN的操作数值将向右移动该位数个位置。 无符号值移位时,用零填充操作数左侧区域中空出的位。如果指定值有符号,则用符号位的信号状态填充空出的位。 下图说明了如何将整数数据类型操作数的内容向右移动 4 位:SHL:左移 (S7-1200, S7-1500)说明 可以使用“左移”指令将输入 IN 中操作数的内容按位向左移位,并在输出 OUT 中查询结果。 参数 N用于指定将指定值移位的位数。 如果参数 N 的值为“0”,则将输入 IN 的值复制到输出 OUT 的操作数中。 如果参数 N的值大于位数,则输入 IN 的操作数值将向右移动该位数个位置。 用零填充操作数右侧部分因移位空出的位。 下图说明了如何将 WORD数据类型操作数的内容向左移动 6 位:ROR:循环右移 (S7-1200, S7-1500) 说明 可以使用“循环右移”指令将输入IN 中操作数的内容按位向右循环移位,并在输出 OUT 中 查询结果。参数 N用于指定循环移位中待移动的位数。用移出的位填充因循环移位而空出 的位。 如果参数 N 的值为“0”,则将输入 IN 的值复制到输出OUT 的操作数中。 如果参数 N 的值大于可用位数,则输入 IN中的操作数值仍会循环移动指定位数。如果操作数“TagIn”的信号状态为“1”,则将执行“循环右移”指令。“TagIn_Value”操作数的内容将向右循环移动 5 位。结果发送到输出“TagOut_Value”中。如果成功执行了该指令,则 使能输出 ENO的信号状态为“1”,置位输出“TagOut”。ROL:循环左移 (S7-1200, S7-1500) 说明可以使用“循环左移”指令将输入 IN 中操作数的内容按位向左循环移位,并在输出 OUT 中 查询结果。参数 N用于指定循环移位中待移动的位数。用移出的位填充因循环移位而空出 的位。 如果参数 N 的值为“0”,则将输入 IN 的值复制到输出OUT 的操作数中。 如果参数 N 的值大于可用位数,则输入 IN 中的操作数值仍会循环移动指定位数。