Sonstiges Ultraschallschweißgerät Herrmann MPW IS Modul - Var 3

meikelneit

Level-2
Beiträge
172
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Schönen guten Morgen,

ich habe ein Problem beim schreiben von Parametersätzen mit dem im Titel besagten Ultraschallschweißgerät und ich würde moch sehr über Ideen und Anregegungen bzw. im besten Fall sogar über Lösungen Freuen.
Zunächst einmal verwende ich die Bausteine die Herrmann mitliefert und zum Schreiben den ABL2 (FB10).
Ich Poste einmal den Baustein mit dem ich das Senden antrigger.

Code:
REGION Generate Error
    
    #General_Error := #Error_Write;
    
END_REGION



REGION Scalefactors
    
    IF #Start_Writing_Data THEN
        #DATA_DB.PARAMETERSET[0].SCAL_1_WRITE := #IDENTITY;          //Set Operation mode to RPN distance
        #DATA_DB.PARAMETERSET[0].SCAL_4_WRITE := #TIME;              //Hold time
        #DATA_DB.PARAMETERSET[1].SCAL_1_WRITE := #LENGTH;            //Wleding stroke RPN
        #DATA_DB.PARAMETERSET[2].SCAL_1_WRITE := #FORCE;             //Preset force
        #DATA_DB.PARAMETERSET[2].SCAL_2_WRITE := #FORCE;             //Trigger force
        #DATA_DB.PARAMETERSET[2].SCAL_3_WRITE := #FORCE;             //Welding force F1
        #DATA_DB.PARAMETERSET[2].SCAL_4_WRITE := #FORCE;             //default
        #DATA_DB.PARAMETERSET[2].SCAL_5_WRITE := #FORCE;             //default
        #DATA_DB.PARAMETERSET[2].SCAL_6_WRITE := #FORCE;             //Holding Force
        #DATA_DB.PARAMETERSET[3].SCAL_1_WRITE := #LENGTH;            //Weldingstroke RPN max
        #DATA_DB.PARAMETERSET[3].SCAL_2_WRITE := #LENGTH;            //Weldingstroke RPN min
        #DATA_DB.PARAMETERSET[4].SCAL_1_WRITE := 0.0000207320529355; //Amplitude
    END_IF;
    
END_REGION

REGION Parameterset configuration
    
    IF #Start_Writing_Data THEN
        
        #DATA_DB.PARAMETERSET[0].ID_WRITE_READ := #HW_Adress_US;
        #DATA_DB.PARAMETERSET[0].MEMORY_NO := #Memory_NO;
        #DATA_DB.PARAMETERSET[0].PARAMETER_G_M_WRITE := TRUE;
        #DATA_DB.PARAMETERSET[0].PARAMETERSET_WRITE := 1;
        #DATA_DB.PARAMETERSET[0].PARAMETERNUMBER_WRITE := 2;
        #DATA_DB.PARAMETERSET[0].NUMBERS_OF_PARAMETERS_WR := 4;
        #DATA_DB.PARAMETERSET[0].PARAM_1_WRITE := 8.0;                 //Set Operation mode to RPN distance
        #DATA_DB.PARAMETERSET[0].PARAM_4_WRITE := #actual_typeparameter.database."Process Parameter".Holding_time;
        
        #DATA_DB.PARAMETERSET[1].ID_WRITE_READ := #HW_Adress_US;
        #DATA_DB.PARAMETERSET[1].MEMORY_NO := #Memory_NO;
        #DATA_DB.PARAMETERSET[1].PARAMETER_G_M_WRITE := TRUE;
        #DATA_DB.PARAMETERSET[1].PARAMETERSET_WRITE := 2;
        #DATA_DB.PARAMETERSET[1].PARAMETERNUMBER_WRITE := 4;
        #DATA_DB.PARAMETERSET[1].NUMBERS_OF_PARAMETERS_WR := 1;
        #DATA_DB.PARAMETERSET[1].PARAM_1_WRITE := #actual_typeparameter.database."Process Parameter"."Welding_Stroke_RPN_F1->F2";  
        
        #DATA_DB.PARAMETERSET[2].ID_WRITE_READ := #HW_Adress_US;
        #DATA_DB.PARAMETERSET[2].MEMORY_NO := #Memory_NO;
        #DATA_DB.PARAMETERSET[2].PARAMETER_G_M_WRITE := TRUE;
        #DATA_DB.PARAMETERSET[2].PARAMETERSET_WRITE := 3;
        #DATA_DB.PARAMETERSET[2].PARAMETERNUMBER_WRITE := 1;
        #DATA_DB.PARAMETERSET[2].NUMBERS_OF_PARAMETERS_WR := 6;
        #DATA_DB.PARAMETERSET[2].PARAM_1_WRITE := #actual_typeparameter.database."Process Parameter".Preset_force;  
        #DATA_DB.PARAMETERSET[2].PARAM_2_WRITE := #actual_typeparameter.database."Process Parameter".Trigger_force;
        #DATA_DB.PARAMETERSET[2].PARAM_3_WRITE := #actual_typeparameter.database."Process Parameter".Force_F1;
        #DATA_DB.PARAMETERSET[2].PARAM_4_WRITE := 20.0; //allowed default value
        #DATA_DB.PARAMETERSET[2].PARAM_5_WRITE := 20.0; //allowed default value
        #DATA_DB.PARAMETERSET[2].PARAM_6_WRITE := #actual_typeparameter.database."Process Parameter".Holding_force;
        
        #DATA_DB.PARAMETERSET[3].ID_WRITE_READ := #HW_Adress_US;
        #DATA_DB.PARAMETERSET[3].MEMORY_NO := #Memory_NO;
        #DATA_DB.PARAMETERSET[3].PARAMETER_G_M_WRITE := TRUE;
        #DATA_DB.PARAMETERSET[3].PARAMETERSET_WRITE := 8;
        #DATA_DB.PARAMETERSET[3].PARAMETERNUMBER_WRITE := 35;
        #DATA_DB.PARAMETERSET[3].NUMBERS_OF_PARAMETERS_WR := 2;
        #DATA_DB.PARAMETERSET[3].PARAM_1_WRITE := #actual_typeparameter.database."Process Parameter".Welding_Stroke_RPN_max; 
        #DATA_DB.PARAMETERSET[3].PARAM_2_WRITE := #actual_typeparameter.database."Process Parameter".Welding_Stroke_RPN_min;      
        
        #DATA_DB.PARAMETERSET[4].ID_WRITE_READ := #HW_Adress_US;
        #DATA_DB.PARAMETERSET[4].MEMORY_NO := #Memory_NO;
        #DATA_DB.PARAMETERSET[4].PARAMETER_G_M_WRITE := TRUE;
        #DATA_DB.PARAMETERSET[4].PARAMETERSET_WRITE := 9;
        #DATA_DB.PARAMETERSET[4].PARAMETERNUMBER_WRITE := 1;
        #DATA_DB.PARAMETERSET[4].NUMBERS_OF_PARAMETERS_WR := 1;
        #DATA_DB.PARAMETERSET[4].PARAM_1_WRITE := #actual_typeparameter.database."Process Parameter"."Amplitude [%]";
        
    END_IF;
    
END_REGION

REGION Build Flags  
    
    #R_TRIG_Write_Data(CLK := #Start_Writing_Data,
                         Q => #Start_SFC);
    
    #R_TRIG_Write_Direct(CLK:=#Start_Writing_Direct,
                          Q=>#Start_SFC_Direct);
     
    IF #Start_SFC THEN
        #Start_Writing_Data := FALSE;
        #Cycle_Count := 0;
    END_IF;
    
    #R_TRIG_Next_Step(CLK:=#Writing_Finished,
                      Q=>#Next_Step);
    
    #R_TRIG_Next_Step_Direct(CLK := #Write_direct_finished,
                             Q => #Next_Step_direct);
    
END_REGION

REGION SEQUENCE Write Data
    
    //Start Sequence
    IF #Start_SFC AND NOT #General_Error THEN
        #Cycle_Count := 1;
    END_IF;
       
    
    //Step 5
    IF #Cycle_Count = 5 AND NOT #General_Error THEN
        
        IF #Next_Step THEN
            #Cycle_Count := 0;
            #Start_Write := FALSE;
        ELSE
            #DATA_DB.Num_Paraset := 4;
            #Start_Write := TRUE;
        END_IF;
    END_IF;
    
    //Step 4
    IF #Cycle_Count = 4 AND NOT #General_Error THEN
        
        IF #Next_Step THEN
            #Cycle_Count := 5;
            #Start_Write := FALSE;
        ELSE
            #DATA_DB.Num_Paraset := 3;
            #Start_Write := TRUE;
        END_IF;
    END_IF;
    
    //Step 3
    IF #Cycle_Count = 3 AND NOT #General_Error THEN
        
        IF #Next_Step THEN
            #Cycle_Count := 4;
            #Start_Write := FALSE;
        ELSE
            #DATA_DB.Num_Paraset := 2;
            #Start_Write := TRUE;
        END_IF;
    END_IF;
    
    //Step 2
    IF #Cycle_Count = 2 AND NOT #General_Error THEN
        
        IF #Next_Step THEN
            #Cycle_Count := 3;
            #Start_Write := FALSE;
        ELSE
            #DATA_DB.Num_Paraset := 1;
            #Start_Write := TRUE;
            
            #Start_Write := TRUE;
        END_IF;
    END_IF;
    
    //Step 1
    IF #Cycle_Count = 1 AND NOT #General_Error THEN
        
        IF #Next_Step THEN
            #Cycle_Count := 2;
            #Start_Write := FALSE;
        ELSE 
            #DATA_DB.Num_Paraset := 0;
            #Start_Write := TRUE;
        END_IF;
    END_IF;
    
END_REGION

REGION ERROR Reset  
    
    IF #General_Error AND #Reset THEN
        #Start_Write := FALSE;
        #Cycle_Count := 0;
        #Cycle_Count_direct := 0;
    END_IF;
END_REGION

Bei Rückfragen gerne mehr Erklärungen, es richtet sich jetzt erstmal an diejenigen die das Gerät kennen. Ich gehe hin und Konfoguriere mir ein Array Platz pro Parametersatz und Sende die dann in einer Schrittkette nacheinandner an den Controler, man könnte hier halt auch grundsätzlich den Schreiben FB als Multiinstanz aufrufen, das könnte gegebenfalls ein Untschied sein.

Nun das Problem, unregelmäßig, geradezu Zufällig schaltet sich das HMI des Geräts in den Modus "Bedienung gesperrt (Feldbus)". Der Technische Support konnte mir leider nicht weiterhelfen, sie sagten mir nur das es ein Eigens dafür vorgesehenes Signal gibt, um das HMI ab- oder zuzuschalten. Dieses Bit habe ich aber dauer gefalsed, und ab da konnten sie mir dann auch nicht weiter hellfen.

Selbst wenn ich dieses Bit dann mal Trigger kommt die Bedienung des HMI nicht zurück, einzig ein Neustart des Controlers Hilft da weiter.

Schönen dank schonmal im Vorraus
Meikelneit

PS: Ich würde auch gerne mal Tips zu SCL Schrittketten Strukturen haben, meine gefällt mir im Grunde nicht.
 
Zurück
Oben