带有通道指定的脉冲输出指令(PWM输出)
此指令根据指定的DUT传送脉宽调制输出信号。当指定通道的控制标志为FALSE且执行条件为TRUE时,从该通道输出脉冲。
输入
包含数据表的区域的开始地址
脉冲输出通道:
FP-XH C30 T/P: 0~3
FP-XH C60 T/P: 0~5
FPS: 0,2
FP-X、FP-XH继电器:0.1
FP-X、FP-XH 16k晶体管:0~2
FP0R、FP0H、FP-X、FP-XH 32晶体管:0~3
FP-XH 32k晶体管:0~5
使用以下预定义DUT:F173_PulseOutput_PWM_DUT
可以在DUT中指定以下参数:
近似频率
占空比(对于脉冲持续时间和周期)
矩形波形的脉冲持续时间和周期之间的比例。对于脉冲持续时间为1ms且脉冲周期为4ms的脉冲序列,占空比为0,25或25%。
视负载电压和负载电流而定,占空比(特别是当其接近最小或最大值时)可能会与指定的占空比不同。
可对各扫描更改占空比。
在指令执行期间,无法更改频率常量K。如果更改,将对频率无效,但对占空比的分辨率有影响。
当正在执行指令时,如果占空比更改为允许范围以外的值,占空比将被调节到最大值。当开始执行指令时,将显示运算错误。
当正在执行指令时,如果频率更改为允许范围以外的值,分辨率将被调节为100。当开始执行指令时,将不显示运算错误。
当正在执行指令时,如果占空更改为100%或更高,频率将以指定分辨率被调节到最大值。当开始执行指令时,将不显示运算错误。
如果主程序和中断程序都包含同一通道的代码,请确保两者不同时执行。
FP-X, FP0R:当执行脉冲输出指令且正在输出脉冲时,相应通道的脉冲输出控制标志(例如sys_bIsPulseChannel0Active)为TRUE。只要此标志为TRUE,就无法执行其他脉冲输出指令。
FPS:高速计数器控制标志(例如sys_bIsHscChannel0ControlActive)和脉冲输出控制标志(例如sys_bIsPulseChannel0Active)被分配为相同的特殊内部继电器编号(例如R903A)。因此,当执行高速计数器指令或脉冲输出指令时,所用通道的高速计数器控制标志(例如sys_bIsHscChannel0ControlActive)和脉冲输出控制标志(例如sys_bIsPulseChannel0Active)均为TRUE。只要此标志为TRUE,就无法执行其他高速计数器指令或脉冲输出指令。
FPS:执行圆弧插补控制指令F176_PulseOutput_Center将圆弧插补控制标志(sys_bIsCircularInterpolationActive)设置为TRUE。保持此标志的状态,直到达到目标值(即使执行条件不再为TRUE)。在此期间,无法执行其他脉冲输出指令。
FPS:在系统寄存器中将所有分配到脉冲输出通道的高速计数器设置为"未使用"。
FP-X, FP0R:在系统寄存器中设置所需通道的"PWM输出"。
强烈建议将强制停止选项包含到位置控制程序中。
在执行扫描时,高速计数器控制标志或脉冲输出控制标志的状态可能改变。例如,如果多次读取接收到的字节数,则在单次扫描中可能存在不同的状态。
在全局变量列表中,定义项目中所有POU都可以访问的变量。
DUTF173_PulseOutput_PWM_DUT在FP Library中预定义。
所有用于编程此函数的输入和输出变量已在POU头中声明。 所有编程语言使用相同的POU头。
VAR_EXTERNAL
X6_bEnablePWM: BOOL:=FALSE;
END_VAR
VAR
dutPWMControl: F173_PulseOutput_PWM_DUT:=iFrequencyValue := 1;
(*iFrequencyValue := 1: f=2.0 Hz, T=502.5 ms;
*)
iPulseWidthModulationDuty: INT:=500;
(*500 = 50% duty*)
@'': @'';
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_CONTACT,,X6_bEnablePWM,5,2,7,4,);
B(B_F,E_MOVE!,Instance,16,1,22,5,,?DEN?D?AENO?C);
B(B_VARIN,,iPulseWidthModulationDuty,14,3,16,5,);
B(B_VAROUT,,dutPWMControl.iPulseWidthModulationDuty,22,3,24,5,);
L(7,3,16,3);
L(1,3,5,3);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_F,F173_PulseOutput_PWM!,Instance,16,0,29,5,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
B(B_VARIN,,dutPWMControl,14,2,16,4,);
B(B_VARIN,,2,14,3,16,5,);
B(B_CONTACT,,X6_bEnablePWM,5,1,7,3,);
L(7,2,16,2);
L(1,2,5,2);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF (X6_bEnablePWM) then
dutPWMControl.iPulseWidthModulationDuty:=iPulseWidthModulationDuty;
END_IF;
IF (X6_bEnablePWM) then
F173_PulseOutput_PWM(s_dutDataTable := dutPWMControl,
n_iPulseOutputChannel := 2);
END_IF;