Mittwoch, 15. 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



 

Pico-EVB als mini-plc Teil-2

Nachdem der Loop läuft, benötigen wir einen Client und das erfolgt normalerweise mit dem ersten Kontakt über den Request 4000. In Zeile 241 im Teil-1 ersichtlich, wird die Funktion rem_socket.send(set_neuron_ipl_str(set_neuron_ipl())) aufgerufen, welche nun die Daten zum Client sendet. Das Programm KI2Plc benötigt eigentlich nur die Anzahl der Eingangsparameter und dessen Typ, also digital oder analog. Hier werden die Daten aus der Funktion set_neuron_ipl() zusammengesetzt, welche danach von set_neuron_ipl_str() als String zum Versenden zusammengesetzt wird.  


Hier wird ein Set (Array) mit jeweils einem Tupel bestehend aus den Daten des digitalen Eingang zusammengesetzt. Insgesamt sind das hier die drei digitalen Eingänge. Die Informationen sind jeweils mit einem Schlüssel (Key) und den Daten dazu beschrieben, welche KI2Plc auswertet. Was da so wichtig ist, ist nicht so exakt festgelegt. KI2Plc benötigt mindestens den Typ (Zeile 191) und die Quelle des Gerätes (Zeile 192). Der Rest ist zum Debuggen und zur Datenerhaltung wichtig, aber nicht zur Programmierung der Matrix. Dazu mehr Information, wenn die KI2Plc veröffentlicht wird.



In der Funktion set_neuron_ipl_str() wird diese Information als String zusammengesetzt und an die KI2Plc gesendet.

Der Request für die neue Matrix ist im Teil-1 in Zeile 233 ersichtlich. Dieser wird von der Funktion set_matrix(datas) umgesetzt. Die Daten werden als Dictionary von KI2Plc gesendet und müssen nun als Matrix-Daten aufgelöst werden. 


Wichtig dabei ist, dass dir globale Variable run auf 0 gesetzt wird, damit die Matrix im anderen _thread nicht mehr bearbeitet wird. Ansonsten ensteht eine Liste (Array), welche nur die Werte und nicht mehr den Schlüssel beinhaltet. Danach kann mit run = 1 die Bearbeitung wieder freigegeben werden. Funktioniert so wunderbar 👍

Der Request 4002 soll nun immer den aktuellen Zustand des Eingangs-Layer senden, welcher allerdings derzeit nur für die Anzeige zur Erklärung im Vidio dient. Dazu sind die Funktionen get_status() und get_status_str() zuständig. Wobei hier das return in Zeile 90 den Status aus der Funktion cylinder_simulation() erfolgt.


Diese ist nun für einen künstlichen Ablauf zuständig. Hier wird etappenweise ein Zustand ausgegeben, welcher einen fahrenden Cylinder simuliert. In Micropython gibt es noch keinen match, deswegen die Auflösung mit einem If-Grab 😀


Diese Zustände haben wir im Video gesehen. Und nun fehlt noch der dritte Teil zur Matrix selbst, der in Kürze folgt. 🙋