Mittwoch, 22. März 2023

   Copyright ©  Dipl.-Ing. Johannes Hofer 2022                                           

 

Ki2Plc

Die Möglichkeiten einer Programmierung im TIA-Portal, um diese am Geschehen der künstlichen Intelligenz zu beteiligen



Simatic S7-1200 und Snap7 - Teil 2 (matrix)


Die Grundposition ist der Ausgangspunkt aller Dinge. Wie auch in Python wird hier zuerst die Grundposition überprüft und erst danach ist eine weitere Verarbeitung möglich.  Deswegen auch diese etwas verwirrenden Zeilen zum folgenden Bild:


Zunächst wird in Zeile 41 der IPL in ein char gewandelt um danach weiterhin verwendet zu werden. In unserem DB sind die Zustände als char gespeichert, deswegen die Anweisung von INT_TO_CHAR.

Solange also die Grundposition (gp) nicht erreicht wurde, wird der Baustein mit Zeile 46 verlassen. Ist die Grundposition erreicht, wird in Zeile 49 der Merker gesetzt und ein eventuell aufgetretener Fehler in Zeile 50 gelöscht. Nun wird solange das RETURN ausgeführt (Zeile 51), bis die Grundposition verlassen wird. In unserem Fall durch drücken des Eingangs V1 für den Zyl. auszufahren. So schlägt keine IF-Anweisung mehr (Zeilen 42 und 48) zu und das Programm kann ab Zeile 55 beginnen.


Nun kommt zuerst die Fehlerauswertung. Sollte der IPL den Zustand des error-Sektor besitzen, hier sind das zwei, dann wird der error_status gesetzt (Zeile 62), die Grundposition gelöscht (Zeile 61) und der Baustein verlassen. Da wir zu Beginn in Zeile 5 den Ausgang immer löschen (#matrix_out := False, in Teil-1 zu sehen) ist dieser automatisch False solange keine Zuweisung auf  True erfolgt. Der error_status ist als Ausgang Output in der Bausteinschnittstelle deklariert deklariert (letztes Bild).


Der Zustand no action entsteht immer dann, wenn der V1 nicht gesetzt ist. Ist also der IPL mit den zwei Zuständen (Zeilen 68 und 70) erfüllt, wird der Ausgang und die Grundstellung gelöscht. Hier könnte Zeile 74 entfallen 😌 , da das ja beim Eintritt des FBs immer geschieht.


Der Zustand action entsteht immer wenn der Eingang V1 gesetzt ist. Ist also der IPL mit den Zeilen 80 bis 84 erfüllt, dann wird der Ausgang in Zeile 87 gesetzt. In Zeile 91 wird die Grundstellung gelöscht und entspricht im Python der Exception. Eines der drei Zustände error, no action oder action muss vorhanden sein. Wenn nicht wird diese Zeile 91 erreicht und es muss wieder eine Grundstellung erreicht werden, damit das Spiel von vorne beginnt.

Das wäre eine getippte Lösung zur Matrix. Natürlich sollte die Matrix so interpretiert werden, dass jede beliebige Matrix übersetzt werden kann. Dabei ist auch zu überlegen, ob man nicht einen anderen Weg einschlägt, denn diese Matrix wird umfangreich, wenn grössere Projekte anstehen und auch SPS-spezifische Dinge hinzukommen.

Das könnten also Analogwerte sein, oder die noch nicht erklärten warnings, welche den Zeitfaktor berücksichtigen oder die in den Videos genannten Synapsen, welche zusätzliche Atrribute erhalten können.

Fazit: ? 
Man könnte eine Python-Sequenz an die SPS senden (write_DB), welche interpretiert wird. Also sowas wie IEC61131-3_Python? oder plc_python? oder sowas 😁, schließlich gibt es ja auch micropython!



🙋