F171_PulseOutput_Trapezoidal

梯形控制

此指令根据指定DUT中的参数自动执行梯形控制。当指定通道的控制标志为FALSE且执行条件为TRUE时,脉冲从该通道输出。

输入

s_dutDataTable (DUT)

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

  • FP-S, FP-X:

    F171_PulseOutput_Trapezoidal_DUT

  • FP0R:

    F171_PulseOutput_Trapezoidal_Type0_DUT

    F171_PulseOutput_Trapezoidal_Type1_DUT

n_iPulseOutputChannel(十进制常量)

脉冲输出通道:

FP-XH C30 T/P: 0~3

FP-XH C60 T/P: 0~5

FP-S0, 2

FP-X C30T/C60T0, 1, 2, 3

FP-XC14T0, 1, 2

FP-X R0, 1

FP0R0, 1, 2, 3

FP-SigmaFP-X的描述

使用以下预定义DUT:F171_PulseOutput_Trapezoidal_DUT

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

  • 控制代码
  • 初始和最终速度
  • 目标速度
  • 加速/减速时间
  • 目标值
  • 脉冲停止
脉冲输出特性
  1. 初始和最终速度

  2. 目标速度

  3. 加速/减速时间

  4. 目标值

  5. 脉冲输出控制标志

  6. 执行条件

脉冲输出频率根据指定加速/减速时间而变化。目标和初始速度之差决定斜坡的斜率。

  • 如果主程序和中断程序都包含同一通道的代码,请确保两者不同时执行。
  • FP-X当执行脉冲输出指令且正在输出脉冲时,相应通道的脉冲输出控制标志(例如sys_bIsPulseChannel0Active)为TRUE。只要此标志为TRUE,就无法执行其他脉冲输出指令。

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

  • FPS执行圆弧插补控制指令F176_PulseOutput_Center将圆弧插补控制标志(sys_bIsCircularInterpolationActive)设置为TRUE。保持此标志的状态,直到达到目标值(即使执行条件不再为TRUE)。在此期间,无法执行其他脉冲输出指令。

  • 当正在以RUN模式编辑程序时,脉冲输出停止,但是在已下载程序变更之后会恢复。
  • FPS在系统寄存器中将所有分配到脉冲输出通道的高速计数器设置为"未使用"。

  • FP-X在系统寄存器中设置所需通道的"脉冲输出"。

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

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

FP0R的描述

使用以下预定义DUT:F171_PulseOutput_Trapezoidal_Type0_DUT(最大速度 = 第一目标速度)或F171_PulseOutput_Trapezoidal_Type1_DUT(最大速度 = 50kHz)。

脉冲输出期间可以更改目标速度。

两个控制方法可用:

  • 类型0在第一个指定的目标速度范围内可以更改速度。

  • 类型1在最大速度(50kHz)范围内可以更改速度。

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

  • 控制代码
  • 初始和最终速度
  • 目标速度
  • 加速时间
  • 减速时间
  • 目标值

脉冲输出特性

  1. 初始和最终速度

  2. 目标速度

  3. 加速时间

  4. 减速时间

  5. 目标值

  6. 脉冲输出控制标志

  7. 执行条件

  8. 减速停止请求

  • 类型0:

    目标速度和初始速度之差决定加速斜坡的斜率。目标速度和最终速度之差决定减速斜坡的斜率。

  • 类型1:

    最大速度50kHz和初始速度之差决定加速斜坡的斜率。最大速度50kHz和最终速度之差决定减速斜坡的斜率。

使用25%的占空比输出脉冲。通过脉冲输出方法"脉冲/方向",在已输出方向信号之后,输出脉冲约300ms;电机驱动器特性同时考虑在内。

减速停止

若要执行减速停止,请将存储脉冲输出控制代码的数据寄存器的第5位从FALSE设置为TRUE(例如MOVE(16#120, sys_wHscOrPulseControlCode);)。当加速期间请求减速停止时,将以从目标速度减速的相同斜率执行减速。

脉冲输出期间更改目标速度

类型1在最大速度(50kHz)范围内可以更改速度。

  1. 目标速度

  2. 目标速度的第1次改变

  3. 目标速度的第2次改变

  4. 加速时间

  5. 加速

  6. 减速

  7. 减速时间

  8. 脉冲输出控制标志

  9. 执行条件

若要更改速度,将执行条件保持为TRUE

  • 类型0:

    如果指定的值大于启动时的目标速度,将被修正为启动时的目标速度。

  • 类型1:

    如果目标速度设置为大于50kHz的值,将被修正为50kHz

如果加速期间经过值超过加速禁止区域开始位置(例如sys_diPulseChannel0AccelerationForbiddenAreaStartingPosition),则无法执行加速。

  • 减速度不可低于修正的最终速度。

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

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

  • 当执行脉冲输出指令且正在输出脉冲时,相应通道的脉冲输出控制标志(例如sys_bIsPulseChannel0Active)为TRUE。只要此标志为TRUE,就无法执行其他脉冲输出指令。
  • 当已请求减速停止时,无法启动指令。
  • 若要在停止操作后重新启动指令,请将执行条件变为FALSE,然后再次变为TRUE
  • 如果位置参数保持不变,指令执行速度要快于第二次启动时的速度。更改输出操作的设置(仅脉冲输出或计算)不会影响此动作。
  • 强烈建议将强制停止选项包含到位置控制程序中。

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

示例

POU头

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

	VAR
		bMotorSwitch: BOOL:=FALSE;
		dutTrapez: F171_PulseOutput_Trapezoidal_DUT:=dwControlCode := 16#1100;
			(*Control code:
Digit 3: 1=Duty ratio 25%
Digit 2: 1=Frequency range 48Hz-100kHz
Digit 1: 0=Relative value control
Digit 0: 0=CW/CCW*)
	END_VAR
	VAR_EXTERNAL
		X0_bMotorSwitch: BOOL:=FALSE;
			(*at X0*)
	END_VAR
	VAR 
		diInitialSpeed: DINT:=100;
		diTargetSpeed: DINT:=2000;
		diAccelerationTime: DINT:=300;
		diTargetValue: DINT:=10000;
		@'': @'';
	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 := 16 ;
        NETWORK_BODY
B(B_CONTACT,,bMotorSwitch,4,1,6,3,R);
B(B_F,E_MOVE!,Instance,17,4,23,8,,?DEN?D?AENO?C);
B(B_F,E_MOVE!,Instance,17,8,23,12,,?DEN?D?AENO?C);
B(B_VAROUT,,dutTrapez.diTargetSpeed,23,6,25,8,);
B(B_VARIN,,diTargetSpeed,15,6,17,8,);
B(B_VAROUT,,dutTrapez.diAccelerationAndDecelerationTime,23,10,25,12,);
B(B_VARIN,,diAccelerationTime,15,10,17,12,);
B(B_F,E_MOVE!,Instance,17,12,23,16,,?DEN?D?AENO?C);
B(B_VAROUT,,dutTrapez.diTargetValue,23,14,25,16,);
B(B_VARIN,,diTargetValue,15,14,17,16,);
B(B_F,E_MOVE!,Instance,17,0,23,4,,?DEN?D?AENO?C);
B(B_VAROUT,,dutTrapez.diInitialAndFinalSpeed,23,2,25,4,);
B(B_VARIN,,diInitialSpeed,15,2,17,4,);
L(7,2,7,6);
L(7,6,7,10);
L(1,2,4,2);
L(6,2,7,2);
L(7,2,17,2);
L(7,6,17,6);
L(7,10,17,10);
L(7,10,7,14);
L(7,14,17,14);
L(1,0,1,16);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_CONTACT,,bMotorSwitch,4,2,6,4,R);
B(B_VARIN,,dutTrapez,14,3,16,5,);
B(B_VARIN,,0,14,4,16,6,);
B(B_F,F171_PulseOutput_Trapezoidal!,Instance,16,1,31,6,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
L(6,3,16,3);
L(1,3,4,3);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST本体

IF DF(bMotorSwitch) then
  dutTrapez.diInitialAndFinalSpeed:=diInitialSpeed;
  dutTrapez.diTargetSpeed:=diTargetSpeed;
  dutTrapez.diAccelerationDecelerationTime:=diAccelerationTime;
  dutTrapez.diDeviationCounterClearSignalOutputTime:=10;
END_IF;
IF DF(bMotorSwitch) then
  F171_PulseOutput_Trapezoidal(s_dutDataTable := dutTrapez,
        n_iPulseOutputChannel :=0);
END_IF;

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