F170_PulseOutput_PWM

PWM输出

此指令根据指定的DUT传送脉宽调制输出信号。当指定通道的控制标志为FALSE且执行条件为TRUE时,从该通道输出脉冲。

参数

输入

s_dutDataTable (F170_PulseOutput_PWM_DUT)

包含数据表的区域的开始地址

n_iPulseOutputChannel (INT)

脉冲输出01

标注

  • 使用以下预定义DUT:F170_PulseOutput_PWM_DUT

  • 可以在DUT中指定以下参数:

    • 近似频率

    • 占空比(对于脉冲持续时间和周期)

      矩形波形的脉冲持续时间和周期之间的比例。对于脉冲持续时间为1ms且脉冲周期为4ms的脉冲序列,占空比为0,2525%

通用编程信息

  • 只要使用此指令开始在线编辑程序(例如在RUN模式中),脉冲输出即停止。

  • 在系统寄存器中将所有分配到脉冲输出通道的高速计数器设置为"未使用"。

  • 如果主程序和中断程序都包含同一通道的代码,请确保两者不同时执行。

  • 高速计数器控制标志(例如sys_bIsHscChannel0ControlActive)和脉冲输出控制标志(例如sys_bIsPulseChannel0Active)被分配为相同的特殊内部继电器编号(例如R903A)。因此,当执行高速计数器指令或脉冲输出指令时,所用通道的高速计数器控制标志(例如sys_bIsHscChannel0ControlActive)和脉冲输出控制标志(例如sys_bIsPulseChannel0Active)均为TRUE。只要此标志为TRUE,就无法执行其他高速计数器指令或脉冲输出指令。

  • 在与最小或最大占空比接近的点,输出延迟,可能会造成占空比与指定值不同。

  • 可对各扫描更改占空比。在下一次脉冲输出时更改生效。频率设置仅在开始执行指令时生效。

  • 强烈建议将强制停止选项包含到位置控制程序中。

  • 在执行扫描时,高速计数器控制标志或脉冲输出控制标志的状态可能改变。例如,如果多次读取接收到的字节数,则在单次扫描中可能存在不同的状态。

使用FP0R的FP0兼容模式

若要以FP0兼容模式运行FP0R,可以将FP0程序下载到FP0R

FP0、FP-e的输出和系统变量

通道和脉冲输出编号

通道编号 脉冲输出 脉冲输出方式

0

Y0

脉冲

Y2

方向

1

Y1

脉冲

Y3

方向

所用内存区的系统变量. 括号中的值对FP0 T32有效。

描述

系统变量

脉冲输出:通道的控制标志

0

sys_bIsPulseChannel0Active

1

sys_bIsPulseChannel1Active

脉冲输出:通道的经过值

0

sys_diPulseChannel0ElapsedValue

1

sys_diPulseChannel1ElapsedValue

脉冲输出:通道的目标值

0

sys_diPulseChannel0TargetValue

1

sys_diPulseChannel1TargetValue

高速计数器或脉冲输出控制代码

sys_wHscOrPulseControlCode

示例

全局变量

在全局变量列表中,定义项目中所有POU都可以访问的变量。

DUT

DUTF170_PulseOutput_PWM_DUTFP Library中预定义。

POU头

所有用于编程此函数的输入和输出变量已在POU头中声明。所有编程语言使用相同的POU头。

	VAR_EXTERNAL
		X6_bEnablePWM: BOOL:=FALSE;
	END_VAR
	VAR 
		dutPWMControl: F170_PulseOutput_PWM_DUT;
			(*iFrequencyValue := 1: f=2.0Hz, T=502.5ms;*)
		iPulseWidthModulationDuty: INT:=500;
			(*500=50% duty*)
		@'': @'';
	END_VAR

LD本体

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_F,E_MOVE!,Instance,15,1,21,5,,?DEN?D?AENO?C);
B(B_VARIN,,iPulseWidthModulationDuty,13,3,15,5,);
B(B_VAROUT,,dutPWMControl.iPulseWidthModulationDuty,21,3,23,5,);
B(B_CONTACT,,X6_bEnablePWM,4,2,6,4,);
L(6,3,15,3);
L(1,3,4,3);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_CONTACT,,X6_bEnablePWM,4,2,6,4,);
B(B_F,F170_PulseOutput_PWM!,Instance,13,1,26,6,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
B(B_VARIN,,dutPWMControl,11,3,13,5,);
B(B_VARIN,,2,11,4,13,6,);
L(1,3,4,3);
L(6,3,13,3);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST本体

IF (X6_bEnablePWM) then
    dutPWMControl.iPulseWidthModulationDuty:=iPulseWidthModulationDuty;
END_IF;
IF (X6_bEnablePWM) then
    F170_PulseOutput_PWM(s_dutDataTable := dutPWMControl, 
    n_iPulseOutputChannel := 2);
END_IF;

IL本体

最后更新日期: 此页面上的反馈松下热线