数据表控制
此指令根据指定DUT中的参数通过不同速度和目标值的任意数执行矩形控制。当指定通道的控制标志为FALSE且执行条件为TRUE时,脉冲从该通道输出。
输入
包含数据表的区域的开始地址
样本:F174_PulseOutput_DataTable_8_Values_DUT
脉冲输出通道:
FP-XH C30 T/P: 0~3
FP-XH C60 T/P: 0~5
FPS: 0,2
FP-X C30T/C60T: 0,1,2,3
FP-XC14T: 0,1,2
FP-X R: 0,1
FP0R: 0,1,2,3
使用以下DUT作为样本,创建您自己的DUT:F174_PulseOutput_DataTable_8_Values_DUT
可以在DUT中指定以下参数:
控制代码
频率 1
目标值 1
频率 2
目标值 2
...
频率 n
目标值 n
脉冲停止
脉冲输出特性
x 高速计数器的经过值(行程量)
以指定频率输出脉冲,直到达到目标值。然后频率更改为第二个频率值且脉冲输出继续,直到达到第二个目标值,以此类推。
当达到最后一个目标值时,脉冲输出停止。
0的频率表示最终频率并停止脉冲输出。
FP-X、FP0R:当执行脉冲输出指令且正在输出脉冲时,相应通道的脉冲输出控制标志(例如sys_bIsPulseChannel0Active)为TRUE。只要此标志为TRUE,就无法执行其他脉冲输出指令。
FPS:高速计数器控制标志(例如sys_bIsHscChannel0ControlActive)和脉冲输出控制标志(例如sys_bIsPulseChannel0Active)被分配为相同的特殊内部继电器编号(例如R903A)。因此,当执行高速计数器指令或脉冲输出指令时,所用通道的高速计数器控制标志(例如sys_bIsHscChannel0ControlActive)和脉冲输出控制标志(例如sys_bIsPulseChannel0Active)均为TRUE。只要此标志为TRUE,就无法执行其他高速计数器指令或脉冲输出指令。
如果指定的第一个频率值超出范围,将出现运算错误。(如果第一个频率值为0,运算将停止,不输出任何脉冲。)
如果指定的第二个频率值超出范围或为0,脉冲输出将停止。
如果目标值超出范围,脉冲输出数量可能与指定值不同。
FP0R:如果目标值之一不在移动方向,脉冲输出将停止。
FPS、FP-X:如果目标值之一不在移动方向,计数将无限继续。
FPS: 执行圆弧插补控制指令F176_PulseOutput_Center将圆弧插补控制标志(sys_bIsCircularInterpolationActive)设置为TRUE。保持此标志的状态,直到达到目标值(即使执行条件不再为TRUE)。在此期间,无法执行其他脉冲输出指令。
FPS:在系统寄存器中将所有分配到脉冲输出通道的高速计数器设置为"未使用"。
FPS、FP-X:如果定时中断或高速计数器中断程序运行,或同时使用PLC Link函数,应使用80kHz或更小的频率。
FP-X: 在系统寄存器中设置所需通道的"脉冲输出"。
当正在以RUN模式编辑程序时,脉冲输出停止,但是在已下载程序变更之后会恢复。
强烈建议将强制停止选项包含到位置控制程序中。
在执行扫描时,高速计数器控制标志或脉冲输出控制标志的状态可能改变。例如,如果多次读取接收到的字节数,则在单次扫描中可能存在不同的状态。
在全局变量列表中,定义项目中所有POU都可以访问的变量。
DUTF174_PulseOutput_DataTable_8_Values_DUT在[FP库]中预定义,并且可以用作样本。
所有用于编程此函数的输入和输出变量已在POU头中声明。 所有编程语言使用相同的POU头。
VAR_EXTERNAL
X0_bMotorSwitch: BOOL:=FALSE;
(*at X0*)
END_VAR
VAR
dutDataTable4: F174_DUT:=ControlCode := 16#1200,
Frequency1 := 1000,
TargetValue1 := 1000,
Frequency2 := 2500,
TargetValue2 := 2000,
Frequency3 := 5000,
TargetValue3 := 5000,
Frequency4 := 1000,
TargetValue4 := 2000,
Termination := 0;
(*Control code:
Digit 3: 1=Duty ratio 25%
Digit 2: 2=Frequency range 48Hz-100kHz
Digit 1: 0=Relative value control
Digit 0: 0=CW*)
@'': @'';
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_F,F174_PulseOutput_DataTable!,Instance,13,0,27,5,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
B(B_VARIN,,dutDataTable4,11,2,13,4,);
B(B_VARIN,,0,11,3,13,5,);
B(B_CONTACT,,X0_bMotorSwitch,5,1,7,3,R);
L(1,2,5,2);
L(7,2,13,2);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(X0_bMotorSwitch) then
F174_PulseOutput_DataTable(s_dutDataTable := dutDataTable4, 4);
END_IF;