Sonntag, 5. 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

 

Neuronen und Synapsen für die KI-PLC

Was wir hier sehen, ist eine völlig andere Betrachtung der KI-PLC. Dieses mal nicht nur für das TIA-Portal, sondern auch für Geräte mit der Option, diese in Python als SPS zu betreiben.




In einem praktischen Modell-Versuch, wie im Bild dargestellt, werden Daten von einer SPS über den Pico-EVB an einen PC gesendet. Selbstverständlich geht das auch im dargestellten Netz direkt zum PC, ohne den Pico.

Der Vorteil die Daten über den Pico zu senden, besteht u. a. darin, dass diese Option auch nach der Inbetriebnahme zur weiteren Datenübertragung bestehen bleiben kann.
 

Was passiert hier?

Der SPS-Programmierer sorgt für die Daten zur Inbetriebnahme eines FB‘s und sendet diese an die KI2Plc. Das ist der sogenannte Input-Layer (IPL), welcher dann in eine Matrix mit künstlichen Neuronen und Synapsen übernommen werden. Eine Inbetriebnahme des FBs erfolgt danach in der KI2PLC-Software mittels Deep-Learning und dessen Training. Diese sendet dann das Ergebnis in Form einer Matrix an die SPS und kann nun dort im FB mittels einer Standard-Prozedur angewendet werden.

Geräte (SPS / IOT) mit integriertem Python-Interpreter erhalten eine Matrix in Python geschrieben, welche speziell aus dem Training als Datei.py abgeleitet wird.


Aufgabenstellung

Die Daten von der SPS oder Pico, werden im Eingangslayer aufgenommen und über Synapsen für das Deep-Learning zur Verfügung gestellt. Hier können die Synapsen mit zusätzlichen Eigenschaften versehen werden. Danach erfolgt die Übergabe in den Eingangslayer. 

Das Training sorgt nun dafür, dass die Hiddenlayer bearbeitet werden und diese dann am Ausgangslayer zur weiteren Bearbeitung zur Verfügung stehen. Diesen Vorgang schauen wir uns im folgen Video (ohne Ton) an:


Ergebnis

Ein Ergebnis aus einem Training, ist ein Ausgangslayer, welcher für die SPS als Daten oder ein Python-File zur weiteren Bearbeitung zur Verfügung steht. Insgesamt wurden bei diesem Durchlauf 920 Aufnahmen gemacht (Bild unten) und in den Layern ausgewertet. Daraus entsteht nun eine Matrix, welche hier den Zylinder interpretiert. Vergleichbar mit den Aufnahmen von Katzen, um diese von z. B. Hunden zu differenzieren.



Das funktioniert wunderbar auch für PLCs, nur mit anderen Gewichtungsmethoden für das Training, wie es üblicherweise für Erkennung von Katzen dokumentiert wird.

Natürlich werden mehrere Layers mit künstlichen Neuronen benötigt, wie hier im Video gezeigt wird. Das Video soll uns also nur einen möglichen Weg darstellen und die Fantasie anregen einmal darüber nachzudenken. 

Wie nun so eine Umsetzung der Matrix in der SPS oder in einem Pico praktisch aussieht, zeige ich bei meinem nächsten Blog-Beitrag 🙋


https://youtu.be/uzpAZC_Ag_4



Mein KI-Berater:



Freitag, 27. Januar 2023

 Copyright ©  Dipl.-Ing. Johannes Hofer 2022                                           

Die KI-SPS

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

Das Board W5100S-EVB-Pico und das

TIA-Portal V16



Einleitung

Ich habe mir das o.g. Board bei WIZnetGermany GmbH besorgt und war gespannt, wie das mit dem TIA-Portal V16 so funktioniert. Gespannt deswegen, da ich schon einen Versuch mit dem Pico und den Aufsatz ETH-CH9121 (Wiz) als Ethernet-Schnittstelle hinter mir habe. Hat gut funktioniert, allerdings natürlich nur mit einem Kanal (Socket). Der EVB-Pico soll ja bis zu 4 Sockets bedienen können.

Zunächst war der Einstieg mit den Vorgaben des Herstellers bzw. des Lieferanten sehr einfach und hat auf Anhieb mit zwei Sockets funktioniert😉 

Diese Anwendung wurde in "MicroPython" auf Thonny umgesetzt. Einige Links und Hinweise auf die Verwendung der hier gezeigten Software, weiter unten. Danke an die Authoren, welche durchaus ein Basiswissen vermitteln,  mit dem Board und deren angebotenen Software den Einstieg zu finden.

Die Grundlage dazu (ohne Fehlerbehandlung, wie z. B. Stecker ziehen usw.) möchte ich hier vorstellen und als Begleitmaterial zu meinem YouTube-Block "Tial-Expert Hofer" betrachten. 

Hier die wichtigsten Links zum Board:

Firmware rp2 welche bei mir funktioniert:
Ich verwende aktuell die Firmeware-Version  rp2_w5100s_20220421_v1.0.5.uf2

Nun zum Board und dessen Aufgabe im Verbund KI-SPS.

Aufgabenstellung

Das Board wird als Kommunikation zwischen einer S7-1200 und meinem PC (Windows 10) die aktuellen Daten von der SPS an das Programm KI2Plc leiten. Dort erfolgt über die Matrix PLM1  das Training für den Lernmechanismus, welcher nach einem abgeschlossenen Test als Interpreter-Datei wieder an die S7-1200 zurück gesendet wird. 

Die SPS hat also kein traditionelles Steuerungs-Programm mehr, sondern einen Interpreter, welche das Gelernte als Steuerungsprogramm umsetzt .

Es gibt somit einen deutlichen Unterschied zur traditionellen Programmierung einer SPS, welche ja die üblichen Sprachen aus der IEC 61131... für ein Programm benutzt. Hier besteht das SPS-Programm nur aus der Erfassung für die Ein- und Ausgangsdaten und einen Interpreter zur Programmsteuerung.

Dieser Abschnitt beschreibt vorerst den praktischen Einsatz an einer S7-1200 mit dem TIA-Portal V16. Da der Pico in MicroPython programmiert wird, könnte diese Datenverbindung auch über einen handelsüblichen PC und einem Python-Programm erfolgen. In der Praxis allerdings soll der Pico-EVB oder mehrere davon zum Einsatz kommen. Warum das so ist, wird erst viel später an einem praktischen Beispiel vorgestellt.

Das MicroPython-Programm zum Pico-EVB

Zunächst erfolgt die auch vom Hersteller angebotene Initialisierung zum Bord, wie im folgenden Listing gezeigt ist:


Ich habe das Board mit der Adresse '192.168.1.200 initialisiert (Zeile 13). Der PC und die SPS müssen also im gleichen Adressbereich eingestellt sein. Die Initialisierung erfolgt gemäss den Hersteller-Angaben und funktioniert ohne Probleme. Meine SPS S7-1200 hat die IP-Adresse 192.168.1.108 und wird mit Receive- und Sendblock (Port 2000 und 3000) jeweils als Client programmiert, deswegen der nächste Abschnitt als server-loop() im Pico:


Und zum Schluss das main() mit der Antwort der SPS in der Kommandozeile:


Das SPS-Programm zur Kommunikation zum Pico-EVB


Im NW1 sehen wir den Receiver mit dem Port 2000, welcher zunächst die Daten vom Pico empfängt. Diese werden dann aufgearbeitet (NW2 und NW3) und zum Pico entsprechend beantwortet (NW4):



Das Video in meinem YouTube-Kanal wird gerade vorbereitet: Dort werden auch die Links für den Download der Programme, wie hier gezeigt, angegeben. Also, noch ein wenig Geduld 😏 oder einfach hier anfragen.

APC2 anstatt PLC3

Warum soll das über einen Pico-EVB ablaufen? Nun - kann natürlich die Kommunikation von der SPS direkt zum PC erfolgen. Dies allerdings belastet die SPS, da die Daten für die SW im PC besonders vorbereitet sein muss. Im Bild können wir sehen, dass die Picos zusammen einen Eingangs-Layer bilden. Diese bereiten somit die Daten schon so auf, dass diese direkt als künstliche Neuronen mit den entsprechenden Synapsen im PC zur Verarbeitung kommen können. Ausserdem ist die Programmiersprache Python für diese Zwecke besser geeignet.



Ist das Steuerungsprogramm in der SPS nicht so umfangreich, dann kann der PC auch direkt die Daten entsprechend formatiert von der SPS erhalten. Das bedeutet aber auch, dass die spätere Kontrolle noch schnell genug sein muss, um sinnvolle Werte innerhalb einer akzeptablen Zeit zu transferieren um diese in die Input-Layer-Matrix zu übertragen. 

Die Picos sorgen also nicht nur für schnelle Daten, sondern ermöglichen auch eine entsprechende Kontrolle nach der quasi-Programmierung, welche nach jeder Inbetriebnahme zeitweise, notwendig ist. Zudem stellen sie eine kostengünstige Lösung dar.

Weiteres im nächsten Blog-Abschnitt 🙋


Hier noch die Links zum Python-Interpreter Thonny und pycharm-community




Abkürzungen:
1: PLM Process Logic Matrix
2: APC Aritificial Process Controll
3: PLC Programming Logic Control

Linkbeispiel zu meinem YouTube-Kanal und Udemy:
Mein KI-Berater:


Samstag, 26. November 2022

  Copyright ©  Dipl.-Ing. Johannes Hofer 2022                                           

Die KI-SPS

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


Machine-Learning für Prozesskrane TIA-V16

Teil - 5




Hier der 5. Teil zum Thema KI und Deep-Learning. Mein laufendes Projekt beschäftigt mich derzeit, so dass ich wenig Zeit habe zu diesem Thema etwas zu berichten. Das Positionieren mit Lernkurven wird derzeit bei einer Krananlage (Modernisierung) umgesetzt und zeigt richtig gute Ergebnisse. Mehr dazu später, wenn's die Zeit erlaubt ...

Danke für das Verständnis!


Mein KI-Berater und Automatisierer:

https://kran-automation.marcel-rosiak.de/






Mittwoch, 19. Oktober 2022

 Copyright ©  Dipl.-Ing. Johannes Hofer 2022                                           

Die KI-SPS

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


Machine-Learning für Prozesskrane TIA-V16

Teil-3





Zu den Fragen auf meinem Blog und meine Antworten:

Ich verstehe nicht das Problem mit dem Bildwechsel?
Der Bildwechsel muss über einen Skript erfolgen, damit das Request-Bit auf dem neuen Bild berücksichtigt wird. Deswegen wird das Request-Bit vor dem Bildwechsel invertiert. Dazu mehr im Teil-4
Wie funktioniert der Balken im Button?
Kann der Bar Graph horizontal gezeigt werden?
Wie sieht der Script für den Bildwechsel aus?
Dazu werde ich im Teil-4 ein gesondertes Video machen.


Montag, 10. Oktober 2022

  Copyright ©  Dipl.-Ing. Johannes Hofer 2022                                           

Die KI-SPS

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


Machine-Learning für Prozesskrane TIA-V16

Teil-2




Jetzt in YouTube. Man kann nicht alles in einem Video erklären, aber so einen Überblick kann man schon bekommen - denke ich.

Zu den Fragen auf meinem Blog und meine Antworten:

Wie sieht der automatische Ablauf aus?
Zuerst kommen die automatisch gelernten Muster (LM), danach folgt die Standard-Automatik wenn keine Treffer zu den Muster existieren. Zuletzt werden die Handbefehle abgearbeitet. Alles befindet sich im Auftrags-Stack und kann auch beliebig gewichtet werden. 
Wieviel Tags hat das gezeigte TIA-Projekt im Video?
So ca. 485 soweit ich jetzt noch in Erinnerung habe. Das zeige ich auch im dritten Teil, falls genügend Anfragen kommen
Kann man den Source kaufen?
Nur über eine Einweisung (Seminar). Sonst macht das ja keinen Sinn.
Kann der Anwender die Machine-Learning abschalten?
Es gibt derzeit drei Gruppen: Handbefehle, Automatik und Machine-Learning. Jede Gruppe kann aktiviert oder deaktiviert werden.
Ist eine Projektunterstützung möglich?
Bitte anfragen. Grundsätzlich ja, falls freie Mitarbeiter vorhanden sind. 
Wie funktioniert der Balken im Button?
Dazu werde ich im Teil-4 ein gesondertes Video machen.



Im weiteren kann über den KI-Berater Marcel ein Inhouse-Seminar zu diesem Thema und den Sourcen angefragt werden.  Schreiben sie mir Ihr Interesse oder wenden Sie sich an den KI-Berater Herr Marcel Rosiak.

Bis demnächst ...

Bei Fragen zur Kran-Automatisierung oder allgemeine Projektunterstützung TIA-Portal bitte folgenden Link verwenden und Kontakt aufnehmen:







Samstag, 3. September 2022

 Copyright ©  Dipl.-Ing. Johannes Hofer 2022                                           

Die KI-SPS

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


Machine-Learning für Prozesskrane TIA-V16



TIA-Portal und Machine-Learning, WinCC-Advanced
Mein YouTube-Kanal: TIA-Expert Hofer



Die Programmierung der Automatik erfolgt komplett über Daten nach dem KI-Prinzip Machine Learning mit nachgeschaltetem Deep-Learning. Letzteres wird vom Bediener konfiguriert, solange dies sinnvoll erscheint.

Das alles mit dem TIA-Werkzeug V16 ohne zusätzliche Software oder anderen Hilfsmitteln.

Nun - die Darstellung des Konfigurators ist zwar bereits vorhanden, aber es fehlt noch eine Erklärung dazu, welche in einem weiteren Video gezeigt werden soll.

Ist auch nicht ganz so "ohne" mit dem was man im TIA-Portal bezogen auf Programmiermöglichkeiten und Debugging so geboten bekommt. Aber es funktioniert hervorragend, denn mittlerweile sind zwei Anlagen der ehemaligen Demag Mannesmann aus den 90ziger Jahren durch den Betreiber damit modernisiert worden. 

Bei Fragen zur Kran-Automatisierung folgender Link:









Freitag, 1. Juli 2022

Copyright ©  Dipl.-Ing. Johannes Hofer 2022                                           

Die KI-SPS

Die Möglichkeit einer Programmierung für eine SPS, um diese am Geschehen der künstlichen Intelligenz zu beteiligen






 Das Listing zum Pi:

# socket test for raspi

import socket
import threading
import sys
import time

HOST_CLIENT = "192.168.8.106"  
PORT_RCV = 3000  # port used by receive
PORT_SEND = 2000 # port used by send
FORMAT = 'utf-8'

# client to receive and send
def RCV_SEND():
    try:
        _rcv = None
        _send = None
        # socket receive messages
        _rcv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        _rcv.settimeout(30)
        _rcv.connect((HOST_CLIENT, PORT_RCV))
        print("Socket RCV is connected")
        # socket send answer
        _send = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        _send.settimeout(30)
        _send.connect((HOST_CLIENT, PORT_SEND))
        print("Socket SEND is connected")
        connected = True
        while connected:
            data = _rcv.recv(1024).decode(FORMAT)
            l = len(data)
            s = str(l)
            print(f"Len: " + s)
            # parseData
            print(f"Message [RCV]: {data}")
            # return from parseData
            s = "[{" + "SD:Raspi RCV -> ok" + "}]"
            _send.send(s.encode(FORMAT))
            print("[SEND]: " + s)
    except:
        print("Exception in RCV_SEND ",sys.exc_info()[0])   
        if(_rcv != None):
            _rcv.close()
        if(_send != None):
            _send.close()
        print("Close sockets")
        return;  

# main
def main():
    while(True):
        thread_RCV_SEND = threading.Thread(target = RCV_SEND)
        thread_RCV_SEND.start()
        print("Start RCV and SEND Thread")    
        while(thread_RCV_SEND.is_alive()):
            ...
        print("Inteface network is disconnect ... wait")    
        time.sleep(2)    
        print("try again")
  
main()     
print("Program out")