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")






Montag, 6. Juni 2022

 Copyright ©  Dipl.-Ing. Johannes Hofer 2022, Auszug aus dem neuen active learn book                                                 

Die KI-SPS

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




HMI-Anwender im Testmodus TIA-Simulation zeigt das folgende Video:


Damit können auch Interessierte ohne den Besitz einer Hardware aus der Simatic 1200/1500 profitieren und sich mit dem Thema beschäftigen ☺
 

Nachfolgend wie mehrfach gewünscht, der Script  zum  kopieren:


Sub Ki2HMI()
Const READ = 1
Const WRITE = 2
Const APPEND = 8 ' not use
'
Dim fso, fileIn, fileOut 
On Error Resume Next
'object 
  Set fso = CreateObject("Scripting.FileSystemObject")
  'program 
  Select Case SmartTags("Request_Counter")
Case 0 ' check file read
SmartTags("SendReceiveData_FlagRequestStr") = False
Set fileIn = fso.OpenTextFile("C:/KiToPlc_HMI/RequestText.txt",READ)
If(Err.Number <> 0) Then
SmartTags("InfoFileSystem") = " RequestText.txt => " & Err.Description
Err.Clear
Set fso = Nothing
SmartTags("Request_Counter") = 100
Else
' read file
SmartTags("RequestText") = fileIn.ReadAll()
fileIn.Close()
'KI2Plc set folder and filename
fso.DeleteFile "C:/KiToPlc_HMI/RequestText.txt"
SmartTags("InfoFileSystem") = "Read File ok => File deleted"
Set fso = Nothing
SmartTags("Request_Counter") = SmartTags("Request_Counter") + 1
End If
Case 1
SmartTags("SendReceiveData_RequestStr_HMI")= SmartTags("RequestText")
SmartTags("SendReceiveData_FlagRequestStr") = True
SmartTags("Request_Counter") = SmartTags("Request_Counter") + 1
Case 2
'KI2Plc set folder and filename
If(SmartTags("SendReceiveData_FlagRequestStr") = False) Then
SmartTags("Request_Counter") = SmartTags("Request_Counter") + 1
End If
Case 3
'KI2Plc set folder and filename and write file 
Set fileOut = fso.OpenTextFile("C:/KiToPlc_HMI/AcknowledgeText.txt",WRITE, True)
If(Err.Number <> 0) Then
SmartTags("InfoFileSystem") = " => " & Err.Description
Err.Clear
Set fso = Nothing
SmartTags("Request_Counter") = 100
Else
fileOut.WriteLine(SmartTags("SendReceiveData_AcknowledgeStr_HMI"))
fileOut.Close()
fso = Nothing
SmartTags("Request_Counter") = SmartTags("Request_Counter") + 1
End If
Case 4
' nothing
SmartTags("Request_Counter") = SmartTags("Request_Counter") + 1
Case Else
SmartTags("Request_Counter") = 0
End Select
'change sps-flag 
SmartTags("RequestHMI_Bit") = Not SmartTags("RequestHMI_Bit")
End Sub

 

Freitag, 29. April 2022

 Copyright ©  Dipl.-Ing. Johannes Hofer 2022, Auszug aus dem neuen active learn book                                                 

Die KI-SPS

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


8.2     Logic Edge-Control

Was ist, wenn ein PLC-Programmierer seine eigenes Programm zur Automatisierung anwenden möchte, ohne die KI-Vorteile zu verlieren. Nun das ist sicherlich verständlich, wenn zu den ganzen Dingen eines KI-Automaten kein sooo großes Vertrauen besteht. Schließlich weiß man ja auch nicht was da  in einem Baustein so abgeht – oder?

Verständlich und auch vollkommen normal den Dingen nicht zu trauen.

Man verwendet im eigenen Programm zwar Bibliotheksbausteine, aber nur soweit dieser überwiegend bekannt sind und zudem auch schon tausendmal getestet wurden.

Damit ein KI-System bestehen kann, müssen spezifische Daten existieren. Wir haben ja schon den Eingangs-Layer, die Regeln und den oder die Ausgangs-Layer kennen gelernt. Zudem kennen wir ja auch schon Deep-Learning, welches im Gerät Zwischenlayer erzeugen kann, um damit mehrere Möglichkeiten für die Ausgangs-Layer zu bilden.

Diese Vorgehensweise mit dem Deep-Learning wird direkt auf der Hardware ausgeführt und deswegen auch als Edge-KI bezeichnet.

Was man sich so alles einfallen lässt 😊. Das was da so innerhalb des KI-Automaten abgeht, könnte zur Automatisierung ungewünscht sein. Nach dem Motto, was der Bauer nicht kennt, frisst er nicht, können wir mit dem sogenannten Edge-Control aushelfen.

Betrachten wir dazu in einer Simatic dem Aufruf eines KI-Automaten, wie uns auch schon bekannt ist, dann sehen wir die Möglichkeit einen Eingangsparameter IN_EC zu setzen.

                       

                         Bild 8.2: Die SPS besitzt zu jedem KI-Automat einen Edge-Control-FB

Jeder KI-Automat besitzt einen booleschen Eingang IN_EC (Punkt 1) welche wahlweise den Funktionsbaustein EC_SD1 (Punkt 2) aktiviert oder nicht aktiviert. Damit können wir das logische Geschehen für den Programmablauf zur Logik dem Programmierer überlassen. Wie auch immer er dies löst entscheidet jetzt nicht mehr der KI-Baustein, sondern liefert dazu die Daten, Funktionen und nötigen Parameter. Somit ist der Programmierer völlig unabhängig der KI-Dinge und kann somit schalten und walten, wie er dies auch in der Vergangenheit schon getan hat.

Na also, dann haben wir ja unser Edge-Control und die KI vereinbart. Ob das so sinnvoll ist, muss im Einzelfall entschieden werden 😊

Die KI allerdings bleibt erhalten und liefert so wichtige Daten und Erkenntnisse, ob der Baustein nun so auch richtig funktioniert. Geliefert wird das dann über den sogenannten Backpropagation-Faktor und alle sind zufrieden – oder wie oder was?

Dazu nun das folgende Video zum Praxisbaustein "Automatische Türsteuerung" in YouTube


Praktikum KI-SPS - Teil 2

Vorerst noch überwiegend KV-Diagramm mit KI-Gerüst und der Einsatz von Bibliotheksbausteinen.  

Zum Test suche ich noch einen Spender über eine größere SPS. Muss nicht das TIA-Portal sein. Auch wäre eine neuzeitige SPS mit Arduino oder sowas denkbar. Da das KI-Verfahren sehr sicher ist, kann man hier auch eine andere Hardware sehr gut einsetzen. Also einfach auf meinem Blog melden :)

 Fortsetzung folgt im nächsten Post .... 💇

 

Samstag, 23. April 2022

 Copyright ©  Dipl.-Ing. Johannes Hofer 2022, Auszug aus dem neuen active learn book                                                 

Die KI-SPS

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





https://youtu.be/0TjR0Gws6G0

Dieses mal aus zeitlichen Gründen nur das Video in YouTube :)


Freitag, 18. März 2022

 Copyright ©  Dipl.-Ing. Johannes Hofer 2022, Auszug aus dem neuen active learn book                                                 

Die KI-SPS

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


Kapitelausschnitt:

8.1     Die ersten Schritte mit KI2Plc



Der Einstieg mit KI2Plc
vom KV zur KI-SPS



Diesmal das Video zum Kapitel. Nach Freigabe der ersten Lite-Version kann diese über meinen Blog unverbindlich und kostenfrei angefordert werden :) Das wird in Kürze der Fall sein. Alle Daten zur Person bez. dieser Anfrage werden vertraulich behandelt und sind zum aktuellen Update der SW nur auf meinem PC gespeichert. 

Fortsetzung folgt im nächsten Post .... 💇



Sonntag, 20. Februar 2022

Copyright ©  Dipl.-Ing. Johannes Hofer 2022, Auszug aus dem neuen active learn book                                                 

Die KI-SPS

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


Kapitelausschnitt:


7.1     Das Komponenten-Diagramm

Ein SD allein funktioniert nicht. Wie immer ist alles viel komplizierter – warum soll es auch einfach sein, denn schließlich soll die neue Idee eine große Wirkung haben. Dazu müssen wir das Komponenten-Diagramm betrachten, welches das Zusammenspiel aller SW-Bausteine zeigt und erklären soll, auch wenn das in den meisten Fällen als sehr langweilig empfunden wird, denn wer liest derzeit in der modernen Internetwelt noch Literatur oder Bedienungsanweisungen. Da wird doch lieber am Objekt gleich ausprobiert, was da so abgeht.

Für den Programmierer allerdings ein wichtiger Informationszweig, denn aus den vielen Programmzeilen wird man ohne Plan nicht zurechtkommen. Zudem sind doch eine Menge Schnittstellen zu erkennen und die müssen verstanden werden, wenn man da etwas ändern, erweitern oder sonstiges unternehmen möchte.



   Bild 36: Das Komponenten-Diagramm zum Gesamtgeschehen

Betrachtet man die Komponente C_SD, dann ist diese für die Entwicklung der Eingangslayer, Ausgangslayer, Regeln und vieles mehr verantwortlich und sicherlich auch für den Anwender zur Entstehung seines Projektes, die wichtigste Anwendung am Monitor, welches letztendlich in der Hardware durch die KI-SPS zur Anwendung kommt.

Das Projekt unter NET Core in der Komponente MainWindow ist mit seinen folgenden Komponenten notwendig, damit überhaupt ein Klick mit der Maus und das daraus entstehende KI-Geschehen, ich darf das mal so nennen, wirksam wird.

Das SD kann über die Komponente C_KI_GroupLS letztendlich über die Assoziationen mit dem C_Project kommunizieren und ist so in der Lage seine Inhalte an die Komponente C_DG (Dokument_Generator) zu übermitteln. Der erzeugt dann das Datenformat (JSON) und wird, wenn gewünscht, in C_Project über die Funktion OL (Output Layer) an die Komponente C_Socket gesendet, welche dann dafür sorgt, dass die PLC ihre Daten zur Ausführung erhält.

Die Daten werden mit Hilfe der Komponente C_DB_Plc generiert, je nachdem was da für eine SPS angesprochen werden soll.

Nun – ist doch ganz einfach – oder 😊.


Fortsetzung folgt im nächsten Post .... 💇
Verleger und SPS-Hersteller können sich gerne melden 😊

Firma oder Start-up, mit Interesse mein know-now exklusiv zu erwerben können sich gerne melden.