Freitag, 29. Dezember 2023

 

KI2Plc geschützte Domain 😎

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


    Am besten ihr seht euch die beiden Videos auf meinem YouTube-Kanal zur Vorschau an:





Für den ersten Vorgeschmack Teil 1 mit Kapitel 1 ( noch nicht in meinem YouTube-Kanal):



Für den ersten Vorgeschmack Teil 2 mit Kapitel 1 ( noch nicht in meinem YouTube-Kanal):




 Für den ersten Vorgeschmack Teil 3 mit Kapitel 1( noch nicht in meinem YouTube-Kanal):




 Für den ersten Vorgeschmack Teil 3 mit Kapitel 3( noch nicht in meinem YouTube-Kanal):



Für den ersten Vorgeschmack Teil 4 mit Kapitel 2( noch nicht in meinem YouTube-Kanal):




Das Interesse an einer SCL-Programmierung auf meinem YouTube-Kanal ist nicht so hoch, dass sich die Arbeit lohnt, hier ein Seminar zu erarbeiten und zu posten. Tut mir leid, allerdings ist das Interesse zu diesem Thema in Python ohne Bibliothen wesentlich höher. Ich habe nun den Kurs in Udemy gestellt und werde ein Python-Kurs erarbeiten. Dazu gibt es dann entsprechende Information auf meinem YouTube-Kanal. Ich muss nur noch eine günstige und realistische Hardware suchen, mit der ich einen automatischen Betrieb mit künstlichen, neuronalen Netzen für die industrielle Automatisierung realisiere kann. Genung Ideen und bereits praktische Erfahrung dazu gibt es ausreichend.  Hier der Link zu meinem neuen Kurs mit künstlichen, neuronalen Netzen in SCL:





Sonntag, 19. November 2023

 

KI2Plc geschützte Domain 😎

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


 

KI in der S7-1500 Standard zur Steuerung eines Zweibrückenkranes in einer Verbrennungsanlage

Die KI soll ja in irgendeiner Form einen Ersatz für bisher menschliches Verhalten ersetzten - oder? Zumindest ist das ein Wunsch vieler Arbeitgeber und kann glücklicherweise nicht sooo einfach umgesetzt werden. In diesem Fall wurde ich beauftragt den Kranführer durch eine KI, soweit es möglich ist, zu ersetzen.

Dabei soll die Lösung in der SPS, welche den Kran steuert, ohne zusätzliche Hardware erledigt werden.

Der erste Schritt mit ungelernten Daten

Im folgenden Bild wird die Kranfahrt dargestellt. Zur besseren Erklärung immer mit 5 Meter Fahrweg (X-Achse). Die blaue Kurve soll die ideale Fahrkurve werden. Das ist also unser Modell. Jetzt lernen wir das neuronale Netz mit ungelernten Gewichtungen. Also ohne Traningsdaten, denn wir haben ja noch keine. 

Das Ergebnis ist die grüne Kurve und liefert eigentlich keine Überraschung! Insgesamt werden bei diesem Beispiel immer 100 Neuronen als Input-Layer verwendet.



Die Trainingsdaten liefert der Kranführer

Wir benötigen nun den Kranführer (es tut auch eine sehr gute Simulation) zur Ermittlung der Lerndaten = Trainingsdaten. Im folgenden Bild ist die rote Kurve das gelernte durch den Kranführer. Diese Daten werden nun im Neuronalen Netz mit der idealen Kurve verrechnet und so entstehen die Gewichtungen, welche das gewünschte Ergebnis liefern soll. 


Das funktioniert sehr gut und zeigt im folgenden Bild ein Ergebnis, welche nun als trainiertes neuronales Netz in der SPS festgehalten wird.


Die KI liefert durch Machine Learning eine neue Sollkurve

Dieses Ergebnis ist praktisch gesehen ein Hammer. Die Fahreigenschaften sind hervorragend und erlauben eine schnelle Positionierung des Greifers ohne störende Pendelbewegung (dank des Kranführers). Die grüne Kurve wird aus den Trainingsdaten des Kranführers (rote Linie) über das neuronale Netz in der SPS ermittelt. Erst danach wird die Anlage entsprechend der grünen Kurve gefahren.

Störungen, welche dann noch hinzukommen, sind dabei noch nicht trainiert.



Für den Anfang ein recht gutes Ergebnis, welches vom Betreiber akzeptiert wurde und bis jetzt bei mehreren Krananlagen das beste Fahrverhalten für eine vollautomatische Anlage liefert. Die vier Punkte auf der gelieferten Fahrkurve sind die Geschwindigkeitsstufen, welche im Umrichter wunschgemäss fest programmiert wurden.

Bemerkungen:

Das ist der letzte Beitrag auf diesem Blog. In Zukunft gibt es einen neuen, modernen Blog. Der Hinweis wird dann auf meinem YouTube-Kanal zu finden sein. In diesem Blog gibt es dann einen entsprechenden Link auf den neuen Blog!

Zudem wird im neuen Blog die Umsetzung in der SPS S7-1500 mit SCL vorgestellt. 🙋









Montag, 21. August 2023

 

KI2Plc geschützte Domain 😎

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

 


Video zum Alignment Teil-2

Das Interesse die SPS an der KI teilnehmen zu lassen, ist recht hoch und konzentriert sich überwiegend auf die Anwendung in Python bzw. Microphython und zu meiner Überraschung auch in C/C++. Allerdings weniger auf die Ausführung mit der SPS wie z.B. einer Simatic. 

Das kann ich gut verstehen, da eine SPS schließlich ein Betriebssystem mit Merkern, Timern usw. besitzt und die Anwendung der klassischen SPS schon deswegen weiterhin ihre Verwendung und Interesse findet.

In unseren Lerndaten befinden sich keine Funktionen bzw befindet sich keine Programme wie IEC-61131-3, sondern ein Dateninterpreter, welcher aus den gelernten Daten jeweils aus den aktuellen Eingangsdaten (Input-Layer) die Ausgangsdaten (Output-Layer) interpretiert. 

Wichtig für das Verständnis ist auch, dass das Alignment nur für das ML angewendet wird und sich ebenfalls später nicht mehr zur Interpretation in der SPS befindet.

Zudem besteht das Interresse an einem komplexen Beispiel, um zu zeigen, dass solche Dinge auch zu einer Lösung durch ML führen. Ich habe nun folgendes Beispiel gewählt und werde dazu nun das ML zeigen und natürlich auch das Ergebnis presentieren, wie das hier in unserer pyPlc abläuft.


Die wohl schwierigste Lernphase ist hier der Zyl.-2, da dieser auf die Position einer Scheibe über I0.3 reagieren soll, diese Position aber verloren geht, wenn der Zylinder die Scheibe nach Position I0.4 verschiebt.

Wir müssen also eine speichernde Wirkung lernen, ohne einen speichernden Befehl anzuwenden 😉

Der Zyl.-1 muss vom Zyl.-2 blockiert werden, damit dieser kein weiteres Teil auf die frei gewordene Position in I0.3 schiebt. Auch ein zusätzlicher Lerneffekt, welcher später ohne ein SPS-Programm nur aus den Daten umgesetzt wird.

Und das letzte Bonbon ist, das die Scheibe eine Zeit in Position I0.4 gehalten werden muss, damit der Roboter eine Achse in die Scheibe stecken kann um so die Scheibe später auf einen Rundschalt-Tisch zu transportieren. 

Wir verwenden einen Timer ohne einen SPS-Timer einzusetzen. Der ergibt sich nur aus den Daten, welche gelernt wurden.

Nun eine schöne und komplexe Aufgabe - denke ich. Schauen wir uns das folgenden Video an:



Das Lernen ist relativ einfach, wenn wir uns direkt an der Maschine befinden. Hier im Video musste ich den Ablauf zusätzlich simulieren. 

Der Vorteil beim Lernen an der Maschine ist, dass ich durch das Alignment den Bewegungsablauf anrege und dan nur die Daten erfasse!

Der Nachteil ist, dass ich erst danach bestimmen kann, welche Daten ich tatsächlich davon behalten und lernen möchte.

Bei meiner Simulation kann ich direkt mitteilen ob ich die gerade anstehende Situation lerne oder nicht. An der Maschine muss ich die gelernten Daten im Nachhinein anpassen.

Das Problem mit dem Lernen

An diesem Beispiel lässt sich ein spezifisches Problem für das Lernen sehr gut erkennen. Der Zyl-2 lernt beim Signal I0.3 gleich True auszufahren. Danach aber wird der Eingang False, da die Scheibe sich bewegt und der I0.3 verloren geht. Wenn wir jetzt mit dem neuen Input-Layer (I0.3==False) ebenfalls lernen den Zylinder weiter auszufahren, dann fährt unser Zylinder auch dann aus, wenn I0.3 False ist. Also will er immer ausfahren 😃

Wie wir mit solchen Situationen umgehen, ohne ein Speicherelement zu Programmieren, schauen wir uns im folgenden Video aus meinem YouTube-Kanal an:


Rework

Nun was war da für ein Ausgang im Video der nicht ausgeschaltet wurde, obwohl der Endschalter Tor zu erreicht wurde?

Wie schnell und einfach das nachlernen geht, zeigt das folgende Video:


🙋







Samstag, 5. August 2023

 

KI2Plc  geschützte Domain 😎

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

 



Das Video zum "alignment" - Teil-1 

Schnell und einfach, aber ausgeprägt das nun fertige Video. 




Das sind ja noch einfache Aufgaben - aber -  das Prinzip wird klar oder?

Ich denke man sollte darüber nachdenken, ob man die verkrusteten Programmier-Methoden anpassen sollte. Das Denken in Daten ist ja eigentlich seit Jahrzenten bekannt und wird ja auch teilweise mit Merkern, MW, Datentypen Bit, Word, Real  usw. ausgeführt und programmiert.

Somit ist der Weg zur Methode ML für SPS-Programmierer gar nicht so weit entfernt 😏

Bis bald 🙋


Freitag, 4. August 2023

 

KI2Plc  geschützte Domain 😎

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

 



Die pyPlc ist fertig 

Nun ist die pyPlc soweit fertig gestellt, dass die Veröffentlichung in Udemy steht.  Es gibt auch ein neues Video in YouTube.


Der Link zu Udemy:


Was nicht im o.g. Video zu YouTube gezeigt wird ist das Alignment. Das wird erst später in YouTube erfolgen, wenn ich etwas mehr Zeit dafür habe. Allerdings werde ich hier im nächsten Teil ein kleines Video einfügen und erklären um was es sich dabei handelt.

Das "alignment"

Wie lerne ich Daten für eine SPS? Das ist die grosse Frage bei KI bzw. Machine Learning für komplexe Systeme. So wie bei KI-Techniken Daten zur Eingabe benötigt werden, ist das hier bei komplexen Systemen ebenfalls notwendig,  allerdings nicht ganz so einfach. Ich habe mich deswegen entschieden, die Eingabe über Python zu realisieren, wobei der Standard gilt aber auch die SPS-Version in pyPlc.

Die so ermittelten Daten werden in der KI nachträglich so manipoliert, bis ein gewünschtes Ergebnis feststeht (Faktor 1.0). Hier ist das genau so, nur ein wenig komplizierter. 

Die Wirkung wird hier duch das ML direkt durch die SPS selbst und dem dazugehörigen Alignment umgesetzt.

Beispielhaft der gezeigte Zylinder startet mit dem Alignment "self.plc.A('Q0.0', 'I0.0')"
Wird also das Alignment in ML ausgeführt, startet der Zylinder und liefert uns die Daten, da der Zylinder ausfährt und damit die Endschalter sich verändern. 

Beim Test im Video wird das Alignment nicht mehr aufgerufen!

Das wäre ja auch ein Witz - oder 😉

Nun folgt im nächsten Teil das Video zur Erklärung zum Alignment.
Also bitte noch ein wenig Geduld. 🙋






 



Mittwoch, 7. Juni 2023

 

KI2Plc  geschützte Domain 😎

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




 

Zum Thema Analog-Anzeige:

Im folgenden Video sind die Fragen dazu beantwortet. 


Mit den MOVE-Anweisungen können die beliebigen Werte in die Visualisierung kopiert werden. 

Die Software wird gerade zur Freigabe überarbeitet. Wo und wie steht noch nicht fest, allerdings ist aufgrund der zahlreichen Nachfrage ein allgemeines Seminar bei Udemy in Aussicht gestellt.

Jetzt wird erst mal Urlaub gemacht 🙋



Mittwoch, 31. Mai 2023

 

KI2Plc

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




 

Zum Thema Safety:

Die funktionale Sicherheit kann nur gewehrleistet werden, wenn das Entwicklungssystem und damit auch das Konzept dazu risikoarm ist. 

Nun, der Satz besagt viel und ist gleichzeitig auch sehr umfangreich, wenn man genauer hinschaut. Eines kann man zum Byte-Code bereits jetzt schon direkt feststellen:

Die Programmierung einer Plc mit Python wird in seiner künstlerischen Freiheit schon einmal sehr stark eingegrenzt. Nicht jeder Programmierer mag das.

Aber wer kennt das nicht im Fehlerfall: Wenn’s nicht richtig funktioniert ist die Mechanik schuld und die Mechaniker geben dem Programmierer die Schuld. Um das nun zielgerecht zu verifizieren, fallen beim Byte-Code schon mal alle Programmier-Szenerien weg, welche nicht zu einem Sicherheitssystem gehören.

Der byte-Code ist verifizierbar und zeigt eine klare, risikoarme Abgrenzung und erfüllt einen kleinen Teil der geforderten Maßnahmen zur Sicherheit. Tritt in einem Baustein z. B. ein Fehler auf, wird dieser automatisch abgeschaltet und kann zumindest keinen weiteren Schaden mehr anrichten.

Das wird dadurch ermöglicht, dass durch die Umsetzung in den Byte-Code die Parameter genau festlegt, sind. Auch das ist eine Safety-Anforderung.

Somit ist eine weitere Forderung zum Safety-Konzept erfüllt. Zudem wird dadurch die Erstellung der erforderlichen Dokumentation erleichtert. Nun ist das nur ein winziger Teil zum ganzen Safety-Konzept und sicherlich könnte man das mit der Python-Idee ausbauen. Sicherlich ein Thema der Zukunft, ganz besonders in den Bereichen der IoT, denke ich.

Abgesehen davon ist das Betriebssystem maßgebend für ein Safety-Konzept und da haperts natürlich gewaltig, wenn da einer mit dem Raspberry pi ankommt 😊

 

Die bereits umgesetzten Funktionen

Im folgenden Bild sind die bereits umgesetzten Funktionen (18) zum Basic-Teil dargestellt. Hinzu kommen noch die Daten-Funktionen, welche in der üblichen PLC nicht so vorhanden sind. Dazu wird noch ein zusätzliches Grafik-Fenster zur Darstellung der Werte entworfen. Der Zugriff auf die Daten erfolgt bei der Simatic mit Snap7 und bei anderen Geräten über TCP-Verbindungen. 



Hier sind die schon erwähnten Funktionen NORM und SCALE in ANA_IN und ANA_OUT bzw. LIMIT umbenannt worden.

Also noch bitte ein wenig Geduld 🙋 



Donnerstag, 25. Mai 2023

 

KI2Plc

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



 

Zum Thema Byte-PLC_Code:



Wie gewünscht eine Zusatzinfo zum byte_plc_code 🙋



Samstag, 20. Mai 2023

 

KI2Plc

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





 

Zum Thema Byte-Code

Das mit dem Byte-Code scheint für Python-Programmierer sehr interessant zu sein. Aufgrund der Nachfrage das hier nachfolgende Beispiel.  Mittlerweile hat sich auch ein Hardware-Hersteller bei mir gemeldet. Erstaunlicherweise handelt es sich hier um eine Save-SPS (EN 61511-1). 

Python wird hier, was SIL betrifft, am höchsten eingestuft und somit C/C++ verdrängt. Das soll sich besonders auf den Störfall beziehen.

Ich hatte mit dem Thema Save-SPS schon einiges zu tun und bin ehrlich gesagt nicht überrascht. Dazu aber mehr, wenn der Teil Machine-Learning (siehe Bild oben, rechter Radio-Button) fertig ist, denn hier wird der SPS-Code automatisch erzeugt und der Byte-Code dazu zur Übertragung in eine Hardware generiert.

Falls es noch einen PLC-Hersteller der neuen Generation mit Interesse zum Thema Ki2Plc gibt, bitte melden.

Nun ist der byte-code-Generator für den Teil-1 endlich fertig und getestet und ich habe mich aufgrund der vielen Nachfragen entschieden, den Teil-2 ebenfalls fertig zu stellen, bevor es mit den Videos los gehen kann.

Somit wären alle Funktionen für beide Teile getestet und zudem weitere Python-PLC-Anweisungen fertig gestellt, welche nicht zum Thema IEC 61131-3 gehören, aber über den Byte-Code in der Hardware angewendet werden können.

So kommen wir schließlich über die hier integrierte SPS und dem Simulator zur KI2Plc, denn das ist ja schliesslich unser eigentliches Thema.



Der Byte-Code, kann in der PLC-Sim genauso wie der Python-Code getestet werden, wie im Bild oben zu sehen ist. Links der Python-Code mit allen gültigen Python-Anweisungen und rechts der Byte-Code mit den SPS-spezifischen Anwendungen.

Der Byte-Code wurde hier mit 83 Bytes aus der Funktion def fc_lc1: übersetzt und kann nun getestet werden. Das Ergebnis sollte wie bei dem Radio-Button pyPlc zu sehen, identisch sein.

Die Zeilen 193 bis 201 sind im Byte-Code nicht zu finden und werden demnach auch für die PLC nicht sichtbar.

Damit entfällt alles, was im regulären Python so noch programmiert wurde im Byte-Code für die KI2Plc.

Das macht die Sache sicherer, denn die Gepflogenheiten, ich darf das mal so nennen, der Python-Programmierung entfallen nun und können deshalb so z. B. in der Simatic S7-1200 angewendet werden.

Mittlerweile gibt es den Byte-Code auch auf dem Pico 😊, allerdings noch nicht genügend getestet, da auch hier noch einige Lektionen fehlen. Es folgt auch ein weiteres Beispiel auf einem Raspberry mit zusätzlicher Hardware-Erweiterung. Auch dazu Hersteller bitte melden, falls Interesse besteht.

Nun, ich hoffe das mit dem Byte-Code ein wenig gelichtet zu haben. Beim, nächsten Beitrag sehen wir auch die Merker-Worte und Real-Anwendungen für den analogen Teil der SPS zum Teil-2😊

🙋


























Mittwoch, 3. Mai 2023

 

KI2Plc

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



 

Die Themen zum Video-Training pyPlc-Teil-1

Was hat Ki2Plc mit pyPlc zu tun? Nun setzt eine KI2Plc voraus, dass eine Plc durch die Maßnahmen einer hinzugefügten KI-Ebene, diese Eigenschaften auch tatsächlich anwenden können sollte. Deswegen zuerst die Plc, sonst kann ja nichts hinzugefügt werden 😊.

In der ersten Stufe wird die pyPlc für die digitalen Anwendungen vorgestellt und diese in Python trainiert. Das ist schon eine ganze Menge an Wissen, welches vorerst nur aus Sicht der SPS-Programmierung erarbeitet werden sollte.

In Python kann ich zwar durch logische Operatoren einiges zusammenstellen, aber niemals eine SPS-gerechte Ausführung erreichen. Dazu gibt es jetzt die pyPlc.py und die Plc-Simulation dazu.

Sicherheit geht eben nun mal vor und da haben wir in Python schon von Anfang an schlechte Karten. Betrachten wir die einzelnen Themen zu Teil-1 im folgenden Bild, dann erkennen wir, dass die sogenannten Operatoren in Python (and, or, & | usw.) hier erstmal nicht so wieder zu finden sind. In der SPS-Programmierung werden sogenannte Operanden trainiert und um diese geht es im ersten Teil ganz besonders.




Da es Operanden auch für den analogen Bereich verwendet werden, also nicht nur für den digitalen Bereich, beschäftigen wir uns dann in Teil 2 mit den Operanden, welche eine besondere Aufmerksamkeit für analoge Signale erfordern.

Letztendlich in Teil-3 schauen wir uns dann an, wie wir das gelernte nun praktisch unter dem Schild „Sicherheit“ einsetzen können.

Ab dem Zeitpunkt, also mit der Übersetzung von dem, was wir in Python schreiben und im PLC-Simulator getestet haben, wird ein Byte-Code generiert und in die SPS übertragen.

Dadurch wird unser Python-Code in einen sicheren Code gewandelt und die Ausführung in einem dafür geeigneten Gerät ermöglicht. Diese Geräte sind dann so zu programmieren, dass der Byte-Code richtig umgesetzt wird.

Das kann zum Beispiel bei einer Simatic in SCL der Fall sein. Somit erreichen wir circa derzeit 130 unterschiedliche Geräte von verschiedenen Herstellern, hier auf dem europäischen Markt.  Ist doch eine großartige Sache, oder?

Nun – wie auch immer - das folgende Video zeigt uns eine Übersicht der Themen und wie wir eine Aufgabe daraus in einen Byte-Code übersetzen um diesen dann in der SPS, in diesem Fall eine S7-1200, umsetzen und testen. Wie der Byte-Code funktioniert und wie das alles in Python gelöst wurde, zeigt letztendlich Teil-4.




Ich denke das reicht soweit zur ersten Meinungsbildung. Falls weitere Fragen auftauchen werde ich mich darum kümmern und antworten 🙋




Sonntag, 30. April 2023

 

KI2Plc

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






Fragen zum Thema:

Beispiel der Lektionen?

Das Thema Python zur S7-1200 ist wohl sehr gefragt. Allerdings sind Geräte wie Raspberry, Arduino usw. öfter angefragt. Der Byte-Code erlaubt allerdings fast jedes beliebige Gerät bezüglich der Software als SPS einzusetzen. Um diesen zu demonstrieren, möchte ich zuerst einen Ausschnitt aus der Basis-Lexion-1 zeigen. Damit sind auch Fragen dazu ein wenig erklärt und zudem wird das mit dem Byte-Code (später) verständlicher 😊

Die Simulation erfolgt hier über einige kleine Beispiele zur Anwendung von Operanden. Es soll nicht das AND, OR oder A verstanden werden, sondern die Grundsätzliche Vorgehensweise einer Python-PLC zum Thema Operanden.

In der oberen Ebene der pyPlc_sim können digitale Eingänge simuliert werden, indem man mit der linken Maustaste diesen anklickt und damit den Eingang setzt oder wieder löscht (True, False).

Das Ergebnis der digitalen Ausgänge ist dann unten an den Ausgang-Flags zu sehen. Diese können nicht angeklickt werden 😊, denn das soll ja das Python-Programm erledigen. Im oberen Bild ist u. a. die Zeile 520 gerade wirksam:

 A('Q0.0', AND('I0.0', 'I0.1', 'I2.7'))

 

Dazu folgende Bemerkungen:

Wenn die UND-Bedingung der Eingänge I0.0 und I0.1 und I2.7 erfüllt sind, dann soll der Ausgang Q0.0 gesetzt werden.

Wie aus den grünen Punkten erkennbar, sind die digitalen Eingänge zur Bedingug alle auf True (grün) gesetzt, so ergibt sich die Anzeige im ersten roten Flag zu Q0.0 aus der Zuweisung mit dem Operand A.

Nun alles weitere dazu im Video (ohne Ton):



 Im nächsten Abschnitt dann das Video zum Byte-Code zur S7-1200 🙋

 

Sonntag, 23. April 2023

 

KI2Plc

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




Fragen zum Thema:

Was macht der Byte-Code?

Im oberen Titelbild ist das main.py zu dieser Frage dargestellt. Zunächst kann man schon erkennen, dass die Fragen zum Thema Byte-Code nicht so einfach beantwortet werden kann. Zudem bin ich gerade in der Testphase mit meiner S7- 1200 und da vergehen noch einige Tage, bis ich ein Video bereitstellen kann. Dieses wird wieder einmal in meinem YouTube-Kanal und natürlich auch hier noch veröffentlicht. Also bitte noch ein wenig Geduld.

Wie aus dem Code oben zu sehen, wird mit Snap7 eine Verbindung zur SPS aufgebaut und der Programmspeicher, hier die bcr (Byte_Code_Register) gelesen. So kann das alte Programm gespeichert werden – man weiß ja nie 😊

Der FC fc_test_bit_bcr wird in den Speicher der SPS übertragen und sieht so aus:

 


Eine einfache Verknüpfung (Zeile 518) einiger Merker, dessen Ergebnis in Merker M3.0 gespeichert wird (Zuweisung). Im FUP z. B. sieht das so aus:

 

Die Zeile 518 (oben) repräsentiert also das hier gezeigte FUP-Gebilde. Der Byte-Code beträgt dazu genau 23 Bytes und wird in Zeile 29 (Titelbild) in die SPS übertragen. Also was ganz Klitzekleines. In dem Code ist ebenfalls eine Error-Behandlung enthalten und natürlich ein Bezug zum plc_monitor, wie im Titelbild in Zeile 32 zu sehen ist. Hier kann die Python-Zeile getestet werden, denn nicht jeder hat schließlich eine SPS von Siemens 😊

Das SPS-Programm Main sieht für diesen Test so aus:


Welche Geräte können genutzt werden?

Und damit kommen wir automatisch über dieses Beispiel zur Antwort: Jedes Gerät, welches eine Byte-Programmierung wie hier in der Simatic mit SCL zulässt. Im Prinzip sind das alle Geräte, welche nach DIN IEC 61131 ausgeführt sind, da die Textsprache dort zur Verfügung stehen soll. Also auch Codesys!

Oder natürlich die Geräte, welche Python beherrschen und dann allerdings nicht unbedingt den Byte-Code benötigen. Die meisten allerdings doch, da der Byte-Code in z. B. Micropython auch programmierbar wird und viele Geräte wenig Speicher besitzen und da ist der Byte-Code vorteilhaft.. Zudem alles eine Frage der Sicherheit 😊.

Das beantwortet nicht unbedingt die Fragen zufriedenstellend, aber ist wenigsten schon mal eine Erklärung dazu. Der Bytecode hat zudem den Vorteil, dass Module, wie hier im Beispiel demonstriert,   (FC, FB) geladen werden können. So kann das Gerät gezielt mit dem Downoad der Byte-Datei überarbeitet werden, ohne immer das gesamte Programm zu laden. 

Die bereits im Einsatz befindlichen Bausteine sind somit abgesichert, sodass sich der Programmier immer auf sein neues Modul konzentrieren kann.

Also bitte das Video abarten und weitere Fragen stellen. 🙋


Donnerstag, 20. April 2023

 

KI2Plc

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




Fragen zum Thema:

Was soll das mit den Bits und Bytes?

Der Titel wurde geändert! Es stimmt, dass dieses Thema nicht nur für die Simatic und damit das TIA-Portal assoziiert. Deswegen die Änderung im Titel.

Das hat bei vielen Lesern zur Verwirrung geführt, denn Python-Programmierer suchen Python im TIA-Portal 😊 und TIA-Programmierer verstehen die Welt nicht mehr und fragen nach einer neuen TIA-Version.  Danke für die Hinweise und ich denke so ist es gut – zumindest vorerst.

Meine Antwort zur Frage der Zukunftsaussichten einer SPS nur mit Hochsprachen programmierbar:

Die SPS wird nach meiner Meinung in Python oder anderen Hochsprachen nicht so programmierbar sein, dass diese nur aus einer Komponente der Hochsprache besteht.

Frage zum Einsatz einer SPS mit pyPlc:

Hier soll eine Hardware, welche als SPS bezeichnet wird, über Python programmierbar werden. Die Übersetzung aus Python wird in eine Byte-Sequenz sein, so dass diese von einer SPS lesbar wird. Also kein integrierter Python-Interpreter.

So kann die SPS die Vorteile ihrer Bestimmung beibehalten und gleichzeitig der entsprechende SPS-Typ (Gerät) fast beliebig ausgewählt werden. Es wird eine pyPlc.py erstellt, welche die Programmierung in Richtung IEC 61131-3 lenkt und dieses überhaupt so möglich macht, dass in der SPS-Welt ein neuer Weg vorstellbar ist.

Warum die Schreibweise M0.0, MW0, usw.:

Und so kommen auch die Bits und Bytes in Spiel, denn die Peripherie einer SPS lässt sich in Bits und Bytes sehr gut interpretieren. Eingänge sind, so auch Ausgänge, meist in Gruppen organisiert. Das ist beispielhaft bei einem Arduino und auch bei einer S7-1200 so.

Dadurch entsteht automatisch der Eingang mir I0.0 und bedeutet, dass die Gruppe 0 mit der Bitadresse 0 angesprochen werden soll. Für den Ausgang Q0.0 ist es ebenso. In den meisten Programmen wird der Eingang in einen Bit-Merker kopiert und der Ausgang ebenfalls nicht direkt im Anwender-Programm, sondern über das Merker-Bit  M0.0 gesetzt. Die Umsetzung zum tatsächlichen Ausgang erfolgt dann ganz am Schluss nach der Anwendung (Treiberteil). 

Nur so kann eine Anwendung sehr gut getestet werden, ohne gleich etwas kaputt zu machen, da der Treiberteil in der Testphase nicht aufgerufen wird.

Deswegen wird das Bit als Input (I0.0), Merker (M0.0) und Output (Q0.0) in pyPlc.py bleiben.

Die Merker- und Doppelworte können auch zusätzlich über eine Variable bezeichnet werden. Das gilt auch für Bit-Variablen! So könnte der Python-Programmierer sich von den Bezeichnungen MW, MD usw. entfernen. Also alles im Lot 😊

Im Trainings-Video wird das alles sehr detaliert erklärt. Die Webseite ist in Arbeit und auch das erste Trainings-Video 😎. Zudem gibt es auf der Webseite einen Blog, welcher hoffentlich besser funktioniert wie dieser ...

Ich reagiere gerne auf weitere Fragen 🙋


Montag, 17. April 2023

   Copyright ©  Dipl.-Ing. Johannes Hofer 2022                                           

 

KI2Plc

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

 




Fragen zu float oder real: 

Dazu ein Test-Beispiel aus der Analog-Verarbeitung


Gerade die Analog-Verarbeitung bereitet in jeder Hochsprache Probleme, zumindest die korrekte Verarbeitung für den Analogein- und Analogausgang des jeweiligen Gerätes.

Die so spezifizierten Bausteine, wie NORM und SCALE helfen dabei sich vorerst auf einer neutralen Ebene zu bewegen. Danach erfolgt mit einem MOVE die Übertragung nach einem analogen Ein- oder Ausgang, welcher im Gerät spezifiziert wurde.

Die sogenannte Treiberschnittstelle erledigt dann den Rest.

Das Lesen eines analogen Wertes aus der Schnittstelle erolgt in ein MW, welches den digitalen Zustand des ausgesuchten Ports darstellt. Je nach Konfiguration ist dieser polar oder bipolar. In den meisten, praktischen Anwendungen handelt es sich um einen polaren Port, welcher keine negativen Werte zulässt. Im folgenden Video ist wieder ein Vergleich zu sehen, welcher das Prinzip bei einer S7-1200 in FUP zeigt.

Das Video ist ohne Ton:



Analoge Werte werden in MD gespeichert. Das Merker-Doppelwort hat hier in pyPlc immer einen float-Wert gespeichert.


Wie wird der Python-Code in einer Hardware (z. B. Simatic) angewendet?

Die Frage zur Anwendung in einem Gerät kann erst vorgestellt werden, wenn der Baustein dazu in Python fertig gestellt ist. Grundsätzlich funktionieren die bereits bestehenden Bausteine aus der pyPlc.py. Dafür ist kein Python-Interpreter, sondern eine byte-orientierte Verabeitung programmiert. Ähnlich, wie es bei Java der Fall ist.

Der Byte-Interpreter ist für den Programmierer zugänglich und kann direkt im PC vorab getestet werden. Das ermöglicht den kompletten Test am Arbeitstisch und sollte so nach dem Download in das Gerät ohne Probleme funktionieren.

Geräte, welche Python verarbeiten (Microphyton) müssen noch getestet werden. Hier fehlt mir noch eine passende und sinnvolle Hardware.

Bis auf weitere Fragen zum Thema pyPlc 🙋