脉冲乘法器 (PMUL)

此信息适用于
CompactLogix
5370、
ControlLogix
5570、
Compact GuardLogix
5370、
GuardLogix
5570、
CompactLogix
5380、
ControlLogix
5580 和 ControlLogix 5590 控制器。
PMUL 指令通过计算两次扫描之间的输入变化,提供从位置输入模块(如旋转变压器或编码器反馈模块)到数字系统的接口。通过选择指定的字长,可将 PMUL指令配置为采用连续线性的方式通过反转界限进行区分。
可用语言
梯形图
此指令不可用于梯形图中。
功能块
RSL5K_PMUL Function Block_v31
结构化文本
PMUL(PMUL_tag);
操作数
功能块
操作数
类型
格式
说明
PMUL tag
PULSE_MULTIPLIER
结构
PMUL 结构
结构化文本
操作数
类型
格式
说明
PMUL tag
PULSE_MULTIPLIER
结构
PMUL 结构
有关结构化文本中表达式语法的详细信息,请参见“结构化文本语法”部分。
PULSE_MULTIPLIER 结构
输入参数
数据类型
说明
EnableIn
BOOL
启用输入。如果此参数清零,指令不会执行,也不会更新输出。
默认置位。
In
DINT
指令的模拟输入信号。
有效值 = 任意 DINT 值
默认值 = 0
Initialize
BOOL
初始化输入。此参数置位时,Out 将保持为 0.0,并且所有内部寄存器均设为 0。Initialize 由置位转换为清零时,In
n-1
= InitialValue(对绝对模式无效)。此参数清零时,指令会正常执行。
InitialValue
DINT
输入初始值。Initialize 由置位跳变为清零时,In
n-1
= InitialValue
有效值 = 任意 DINT 值
默认值 = 0。
Mode
BOOL
模式输入。此参数置位时可启用相对模式。清除以启用绝对模式。
默认置位。
WordSize
DINT
字长,以位数计。指定在相对模式下计算 (In
n
-In
n-1
) 时使用的位数。
绝对模式下不使用 WordSize。
如果 In 的变化量大于 1/2 * 2
(Wordsize-1)
,Out 的符号会发生变化。
WordSize 无效时,Out 保持不变,指令会将 Status 中的相应位置位。
有效值 = 2 至 32
默认值 = 14
Multiplier
DINT
乘数。将该值除以 100,000 可控制 In 与 Out 之比。如果无效,该指令会限制该值,并将 Status 中的相应位置位。
有效值 = -1,000,000 至 1,000,000
默认值 = 100,000
输出参数
数据类型
说明
EnableOut
BOOL
启用输出。
Out
REAL
指令的 Out 输出。如果 Out 的计算值溢出,Out 会被强制设为
+
/- Infinity sign,并将 Status 中的相应位置位。将该输出的数学状态标志置位。
Status
DINT
功能块的状态。
InstructFault (Status.0)
BOOL
该指令检测到以下执行错误之一。这不是轻微或严重的控制器错误。检查其他状态位以确定发生的情况。
WordSizeInv (Status.1)
BOOL
WordSize 值无效。
OutOverflow (Status.2)
BOOL
内部输出计算值溢出。
LostPrecision (Status.3)
BOOL
Out < -2
24
或 Out > 2
24
。当指令将 Out 由整数值转换为实数值时,如果结果大于 |2
24
|,数据会丢失,因为 REAL 数据类型限制在 2
24
MultiplierInv (Status.4)
BOOL
Multiplier 值无效。
说明
PMUL 指令在相对或绝对模式下工作。
在相对模式下,指令的输出等于两次扫描之间的输入差值乘以 (Multiplier/100,000)。在相对模式下,指令将保存扫描中执行除法运算后得到的任何余数,并在下一次扫描期间重新将其加上。这样,运算过程中便不会丢失位置信息。
PMUL Description relative mode
在绝对模式下,指令可以在两次扫描之间不丢失任何信息的情况下,对输入(如位置)进行变换。
PMUL Description
计算输出和余数
PMUL 指令使用以下公式计算相对模式或绝对模式下的 Out 输出:
Ans = ((DiffInput x Multiplier) + INT_Remainder)
INT_Out = Ans / 100,000
INT_Remainder= Ans - (INT_Out * 100,000)
Out = INT_Out
影响数学状态标志
故障条件
在以下情况下发生轻微故障
故障类型
故障代码
功能已启用并检测到溢出。
4
4
有关操作数相关的故障,请参阅 通用属性
执行
功能块
条件
功能块操作
预扫描
EnableIn 和 EnableOut 位设置为假。
Tag.EnableIn 为假
EnableIn 和 EnableOut 位设置为假。
Tag.EnableIn 为真
EnableIn 和 EnableOut 位设置为真。
指令执行。
指令首次运行
不适用
指令首次扫描
In
n-1
= In。Out
n-1
=0。余数 = 0。
后扫描
EnableIn 和 EnableOut 位设置为假。
结构化文本
条件/状态
执行的操作
预扫描
请参见“功能块”表中的“预扫描”行。
正常执行
请参见“功能块”表中的“Tag.EnableIn 为真”行。
后扫描
请参见“功能块”表中的“后扫描”行。
示例
示例 1
PMUL 指令最常用于相对工作模式下。在该模式下,PMUL 指令具有多种用途。首先,在相对模式下,PMUL 指令可以确定两次扫描期间输入端接收信息的差异。在接收到数据后,该指令将输出两次扫描的输入值之差。也就是说,如果第“n”次扫描时 In = 500,第“n+1”次扫描时 In = 600,则第“n+1”次扫描时 Out = 100。
其次,在该工作模式下,PMUL 指令还会对反馈模块提供的二进制数据的“回滚”值进行补偿。例如,旋转变压器反馈模块可能具有 12 位分辨率,以带符号的二进制值表示,介于 –2048 到 2047 之间。根据来源于反馈模块的原始数据,反馈设备的旋转可表示如下:
PMUL Example 1
在本例中,当反馈数据的值从 2047 变为 -2048 时,有效位置变化相当于位置跳变 4095 个计数。但实际上,就旋转变压器反馈设备的旋转而言,该位置变化仅占 1/4096。通过获取由反馈模块输入的数据的真实字长,PMUL 指令将以旋转的方式处理输入数据(如下图所示):
PMUL Example 2
知晓该功能块输入数据的字长后,当功能块输入由 2047 变为 -2048 时,PMUL 指令会确定两者相差 1 个计数并输出,而不会通过数学运算得出 4095 个计数。
小贴士: 应用该功能块时,务必要注意的是,如果要正确区分旋转方向,反馈数据在两次扫描之间的变化不应超过字长的一半。
在上例中,如果反馈设备沿顺时针方向移动,当扫描“A”的读数为 0,扫描“B”的读数为 -2000 时,则实际位置变化相当于顺时针方向的 +2096 个计数。但由于这两个值大于字长的一半(大于物理设备旋转周期的一半),因此 PMUL 指令按照反馈设备反向旋转进行计算,返回值 -2000 而不是 +2096。
脉冲乘法器功能块的第三个属性是,它会保留每次扫描期间因 Multiplier/100,000 变换因子而产生的任何余数部分。每次执行该功能块后,上一次扫描得到的余数会加回到当前总值中,这样一来,所有计数或“脉冲”最终都会计算到,因而系统中的任何数据都不会丢失。功能块的输出 Out 始终产生一个浮点数据类型的整数。
功能块
RSL5K_PMUL Function Block Example 1_v31
假定 Initial_Position = 0 且 Multiplier = 2500 => (25,000/100,000)
扫描
Position_Feedback
PMUL_02.Out
Total_Position
n
0
0
0
n + 1
1
0
0
n + 2
2
0
0
n + 3
3
0
0
n + 4
4
1
1
n + 5
5
0
1
结构化文本
MUL_02.In := Position_feedback;
PMUL_02.Initalize := Initialize_Position;
PMUL_02.WordSize := 12;
PMUL_02.Multiplier := 25000;
PMUL(PMUL_02);
UPDN_02.Initialize := Initialize_Position;
UPDN_02.InPlus := PMUL_02.Out;
UPDN(UPDN_02);
Total_Position := UPDN_02.Out;
示例 2
在此电子传动轴应用中,电机 A 的反馈将作为电机 B 的主要参考。电机 A 的反馈又称“Position_feedback”。电机 B 的反馈又称“Follower_Position”。由于两条指令的乘数之比为 1/4,因此电机 A 每转 4 圈,电机 B 就需要旋转 1 圈,这样才能使 UPDN 累加器的累加值保持为零。UPDN 指令任何不为零的输出值都将视为 Position_error,可对该值进行调节并送回电机 B,以便在两个电机之间保持锁相。
功能块
RSL5K_PMUL Function Block Example 2_v31
结构化文本
PMUL_02.In := Position_feedback;
PMUL_02.Initalize := Initialize_Position;
PMUL_02.WordSize := 12;
PMUL_02.Multiplier := 25000;
PMUL(PMUL_02);
PMUL_03.In := Follower_Position;
PMUL_03.Initalize := Initialize_Position;
PMUL_03.WordSize := 12;
PMUL_03.Multiplier := 100000;
PMUL(PMUL_03);
UPDN_02.Initialize := Initialize_Position;
UPDN_02.InPlus := PMUL_02.Out;
UPDN_02.InMinus := PMUL_03.Out;
UPDN(UPDN_02);
Position_error := UPDN_02.Out;
提供反馈
对本文档有问题或反馈吗? 请在这里提交您的反馈
Normal