F176_PulseOutput_Pass

圆弧插补(通过位置)

根据指定DUT中的参数从两个通道输出脉冲,从而使目标位置路径形成圆弧。通过指定中心位置和结束位置来计算圆的半径。当指定通道的控制标志为FALSE且执行条件为TRUE时,脉冲从该通道输出。

参数

输入

n_iPulseOutputChannel*(十进制常量)

脉冲输出通道:0, 2

输入/输出

s_dutDataTable (F176_PulseOutput_Pass_DUT)

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

标注

使用以下预定义DUT:F176_PulseOutput_Pass_DUT

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

  • 控制代码

  • 合成速度

  • X轴目标值

  • Y轴目标值

  • X轴通过值

  • Y轴通过值

在执行指令时计算各轴的以下参数并存储在DUT的运算结果区域中。

  • 半径

  • X轴中心值

  • Y轴中心值

脉冲输出特性

(1)

旋转方向从通道0(x轴)到通道2(y轴)(对于两个通道正向移动)

(2)

旋转方向从通道2(y轴)到通道0(x轴)(对于两个通道正向移动)

Fv

合成速度

O (Xo,Yo):

中心位置

Fx

X轴速度

S (Xs,Ys):

当前位置(开始)

Fy

Y轴速度

P (Xp,Yp)

通过位置

r:

半径

E (Xe,Ye)

目标位置(结束)

实例

使通道0为X轴,通道2为Y轴。位置控制模式为绝对值控制。

当前位置为(q=60°Xs=5000Ys=8660)。中心位置OXo=0Yo=0)用作参考点。脉冲从X轴(通道0)和Y轴(通道2)以Fv=2000Hz的速度输出,直到达到目标位置(q=-30°Xe=8660Ye=-5000)。

通用编程信息

  • 此指令的执行条件必须持续为TRUE。当执行条件为FALSE时,脉冲输出停止。

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

  • 执行圆弧插补控制指令F176_PulseOutput_Center将圆弧插补控制标志(sys_bIsCircularInterpolationActive)设置为TRUE。保持此标志的状态,直到达到目标值(即使执行条件不再为TRUE)。在此期间,无法执行其他脉冲输出指令。若要重新启动圆弧插补,请执行强制停止(停止脉冲输出)以便将圆弧插补控制标志(sys_bIsCircularInterpolationActive)设置为FALSE

  • 如果对操作连接模式选择"继续",请使用特殊标记(sys_bIsCircularInterpolationOverwritingPossible),以允许覆盖目标值。当执行圆弧插补指令时,单次扫描的标志为TRUE

  • 各轴的目标值必须在-8388608–8388607范围内。当此指令与其他脉冲输出指令(例如F171_PulseOutput_Trapezoidal)配合使用时,这些指令中的目标值必须在相同范围内。

  • 如果扫描时间太长,圆弧插补的精度可能会降低。

  • RUN模式期间的在线编辑不可用于此指令。

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

  • 由于对原点返回没有插补函数,应对每个通道执行原点返回。

  • 当在要求精度的应用中使用时,必须通过实际机器试运行。

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

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

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

指令执行期间的标志设置

(1)

执行条件X0

(2)

脉冲输出控制标志,通道0(sys_bIsPulseChannel0Active

(3)

脉冲输出控制标志,通道2(sys_bIsPulseChannel2Active

(4)

圆弧插补控制标志(sys_bIsCircularInterpolationActive

(5)

目标值覆盖可能标志(sys_bIsCircularInterpolationOverwritingPossible

a

开始(S)

b

执行条件FALSE

c

达到的目标值

d

开始继续模式

e

1次扫描

示例

POU头

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

	VAR
		Trigger: BOOL:=FALSE;
		dutPassData: F176_PulseOutput_Pass_DUT:=dwControlCode := 16#1000,
diSpeed := 2000,
diTargetPos_X := 8660,
diTargetPos_Y := -5000,
diPassPos_X := 9396,
diPassPos_Y := -3420;
			(*Control code:
Digit 4: 0=Operation connection mode: stop
Digit 3: 1=Rotation direction: CCW (left)  
Digit 2: 0=Fixed
Digit 1: 0=Relative value control
Digit 0: 2=Pulse/direction (Forward FALSE)
*)
		@'': @'';
	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 := 6 ;
        NETWORK_BODY
B(B_CONTACT,,Trigger,4,2,6,4,R);
B(B_VARIN,,dutPassData,10,4,12,6,);
B(B_VARIN,,0,10,3,12,5,);
B(B_F,F176_PulseOutput_Pass!,Instance,12,1,27,6,,?DEN?Hn_iPulseOutputChannel?Ds_dutDataTable?As_dutDataTable?AENO);
L(1,3,4,3);
L(6,3,12,3);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST本体

IF DF(Trigger) then
    F176_PulseOutput_Pass(n_iPulseOutputChannel := 0, 
        s_dutDataTable := dutPassData);
END_IF;

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