2014-05-01 9 views
1

Maxon EPOS 라이브러리는 겉으로보기에는 보간 위치 모드를 처리하는 일부 기능 블록을 정의합니다.하지만 사용할 수있는 방법을 지정하는 샘플은 없습니다. 여기 Maxon EPOS 라이브러리를 사용하여 IEC-61131 구조화 된 텍스트에서 보간 위치 모드 시퀀스를 프로그래밍하는 방법은 무엇입니까?

작동 다른 이동 달리 TRUE

FUNCTION_BLOCK FB_MAIN_Routine1 

TYPE 
    POSITIONS: ARRAY[1..64] OF DINT; 
    VELOCITIES: ARRAY[1..64] OF DINT; 
    TIME_VALUES: ARRAY[1..64] OF USINT; 
END_TYPE 

VAR_EXTERNAL 
    Axis1: AXIS_REF; 
END_VAR 

VAR_INPUT 
    Execute: BOOL; 
END_VAR 

VAR_OUTPUT 
    Done: BOOL; 
END_VAR 

VAR 

    Start: BOOL := FALSE;  
    LoadPointsAx1: BOOL := FALSE; 

    fbClearIpmBufferAx1: MU_ClearIpmBuffer; 
    fbAddPvtValuesAx1: MU_AddPvtValues; 
    fbStartIpmTrajectoryAx1: MU_StartIpmTrajectory; 
    fbGetIpmStatusAx1: MU_GetIpmStatus; 
    fbGetIpmTrajectoryStatusAx1: MU_GetIpmTrajectoryStatus; 

    PositionsAx1: POSITIONS := [49500, 47703, 45906, 44109, 42312, 40516, 38719, 36922, 35125, 33329, 31532, 29735, 27938, 26142, 24345, 22548, 20751, 21834, 23037, 24240, 25443, 26646, 27848, 29051, 30254, 31457, 32660, 33863, 35065, 36268, 37471, 38674, 39877, 41080, 42282, 43485, 44688, 45891, 47094, 48297, 49500, 49500, 49500, 49500, 49500, 49500, 49500, 49500, 49500, 49500, 49500, 49500, 49500, 49500, 49500, 49500, 49500, 49500, 49500, 49500, 49500, 49500, 49500, 49500];  
    VelocitiesAx1: VELOCITIES := [-216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; 
    TimeValuesAx1: TIME_VALUES := [250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; 

END_VAR 

fbGetIpmStatusAx1(Axis := Axis1, Enable := Execute); 

fbClearIpmBufferAx1(Axis := Axis1, Execute := Execute); 

If fbClearIpmBufferAx1.Done Then  
    LoadPointsAx1 := TRUE; 
END_IF; 

fbAddPvtValuesAx1(Axis := Axis1, Execute := LoadPointsAx1, Position := PositionsAx1, Velocity := VelocitiesAx1, TimeValue := TimeValuesAx1); 

If fbAddPvtValuesAx1.Done Then  
    Start := TRUE; 
End_If; 

fbStartIpmTrajectoryAx1(Axis := Axis1, Execute := Start); 

fbGetIpmTrajectoryStatusAx1(Axis := Axis1, Enable := fbStartIpmTrajectoryAx1.Done); 

If (Execute = FALSE) Or fbGetIpmTrajectoryStatusAx1.TargetReached Then 
    Done := Execute; 
    Start := FALSE; 
    LoadPointsAx1 := FALSE; 
    fbAddPvtValuesAx1(Axis := Axis1, Execute := FALSE); 
    fbStartIpmTrajectoryAx1(Axis := Axis1, Execute := FALSE); 
    fbGetIpmTrajectoryStatusAx1(Axis := Axis1, Enable := FALSE); 
End_If; 

END_FUNCTION_BLOCK 

답변

1

(예 : 속도 모드 또는 위치 모드), 보간에 Execute 세트를 호출 할 때 내가 지금까지 가지고 있지만 순간에 그것은 단지 그것을 통해 바로 건너 뛰고 것입니다 위치 모드를 초기화해야합니다.

MU_ActivateInterpolatedPositionMode으로 전화하면이 문제가 해결됩니다.