TIA Unerklärliches Problem bei einer Steuerung (S7-1200 und Basic Panel)

ludi81

Level-1
Beiträge
66
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe ein unerklärliches Problem bei einer Hydraulischen Maschine. Die Maschine besitzt eine S7-1200 und ein Basic Panel.
Bei der Steuerung wurde ein Ablauf (mehrere Hydraulische Zylinder) implementiert.

Komischerweise funktioniert dieser Ablauf etwa 100 - 1000 mal perfekt. Aber dann gibt es einen Ablauf bei dem die Maschine ein Problem hat. Die Maschine bricht vermutlich einen Schritt nicht ab. Die Hydraulischen Bewegungen werden mit einem Neigungssensor überwacht und die Maschine sollte bei z.b. 75 Grad stehen bleiben. Sie fährt aber bis 105 Grad und verursacht dadurch einen Crash.
Ich habe den Code bereits einige male angesehen und finde keine Ungereimtheiten. Reproduzieren lässt sich der Fehler leider nicht.

An was kann es liegen? Hat vielleicht jemand eine Idee? Wie kann ich das Problem beseitigen.
Meine Ideen sind:
1) Der Sensor sendet plötzlich fehlerhafte Werte. Ich konnte mich schon einmal nach einem Fehler mit dem TIA Portal auf die Maschine verbinden, da waren die Werte alle wieder Perfekt (dauerte aber zirka 1 Stunde)
2) Die Steuerung S7-1200 startet plötzlich neu und die Ausgänge werden vielleicht einfach gleich gelassen
3) Das Display stört irgendwie hinein. Mir ist schon einmal aufgefallen, dass während eines Ablaufes plötzlich eine Bitmeldung angezeigt wurde, obwohl das Bit sicher nicht gesetzt wurde.

Ich bin für alle Ideen offen.

Vielen Dank
Ludi
 
Hej Ludi,
also meine Herangehensweise wäre die entsprechenden werte mit zu loggen, sei es in der SPS oder in einem externen Analyzer. damit könnte man gut drauf kommen was zu deinem Problem führt.
auch ob das Panel irgendwie dort stört könntest du über eine loggen von werten gut mitbekommen.
Ob die Steuerung neu gestartet wurde zu einem Zeitpunkt kannst du gut über die Diagnose herausbekommen.

Gruß der Pinke Panther
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Das Problem ist leider nur, dass ich noch nie dabei war, als das Problem aufgetreten ist.
Wie kann ich in der SPS die Daten am besten loggen? Die S7-1200 ist ja eine kleine Steuerung. Kann ich einfach auf die SD Karte etwas hinaufschreiben?

Danke Ludi
 
entweder du schreibst dir einen Baustein der in einem DB die werte in Zeitlichen Abständen schreibt oder einen der bei einem bestimmten Trigger Ereignis (Neigung >75 Grad) entsprechend andere werte aufzeichnet in einem DB. oder du nutzt. SPS Analyzer die dir die werte auf einen PC mitloggen. hier brauchst du nicht dabei sein nur einen PC mit der Software an der Steuerung lassen, der alles mitloggen kann. du musst da halt nur die werte auswählen die du mitloggen willst.
 
Stehen den irgendwelche Neustart Infos im Diagnosespeicher der SPS?
Oder irgendwelche Anderen Infos (Busausfall oder Bereichslängenfehler oder ähnliches) die dir vielleicht weiterhelfen könnten?
 
Könnte es sein, daß Du nicht auf >= 75 abfragst sondern auf = 75? Oder ist Dein Positions-Vergleichsfenster zu klein und wird manchmal zu schnell durchfahren (schneller als Analog-Wandlerzeit oder (schwankende) Zykluszeit)?
Wie ist der Sensor an die S7-1200 angeschlossen?
Ist Dein Grad-Wert REAL oder INT?
Wie sieht der betreffende Programmabschnitt aus, der manchmal nicht anhält?

Harald
 
Hallo,

nein im code soll er sich nur so lange bewegen bis der winkeln kleiner als 75 grad ist. also sollte er sicher stehen bleiben. Also nach einem erfolgreichen Ablauf ist die Zykluszeit zwischen 1 und 2 ms.
Mein Winkel ist in REAL.


Hier der Code. Sie wie es aussieht Liefert die Funktion "Bewegung Tisch" nicht true zurueck, oder wir haben ein anderes Problem mit der Steuerung.
Code:
 2: // Tisch 1 auf 75 Grad
        IF "Bewegung Tisch"("Tisch Nummer" := 1, von := 0, bis := "Systemvariabeln".W75, ueberpruefung := "UEBERPRUEFUNG_GROESSER_GLEICH", "Schnelle Geschwindigkeit" := TRUE) THEN
            #Schrittnummer := #Schrittnummer + 1;
        END_IF;

Hier die Funktion
Code:
//Der default Rueckgabewert ist false
#"Bewegung Tisch" := FALSE;


//Eingabewerte ueberpruefen
IF #"Tisch Nummer" <> 1 AND #"Tisch Nummer" <> 2 OR #ueberpruefung <> 1 AND #ueberpruefung <> 2 AND #ueberpruefung <> 3 THEN
    "HMI-Interrface".Meldetrigger.%X11 := TRUE;
    RETURN;
END_IF;




//Tisch 1
IF #"Tisch Nummer" = 1 THEN
    //wir sollten ueberall eine hysterese einbauen
    IF #ueberpruefung = "UEBERPRUEFUNG_GLEICH" THEN
        //kleine Hysterese einbauen
        ...
    ELSIF #ueberpruefung = "UEBERPRUEFUNG_KLEINER_GLEICH" THEN
        ...
     ELSIF #ueberpruefung = "UEBERPRUEFUNG_GROESSER_GLEICH" THEN
        //wir sind zu weit weg
        IF "HMI-Interrface"."NeigungssensorTisch1 in Grad" < #bis - "Systemvariabeln".WINKELGENAUIGKEIT THEN
            "VentileDB".VentilTisch1AufAb := "DIR_AUF_VOR_EIN_CW";
        ELSIF "HMI-Interrface"."NeigungssensorTisch1 in Grad" >= #bis THEN
            "VentileDB".VentilTisch1AufAb := "DIR_NULL";
        END_IF;
        
    END_IF;
    
   
    
    //wenn wir noch im guten bereich sind (ventil nicht offen ist), geben wir TRUE zurueck
    IF "VentileDB".VentilTisch1AufAb = "DIR_NULL" THEN
        #"Bewegung Tisch" := TRUE;
    ELSE
        //Geschwindigkeit setzen wenn noetig
        IF #"Schnelle Geschwindigkeit" THEN
            IF "VentileDB".VentilTisch1AufAb = "DIR_AUF_VOR_EIN_CW" AND "HMI-Interrface"."NeigungssensorTisch1 in Grad" < #bis - "Systemvariabeln".WINKEL_ABSTAND_GESCHWINDIGKEIT_TISCH OR
                "VentileDB".VentilTisch1AufAb = "DIR_AB_ZURUECK_AUS_CCW" AND"HMI-Interrface"."NeigungssensorTisch1 in Grad" > #bis + "Systemvariabeln".WINKEL_ABSTAND_GESCHWINDIGKEIT_TISCH THEN
                
                "VentileDB".geschwindigkeitTisch1 := TRUE;
            ELSE
                "VentileDB".geschwindigkeitTisch1 := FALSE;
            END_IF;
        ELSE
            "VentileDB".geschwindigkeitTisch1 := FALSE;
        END_IF;
    END_IF;
ELSE
// anderer tisch
   ...
    
END_IF;

Je nach dem was in "VentileDB".VentilTisch1AufAb steht, setze ich die Ventile dementsprechend. Wenn DIR_NULL ist, sind alle Ventile geschlossen.
Wenn "VentileDB".geschwindigkeitTisch1 wird das PropVentil auf die schnelle geschwindigkeit gesetzt, sonst auf die langsame.
Systemvariabeln".WINKELGENAUIGKEIT ist 0.5 Grad
"HMI-Interrface"."NeigungssensorTisch1 in Grad" ist der umgerechnete Analog Eingangswert in Grad (inklusive Offset)

Hier die Umrechnungsfunktion
Code:
CASE #index OF
  0:  // Tisch 1
    #value := "inNeigungssensorTisch1";
  1:  // Tisch 2
    #value := "inNeigungssensorTisch2";
  2:  // Parallelogramm 1
    #value := "inNeigungssensorParallelogramm1";
  3:  // Parallelogramm 1
    #value := "inNeigungssensorParallelogramm2";
ELSE
  // ERROR
  #value2degrees := 0;
  RETURN;
END_CASE;


//Wert neu auf 0 Punk stellen
#value := #value - UINT_TO_DINT("Systemvariabeln"."Neigungssensor Kalibrierungsdaten"[#index].Nullpunkt);


//Jetzt das was zu weit unten ist hinauf schieben
IF #value < -("NEIGUNGSSENSOR_MAX_VALUE"/2) THEN
  #value := #value + "NEIGUNGSSENSOR_MAX_VALUE";


//wenn es zu weit oben ist hinunterschieben
ELSIF #value > "NEIGUNGSSENSOR_MAX_VALUE"/2 THEN
  #value := #value - "NEIGUNGSSENSOR_MAX_VALUE";
END_IF;


//jetzt haben wir einen Wertebereich von -180 bis 179.9 Grad
//noch in grad umwandeln
#value2degrees := DINT_TO_REAL(#value)/"NEIGUNGSSENSOR_MAX_VALUE" * 360.0;
//65536.0
//
IF "Systemvariabeln"."Neigungssensor Kalibrierungsdaten"[#index].invertiert THEN
  #value2degrees := -#value2degrees;
END_IF;
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Also das Problem ist dass den Tisch vorbei 75 grad fährt, bis es bei 105 grad ein Kollision vorkommt.
In den Fall liegt das Problem nicht bei ein eventuellen Übergang von 180 grad nach -180 grad.

Sonnst, Ich habe leider kein Zeit dein Code zu verstehen (sieht kompliziert aus).
Es ist auch schwierig dein Code zu verstehen wenn du wichtige Zeilen gelöscht hast
wie
Code:
[COLOR=#333333][FONT=Courier]//kleine Hysterese einbauen
[/FONT][/COLOR][COLOR=#333333][FONT=Courier]        ...[/FONT][/COLOR]
Warum "..." ?
Es hätte ja vielleicht genau mit dein Problem zu tun.

Aber bist du sicher das du ein mechanischen Defekt ausschliessen kannst ?
Haben deine HY Ventile interne Rückmeldungen ?
Wenn ja, dann zusätzliche Überwachungen programmieren.

Sonnst, ich wurde ein zusätslichen Positionsüberwachung programmieren.
Etwa wie wenn Vinkel > 100 grad, dann abbrechen, alle Ventile ausschalten.

Vielleicht ist das Problem in der Vinkel-Sensor.
Wenn das der Fall sein kann, dann ein zusätzlichen Prox einbauen, nur um zu erkennen wenn den Tisch zu weit gefahren ist.
 
Hallo,

der Code //kleine Hysterese einbauen wird nie ausgeführt, denn bei die Variable überprüfung wird ja mit UEBERPRUEFUNG_GROESSER_GLEICH aufgerufen.
Ich habe aus Übersichtlichkeit einfach mal alles was nicht relevant entfernt.

Bei 90 Grad fällt unter umständen die Beladung vom Tisch runter, spätestens bei 105 gibt es dann eine Kollision.
Ein mechanischer Defekt kann ich nicht zu 100% ausschließen, aber es ist eher unwahrscheinlich. Es gibt bereits zwei Maschinen und beiden hatten bereits ein oder zwei mal das Problem.

Die HY Ventile haben keine interne Rückmeldung.
Eine zusätzliche Überprüfung kann ich nicht wirklich einbauen, denn im späteren Ablauf muss der Tisch auch einmal auf 105 Grad gedreht werden.
Was meinst du mit "zusätzlichen Prox einbauen"? Ich könnte z.b auch eine überprüfung einbauen, dass der Winkelsensor sich z.b. in einer Sekunde nicht mehr als 5 Grad drehen darf. Wenn es mehr sind, dann kann ich abbrechen. Wenn dieser Fehler auftritt wüsste ich zumindest wo ich weiter suchen muss.

Beim Analogen Eingang ist übrigens eine schwache Glättung eingetragen (also Mittelwert über 4 Werte).
 
Eine zusätzliche Überprüfung kann ich nicht wirklich einbauen, denn im späteren Ablauf muss der Tisch auch einmal auf 105 Grad gedreht werden.
In den Fall muss aber nur mit Schleichfahrt gefahren werden, oder ?

Was meinst du mit "zusätzlichen Prox einbauen"?
Prox : Proximity sensor / Induktiven Näherungsschalter.

Also enweder den Vinkel > 100 grad überwachen, oder ein zusätslicher Näherungschalter überwachen, oder beide.
Und abhängig von ob es bis anschlag gefahren werden soll oder nicht, dann wird entweder abgebrochen, oder Schleichfahrt wird gezwungen.

Ein mechanischer Defekt kann ich nicht zu 100% ausschließen, aber es ist eher unwahrscheinlich. Es gibt bereits zwei Maschinen und beiden hatten bereits ein oder zwei mal das Problem.
es konnte ein Produktionsfehler sein, z.B. in die verwendete Ventilen.
Oder die Ventile funktionieren so weil irgendetwas wird nicht verwendet nach die Hersteller Vorschriften.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Also es gibt eigentlich zwei geschwindigkeiten.
einmal sind es etwa 6grad/Sekunde und einmal etwa 3Grad/Sekunde. Die schnellere geschwindigkeit wird im bis etwa 10 Grad vor dem gewünschten Ende gefahren. Danach wird mit der Langsamen weiter gefahren.

Das mit dem Näherungsschalter funktioniert nicht, denn der gesamte Ablauf hat etwa 20 Bewegungen. Alle Bewegungen sind irgendwo (Also z.b. auch einfach auf 80 Grad fahren).
Ich werde mir einfach mal einige Informationen in ein csv loggen (https://support.industry.siemens.co...imatic-s7-1200-(data-logging)?dti=0&lc=de-WW) und hoffen, dass dann der fehler bald wieder einmal auftritt. wenn ja, dann hoffe ich, dass ich alle wichtigen daten geloggt habe um herauszufinden ob irgendwas falsch gelaufen ist.
 
Zurück
Oben