Ki2Plc geschützte Domain 😎
Die Möglichkeiten einer SPS-Programmierung mittels künstliche Neuronen, um diese am Geschehen der KI zu beteiligen
Neue Videos auf meinem YouTube-Kanal zum Thema Ki2Plc.
Pico-EVB verbindet die SPS mit dem Lan. Hier kommt die KI-SPS zum Einsatz, welche eine neue Art der Automatisierung ermöglicht.
Die Möglichkeiten einer SPS-Programmierung mittels künstliche Neuronen, um diese am Geschehen der KI zu beteiligen
Die Möglichkeiten einer SPS-Programmierung mittels künstliche Neuronen, um diese am Geschehen der KI zu beteiligen
Die Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen
Mit dem neuen Video beginnt nun der Einstieg in die SPS für das TIA-Portal und CODESYS. Dazu wird ein mögliches Modell zum künstlichen, neuronalen Netz vorgestellt. Die ersten vier Teile zeigen das Modell für ein künstliches Neuron, welches eine komplette digitale Gruppe in einer SPS bearbeiten kann. Damit ist die Basis geschaffen, das Modell zunächst im Einzelfall zu betrachten. Nun folgt die Überlegung, wie das 'Brain' dazu funktionieren könnte. Nach dem Aktionspotential (Link Wiki) kann das künstliche Neuron nun komplette oder auch teilweise Informationen an die Dendriten senden und somit nahe und ferne Neuronen erreichen. Außerdem entsteht so eine Eigendynamig, welche wir für das Vorhaben in der Steuerungstechnik nutzen können.
https://de.wikipedia.org/wiki/Aktionspotential
Die Arbeiten werden nun in Python getestet und das Projekt in die SPS geladen. Wir werden also die SPS bezüglich des neuronalen Netzes in Zukunft mit Python programmieren. Das ist mein neues Vorhaben und mal abwarten was da jetzt so passieren wird.
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 2 mit Kapitel 1 ( noch nicht in meinem YouTube-Kanal):
Die Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen
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 Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen
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.
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:
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:
Die Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen
Die Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen
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 🙋
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 🙋
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😊
🙋
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 🙋
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):