Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

Funktion erstellen

caprez95
2019-05-17
2019-06-19
  • caprez95 - 2019-05-17

    Liebe Community

    Ich will eine Funktion erstellen, mit der ich einen Schrittmotor Referenzieren will.

    Die Funktion sieht folgendermassen aus:

    FUNCTION Stepper_Homing : BOOL
    VAR_INPUT

    Start: BOOL;
    

    END_VAR

    VAR

    single_scan: BOOL := FALSE;
    Motor_Init: INT := 0;
    

    END_VAR


    IF Start AND NOT single_scan THEN

    Motor_Init := 10;
    single_scan := TRUE;
    

    END_IF

    CASE Motor_Init OF

    10:
        GVL.Motor_Controlword := 6;                     //Enable Voltage, Disable Quickstop
    
        IF GVL.Motor_Statusword.4 THEN
    
            Motor_Init := 20;
    
        END_IF
    
    20:
        GVL.Motor_OPMode := 6;                          //Homing Mode
    
        IF GVL.Motor_OPMode_Display = 6 THEN
    
            Motor_Init := 30;
    
        END_IF
    
    30:
        GVL.Motor_Controlword := 7;                 //Switch on
    
        IF GVL.Motor_Statusword.1 THEN
    
            Motor_Init := 40;
    
        END_IF
    
    40:     
        GVL.Motor_Controlword := 15;                    //Enable Operation
    
        IF GVL.Motor_Statusword.2 THEN
    
            GVL.Motor_Homing_Method := 27;
            GVL.Motor_HomingVelF := 500000;
            GVL.Motor_HomingVelS := 50000;
            GVL.Motor_HomingAcc := 1000000;
            Motor_Init := 50;
    
        END_IF
    
    50:     
        GVL.Motor_Controlword := 31;                    //Start Motion
    
        IF GVL.Motor_Statusword.10 THEN
    
            GVL.Motor_Controlword := 7;
            Stepper_Homing := TRUE;
    
        END_IF
    

    END_CASE

    Diese Funktion rufe ich folgendermassen auf:

    PROGRAM Homing_Function
    VAR

    Stepper_Homed : BOOL;
    

    END_VAR


    IF NOT Stepper_Homed THEN

    Stepper_Homed := Stepper_Homing(Start := TRUE);
    

    END_IF

    Jedoch funktioniert das ganze nicht. In der Funktion werden im Betrieb nur Fragezeichen anstatt den Werten angezeigt.
    Kann mir jemand sagen, was ich falsch mache?

    Vielen Dank für eure Hilfe!

    Gruss caprez95

     
  • wollvieh

    wollvieh - 2019-06-10

    Eine Function kann keine Zustände speichern.
    Du solltest dazu einen Functionblock verwenden.

     
  • Chris.O - 2019-06-19

    Oder ein komplette PRG in AS programmieren... da tut man sich meiner Meinung nach bei Schrittketten etwas leichter.

    Ansonsten kannst du dir in der Funktion mal einen Breakpoint setzen, dann werden die die Werte in diesem Moment angezeigt.

    Gruß Chris

     

Log in to post a comment.