tag:blogger.com,1999:blog-29205592264092093452024-03-24T12:59:21.920+01:00Automation mit der KI-SPS und das WebPico-EVB verbindet die SPS mit dem Lan. Hier kommt die KI-SPS zum Einsatz, welche eine neue Art der Automatisierung ermöglicht.TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.comBlogger80125tag:blogger.com,1999:blog-2920559226409209345.post-14992061616358209832024-03-11T19:30:00.004+01:002024-03-24T12:58:50.398+01:00<p> </p><h1><span style="text-align: center;">KI2Plc <span style="font-size: x-small;">geschützte Domain 😎</span></span></h1><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><h1 style="text-align: center;"></h1><h2 style="text-align: center;"><span style="font-size: 14pt; text-align: left;">Die Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen</span></h2></blockquote><p><br /></p><p><br /></p><h2 style="text-align: left;">TIA-Portal und CODESYS mit künstlichen, neuronalem Netz</h2><p style="text-align: justify;">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.</p><p><span> <a href="https://de.wikipedia.org/wiki/Aktionspotential">https://de.wikipedia.org/wiki/Aktionspotential</a></span></p><p style="text-align: justify;">Die Arbeiten werden nun in Python getestet und das Projekt in die SPS geladen. Wir werden also die SPS bezüglich des neuronalen Netzes <b>in Zukunft mit Python programmieren</b>. Das ist mein neues Vorhaben und mal abwarten was da jetzt so passieren wird.</p><p><span><br /></span></p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/BOB8hf2NLNA" width="320" youtube-src-id="BOB8hf2NLNA"></iframe></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;">Teil -1</div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/cKfiMU8RLEg" width="320" youtube-src-id="cKfiMU8RLEg"></iframe></div><br /><div class="separator" style="clear: both; text-align: center;">Teil-2</div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/X96DsPvJO5U" width="320" youtube-src-id="X96DsPvJO5U"></iframe></div><br /><div class="separator" style="clear: both; text-align: center;">Teil-3 (TIA-Portal)</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/vAkFrK7wZw8" width="320" youtube-src-id="vAkFrK7wZw8"></iframe></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;">Teil-4 (CODESYS)</div><br /><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Nun ist die Zeit gekommen auch komplexe Varianten der Neuronen-Modelle anzugehen. Das wird sicherlich sehr interessant und bedarf natürlich auch Zeit für die Entwicklung. Bis jetzt mache ich schließlich noch alles ohne fremde Hilfe. Mal sehen was da sich noch entwickelt.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><br /><br /><p></p>TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.com0tag:blogger.com,1999:blog-2920559226409209345.post-59084916533814065502023-12-29T18:31:00.009+01:002024-01-26T13:17:13.221+01:00<p> </p><h1><span style="text-align: center;">KI2Plc <span style="font-size: x-small;">geschützte Domain 😎</span></span></h1><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><h1 style="text-align: center;"></h1><h2 style="text-align: center;"><span style="font-size: 14pt; text-align: left;">Die Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen</span></h2></blockquote><p><br /></p><p><span> Am besten ihr seht euch die beiden Videos auf meinem YouTube-Kanal zur Vorschau an:</span><br /></p><p><span><br /></span></p><p></p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/r5NH6nSAQ44" width="320" youtube-src-id="r5NH6nSAQ44"></iframe></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/JqVowwtxdI0" width="320" youtube-src-id="JqVowwtxdI0"></iframe></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><div style="text-align: justify;">Für den ersten Vorgeschmack Teil 1 mit Kapitel 1 ( noch nicht in meinem YouTube-Kanal):</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div style="text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dwigyRHAN0b291jffI5JUC9dzGC9JfhUCDcPdB-fo1Yjli9q_lcqkPm_7fRa_VjgB0CAtlWW9phQT80ZwFyng' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><div style="text-align: center;"><br /></div><div style="text-align: center;"><br /></div><p></p><p><span style="text-align: justify;">Für den ersten Vorgeschmack Teil 2 mit Kapitel 1 ( noch nicht in meinem YouTube-Kanal):</span></p><p></p><div style="text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dx29KUvEtx-JIhRy5oJNg5HbOfNUyv52jUxipi2GL0MS6V6MXljI7JGKDYbHKyKNTekzAIbaMODvn_LHpLmFg' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><br /><div style="text-align: justify;"><br /></div> <span style="text-align: justify;">Für den ersten Vorgeschmack Teil 3 mit Kapitel 1( noch nicht in meinem YouTube-Kanal):</span><p></p><div><span style="text-align: justify;"><br /></span></div><div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dy1hjZrCNTR5Y0E44INKEitlMWUEhyj0OrcPDAPJb3MJ4GdLWBf66-dkwsWIpWtvI2mUu_7pECCGaH3oLl7NA' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div> <span style="text-align: justify;">Für den ersten Vorgeschmack Teil 3 mit Kapitel 3( noch nicht in meinem YouTube-Kanal):</span></div><div><span style="text-align: justify;"><br /></span></div><div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dyj2F8CV0cFC8yFkTjCyLQ7V0vOfki-SYP6a62CSkSe0xWkvh0OGSlHZxac7-zwA9tqM53bzvWXDGkrNcIAHg' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><span style="text-align: justify;">Für den ersten Vorgeschmack Teil 4 mit Kapitel 2( noch nicht in meinem YouTube-Kanal):</span><br /><span style="text-align: justify;"><br /></span></div><div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dz44KJrkxFVkvPvL1iXXAF5ElAmv1rOrMZPTEYwbSMS34gDJ7Ep8g3XVp2qdHmnbQnOKGf1AYzVnWd8dLnezQ' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><br /></div><div style="text-align: justify;">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 <b>ohne</b> 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:</div><div><br /></div><div><a href="https://www.udemy.com/course/neuronales-netz-in-scl-mit-dem-tia-portal/?">https://www.udemy.com/course/neuronales-netz-in-scl-mit-dem-tia-portal/?</a><br /></div><div><br /></div><div><br /></div><div style="text-align: justify;"><br /><span style="text-align: justify;"><br /></span></div>TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.com0tag:blogger.com,1999:blog-2920559226409209345.post-79291853684874251632023-11-19T12:43:00.009+01:002023-12-29T18:32:21.959+01:00<p> </p><h1><span style="text-align: center;">KI2Plc </span><span style="font-size: x-small;">geschützte Domain 😎</span></h1><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><h1 style="text-align: center;"></h1><h2 style="text-align: center;"><span style="font-size: 14pt; text-align: left;">Die Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen</span></h2></blockquote><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSOF01gf2HYwEvSq27b3gc32ocS0OUK9r3Guszvp1GaYCsg9ePQNwl1udYu2GCbxv8bVrZ-Zl7B3jkS3LP85pB-jSdPf8EoDK4hS664pSdPe_Tq2hYauWqQTuXDklsJxb1yomoX2UQhYpotvAPEM7y11yX-IrpH8wwnnh1_q9HnU-VBl7memNskW0jzCw/s1434/18-11-_2023_12-20-13.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="810" data-original-width="1434" height="338" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSOF01gf2HYwEvSq27b3gc32ocS0OUK9r3Guszvp1GaYCsg9ePQNwl1udYu2GCbxv8bVrZ-Zl7B3jkS3LP85pB-jSdPf8EoDK4hS664pSdPe_Tq2hYauWqQTuXDklsJxb1yomoX2UQhYpotvAPEM7y11yX-IrpH8wwnnh1_q9HnU-VBl7memNskW0jzCw/w598-h338/18-11-_2023_12-20-13.jpg" width="598" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div> <p></p><div style="text-align: left;"><b><span style="font-size: medium;">KI in der S7-1500 Standard zur Steuerung eines Zweibrückenkranes in einer Verbrennungsanlage</span></b></div><div style="text-align: left;"><span style="text-align: justify;"><br /></span></div><div style="text-align: left;"><span style="text-align: justify;">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.</span></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span style="color: #660000;">Dabei soll die Lösung in der SPS, welche den Kran steuert, <b>ohne zusätzliche</b> Hardware erledigt werden.</span></div><div style="text-align: justify;"><span style="color: #660000;"><br /></span></div><p></p><div style="text-align: left;"><b><span style="font-size: medium;">Der erste Schritt mit ungelernten Daten</span></b></div><p></p><p style="text-align: justify;">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. </p><p style="text-align: justify;"><span style="color: #660000;">Das Ergebnis ist die grüne Kurve und liefert eigentlich keine Überraschung! Insgesamt werden bei diesem Beispiel immer 100 Neuronen als Input-Layer verwendet.</span></p><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEE2p-5hiiH8Q6e0ko6BWzP007h8UNaC1KTggmU_gaaU5jXX9hGbUnGioKno7lQGzx-jfDRdWnZQ40zqfQHK0U5W9ske5hKKJsW3Ajm-yTvf1vp3A7pyXMGwcE5rQUqJCqlyFBeQ2f2ZUm7tgTQjHq1Ra7MhL311VMwRz8qAR7Wl14LPDJjK_0GyCeL1A/s642/18-11-_2023_11-34-39.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="496" data-original-width="642" height="309" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEE2p-5hiiH8Q6e0ko6BWzP007h8UNaC1KTggmU_gaaU5jXX9hGbUnGioKno7lQGzx-jfDRdWnZQ40zqfQHK0U5W9ske5hKKJsW3Ajm-yTvf1vp3A7pyXMGwcE5rQUqJCqlyFBeQ2f2ZUm7tgTQjHq1Ra7MhL311VMwRz8qAR7Wl14LPDJjK_0GyCeL1A/w400-h309/18-11-_2023_11-34-39.jpg" width="400" /></a></div><br /><div style="text-align: left;"><span style="font-size: medium;"><b>Die Trainingsdaten liefert der Kranführer</b></span></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">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. </div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPgiTPdQ3-8UIt7m6GtRGBrJR4WsbGnGaCxQJ7apHhcaXM9Hm4FBhob6Svuik_AiIHe9Y3swshzjDobNX14AsV3r1Gd0I8wcC0VeSO3W1WGXz7d2AN3hRFut2l4lU17jNlvWwRJ9hNVUI7ksaWpod6iDuWMf7bdoA1PlhgXEPhakON5OtBEkDWWL69LX8/s1004/19-11-_2023_11-48-53.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="602" data-original-width="1004" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPgiTPdQ3-8UIt7m6GtRGBrJR4WsbGnGaCxQJ7apHhcaXM9Hm4FBhob6Svuik_AiIHe9Y3swshzjDobNX14AsV3r1Gd0I8wcC0VeSO3W1WGXz7d2AN3hRFut2l4lU17jNlvWwRJ9hNVUI7ksaWpod6iDuWMf7bdoA1PlhgXEPhakON5OtBEkDWWL69LX8/w400-h240/19-11-_2023_11-48-53.jpg" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><div style="text-align: justify;">Das funktioniert sehr gut und zeigt im folgenden Bild ein Ergebnis, welche nun als trainiertes neuronales Netz in der SPS festgehalten wird.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span style="font-size: medium;"><b>Die KI liefert durch Machine Learning eine neue Sollkurve</b></span></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">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 <b>entsprechend der grünen Kurve</b> gefahren.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span style="color: #660000;">Störungen, welche dann noch hinzukommen, sind dabei noch nicht trainiert.</span></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSEJDwAGhygzL0n3uf-hLy1x2ireAksbSGhxCN81BPTZHjGtECq2L3uhKfk9AAWs7nBnrf1FBfmgje1jQC4_DlKK1djBiG9H3y6rLsa2BEgU1H65CrDUbBFwphIEIm_vN5kc6pMC0jOmfTk8MB-ekhFSnc6qMORlu-tusA5mU4welYrzvhov6egAooQnc/s800/18-11-_2023_11-37-36.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="600" data-original-width="800" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSEJDwAGhygzL0n3uf-hLy1x2ireAksbSGhxCN81BPTZHjGtECq2L3uhKfk9AAWs7nBnrf1FBfmgje1jQC4_DlKK1djBiG9H3y6rLsa2BEgU1H65CrDUbBFwphIEIm_vN5kc6pMC0jOmfTk8MB-ekhFSnc6qMORlu-tusA5mU4welYrzvhov6egAooQnc/w400-h300/18-11-_2023_11-37-36.jpg" width="400" /></a></div><br /><div style="text-align: justify;">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.</div><div style="text-align: justify;"><br /></div><h4 style="text-align: justify;"><b>Bemerkungen:</b></h4><div style="text-align: justify;">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!</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Zudem wird im neuen Blog die Umsetzung in der SPS S7-1500 mit SCL vorgestellt. 🙋</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/5IGqgig9xO8" width="320" youtube-src-id="5IGqgig9xO8"></iframe></div><br /><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><br /></div><div class="separator" style="clear: both;"><br /></div></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><br />TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.com0tag:blogger.com,1999:blog-2920559226409209345.post-3270416199986607892023-08-21T19:42:00.005+02:002023-12-29T18:32:51.015+01:00<p> </p><h1><span style="text-align: center;">KI2Plc </span><span style="font-size: x-small;">geschützte Domain 😎</span></h1><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><h1 style="text-align: center;"></h1><h2 style="text-align: center;"><span style="font-size: 14pt; text-align: left;">Die Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen</span></h2></blockquote><p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwWf41GKbLx35TDcPxl9hFsAT0wKEvDK5h1-pwNiFiyyD8-Dl50PJuNhq4okufgI5-FqogrX-QwqmsPu3DjAIqySE9jVfA7lLxKwRkobqp0xjL8l6J_ql2TQpClhbqTR-ADXfwnEOSbmG6v2S-89Lk5bxbapYEoSDOQdvH-WbiSPiJ_2EpnJo4F6jJDR4/s1215/21-08-_2023_12-09-32.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="673" data-original-width="1215" height="311" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwWf41GKbLx35TDcPxl9hFsAT0wKEvDK5h1-pwNiFiyyD8-Dl50PJuNhq4okufgI5-FqogrX-QwqmsPu3DjAIqySE9jVfA7lLxKwRkobqp0xjL8l6J_ql2TQpClhbqTR-ADXfwnEOSbmG6v2S-89Lk5bxbapYEoSDOQdvH-WbiSPiJ_2EpnJo4F6jJDR4/w564-h311/21-08-_2023_12-09-32.jpg" width="564" /></a></div><br /><h3 style="text-align: left;">Video zum Alignment Teil-2</h3><p style="text-align: justify;"><span style="color: #0b0b0b; font-family: inherit;">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. </span></p><p style="text-align: justify;"><span style="color: #990000; font-family: inherit;">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.</span></p><p style="text-align: justify;"><span style="color: #090909; font-family: inherit;">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. </span></p><p style="text-align: justify;"><span style="color: #990000; font-family: inherit;">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.</span></p><p style="text-align: justify;"><span style="color: #0b0b0b; font-family: inherit;">Zudem besteht das Interresse an <b>einem komplexen</b> 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.</span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirH15EHpFUTBnzAT1OzfGTzWDqxsSHwKkl7Xt0KULMSVCnyRgwpAE4fNC0eB3NKN3I77DfeEoAQYPUJtL_ZXlyTPZQhKOQwm8qffvwC0BE6ERqbJq7J5ExCEi1oicRyUOx9u45RZfDzx6AqO1nM9AYG_k7nglaH915jCF950j08q-H5UnN7P2PKBhFQAY/s1444/21-08-_2023_11-58-30.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="833" data-original-width="1444" height="330" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirH15EHpFUTBnzAT1OzfGTzWDqxsSHwKkl7Xt0KULMSVCnyRgwpAE4fNC0eB3NKN3I77DfeEoAQYPUJtL_ZXlyTPZQhKOQwm8qffvwC0BE6ERqbJq7J5ExCEi1oicRyUOx9u45RZfDzx6AqO1nM9AYG_k7nglaH915jCF950j08q-H5UnN7P2PKBhFQAY/w572-h330/21-08-_2023_11-58-30.jpg" width="572" /></a></div><br /><p style="text-align: justify;"><span style="color: #0b0b0b;">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.</span></p><p style="text-align: left;"><span style="color: #990000;">Wir müssen also eine speichernde Wirkung lernen, ohne einen speichernden Befehl anzuwenden</span><span style="color: #990000;"> 😉</span></p><p style="text-align: justify;"><span style="color: #0d0d0d;">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.</span></p><p style="text-align: justify;"><span style="color: #0d0d0d;">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. </span></p><p style="text-align: justify;"><span style="color: #990000;">Wir verwenden einen Timer ohne einen SPS-Timer einzusetzen. Der ergibt sich nur aus den Daten, welche gelernt wurden.</span></p><p style="text-align: justify;"><span style="color: #0b0b0b;">Nun eine schöne und komplexe Aufgabe - denke ich. Schauen wir uns das folgenden Video an:</span></p><p style="text-align: justify;"><br /></p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dyWBX4doeh0IZLukXXpF1wbgitb7Ge14T53dVffZuiVxHcref_x9OHOKJNfjzEhsLqK63PIONZVzi9-hnnHMg' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><br /><p style="text-align: justify;"><span style="color: #0b0b0b;">Das Lernen ist relativ einfach, wenn wir uns direkt an der Maschine befinden. Hier im Video musste ich den Ablauf zusätzlich simulieren. </span></p><p style="text-align: justify;"><span style="color: #990000;">Der Vorteil beim Lernen an der Maschine ist, dass ich durch das Alignment den Bewegungsablauf anrege und dan nur die Daten erfasse!</span></p><p style="text-align: justify;"><span style="color: #0b0b0b;">Der Nachteil ist, dass ich erst danach bestimmen kann, welche Daten ich tatsächlich davon behalten und lernen möchte.</span></p><p style="text-align: justify;"><span style="color: #990000;">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.</span></p><h3 style="text-align: justify;"><span style="color: #090909; font-family: inherit;">Das Problem mit dem Lernen</span></h3><p style="text-align: justify;"><span style="color: #090909; font-family: inherit;">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. <b>Also will er immer ausfahren 😃</b></span></p><p style="text-align: justify;"><span style="color: #090909;">Wie wir mit solchen Situationen umgehen, ohne ein Speicherelement zu Programmieren, schauen wir uns im folgenden Video aus meinem YouTube-Kanal an:</span></p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/6SW_hiJ4SGU" width="320" youtube-src-id="6SW_hiJ4SGU"></iframe></div><br /><h3 style="text-align: justify;">Rework</h3><p style="text-align: justify;">Nun was war da für ein Ausgang im Video der nicht ausgeschaltet wurde, obwohl der Endschalter Tor zu erreicht wurde?</p><p style="text-align: justify;">Wie schnell und einfach das nachlernen geht, zeigt das folgende Video:</p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dwNLR-lOjUjFvCNhrtrUHTNgl_7ZINcLwuHvimj9SInq-BetboZau8si6CPTLBd1Gekz6rHYdqh_lTXiHTYNg' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><br /><div class="separator" style="clear: both; text-align: center;"><span style="text-align: justify;">🙋</span></div><p style="text-align: justify;"><br /></p><p style="text-align: justify;"><br /></p><p style="text-align: justify;"><br /></p><p style="text-align: justify;"><br /></p><p style="text-align: justify;"><br /></p><p style="text-align: justify;"><br /></p>TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.com0tag:blogger.com,1999:blog-2920559226409209345.post-71955195039236338622023-08-05T19:30:00.006+02:002023-12-29T18:33:27.125+01:00<p> </p><h1><span style="text-align: center;">KI2Plc </span><span style="font-size: x-small;">geschützte Domain 😎</span></h1><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><h1 style="text-align: center;"></h1><h2 style="text-align: center;"><span style="font-size: 14pt; text-align: left;">Die Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen</span></h2></blockquote><p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZO3PNvo4oSPiF4se9lw6pqmmlg6RVSyl9OaEdqoPkbeUrMoWurD0pffF8GpMX3Ku3UcNlIEtAbn6hyn-qu7NoQ8822QCFREJ6-hWyLgd93gdMcFMPz696PZ74XCGl5Tft5BQjTCfkbhJd6ACHjw8VJ2toNRKlm8x5wuqywecVR94gEQGQ5X2mAfp2GAA/s908/04-08-_2023_19-20-48.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="598" data-original-width="908" height="381" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZO3PNvo4oSPiF4se9lw6pqmmlg6RVSyl9OaEdqoPkbeUrMoWurD0pffF8GpMX3Ku3UcNlIEtAbn6hyn-qu7NoQ8822QCFREJ6-hWyLgd93gdMcFMPz696PZ74XCGl5Tft5BQjTCfkbhJd6ACHjw8VJ2toNRKlm8x5wuqywecVR94gEQGQ5X2mAfp2GAA/w577-h381/04-08-_2023_19-20-48.jpg" width="577" /></a></div><br /><p><br /></p><h4>Das Video zum "alignment" - Teil-1 </h4><div>Schnell und einfach, aber ausgeprägt das nun fertige Video. </div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dyZJdKzEY8_uMcRTyMu26p2XCs5cemB7RGw-yeK4LyoHd8psI7lxjq_tBRwJdEOX9ape5SdKxenAUDbhG-mPQ' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div>Das sind ja noch einfache Aufgaben - aber - das Prinzip wird klar oder?</div><div><br /></div><div style="text-align: justify;">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.</div><div><br /></div><div>Somit ist der Weg zur Methode ML für SPS-Programmierer gar nicht so weit entfernt 😏</div><div><br /></div><div>Bis bald 🙋</div><div><br /></div><div><br /></div>TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.com0tag:blogger.com,1999:blog-2920559226409209345.post-32987243793359080422023-08-04T20:02:00.004+02:002023-12-29T18:33:50.722+01:00<p> </p><h1><span style="text-align: center;">KI2Plc </span><span style="font-size: x-small;">geschützte Domain 😎</span></h1><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><h1 style="text-align: center;"></h1><h2 style="text-align: center;"><span style="font-size: 14pt; text-align: left;">Die Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen</span></h2></blockquote><p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZO3PNvo4oSPiF4se9lw6pqmmlg6RVSyl9OaEdqoPkbeUrMoWurD0pffF8GpMX3Ku3UcNlIEtAbn6hyn-qu7NoQ8822QCFREJ6-hWyLgd93gdMcFMPz696PZ74XCGl5Tft5BQjTCfkbhJd6ACHjw8VJ2toNRKlm8x5wuqywecVR94gEQGQ5X2mAfp2GAA/s908/04-08-_2023_19-20-48.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="598" data-original-width="908" height="381" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZO3PNvo4oSPiF4se9lw6pqmmlg6RVSyl9OaEdqoPkbeUrMoWurD0pffF8GpMX3Ku3UcNlIEtAbn6hyn-qu7NoQ8822QCFREJ6-hWyLgd93gdMcFMPz696PZ74XCGl5Tft5BQjTCfkbhJd6ACHjw8VJ2toNRKlm8x5wuqywecVR94gEQGQ5X2mAfp2GAA/w577-h381/04-08-_2023_19-20-48.jpg" width="577" /></a></div><br /><p><br /></p><h4 style="text-align: left;">Die pyPlc ist fertig </h4><div style="text-align: left;">Nun ist die pyPlc soweit fertig gestellt, dass die Veröffentlichung in Udemy steht. Es gibt auch ein neues Video in YouTube.</div><div style="text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/h-VnhkH7DOY" width="320" youtube-src-id="h-VnhkH7DOY"></iframe></div><br /><div style="text-align: left;">Der Link zu Udemy:</div><div style="text-align: left;"><br /></div><div style="text-align: left;"><a href="https://www.udemy.com/course/sps-mit-pyplc-programmieren-und-verstehen/?utm_source=sendgrid.com&utm_medium=email&utm_campaign=email">SPS mit pyPlc programmieren und verstehen | Udemy</a></div><div style="text-align: left;"><br /></div><div style="text-align: justify;">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.</div><div style="text-align: left;"><br /></div><h4 style="text-align: left;">Das "alignment"</h4><div style="text-align: justify;">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.</div><div style="text-align: left;"><br /></div><div style="text-align: justify;">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. </div><div style="text-align: justify;"><br /></div><div style="text-align: left;"><b><span style="color: #990000;">Die Wirkung wird hier duch das ML direkt durch die SPS selbst und dem dazugehörigen Alignment umgesetzt.</span></b></div><div style="text-align: left;"><b><br /></b></div><div style="text-align: justify;">Beispielhaft der gezeigte Zylinder startet mit dem Alignment <i><b>"self.plc.A('Q0.0', 'I0.0')"</b></i></div><div style="text-align: justify;">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. </div><div style="text-align: left;"><br /></div><div style="text-align: left;"><b><span style="color: #990000;">Beim Test im Video wird das Alignment nicht mehr aufgerufen!</span></b></div><div style="text-align: left;"><br /></div><div style="text-align: left;">Das wäre ja auch ein Witz - oder 😉</div><div style="text-align: left;"><br /></div><div style="text-align: left;">Nun folgt im nächsten Teil das Video zur Erklärung zum Alignment.</div><div style="text-align: left;">Also bitte noch ein wenig Geduld. 🙋</div><div style="text-align: left;"><br /></div><div style="text-align: left;"><br /></div><div style="text-align: left;"><br /></div><div style="text-align: left;"><br /></div><div style="text-align: left;"><br /></div><div style="text-align: left;"><br /></div><div style="text-align: left;"> </div><div style="text-align: left;"><br /></div><div style="text-align: left;"><br /></div><div style="text-align: left;"><br /></div>TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.com0tag:blogger.com,1999:blog-2920559226409209345.post-89307817445963521762023-06-07T21:19:00.003+02:002023-12-29T18:34:14.930+01:00<p> </p><h1><span style="text-align: center;">KI2Plc </span><span style="font-size: x-small;">geschützte Domain 😎</span></h1><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><h1 style="text-align: center;"></h1><h2 style="text-align: center;"><span style="font-size: 14pt; text-align: left;">Die Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen</span></h2></blockquote><p><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAemlzLYB9WEZtDswEBgrB-QsBmceyB7txb8u2ywBjPoNac4Mr1Fg-6ssFKyqQU6RY4NybmVphpp5lkQd6R1bCuEAxQl6zZh4--u5oIHZRlbbl-6OrwDHgKRXwx1tttrn9Uhl0Z5wr0EAkq1z1pV3v9fI8vZiNCDYbc81ID_AaIoH_aQx9o21MB1rY/s1279/07-06-_2023_10-01-16.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="680" data-original-width="1279" height="292" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAemlzLYB9WEZtDswEBgrB-QsBmceyB7txb8u2ywBjPoNac4Mr1Fg-6ssFKyqQU6RY4NybmVphpp5lkQd6R1bCuEAxQl6zZh4--u5oIHZRlbbl-6OrwDHgKRXwx1tttrn9Uhl0Z5wr0EAkq1z1pV3v9fI8vZiNCDYbc81ID_AaIoH_aQx9o21MB1rY/w549-h292/07-06-_2023_10-01-16.jpg" width="549" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><span style="text-align: left;"> </span></div><p></p><p></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"><b><span style="font-family: "Times New Roman", serif; font-size: 14pt;">Zum Thema Analog-Anzeige:</span></b></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"><span style="font-family: "Times New Roman", serif; font-size: 14pt;">Im folgenden Video sind die Fragen dazu beantwortet. </span></p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dxrZXbrPu5-B_oYPTJhigi1LcCuU2AP1mlQgZda-1QBOOOaQWWwrqcwMYNwGQd5JlGcCu6_KnvTLobf_5NPUA' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><br /><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"><span style="font-size: medium;">Mit den MOVE-Anweisungen können die beliebigen Werte in die Visualisierung kopiert werden. </span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"><span style="font-size: medium;">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.</span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"><span style="font-size: medium;">Jetzt wird erst mal Urlaub gemacht 🙋</span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"><span style="font-size: medium;"><br /></span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"><span style="font-family: "Times New Roman", serif; font-size: 14pt;"><br /></span></p>TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.com0tag:blogger.com,1999:blog-2920559226409209345.post-39222536224487326382023-05-31T19:27:00.000+02:002023-05-31T19:27:30.387+02:00<p> </p><h1><span style="text-align: center;">KI2Plc</span></h1><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><h1 style="text-align: center;"></h1><h2 style="text-align: center;"><span style="font-size: 14pt; text-align: left;">Die Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen</span></h2></blockquote><p><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFQOHj3GoJOHn2AJPrbL_lcRCvPKITHP0VfwH40AGx_jvlBuRNq8PXWjpcfrM4vmLZkuavyxaECgkkgCsNkNzIln7NLdYzC5e-EWYju5_i-cDjgL0ebJpwmwwuP145z6FHIffcWxshrfHzcyvTQ2UPYLFcCB2bDZ1OFpc-uglpbA5EcHq8epTr23AX/s1479/31-05-_2023_11-22-20.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="538" data-original-width="1479" height="206" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFQOHj3GoJOHn2AJPrbL_lcRCvPKITHP0VfwH40AGx_jvlBuRNq8PXWjpcfrM4vmLZkuavyxaECgkkgCsNkNzIln7NLdYzC5e-EWYju5_i-cDjgL0ebJpwmwwuP145z6FHIffcWxshrfHzcyvTQ2UPYLFcCB2bDZ1OFpc-uglpbA5EcHq8epTr23AX/w569-h206/31-05-_2023_11-22-20.jpg" width="569" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><span style="text-align: left;"> </span></div><p></p><p></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"><b><span style="font-family: "Times New Roman", serif; font-size: 14pt;">Zum Thema Safety:<o:p></o:p></span></b></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="color: #385723; font-family: "Times New Roman",serif; font-size: 13.5pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none; mso-style-textfill-fill-alpha: 100.0%; mso-style-textfill-fill-color: #385723; mso-style-textfill-fill-colortransforms: lumm=50000; mso-style-textfill-fill-themecolor: accent6; mso-themecolor: accent6; mso-themeshade: 128;">Die funktionale Sicherheit kann
nur gewehrleistet werden, wenn das Entwicklungssystem und damit auch das
Konzept dazu risikoarm ist. <o:p></o:p></span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">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:
<o:p></o:p></span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="color: #c00000; font-family: "Times New Roman",serif; font-size: 13.5pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">Die Programmierung einer Plc mit Python wird in seiner künstlerischen Freiheit
schon einmal sehr stark eingegrenzt. Nicht jeder Programmierer mag das.<o:p></o:p></span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">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. <o:p></o:p></span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">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.<o:p></o:p></span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="color: #c00000; font-family: "Times New Roman",serif; font-size: 13.5pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">Das wird dadurch ermöglicht, dass durch die Umsetzung in den Byte-Code die
Parameter genau festlegt, sind. Auch das ist eine Safety-Anforderung.<o:p></o:p></span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">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 <b><i>IoT</i></b>, denke ich.<o:p></o:p></span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">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 </span><span style="font-family: "Segoe UI Emoji", sans-serif; font-size: 13.5pt;">😊</span><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;"><o:p></o:p></span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;"> </span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><b><span style="font-family: "Times New Roman", serif; font-size: 14pt;">Die
bereits umgesetzten Funktionen<o:p></o:p></span></b></p><p class="MsoNormal">
</p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">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. <o:p></o:p></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhU0hZVQJ0FHc-FQM_PF3mEDUG1NCk-5QhQWy6dgPp7Mkre-EuFh2LxA55AfQlrjlCCZiYvIAzbOwQIzRBvVbqAjwwS3CYcOZI0cDfWaEvewvM4t0cI2_AOt8DxfE5HxpvIghxih5ti8GkTqeVTJ-yQY-ybmvo4gq-K9S75KRF6EQiI7I4-UPi1ucvF/s671/31-05-_2023_19-10-53.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="428" data-original-width="671" height="321" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhU0hZVQJ0FHc-FQM_PF3mEDUG1NCk-5QhQWy6dgPp7Mkre-EuFh2LxA55AfQlrjlCCZiYvIAzbOwQIzRBvVbqAjwwS3CYcOZI0cDfWaEvewvM4t0cI2_AOt8DxfE5HxpvIghxih5ti8GkTqeVTJ-yQY-ybmvo4gq-K9S75KRF6EQiI7I4-UPi1ucvF/w504-h321/31-05-_2023_19-10-53.jpg" width="504" /></a></div><div><br /></div><div><br /></div><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">Hier
sind die schon erwähnten Funktionen NORM und SCALE in ANA_IN und ANA_OUT bzw.
LIMIT umbenannt worden.<o:p></o:p></span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">Also
noch bitte ein wenig Geduld 🙋 <o:p></o:p></span></p><p class="MsoNormal"><br /></p><p class="MsoNormal"><br /></p>TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.com0tag:blogger.com,1999:blog-2920559226409209345.post-25999808529719244202023-05-25T11:46:00.005+02:002023-05-25T13:28:55.254+02:00<p> </p><h1><span style="text-align: center;">KI2Plc</span></h1><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><h1 style="text-align: center;"></h1><h2 style="text-align: center;"><span style="font-size: 14pt; text-align: left;">Die Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen</span></h2></blockquote><p><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEila8KDtpWa6gK3rSLNmxz1r-oLgX1EVKojhUjpVv4N2NYXqXd21veq5kE17oYO1BVeSjNVkNivQOJP_Duem_ackZMn9pN9qFpCEFfOAPBhKFd_5nTeq6hXtnfgkHnKWXEHsS3f8CqPMfU9HAOaTr7SpALCuYlnhVdBovfyeJ2lwnneU9psqxJSXa31/s1259/25-05-_2023_13-25-25.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="659" data-original-width="1259" height="288" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEila8KDtpWa6gK3rSLNmxz1r-oLgX1EVKojhUjpVv4N2NYXqXd21veq5kE17oYO1BVeSjNVkNivQOJP_Duem_ackZMn9pN9qFpCEFfOAPBhKFd_5nTeq6hXtnfgkHnKWXEHsS3f8CqPMfU9HAOaTr7SpALCuYlnhVdBovfyeJ2lwnneU9psqxJSXa31/w552-h288/25-05-_2023_13-25-25.jpg" width="552" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><span style="text-align: left;"> </span></div><p></p><p></p><p class="MsoNormal"><span style="font-family: Times New Roman, serif;"><span style="font-size: 18.6667px;"><b>Zum Thema Byte-PLC_Code:</b></span></span></p><p class="MsoNormal"><span style="font-family: Times New Roman, serif;"><span style="font-size: 18.6667px;"><b><br /></b></span></span></p><p class="MsoNormal"><span style="font-family: Times New Roman, serif;"><span style="font-size: 18.6667px;"></span></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-family: Times New Roman, serif;"><span style="font-size: 18.6667px;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/doCNZ5UXCh0" width="320" youtube-src-id="doCNZ5UXCh0"></iframe></span></span></div><p class="MsoNormal"><span style="font-family: Times New Roman, serif;"><span style="font-size: 18.6667px;"><span style="font-family: Times New Roman, serif;"><span style="font-size: 18.6667px;"><br /></span></span></span></span></p><span style="font-family: Times New Roman, serif;"><span style="font-size: 18.6667px;">Wie gewünscht eine Zusatzinfo zum byte_plc_code </span></span><span style="font-family: "Times New Roman", serif; font-size: 18.6667px;">🙋</span><div><div><span style="font-family: Times New Roman, serif;"><span style="font-size: 18.6667px;"><br /></span></span><p></p><p class="MsoNormal"><span style="font-family: Times New Roman, serif;"><span style="font-size: 18.6667px;"><br /><b><br /></b></span></span></p></div></div>TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.com0tag:blogger.com,1999:blog-2920559226409209345.post-53763786368822181022023-05-20T11:46:00.003+02:002023-05-20T11:46:24.926+02:00<p> </p><h1><span style="text-align: center;">KI2Plc</span></h1><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><h1 style="text-align: center;"></h1><h2 style="text-align: center;"><span style="font-size: 14pt; text-align: left;">Die Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen</span></h2></blockquote><p><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDEMrinHxetDUYaVq2vah4o2hWUEUeTny70YrNE0GAjwkaQ1CFvWiww9Gxx3Vj6R411OSzJsRcnuW0oqagw_acGaLGMmfu9ccnKC7vW_u8REMpYlLY9yB1LysjAcCMbJYEqDOjUTtfowjQMz5MZSOTYKRqA8OxA2BiqCXTmFtfMJCc7onSYU_7_Zgu/s1283/20-05-_2023_10-21-03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="662" data-original-width="1283" height="279" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDEMrinHxetDUYaVq2vah4o2hWUEUeTny70YrNE0GAjwkaQ1CFvWiww9Gxx3Vj6R411OSzJsRcnuW0oqagw_acGaLGMmfu9ccnKC7vW_u8REMpYlLY9yB1LysjAcCMbJYEqDOjUTtfowjQMz5MZSOTYKRqA8OxA2BiqCXTmFtfMJCc7onSYU_7_Zgu/w541-h279/20-05-_2023_10-21-03.jpg" width="541" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><br /> <p></p><p></p><p class="MsoNormal"><span style="font-family: Times New Roman, serif;"><span style="font-size: 18.6667px;"><b>Zum Thema Byte-Code</b></span></span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">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). <o:p></o:p></span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="color: #c00000; font-family: "Times New Roman",serif; font-size: 13.5pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">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.<o:p></o:p></span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">Ich
hatte mit dem Thema Save-SPS schon einiges zu tun und bin ehrlich gesagt <b>nicht</b>
ü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.<o:p></o:p></span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="color: #385723; font-family: "Times New Roman",serif; font-size: 13.5pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none; mso-style-textfill-fill-alpha: 100.0%; mso-style-textfill-fill-color: #385723; mso-style-textfill-fill-colortransforms: lumm=50000; mso-style-textfill-fill-themecolor: accent6; mso-themecolor: accent6; mso-themeshade: 128;">Falls es noch einen PLC-Hersteller
der neuen Generation mit Interesse zum Thema Ki2Plc gibt, bitte melden.<o:p></o:p></span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">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. <o:p></o:p></span></p><p class="MsoNormal">
</p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">Somit wären alle Funktionen für beide Teile getestet und zudem weitere </span><span style="color: #00b050; font-family: "Times New Roman",serif; font-size: 13.5pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">Python-PLC-Anweisungen</span><span style="color: #385723; font-family: "Times New Roman",serif; font-size: 13.5pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none; mso-style-textfill-fill-alpha: 100.0%; mso-style-textfill-fill-color: #385723; mso-style-textfill-fill-colortransforms: lumm=50000; mso-style-textfill-fill-themecolor: accent6; mso-themecolor: accent6; mso-themeshade: 128;"> </span><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">fertig gestellt,
welche nicht zum Thema IEC 61131-3 gehören, aber über den Byte-Code in der
Hardware angewendet werden können.</span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">So kommen wir schließlich über die hier integrierte SPS und dem Simulator zur KI2Plc, denn das ist ja schliesslich unser eigentliches Thema.<o:p></o:p></span></p><p class="MsoNormal"><br /></p><p class="MsoNormal"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWMT_5-QVlOpwYACHt6XJbqTKKkKM0Fyx3bD7a2RuNk1wylYegvzPLnpvHgHDbErNlmb0FszQjK_Vg8RraywPHELfAYSWMpAwSYD8gThTXxiFaASqQKNPmvRc5Zym6o7BSYfZH1zU0yahrZRxpNB_6T8AblWQ2jOqjZSNF4c7ZjGvty0bqVXqJfV7A/s1380/20-05-_2023_10-39-36.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="708" data-original-width="1380" height="294" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWMT_5-QVlOpwYACHt6XJbqTKKkKM0Fyx3bD7a2RuNk1wylYegvzPLnpvHgHDbErNlmb0FszQjK_Vg8RraywPHELfAYSWMpAwSYD8gThTXxiFaASqQKNPmvRc5Zym6o7BSYfZH1zU0yahrZRxpNB_6T8AblWQ2jOqjZSNF4c7ZjGvty0bqVXqJfV7A/w573-h294/20-05-_2023_10-39-36.jpg" width="573" /></a></div><br /><p></p><p class="MsoNormal"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt; text-align: justify;">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.</span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">Der
Byte-Code wurde hier mit 83 Bytes aus der Funktion </span><b><i><span style="color: #c00000; font-family: "Times New Roman",serif; font-size: 13.5pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">def fc_lc1:</span></i></b><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;"> übersetzt und kann nun getestet werden. Das Ergebnis sollte wie bei dem
Radio-Button </span><span style="color: #0070c0; font-family: "Times New Roman",serif; font-size: 13.5pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">pyPlc</span><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">
zu sehen, identisch sein.<o:p></o:p></span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">Die
Zeilen 193 bis 201 sind im Byte-Code nicht zu finden und werden demnach auch für
die <b>PLC nich</b>t sichtbar. <o:p></o:p></span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">Damit
entfällt alles, was im regulären Python so noch programmiert wurde im <b>Byte-Code</b>
für die KI2Plc.<o:p></o:p></span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;"><span style="color: #660000;">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.</span><o:p></o:p></span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">Mittlerweile
gibt es den Byte-Code auch auf dem Pico </span><span style="font-family: "Segoe UI Emoji", sans-serif; font-size: 13.5pt;">😊</span><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">, 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.<o:p></o:p></span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">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</span><span style="font-family: "Segoe UI Emoji", sans-serif; font-size: 13.5pt;">😊</span></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span style="font-family: "Segoe UI Emoji", sans-serif; font-size: 13.5pt;">🙋</span></p><p class="MsoNormal"><br /></p><p class="MsoNormal"><br /></p><p class="MsoNormal"><br /></p><p class="MsoNormal"><br /></p><p class="MsoNormal"><br /></p><p class="MsoNormal"><br /></p><p class="MsoNormal"><br /></p><p class="MsoNormal"><br /></p><p class="MsoNormal"><br /></p><br /><p class="MsoNormal"><br /></p><p class="MsoNormal"><span style="font-family: Times New Roman, serif;"><span style="font-size: 18.6667px;"><b><br /></b></span></span></p><p class="MsoNormal"><span style="font-family: Times New Roman, serif;"><span style="font-size: 18.6667px;"><b><br /></b></span></span></p><p class="MsoNormal"><span style="font-family: Times New Roman, serif;"><span style="font-size: 18.6667px;"><b><br /></b></span></span></p><p class="MsoNormal"><span style="font-family: Times New Roman, serif;"><span style="font-size: 18.6667px;"><b><br /></b></span></span></p><p class="MsoNormal"><span style="font-family: Times New Roman, serif;"><span style="font-size: 18.6667px;"><b><br /></b></span></span></p><p class="MsoNormal"><span style="font-family: Times New Roman, serif;"><span style="font-size: 18.6667px;"><b><br /></b></span></span></p><p class="MsoNormal"><span style="font-family: Times New Roman, serif;"><span style="font-size: 18.6667px;"><b><br /></b></span></span></p><p class="MsoNormal"><span style="font-family: Times New Roman, serif;"><span style="font-size: 18.6667px;"><b><br /></b></span></span></p><p class="MsoNormal"><span style="font-family: Times New Roman, serif;"><span style="font-size: 18.6667px;"><b><br /></b></span></span></p><p class="MsoNormal"><span style="font-family: Times New Roman, serif;"><span style="font-size: 18.6667px;"><b><br /></b></span></span></p><p class="MsoNormal"><span style="font-family: Times New Roman, serif;"><span style="font-size: 18.6667px;"><b><br /></b></span></span></p><p class="MsoNormal"><span style="font-family: Times New Roman, serif;"><span style="font-size: 18.6667px;"><b><br /></b></span></span></p><p class="MsoNormal"><span style="font-family: Times New Roman, serif;"><span style="font-size: 18.6667px;"><b><br /></b></span></span></p><p class="MsoNormal"><span style="font-family: Times New Roman, serif;"><span style="font-size: 18.6667px;"><b><br /></b></span></span></p>TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.com0tag:blogger.com,1999:blog-2920559226409209345.post-1244412084560101962023-05-03T21:00:00.003+02:002023-05-05T21:02:54.398+02:00<p> </p><h1><span style="text-align: center;">KI2Plc</span></h1><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><h1 style="text-align: center;"></h1><h2 style="text-align: center;"><span style="font-size: 14pt; text-align: left;">Die Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen</span></h2></blockquote><p><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGOY_GAFOXjDklsdOv60VGOGpbL3u1WC1UIzKvoDF9nR217fdon7RQkpOlJ2bnGi7A114mUCpqtPbBe_fvEF9NNhdbjbDSDSqH1JYhhmWBi1lQHMwxLGt_RoVJqlCttNoQQst5TAzMj9JT3ugsV6ItlMdRuAaBqO0JMZKQn0mfi9EN2J-FG5VA0bn-/s1596/03-05-_2023_17-16-37.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="674" data-original-width="1596" height="236" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGOY_GAFOXjDklsdOv60VGOGpbL3u1WC1UIzKvoDF9nR217fdon7RQkpOlJ2bnGi7A114mUCpqtPbBe_fvEF9NNhdbjbDSDSqH1JYhhmWBi1lQHMwxLGt_RoVJqlCttNoQQst5TAzMj9JT3ugsV6ItlMdRuAaBqO0JMZKQn0mfi9EN2J-FG5VA0bn-/w561-h236/03-05-_2023_17-16-37.jpg" width="561" /></a></div><br /> <p></p><p></p><p class="MsoNormal"><b><span style="color: black; font-family: "Times New Roman",serif; font-size: 14pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 18.0pt; mso-ligatures: none;">Die Themen zum Video-Training pyPlc-Teil-1<o:p></o:p></span></b></p>
<p class="MsoNormal" style="text-align: justify;"><span style="color: #c00000; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">Was hat <i>Ki2Plc</i> mit <i>pyPlc </i>zu tun? </span><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">Nun setzt eine <i>KI2Plc</i> voraus,
dass eine <i>Plc</i> durch die Maßnahmen einer hinzugefügten KI-Ebene, diese Eigenschaften
auch tatsächlich anwenden können sollte. </span><span style="color: #c00000; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">Deswegen zuerst die <i>Plc</i></span><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">, sonst kann ja nichts hinzugefügt
werden </span><span face=""Segoe UI Emoji",sans-serif" style="color: black; font-size: 13.5pt; line-height: 107%; mso-ascii-font-family: "Times New Roman"; mso-bidi-font-family: "Times New Roman"; mso-char-type: symbol-ext; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-hansi-font-family: "Times New Roman"; mso-ligatures: none; mso-symbol-font-family: "Segoe UI Emoji";">😊</span><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">.<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">In der ersten Stufe wird die <i style="mso-bidi-font-style: normal;">pyPlc </i><span style="mso-bidi-font-style: italic;">für die digitalen
Anwendungen vorgestellt und diese in <i>Python</i> trainiert. Das ist schon
eine ganze Menge an Wissen, welches vorerst nur aus Sicht der SPS-Programmierung
erarbeitet werden sollte.<o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: justify;"><span style="color: #c00000; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-bidi-font-style: italic; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">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.<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">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 (<i>and</i>, <i>or</i>, <i>&</i> | usw.) hier erstmal
nicht so wieder zu finden sind. In der SPS-Programmierung werden sogenannte <i>Operanden</i> trainiert und um diese geht es im ersten Teil ganz besonders.<o:p></o:p></span></p><br /><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAzDDIR0FsAMvITWfcvRqOVqOAi2OMXQkFSXXYCL7zfAkhtScdXsDDbb2cOp52_3RrUkBOcMgwRT8CfF3hKSFPlAD3Fk4MTm3e-bQOnD9Gr2ujvlNWGfBe2AiINh6nKxzu-J1zYQmkfWOGTeAdTl4FoCIDfrr7aXzz4StE2N9-ltLbQWYFo_VWkjJE/s755/03-05-_2023_17-34-41.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="425" data-original-width="755" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAzDDIR0FsAMvITWfcvRqOVqOAi2OMXQkFSXXYCL7zfAkhtScdXsDDbb2cOp52_3RrUkBOcMgwRT8CfF3hKSFPlAD3Fk4MTm3e-bQOnD9Gr2ujvlNWGfBe2AiINh6nKxzu-J1zYQmkfWOGTeAdTl4FoCIDfrr7aXzz4StE2N9-ltLbQWYFo_VWkjJE/w529-h298/03-05-_2023_17-34-41.jpg" width="529" /></a></div><br /><div><br /></div><div><p class="MsoNormal" style="text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">Da es <i>Operanden</i> 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 <i>Operanden</i>, welche eine besondere Aufmerksamkeit für analoge Signale erfordern.<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">Letztendlich in Teil-3 schauen wir uns dann an, wie
wir das gelernte nun praktisch unter dem Schild „Sicherheit“ einsetzen können.<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">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.<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">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.<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">Das kann zum Beispiel bei einer Simatic in <i>SCL</i> der
Fall sein. Somit erreichen wir circa derzeit 130 unterschiedliche Geräte von verschiedenen Herstellern, hier auf dem
europäischen Markt. <span style="mso-spacerun: yes;"> </span>Ist doch eine großartige Sache, oder?<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">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.<o:p></o:p></span></p><br /></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/RPFHwx4elgc" width="320" youtube-src-id="RPFHwx4elgc"></iframe></div><br /><div><br /></div><p style="text-align: left;"><span style="font-size: medium;">Ich denke das reicht soweit zur ersten Meinungsbildung. Falls weitere Fragen auftauchen werde ich mich darum kümmern und antworten 🙋<br /></span></p><p style="clear: both; text-align: center;"><span style="font-size: medium;"><br /></span></p><br /><div><br /></div>TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.com0tag:blogger.com,1999:blog-2920559226409209345.post-19330197248879397012023-04-30T11:33:00.002+02:002023-05-03T17:01:04.729+02:00<p> </p><h1><span style="text-align: center;">KI2Plc</span></h1><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><h1 style="text-align: center;"></h1><h2 style="text-align: center;"><span style="font-size: 14pt; text-align: left;">Die Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen</span></h2></blockquote><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihBzvnrF8bx8lNttk7XeqAP4pHAbvBar13NEy-7IcW3WiUYf0NR6znZ-ckJPAiRyKaXxHD567K3z7-pLuypFZIjXO9oKk-NGu7j8Zhr5EsqHVqthkm-A9yLH5lZxtFOGRayPlxsIQNP9ARwXbSq8FCnphnubu9XNZG46bq1jZdDjXVHV35lPdH36oz/s1413/30-04-_2023_10-13-15.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="610" data-original-width="1413" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihBzvnrF8bx8lNttk7XeqAP4pHAbvBar13NEy-7IcW3WiUYf0NR6znZ-ckJPAiRyKaXxHD567K3z7-pLuypFZIjXO9oKk-NGu7j8Zhr5EsqHVqthkm-A9yLH5lZxtFOGRayPlxsIQNP9ARwXbSq8FCnphnubu9XNZG46bq1jZdDjXVHV35lPdH36oz/w558-h240/30-04-_2023_10-13-15.jpg" width="558" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><p><span style="text-align: justify;"><b><span style="font-size: medium;">Fragen zum Thema:</span></b></span></p><p><span style="text-align: justify;"><b><span style="font-size: medium;">Beispiel der Lektionen?</span></b></span></p><p><span style="text-align: justify;"></span></p><p class="MsoNormal" style="text-align: justify;"><span style="text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">Das Thema Python zur S7-1200 ist wohl sehr gefragt.
Allerdings sind Geräte wie Raspberry, Arduino usw. öfter angefragt. <b>Der Byte-Code
erlaubt allerdings fast jedes beliebige Gerät</b> 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 </span><span face=""Segoe UI Emoji",sans-serif" style="color: black; font-size: 13.5pt; line-height: 107%; mso-ascii-font-family: "Times New Roman"; mso-bidi-font-family: "Times New Roman"; mso-char-type: symbol-ext; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-hansi-font-family: "Times New Roman"; mso-ligatures: none; mso-symbol-font-family: "Segoe UI Emoji";">😊</span><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;"><o:p></o:p></span></span></p><span style="text-align: justify;">
<p class="MsoNormal" style="text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">Die Simulation erfolgt hier über einige kleine
Beispiele zur Anwendung von Operanden. Es soll nicht das <i>AND</i>, <i>OR</i>
oder <i>A</i> verstanden werden, sondern die Grundsätzliche Vorgehensweise einer
Python-PLC zum Thema Operanden.<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">In der oberen Ebene der <i>pyPlc_sim</i> 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).<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">Das Ergebnis der digitalen Ausgänge ist dann unten an
den Ausgang-Flags zu sehen. Diese können nicht angeklickt werden </span><span face=""Segoe UI Emoji",sans-serif" style="color: black; font-size: 13.5pt; line-height: 107%; mso-ascii-font-family: "Times New Roman"; mso-bidi-font-family: "Times New Roman"; mso-char-type: symbol-ext; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-hansi-font-family: "Times New Roman"; mso-ligatures: none; mso-symbol-font-family: "Segoe UI Emoji";">😊</span><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">, denn das soll ja das
Python-Programm erledigen. Im oberen Bild ist u. a. die Zeile 520 gerade wirksam:<o:p></o:p></span></p>
<pre style="background: rgb(43, 43, 43);"><span style="font-size: medium;"><span lang="ES" style="color: #a9b7c6; mso-ansi-language: ES;"> A(</span><span lang="ES" style="color: #6a8759; mso-ansi-language: ES;">'Q0.0'</span><span lang="ES" style="color: #cc7832; mso-ansi-language: ES;">, </span><span lang="ES" style="color: #a9b7c6; mso-ansi-language: ES;">AND(</span><span lang="ES" style="color: #6a8759; mso-ansi-language: ES;">'I0.0'</span><span lang="ES" style="color: #cc7832; mso-ansi-language: ES;">, </span><span lang="ES" style="color: #6a8759; mso-ansi-language: ES;">'I0.1'</span><span lang="ES" style="color: #cc7832; mso-ansi-language: ES;">, </span><span lang="ES" style="color: #6a8759; mso-ansi-language: ES;">'I2.7'</span></span><span lang="ES" style="color: #a9b7c6; mso-ansi-language: ES;"><span style="font-size: medium;">))</span><o:p></o:p></span></pre>
<p class="MsoNormal" style="text-align: justify;"><span lang="ES" style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-ansi-language: ES; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">Dazu folgende Bemerkungen:<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: justify;"><b><span style="color: #c00000; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">Wenn die <i><u>UND</u></i>-Bedingung der Eingänge <i>I0.0</i>
<u>und</u> <i>I0.1</i> <u>und</u> <i>I2.7</i> erfüllt sind, dann soll der Ausgang <i>Q0.0</i>
gesetzt werden.<o:p></o:p></span></b></p>
<p class="MsoNormal" style="text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">Wie aus den grünen Punkten erkennbar, sind die digitalen
Eingänge zur Bedingug alle auf <i>True</i> (grün) gesetzt, so ergibt sich die Anzeige
im ersten roten Flag zu <i>Q0.0 </i>aus der Zuweisung mit dem Operand <i>A</i>.<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">Nun alles weitere dazu im Video (ohne Ton):<o:p></o:p></span></p><p class="MsoNormal" style="text-align: justify;"></p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dyChSfTD47sxv1uexq2KiOmynLCYDLA6KVzQ1u9-MXGMcrL87sr8z1eAJGknJBrS7D3UAkWNWbDPH9gqh0aHw' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><br /><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;"><br /></span><p></p>
<p class="MsoNormal" style="text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;"><o:p> Im nächsten Abschnitt dann das Video zum Byte-Code zur S7-1200 🙋</o:p></span></p>
<p class="MsoNormal" style="text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; line-height: 107%; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;"><o:p> </o:p></span></p><b><span style="font-size: medium;"></span></b></span><p></p>TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.com0tag:blogger.com,1999:blog-2920559226409209345.post-19465498349193847812023-04-23T21:27:00.003+02:002023-05-03T17:01:15.994+02:00<p> </p><h1><span style="text-align: center;">KI2Plc</span></h1><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><h1 style="text-align: center;"></h1><h2 style="text-align: center;"><span style="font-size: 14pt; text-align: left;">Die Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen</span></h2></blockquote><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAcYzGzKFoaMcMX31nRVQf4_ER-ZZfirwrPJLpRIGSDZWGWxRasIAOI6edjLwaKzns7CySx6hb5wDJxnFzznaNF_coI4lXz8rbu_PlgDW6G3Zpm8OYmD3KGqfb2B-wtitTfVMysu8v4rTpjvrOyl7cEmoHfQoC1UxL0TwS6BV2TBRRqgu6I4Yx_MHb/s953/23-04-_2023_19-09-05.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="626" data-original-width="953" height="376" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAcYzGzKFoaMcMX31nRVQf4_ER-ZZfirwrPJLpRIGSDZWGWxRasIAOI6edjLwaKzns7CySx6hb5wDJxnFzznaNF_coI4lXz8rbu_PlgDW6G3Zpm8OYmD3KGqfb2B-wtitTfVMysu8v4rTpjvrOyl7cEmoHfQoC1UxL0TwS6BV2TBRRqgu6I4Yx_MHb/w572-h376/23-04-_2023_19-09-05.jpg" width="572" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><p><span style="text-align: justify;"><b><span style="font-size: medium;">Fragen zum Thema:</span></b></span></p><p><span style="text-align: justify;"><b><span style="font-size: medium;">Was macht der Byte-Code?</span></b></span></p><div style="text-align: justify;"><div><p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">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. <o:p></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">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 </span><span face=""Segoe UI Emoji", sans-serif" style="font-size: 13.5pt;">😊</span></p>
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">Der FC </span><i style="font-family: "Times New Roman", serif; font-size: 13.5pt;">fc_test_bit_bcr </i><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">wird
in den Speicher der SPS übertragen und sieht so aus:</span></p>
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;"> </span><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbItDdsuyynEDufPeqqTJxpA6nCQJ-XKHTGprhpkvvWBwCNAAijVBn4AC_6-xDJWEN5WqSocuM5353KyXcG1LGCxA36I5qy_rbv5Cgjo2DRU-76yZLTE0azjpeVDTVByq0Roa4A__O26An9ziothCuqDsFrjtHw89r27tFXknilpmkEBHqohZeS_c_/s563/23-04-_2023_18-38-01.jpg" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="142" data-original-width="563" height="131" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbItDdsuyynEDufPeqqTJxpA6nCQJ-XKHTGprhpkvvWBwCNAAijVBn4AC_6-xDJWEN5WqSocuM5353KyXcG1LGCxA36I5qy_rbv5Cgjo2DRU-76yZLTE0azjpeVDTVByq0Roa4A__O26An9ziothCuqDsFrjtHw89r27tFXknilpmkEBHqohZeS_c_/w516-h131/23-04-_2023_18-38-01.jpg" width="516" /></a></p><p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;"></span></p><p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;"><br /></span></p><span style="font-size: medium;">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:<o:p></o:p></span><p></p>
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm;"><span style="font-family: "Times New Roman", serif;"><span style="font-size: medium;"> </span></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyjHNTEG3uV2mOy2UPa6Qcua2BEgjCyNMqqksKdrajJPUr3yyOMUD_1rQIz7Kjy25q-tTdx6edOfMRePFxGyZMN4sbgGIwPV99kwWR4oWuzDm1jJvTIbSHle5mmd02H_TuQ7iSUdmkBm8ORnH0oSnZPAbRmtWMq8pc4w5R_po7bn2OptD-IZxOG4cF/s436/23-04-_2023_18-29-29.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="233" data-original-width="436" height="246" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyjHNTEG3uV2mOy2UPa6Qcua2BEgjCyNMqqksKdrajJPUr3yyOMUD_1rQIz7Kjy25q-tTdx6edOfMRePFxGyZMN4sbgGIwPV99kwWR4oWuzDm1jJvTIbSHle5mmd02H_TuQ7iSUdmkBm8ORnH0oSnZPAbRmtWMq8pc4w5R_po7bn2OptD-IZxOG4cF/w462-h246/23-04-_2023_18-29-29.jpg" width="462" /></a></div><p></p><p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">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 <i>plc_monitor</i>, 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 </span><span face=""Segoe UI Emoji", sans-serif" style="font-size: 13.5pt;">😊</span></p>
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">Das SPS-Programm Main sieht für
diesen Test so aus:</span></p><p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm;"></p><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggGwI-WdBzQB4jsMuZzXIHdnNyoKCg_x1aquhgVAhDdodXat31edqvaOd8Ufcj0gTiDhempdJKgVUsZPH-oMvmfNjPGve8zr4NaJY_t0nMC_bIeHAHDozknMu9Ogbjr_3lPXSdmJmOm9g1l-LjaaROLp_D76IyllFMLG_8w8EX0P9YQAO3YeCeZ5E_/s1405/23-04-_2023_20-56-47.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="719" data-original-width="1405" height="301" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggGwI-WdBzQB4jsMuZzXIHdnNyoKCg_x1aquhgVAhDdodXat31edqvaOd8Ufcj0gTiDhempdJKgVUsZPH-oMvmfNjPGve8zr4NaJY_t0nMC_bIeHAHDozknMu9Ogbjr_3lPXSdmJmOm9g1l-LjaaROLp_D76IyllFMLG_8w8EX0P9YQAO3YeCeZ5E_/w587-h301/23-04-_2023_20-56-47.jpg" width="587" /></a></div><p></p><p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm;"><br /></p>
<div><span style="font-size: medium;"><b>Welche Geräte können genutzt werden?</b></span></div><h2><o:p></o:p></h2>
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">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!</span></p><p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">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 a</span><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">lles eine Frage der Sicherheit </span><span face=""Segoe UI Emoji", sans-serif" style="font-size: 13.5pt;">😊.</span></p><p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">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. </span></p><p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm;"><span style="color: #660000; font-family: "Times New Roman", serif; font-size: 13.5pt;">Die bereits im Einsatz befindlichen Bausteine sind somit abgesichert, sodass sich der Programmier immer auf sein neues Modul konzentrieren kann.</span></p><p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">Also bitte das Video abarten und weitere Fragen stellen. 🙋</span></p></div><div><span style="font-size: large;"><br /></span></div></div>TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.com0tag:blogger.com,1999:blog-2920559226409209345.post-9174600225426618892023-04-20T12:56:00.005+02:002023-05-03T17:01:25.388+02:00<p> </p><h1><span style="text-align: center;">KI2Plc</span></h1><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><h1 style="text-align: center;"></h1><h2 style="text-align: center;"><span style="font-size: 14pt; text-align: left;">Die Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen</span></h2></blockquote><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguTTi-x06A05DCCtQcdl6MOb6FIWwt1CDOROQEAnrLFRhYq69JdaHiv3OWSyFZYggI-Pza6iI5UF--dkt-2m5r7xG6EDL1V7cU0JZ8Oq44oro65ISc2vJnLKag0sy1hGBLNeCEkhvCY-7k9nCUPqJntRDsbg4-WEUKABCZebpNMepo0HRV0UDj0_bN/s1227/20-04-_2023_12-20-43.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="684" data-original-width="1227" height="305" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguTTi-x06A05DCCtQcdl6MOb6FIWwt1CDOROQEAnrLFRhYq69JdaHiv3OWSyFZYggI-Pza6iI5UF--dkt-2m5r7xG6EDL1V7cU0JZ8Oq44oro65ISc2vJnLKag0sy1hGBLNeCEkhvCY-7k9nCUPqJntRDsbg4-WEUKABCZebpNMepo0HRV0UDj0_bN/w549-h305/20-04-_2023_12-20-43.jpg" width="549" /></a></div><br /><p><br /></p><div style="text-align: justify;"><h2><span style="font-size: large;">Fragen zum Thema:</span></h2><h2><span style="font-size: medium;">Was soll das mit den Bits und Bytes?</span></h2><h2><o:p></o:p></h2><div style="line-height: normal;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">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.</span></div><div style="line-height: normal;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;"><br /></span></div><div style="line-height: normal;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;">Das
hat bei vielen Lesern zur Verwirrung geführt, denn Python-Programmierer suchen
Python im TIA-Portal </span><span face=""Segoe UI Emoji", sans-serif" style="font-size: 13.5pt;">😊</span><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;"> 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.<o:p></o:p></span></div><div style="line-height: normal;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;"><br /></span></div><div style="line-height: normal;"><span style="color: #274e13; font-family: Times New Roman, serif;"><span style="font-size: 18px;">Meine Antwort zur Frage der Zukunftsaussichten einer SPS nur mit Hochsprachen programmierbar:</span></span></div><p>
</p><div style="line-height: normal;"><span style="color: #c00000; font-family: "Times New Roman", serif; font-size: 13.5pt;">Die SPS wird nach meiner Meinung in Python oder anderen Hochsprachen nicht so
programmierbar sein, dass diese nur aus einer Komponente der Hochsprache besteht.</span></div></div><div style="text-align: justify;">
<div style="line-height: normal; text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;"><br /></span></div><div style="line-height: normal; text-align: justify;"><span style="color: #274e13; font-family: "Times New Roman",serif; font-size: 13.5pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">Frage zum Einsatz einer SPS mit pyPlc:</span></div><div style="line-height: normal; text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;"><br /></span></div><div style="line-height: normal; text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">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.</span></div><div style="line-height: normal; text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;"><br /></span></div>
<div style="line-height: normal; text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">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.</span></div><div style="line-height: normal; text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;"><br /></span></div><div style="line-height: normal; text-align: justify;"><span style="color: #274e13; font-family: "Times New Roman",serif; font-size: 13.5pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">Warum die Schreibweise M0.0, MW0, usw.:</span></div><div style="line-height: normal; text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;"><br /></span></div>
<div style="line-height: normal; text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">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. </span></div><div style="line-height: normal; text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;"><br /></span></div>
<div style="line-height: normal; text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">Dadurch
entsteht automatisch der Eingang mir <i>I0.0</i> und bedeutet, dass die Gruppe 0 mit
der Bitadresse 0 angesprochen werden soll. Für den Ausgang <i>Q0.0</i> 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 <i>M0.0</i> gesetzt. Die Umsetzung zum tatsächlichen Ausgang erfolgt dann ganz am Schluss nach der Anwendung (Treiberteil). </span></div><div style="line-height: normal; text-align: justify;"><span style="font-family: "Times New Roman", serif; font-size: 13.5pt;"><br /></span></div><div style="line-height: normal; text-align: justify;"><span style="color: #274e13; font-family: "Times New Roman", serif; font-size: 13.5pt;">Nur
so kann eine Anwendung sehr gut getestet werden, ohne gleich etwas kaputt zu
machen, da der Treiberteil in der Testphase nicht aufgerufen wird.</span></div><div style="line-height: normal; text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;"><br /></span></div>
<div style="line-height: normal; text-align: justify;"><span style="color: #c00000; font-family: "Times New Roman",serif; font-size: 13.5pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">Deswegen wird das Bit als Input (<i>I0.0</i>), Merker (<i>M0.0</i>) und Output (<i>Q0.0</i>) in pyPlc.py bleiben.</span></div><div style="line-height: normal; text-align: justify;"><span style="color: #c00000; font-family: "Times New Roman",serif; font-size: 13.5pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;"><br /></span></div>
<div style="line-height: normal; text-align: justify;"><span style="color: black; font-family: "Times New Roman",serif; font-size: 13.5pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-ligatures: none;">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 <i>MW</i>, <i>MD</i> usw. entfernen. Also alles im Lot </span><span style="font-size: 18px;">😊</span></div><div style="line-height: normal; text-align: justify;"><span face=""Segoe UI Emoji",sans-serif" style="color: black; font-size: 13.5pt; mso-ascii-font-family: "Times New Roman"; mso-bidi-font-family: "Times New Roman"; mso-char-type: symbol-ext; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-hansi-font-family: "Times New Roman"; mso-ligatures: none; mso-symbol-font-family: "Segoe UI Emoji";"><br /></span></div><div style="line-height: normal; text-align: justify;"><span style="color: #274e13; font-size: medium;">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 ...</span></div><div style="line-height: normal; text-align: justify;"><span style="font-size: medium;"><br /></span><span style="font-size: medium;">Ich reagiere gerne auf weitere Fragen 🙋</span></div><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; text-align: justify;"><span face=""Segoe UI Emoji",sans-serif" style="color: black; font-size: 13.5pt; mso-ascii-font-family: "Times New Roman"; mso-bidi-font-family: "Times New Roman"; mso-char-type: symbol-ext; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: DE; mso-font-kerning: 0pt; mso-hansi-font-family: "Times New Roman"; mso-ligatures: none; mso-symbol-font-family: "Segoe UI Emoji";"><br /></span></p><span style="font-size: medium;"></span></div>TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.com0tag:blogger.com,1999:blog-2920559226409209345.post-40712184151200087102023-04-17T12:34:00.004+02:002023-05-03T17:01:34.187+02:00<p> <span style="font-size: x-small;">Copyright © Dipl.-Ing. Johannes Hofer 2022<span> </span><span> </span></span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span></p><p> </p><h1><span style="text-align: center;">KI2Plc</span></h1><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><h1 style="text-align: center;"></h1><h2 style="text-align: center;"><span style="font-size: 14pt; text-align: left;">Die Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen</span></h2></blockquote><p> </p><p></p><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUbDYMJ_udM8696qgLNZxAm0Pl9PT6YxTI8a8edCYkC7oiiONJOqXUZGLKUPNwRNuOuCzxwjyFrfW4vryrv0BLgsAwRUDn5HYK2XE6_zZrPCzxDZy_SlXDI1lIfa98ClAYUVxvVhZ4TE6o7NzXxdR6K6fHycU0ssRtFNehr3BLZFdIwCToBX_NR63v/s1195/17-04-_2023_09-37-13.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="635" data-original-width="1195" height="292" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUbDYMJ_udM8696qgLNZxAm0Pl9PT6YxTI8a8edCYkC7oiiONJOqXUZGLKUPNwRNuOuCzxwjyFrfW4vryrv0BLgsAwRUDn5HYK2XE6_zZrPCzxDZy_SlXDI1lIfa98ClAYUVxvVhZ4TE6o7NzXxdR6K6fHycU0ssRtFNehr3BLZFdIwCToBX_NR63v/w550-h292/17-04-_2023_09-37-13.jpg" width="550" /></a></div><br /><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;"><br /></div></div><p></p><h2><span style="font-size: medium;">Fragen zu float oder real: </span></h2><h2><span style="font-size: medium;">Dazu ein Test-Beispiel aus der Analog-Verarbeitung</span></h2><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Gerade die Analog-Verarbeitung bereitet in jeder Hochsprache Probleme, zumindest die korrekte Verarbeitung für den Analogein- und Analogausgang des jeweiligen Gerätes.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Die so spezifizierten Bausteine, wie <i>NORM</i> und <i>SCALE</i> helfen dabei sich vorerst auf einer neutralen Ebene zu bewegen. Danach erfolgt mit einem <i>MOVE</i> die Übertragung nach einem analogen Ein- oder Ausgang, welcher im Gerät spezifiziert wurde.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Die sogenannte Treiberschnittstelle erledigt dann den Rest.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Das Lesen eines analogen Wertes aus der Schnittstelle erolgt in ein <i>MW</i>, 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 <i>FUP</i> zeigt.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Das Video ist ohne Ton:</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dzBnK5UaYIjJIWl0JfdyQf-F4UM2fKGFIweP7NGtShKmsHXkvbZYcSFOLh23lvyE5NUDArYqLBGj1OeRoeLrg' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><br /><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="color: #660000; font-size: medium;"><b>Analoge Werte werden in MD gespeichert. Das Merker-Doppelwort hat hier in pyPlc immer einen float-Wert gespeichert.</b></span></div><h2 style="text-align: justify;"><span style="font-size: medium;"><br /></span></h2><h2 style="text-align: justify;"><span style="font-size: medium;">Wie wird der Python-Code in einer Hardware (z. B. Simatic) angewendet?</span></h2><div style="text-align: justify;"><span style="font-size: medium;">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 <i>pyPlc.py</i>. Dafür ist <span style="color: #660000;">kein Python-Interpreter</span>, sondern eine byte-orientierte Verabeitung programmiert. Ähnlich, wie es bei Java der Fall ist.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">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.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Geräte, welche Python verarbeiten (Microphyton) müssen noch getestet werden. Hier fehlt mir noch eine passende und sinnvolle Hardware.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Bis auf weitere Fragen zum Thema pyPlc 🙋</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div>TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.com0tag:blogger.com,1999:blog-2920559226409209345.post-23497307159625123862023-04-13T10:16:00.012+02:002023-05-03T17:01:58.198+02:00<p> <span style="font-size: x-small;">Copyright © Dipl.-Ing. Johannes Hofer 2022<span> </span><span> </span></span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span></p><p> </p><h1><span style="text-align: center;">KI</span>2Plc</h1><h1 style="text-align: center;"></h1><h1><blockquote style="border: none; font-size: medium; font-weight: 400; margin: 0px 0px 0px 40px; padding: 0px;"></blockquote></h1><h2 style="text-align: center;"><span style="font-size: 14pt; text-align: left;">Die Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen</span></h2><p></p><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIhIWH5p8kQR2TmKKs3yQiSrT8iE3k9wQhcAmiHQx9Fty1kkDsYRgJhm9_PfITM2_Yw2atGTkvpfQSSPm6w6haj1hRKMv8ZTtRuscdFkaeLUpecrso0m12v-FgBYbskSnzpVrjLvrnTVLl7uZ7dl4_05tdaGiB0vrClxDjI2XdiEpTsQe6nllwoSUC/s1191/13-04-_2023_09-31-49.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="574" data-original-width="1191" height="273" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIhIWH5p8kQR2TmKKs3yQiSrT8iE3k9wQhcAmiHQx9Fty1kkDsYRgJhm9_PfITM2_Yw2atGTkvpfQSSPm6w6haj1hRKMv8ZTtRuscdFkaeLUpecrso0m12v-FgBYbskSnzpVrjLvrnTVLl7uZ7dl4_05tdaGiB0vrClxDjI2XdiEpTsQe6nllwoSUC/w566-h273/13-04-_2023_09-31-49.jpg" width="566" /></a></div><br /><div class="separator" style="clear: both;"><br /></div></div><div class="separator" style="clear: both; text-align: center;"><br /></div><p></p><h2><span style="font-size: medium;">Beispiel Counter-Test iec-CTU</span></h2><div style="text-align: justify;"><span style="font-size: medium;">Vorab eine Klärung zu den Fragen, was das eigentlich mit den Blöcken <span style="color: #660000;"><b><i>UND</i></b></span>, <span style="color: #660000;"><b><i>OR</i></b></span> oder <span style="color: #660000;"><b><i>'M0.0'</i></b></span> usw. soll? Mann kann doch auch in Python schreiben <span style="color: #660000;"><b>a and b</b></span> usw. oder?</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="color: #660000; font-size: medium;"><b>Wenn wir eine SPS (speicherprogrammierbare Steuerung) machen möchten, dann müssen wir mit Operanden arbeiten. Das gibt nicht nur Sicherheit, sondern erfüllt damit die Bedingungen einer SPS!</b></span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Ich könnte nun über das Thema Operanden und Daten einer SPS stundenlang referieren. Macht aber hier keinen Sinn, also wartet bitte, bis die <span style="color: #073763;">Seminar-Folgen</span> fertig sind (ca. noch ein Monat <span style="color: #073763;">für Teil-1</span>) oder beschafft euch zur Vorabinformation das Buch von MHJ STEP7-Workbook (ind Deutsch). Hier kann sich jeder schon mal bestens über Operanden und Funktionen informieren. Hier der Link:</span></div><div style="text-align: justify;"><span style="font-size: medium;"><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><br /></span><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYBAzW3pZxw7jvVGZykf17VPs4fPk8g23GqOZrE0NDPG2z17ianggsK5e4-PtcrCnAOMz7qGmZyKwz4ctwhfVwZ_-p67oi0u1o7BEZHpMhSgzFoBTCRbe34aCGSogMYENYpckmIAN6mNZuF2kVXWTUS5hIsUVBOtZicK9gyDq3hQfJG2uLyExMPq7u/s507/13-04-_2023_10-02-52.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="163" data-original-width="507" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYBAzW3pZxw7jvVGZykf17VPs4fPk8g23GqOZrE0NDPG2z17ianggsK5e4-PtcrCnAOMz7qGmZyKwz4ctwhfVwZ_-p67oi0u1o7BEZHpMhSgzFoBTCRbe34aCGSogMYENYpckmIAN6mNZuF2kVXWTUS5hIsUVBOtZicK9gyDq3hQfJG2uLyExMPq7u/w527-h170/13-04-_2023_10-02-52.jpg" width="527" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div>Bildquelle MHJ, siehe erster Link</div><div style="text-align: justify;"><span style="font-size: medium;"><a href="https://www.step7-workbook.de/step7-workbook-s7-1200-1500">https://www.step7-workbook.de/step7-workbook-s7-1200-1500</a></span></div><div style="text-align: justify;"><span style="font-size: medium;"><a href="https://www.step7-workbook.de/">https://www.step7-workbook.de/</a></span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="color: #660000; font-size: medium;"><b>Die Anwendung der Funktionsblöcke, wie im FUP gezeigt, dienen ebenfalls der besseren Lesbarkeit für ein SPS-Programm in Python.</b></span></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span style="font-size: medium;">Nun zum IEC-Counter. Hier gleich mal das Video (ohne Ton) dazu:</span></div><div><span style="font-size: medium;"><br /></span></div><div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='373' height='312' src='https://www.blogger.com/video.g?token=AD6v5dxwUOLNVrq3t72T2w-Wx2cl0uCWzf0YjZlqy7tuEM-ghgDHpJ_3nr4VxRt-jwCPhQiW7WbvPsIDNpNOBQ22ew' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><br /><div style="text-align: justify;"><span style="font-size: medium;">Auch hier sehen wir die Anwendung für den Test eines CTU im Vergleich zum FUP. Das bedeutet, dass wir das FUP in Python nachvollziehen. In den praktischen Beispielen werden wir das vereinfacht ausführen. Das heisst, dass die Zuweisungen für den Test nicht mehr explizit erfolgt (sie erfolgt ja auch im TIA-Portal), sondern als Programm tatsächlich abläuft. </span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Wir haben also Eingänge, Merker (Speicherbereich) und Ausgänge und können dann so auch praktisch testen! So werden die <span style="color: #660000;"><b>SET</b></span>- und <b><span style="color: #660000;">RESET</span></b>- Befehle nur dann angewendet, wenn diese zum Programmablauf gehören und nicht zum Testen</span></div></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Neu hier ist die Verwendung eines internen Speichers, welcher zu jedem <i><span style="color: #660000;"><b>FB</b></span></i> als <span style="color: #660000;"><b>DB</b></span> angelegt wird. Dieser Speicher ist quasi global. Wie das genau gemeint ist, bitte erst später im Seminar.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Und noch zur Klärung der Frage Seminar? Das Seminar wird bei entsprechender Teilnahme, also Interesse in meinem YouTube-Kanal veröffentlicht. Ist also dort kostenfrei. </span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span>Gibt es nicht genügend Interesse auf diesem Kanal, dann spare ich mir die Arbeit und suche eine Webseite, welche diese Seminar-Reihe anbietet </span><span>(<span style="color: #990000;">nicht in Udemy</span>).</span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span><br /></span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span>Insgesamt wird es drei Teile aus der Seminar-Reihe geben. Das zur Info 😊</span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Ich denke mal, dass die Python-SPS-Programmierung sehr stark im<span style="color: #660000;"> professionellen Bereich</span> angesagt ist. So zumindest die täglichen Reaktionen hier in meinem Blog.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Also werde ich weiter auf Fragen reagieren 🙋</span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div>TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.com0tag:blogger.com,1999:blog-2920559226409209345.post-10828371045797905002023-04-10T21:33:00.005+02:002023-04-20T10:48:15.504+02:00<p> <span style="font-size: x-small;">Copyright © Dipl.-Ing. Johannes Hofer 2022<span> </span><span> </span></span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span></p><p> </p><h1><span style="text-align: center;">Ki2Plc</span></h1><h1 style="text-align: center;"></h1><h1><blockquote style="border: none; font-size: medium; font-weight: 400; margin: 0px 0px 0px 40px; padding: 0px;"></blockquote></h1><h2 style="text-align: center;"><span style="font-size: 14pt; text-align: left;">Die Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen</span></h2><p></p><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6wLEVDGGM9xQEaMxJOw8sBYwi_yEjg-VXXBREKb_SqgIRyciPlB_HseqM89hiV54AvQEsyTrT91kRo4UKEjG26MXQEeaa11wcyhZbIBmPf2kEuoRt-fO5Ym0SFZFRJRMUkmAmEszIOmSaGL_l8XaX9ODSYh_jtqS4PGqEcE_LSB8MklomyvCApdXX/s1041/10-04-_2023_19-13-35.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="412" data-original-width="1041" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6wLEVDGGM9xQEaMxJOw8sBYwi_yEjg-VXXBREKb_SqgIRyciPlB_HseqM89hiV54AvQEsyTrT91kRo4UKEjG26MXQEeaa11wcyhZbIBmPf2kEuoRt-fO5Ym0SFZFRJRMUkmAmEszIOmSaGL_l8XaX9ODSYh_jtqS4PGqEcE_LSB8MklomyvCApdXX/w591-h235/10-04-_2023_19-13-35.jpg" width="591" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div></div><div class="separator" style="clear: both; text-align: center;"><br /></div><p></p><h2><span style="font-size: medium;">Beispiel IEC-Timer TON</span></h2><div style="text-align: justify;"><span style="font-size: medium;"><span>Die Timer sind eine besondere Ausführung in Python, da die IEC-Timer und hier handelt es sich darum, ablaufen, während diese nur einmal gestartet wurden. Es spielt also keine Rolle ob diese nur einmal oder öfters im Python-Programm aufgerufen werden. Sie müssen korrekt ablaufen, wenn sie einmal gestartet worden sind. Als Beispiel möchte ich hier zuerst den TON-Timer, also die Zeitverzögerung (<b>T</b>imer <b>ON</b>) </span><span>vorstellen (Timer-on-delay).</span></span></div><div style="text-align: justify;"><span style="font-size: large;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Hier das Beispiel bei einer Simatic:</span></div><div style="text-align: justify;"><span style="font-size: large;"><br /></span></div><div style="text-align: justify;"><span><div class="separator" style="clear: both; font-size: x-large; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzmwB4M-2c4m8rQ6LbLlUFeZX_trOMtshXR4WkqNHTuMNXFBJ0TnClgQ1Ltlo4EJIk22u8vx3d7o6m5S6dfPrpIMYdS-qouIjoBLjd1VTmze2ekaBMH9GiR16GxdBdN3WsikQ1OIWiyI3T5gv5RhIk2HUCZAUrXx7RKUkyCHqY4fM8v8YuTwYrZt3n/s818/10-04-_2023_19-29-22.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="323" data-original-width="818" height="236" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzmwB4M-2c4m8rQ6LbLlUFeZX_trOMtshXR4WkqNHTuMNXFBJ0TnClgQ1Ltlo4EJIk22u8vx3d7o6m5S6dfPrpIMYdS-qouIjoBLjd1VTmze2ekaBMH9GiR16GxdBdN3WsikQ1OIWiyI3T5gv5RhIk2HUCZAUrXx7RKUkyCHqY4fM8v8YuTwYrZt3n/w599-h236/10-04-_2023_19-29-22.jpg" width="599" /></a></div><div class="separator" style="clear: both; font-size: x-large; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><span style="font-size: medium;">Mit den zwei Merkern M20.5 und M20.6 starten wir über einen UND-Block den Timer Nr. 10 und der Zeitverzögerung von 2000ms. Ist die Zeitverzögerung abgelaufen, dann soll der Merker M20.7 gesetzt werden. Ansonsten ist der Merker M20.7 auf False gesetzt. Genau das sieht nach IEC 61131-3 in Python in einem <span style="color: #660000;">Testprogramm zum Baustein </span>so aus:</span></div><div class="separator" style="clear: both; font-size: x-large; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dwYiT_oMH2VJx940V726grvh8XTx4YderEPvlzwjjV_su9FlqWhNs7065v0e81KXh6g57FsgrOPqjKTeXYGeA' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><br /><div class="separator" style="clear: both; font-size: x-large; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><span style="color: #660000; font-size: medium;">Wir betrachten hier nicht das Netzwerk wie im Simatic-Beispiel gezeigt, sondern einen Test für den Timer in Python. Deswegen setzen wir die Merker selbst.</span></div><div class="separator" style="clear: both; text-align: justify;"><span style="font-size: medium;"><br /></span></div><div class="separator" style="clear: both; text-align: justify;"><span style="font-size: medium;">Wie so ein Netzwerk in Python umgesetzt werden kann, folgt später. D. h. die Merker am Ausgang und Eingang werden später in einem FB über Parameter festgelegt, den ich dann nur als Netzwerk aufrufe und so die Merker entsprechend automatisch gesetzt sind.</span></div><div class="separator" style="clear: both; text-align: justify;"><span style="font-size: medium;"><br /></span></div><div class="separator" style="clear: both; text-align: justify;"><span style="font-size: medium;">Vergesse wir nicht: PLC oder SPS, wie auch immer , müssen immer unter dem Aspekt Sicherheit programmiert werden. Dazu dann später im Kurs entsprechende Auflösungen.</span></div><div class="separator" style="clear: both; text-align: justify;"><span style="font-size: medium;"><br /></span></div><div class="separator" style="clear: both; text-align: justify;"><span style="font-size: medium;">Im nächsten Blogbeitrag betrachten wir den CTU-Zähler, auch nur zur Info unter dem Aspekt Testprogramm 🙋</span></div><div class="separator" style="clear: both; font-size: x-large; text-align: justify;"><br /></div><div class="separator" style="clear: both; font-size: x-large; text-align: justify;"><br /></div><div class="separator" style="clear: both; font-size: x-large; text-align: justify;"><br /></div><div class="separator" style="clear: both; font-size: x-large; text-align: justify;"><br /></div><br /><div class="separator" style="clear: both; font-size: x-large; text-align: center;"><br /></div><br /><br /></span></div><div style="text-align: justify;"><span style="font-size: large;"><br /></span></div>TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.com0tag:blogger.com,1999:blog-2920559226409209345.post-64981412563727486732023-04-08T12:47:00.001+02:002023-04-20T10:48:35.755+02:00<p> <span style="font-size: x-small;">Copyright © Dipl.-Ing. Johannes Hofer 2022<span> </span><span> </span></span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span></p><p> </p><h1><span style="text-align: center;">Ki2Plc</span></h1><h1 style="text-align: center;"></h1><h1><blockquote style="border: none; font-size: medium; font-weight: 400; margin: 0px 0px 0px 40px; padding: 0px;"></blockquote></h1><h2 style="text-align: center;"><span style="font-size: 14pt; text-align: left;">Die Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen</span></h2><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhidCQEkzznzDVx-S19il-G9-Wsjft1twaQUhYXdIlRieH56FIJDFtJ1jk70ul-dU1rLOM_kHWXNqCxyWRCTakjq9sGeLF10UixBCc4cBlwfZ3tYU6M-cF4Y-Usf-aWjJiddu-wOhQfG2xen316pKr9AJJ5v12zJBR5YIiSLDR76wbGMXc0dRxJW09y/s788/08-04-_2023_12-34-53.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="327" data-original-width="788" height="236" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhidCQEkzznzDVx-S19il-G9-Wsjft1twaQUhYXdIlRieH56FIJDFtJ1jk70ul-dU1rLOM_kHWXNqCxyWRCTakjq9sGeLF10UixBCc4cBlwfZ3tYU6M-cF4Y-Usf-aWjJiddu-wOhQfG2xen316pKr9AJJ5v12zJBR5YIiSLDR76wbGMXc0dRxJW09y/w568-h236/08-04-_2023_12-34-53.jpg" width="568" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><p></p><h2><span style="font-size: medium;">Beispiel Bit-Operator im Vergleich Simatic-Pyton</span></h2><h2 style="text-align: justify;"><span style="font-weight: normal;"><span style="font-size: medium;">Bis jetzt zeigt das Ergbenis der Fragen, dass das Interesse an diesem Thema mehr aus dem Bereich der Python-Programmiere kommt. Besser fast nur 😀</span></span></h2><div style="text-align: justify;"><span style="font-weight: normal;"><span style="font-size: medium;"><br /></span></span></div><div style="text-align: justify;"><span style="font-weight: normal;"><span style="font-size: medium;">SPS-Programmierer aus der IEC 61131-3 dagegen, stellen oft die Frage ob Python eine sichere Programmiersprache für eine Anwendung als SPS ist. Ich kann mir dazu keine Meinung bilden, aber wenn RUST als sicher eingestuft wird, dann ist es aus meiner Sicht auch Python. Außerdem macht das keinen Sinn in Python zu arbeiten, wenn man davon nicht überzeugt ist.</span></span></div><div style="text-align: justify;"><span style="font-weight: normal;"><span style="font-size: medium;"><br /></span></span></div><div style="text-align: justify;"><span style="font-weight: normal;"><span style="color: #660000; font-size: medium;">Ich denke eher das Gerät und dessen Betriebssystem auf dem die Software läuft, ist wesentlich an der Sicherheit beteiligt. Zudem soll ja die KiPlc in der Python-Version enthalten sein. Und dass ist in IEC-61131-3 bis jetzt nicht nachvollziehbar.</span></span></div><div><span style="font-weight: normal;"><span style="font-size: medium;"><br /></span></span></div><div><span style="font-weight: normal;"><span style="font-size: medium;">Nun zur Bitte des Bit-Operator-Vergleich. Hier das Beuspiel in FUP:</span></span></div><div><span style="font-weight: normal;"><span style="font-size: medium;"><br /></span></span></div><div><span style="font-weight: normal;"><span style="font-size: medium;"><br /></span></span><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSobELskp47_5Zq_luChUqY2qzoPTNhWIMzc0Annc2ESY23u8FDZj_MV61daQhGiFHBRP-BmVkYHZhLZ6OhX1mHY4B_WV6rM-kr04YOVlhYR3h9v5y3rtWgKoaNE6ekViitzxTB4PAjDNOwzsv4Y0QTUQeOsMSTEUWbrAd0mjP1HvPYeM4mzEvr1qu/s643/05-04-_2023_14-34-23.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="643" data-original-width="643" height="519" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSobELskp47_5Zq_luChUqY2qzoPTNhWIMzc0Annc2ESY23u8FDZj_MV61daQhGiFHBRP-BmVkYHZhLZ6OhX1mHY4B_WV6rM-kr04YOVlhYR3h9v5y3rtWgKoaNE6ekViitzxTB4PAjDNOwzsv4Y0QTUQeOsMSTEUWbrAd0mjP1HvPYeM4mzEvr1qu/w519-h519/05-04-_2023_14-34-23.jpg" width="519" /></a></div></div><div><span style="font-weight: normal;"><span style="font-size: medium;"><br /></span></span></div><div><span style="font-weight: normal;"><span style="font-size: medium;"><br /></span></span></div><div style="text-align: justify;"><span style="font-size: medium;">SPS-Programmierer kommen mit diesem Beispiel gut zurecht. Allerdings ist das hier nach meiner Meinung schon schwierig, da sich hier ein Set- und ein Assignment-Block befindet. Nun wir wollen ja nicht kneifen. Bei den noch folgenden Timer (nächster Blog-Beitrag), sieht das noch viel komplizierter aus. Zumindest auf der Python-Ebene 😌😎</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Als Lösung habe ich folgendes Video ohne Ton vorbereitet (nicht in meinemYouTube-Kanal):</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dxO-jAa67vDG4vgvJlR3TmmOobgDh-Eq-oYbnWirBC0WMi922UJnLe9oQpM4K4SOAlGIvmP1LvRs0qzdBLxXQ' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Im nächsten Blogbeitrag zeige ich den Einsatz der Timer wieder abgeleitet von der Simatic nach Python 🙋<br /></span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div>TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.com0tag:blogger.com,1999:blog-2920559226409209345.post-48907980623534401812023-04-04T19:53:00.006+02:002023-04-20T10:48:56.188+02:00<p> <span style="font-size: x-small;">Copyright © Dipl.-Ing. Johannes Hofer 2022<span> </span><span> </span></span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span></p><p> </p><h1><span style="text-align: center;">Ki2Plc</span></h1><h1 style="text-align: center;"></h1><h1><blockquote style="border: none; font-size: medium; font-weight: 400; margin: 0px 0px 0px 40px; padding: 0px;"></blockquote></h1><h2 style="text-align: center;"><span style="font-size: 14pt; text-align: left;">Die Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen</span></h2><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf2_A6PGuSqOZ4UVH6Zufbkr1ZlNeIyZoezbmpi0c251_IQ8HwHWlDhdJzJrV5byKv-5Q8GbufHqW-BDgExHqg3MxGSODJQ6qNKmTEwOIxhmNlhf2I_Z8p7P39rVSkWyNxOtQ9G1YYpONAY_drMJTIxO_4UNAVudF_VJw0_spu1HJsRF924_V6NOSa/s800/04-04-_2023_19-56-45.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="338" data-original-width="800" height="191" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf2_A6PGuSqOZ4UVH6Zufbkr1ZlNeIyZoezbmpi0c251_IQ8HwHWlDhdJzJrV5byKv-5Q8GbufHqW-BDgExHqg3MxGSODJQ6qNKmTEwOIxhmNlhf2I_Z8p7P39rVSkWyNxOtQ9G1YYpONAY_drMJTIxO_4UNAVudF_VJw0_spu1HJsRF924_V6NOSa/w453-h191/04-04-_2023_19-56-45.jpg" width="453" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><p></p><h2><span style="font-size: medium;">Wie soll der Anwender sein Programm organisieren?</span></h2><div style="text-align: justify;"><span style="font-size: medium;">Ich habe nun den Pfad <i>Project</i> hinzugefügt, welches die Anwendungen beinhalten soll, also das <i>main.py</i> und <i>project.py</i> mit den <i>FCs</i> und <i>FBs ( </i>in<i> PyCharm)</i></span></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span style="font-size: medium;">Die Zykluszeit der <i>PLC</i> wird hier auf <i>5 ms = MIN_CYCLE</i> festgelegt. Diese Zeit darf nicht überschritten werden, sonst findet kein logging und auch keine info statt, falls diese mit <i>True</i> durch die Instanzierung der Klasse <i>plc = c_pyPlc</i> angelegt worden waren.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;"><div style="background-color: #2b2b2b; color: #a9b7c6; font-family: "JetBrains Mono", monospace; font-size: 9,8pt;"><pre>plc = c_pyPlc(<span style="color: #aa4926;">info</span>=<span style="color: #cc7832;">True, </span><span style="color: #aa4926;">logging</span>=<span style="color: #cc7832;">False, </span><span style="color: #aa4926;">optimize</span>=<span style="color: #cc7832;">False, </span><span style="color: #aa4926;">cycle</span>=MIN_CYCLE)</pre></div></span></div><div style="text-align: justify;"><span style="font-size: medium;">Wird der Parameter weggelassen, dann beträgt diese Zeit den <i>default</i> von <i>MIN_CYCLE == 5ms</i> und dass ist schon recht knapp bemessen. So könnte man diesen Parameter auch mit weniger oder mehr Zeit versehen. </span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="color: #660000; font-size: medium;">Der grundsätzliche Aufbau zur Bibliothek ist in <i>main.py</i> zu sehen und das SPS-Programm in <i>project.py</i>. Beide befinden sich im Pfad <i>Project.</i></span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Somit haben wir schon einmal eine sauber Trennung der Bibliothek und der Anwendung gefunden 👍.</span></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><i><span style="font-size: medium;">Project/main.py</span></i></div><div style="text-align: justify;"><div style="background-color: #2b2b2b; color: #a9b7c6; font-family: "JetBrains Mono", monospace; font-size: 9,8pt;"><pre><span style="color: #cc7832;">from </span>pyPlc <span style="color: #cc7832;">import </span>*<br /><span style="color: #cc7832;">from </span>project <span style="color: #cc7832;">import </span>fc_tor_sued<br /><br /><span style="color: #cc7832;">if </span>__name__ == <span style="color: #6a8759;">'__main__'</span>:<br /> plc = c_pyPlc(<span style="color: #aa4926;">info</span>=<span style="color: #cc7832;">True, </span><span style="color: #aa4926;">logging</span>=<span style="color: #cc7832;">False, </span><span style="color: #aa4926;">optimize</span>=<span style="color: #cc7832;">False, </span><span style="color: #aa4926;">cycle</span>=MIN_CYCLE)<br /> plc.create_fc(fc_tor_sued)<br /> plc.run()<br /> <span style="color: grey;">#<br /></span><span style="color: grey;"> </span><span style="color: #cc7832;">while </span>plc.is_running():<br /> time.sleep(<span style="color: #6897bb;">0.1</span>)<br /> <span style="color: #cc7832;">pass<br /></span><span style="color: #cc7832;"><br /></span><span style="color: #cc7832;"> </span><span style="color: #8888c6;">print</span>(<span style="color: #6a8759;">"plc exit"</span>)<br /></pre></div></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Project/project.py</span></div><div style="text-align: justify;"><div style="background-color: #2b2b2b; color: #a9b7c6; font-family: "JetBrains Mono", monospace; font-size: 9,8pt;"><pre><span style="color: #cc7832;">from </span>info <span style="color: #cc7832;">import </span>*<br /><span style="color: #cc7832;">import </span>time<br /><br /><br /><span style="color: #cc7832;">def </span><span style="color: #ffc66d;">fc_tor_sued</span>(self):<br /> res = self.fct.UND(<span style="color: #6a8759;">'M0.0'</span><span style="color: #cc7832;">, </span>self.neg_bit(<span style="color: #6a8759;">'M0.1'</span>)<span style="color: #cc7832;">, </span><span style="color: #6a8759;">'M0.2'</span>)<br /> c_info.print_info(self<span style="color: #cc7832;">, </span><span style="color: #6a8759;">"result in fc_tor_sued: " </span>+ <span style="color: #8888c6;">str</span>(res))<br /> time.sleep(<span style="color: #6897bb;">0.001</span>)<br /></pre></div></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Der <i>time.sleep(0.001) == 1ms</i> hat hier nichts zu suchen, soll aber vorerst zur Erklärung angewendet werden. Der c<i>_info.print_info(...)</i> ist nur für Testzwecke gedacht und soll den SPS-Entwickler unterstützen. Mit der Instanzbildung kann der dann abgeschaltet werden oder wird automatisch verdrängt, wenn die vereinbarte Zykluszeit (hier 5ms) überschritten werden. Ist das mal der Fall, dann wird dieser <i>print</i> gespeichert und später, falls es die Zykluszeit erlaubt, ausgegeben.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span>Was sich da noch an Reserven (auf meinem PC) </span>bilden könnten und wie sich der <i>print</i> in unserem kleinen Beispiel <i>fc_tor_sued</i> verhält, schauen wir uns im Video an:</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='329' height='273' src='https://www.blogger.com/video.g?token=AD6v5dzcclJoSSLur92H7Un6jQmiXQDaiXi2ExUW-maSJkGQ_MnMbBH7oQCDhrQsQ9cgNmVtO7cAE6NPWU6-w5xcJg' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div></div><div style="text-align: justify;"><span style="font-size: large;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Wir erkennen, dass die Zykluszeit im Projekt eine wichtige Rolle spielt. Deswegen hat in der SPS ein time.sleep(...) nichts zu suchen. Der SPS-Programmierer kennt das auch nicht, es sei denn, es handelt sich um einen Timer der SPS (später mehr)</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">In der Hauptanwendung dagegen, kann ein time.sleep(..) angewendet werden. Der wirkt sich auf unseren <i>Thread</i> nicht sooo wesendlich aus. Hier können wir in Ruhe noch weitere Dinge tun, also z. B. den Server, Visualisierung oder anderes. </span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Wer mit VS-Code arbeitet, bringt das main.py im Hauptprojekt unter, falls das so nicht geht.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Vorerst mal abwarten, welche Fragen noch kommen. Ich melde mich dann wieder mit einem neuen Blog-Beitrag 🙋</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div>TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.com0tag:blogger.com,1999:blog-2920559226409209345.post-65828917871023887542023-04-03T21:07:00.007+02:002023-04-20T10:49:20.212+02:00<p> <span style="font-size: x-small;">Copyright © Dipl.-Ing. Johannes Hofer 2022<span> </span><span> </span></span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span></p><p> </p><h1><span style="text-align: center;">Ki2Plc</span></h1><h1 style="text-align: center;"></h1><h1><blockquote style="border: none; font-size: medium; font-weight: 400; margin: 0px 0px 0px 40px; padding: 0px;"></blockquote></h1><h2 style="text-align: center;"><span style="font-size: 14pt; text-align: left;">Die Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen</span></h2><p> </p><p></p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/ugDT7JyxVII" width="320" youtube-src-id="ugDT7JyxVII"></iframe></div><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><p></p><h2><span style="font-size: medium;">Vorab einige Antworten zu den Fragen</span></h2><div style="text-align: justify;"><span style="font-size: medium;">Im oben gezeigten Video wird der grundsätzliche Ablauf für Start, Stop und Programm-Ende gezeigt. Zusätzlich die Anwendung über einen FC und FB. Damit wir ordentliche Strukturen erhalten, sollten FCs und FBs als Programmbausteine in einer Anwendung verwendet werden. </span></div><div><br /></div><div style="text-align: justify;"><span style="font-size: medium;">Natürlich reicht es auch aus, einfach drauf los zu legen. Dann allerdings wirde es mühsehlig, denn Funktionen sind teilweise "private" bzw. "protected" und das bedeutet, dass die so ohne weiteres nicht angewendet werden können, da der Python-Übersetzter das nicht akzeptiert und meldet, dass er das eine oder andere nicht kennt. Zudem muss die bestehende Struktur angepasst werden, falls man das nicht möchte und bedeutet auch eine Menge Arbeit, welche sich nicht lohnt. </span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="color: #660000; font-size: medium;">Zudem werden FCs und FBs überwacht und kontrolliert im PLC-Thread angewendet. Das gibt Sicherheit und bei einer Plc (SPS) und sollte das auch so sein 😁</span></div><div><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Sollte in der eigenen Anwendung eine Exception entstehen, dann kann diese unter Umständen nicht bemerkt werden und die PLC läuft weiter ohne in die Anwendung zurück zu kommen. Das heisst:</span></div><div><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Der Anwender sollte in jedem Falle seine eigene Exception abfangen, wenn er selbst erstellten Code anwendet.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;">Hier ein Beispiel </span><span style="font-size: medium;"><span>(nicht in You-Tube)</span><span>:</span></span></div><div style="background-color: #2b2b2b; color: #a9b7c6; font-family: "JetBrains Mono", monospace; font-size: 9,8pt;"><pre><span style="color: #cc7832;">from </span>pyPlc <span style="color: #cc7832;">import </span>*<br /><br />plc = c_pyPlc(<span style="color: #aa4926;">info</span>=<span style="color: #cc7832;">True, </span><span style="color: #aa4926;">logging</span>=<span style="color: #cc7832;">False, </span><span style="color: #aa4926;">optimize</span>=<span style="color: #cc7832;">False</span>)<br /><br /><br /><span style="color: #cc7832;">def </span><span style="color: #ffc66d;">fc_tor_sued</span>():<br /> res = plc.fct.UND(<span style="color: #6a8759;">'M0.0'</span><span style="color: #cc7832;">, </span>plc.neg_bit(<span style="color: #6a8759;">'M0.1'</span>)<span style="color: #cc7832;">, </span><span style="color: #6a8759;">'M0.2'</span>)<br /> <span style="color: #8888c6;">print</span>(<span style="color: #6a8759;">"res in fc_tor_sued: "</span><span style="color: #cc7832;">, </span>res)<br /><br /><br />plc.create_fc(fc_tor_sued)<br />plc.run()<br />time.sleep(<span style="color: #6897bb;">0.1</span>)<br />erg = plc.fct.UND(<span style="color: #6a8759;">'M0.0'</span><span style="color: #cc7832;">, </span>plc.neg_bit(<span style="color: #6a8759;">'M0.1'</span>)<span style="color: #cc7832;">, </span><span style="color: #6a8759;">'M0.2'</span>)<br /><span style="color: #8888c6;">print</span>(<span style="color: #6a8759;">"</span><span style="color: #cc7832;">\n</span><span style="color: #6a8759;">geht auch: "</span><span style="color: #cc7832;">, </span>erg)<br /></pre></div><div><span style="background-color: #2b2b2b; color: #a9b7c6; font-family: "JetBrains Mono", monospace;">plc.prog_exit()</span><span style="font-size: medium;">!</span></div><div><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Die Funktion <i>fc_tor_sued</i> wird als FC mit <i>plc.create_fc(fc_tor_sued)</i> integriert und somit kontrolliert angewendet. Dann wird später das <i>UND</i> noch einmal, ohne in den FC einzubinden, angewendet. Macht in diesem Fall nichts, da kein Laufzeitfehler entsteht. Ist natürlich nicht logisch aber was soll's.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Hinweis: Das UND wird es in Zukunft nicht mehr geben. Alle Tokens in Englisch, also AND 😏</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Hat allerdings die Zeile <i>print("\n.. </i>einen Fehler, wie z. B. wird nicht <i>erg</i> verwendet, sondern versehentlich <i>res</i>, was hier in der Zeile nicht bekannt ist, dann wird der error von der PLC ausgeschlossen und das Programm, also die PLC läuft ewig weiter und kommt nicht zum Ende. Hier im folgenden Film <span style="color: #660000;">ohne Ton</span> gezeigt und wie man das verhindert, indem man seine eigenen Zeilen (Anwenderprogramm) mit einem eigenen try-Blog versieht.:</span></div><div><div class="separator" style="clear: both; text-align: center;"><br /></div><span style="font-size: medium;"><br /></span></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='339' height='282' src='https://www.blogger.com/video.g?token=AD6v5dyWO_HQkNpPuYnW7BActDGmp8J9b3UiGw__TPJ297p1T6Zma1qjZpStUZvW-q3Wv-6SaTUNvO7rq9vSUOskWQ' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><br /><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;">Besser ist natürlich die Anwendung der Funktionen aus dem Projekt über FCs oder FBs 😏 </span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;">Fortsetzung folgt im nächsten Blog 🙋</span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div>TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.com0tag:blogger.com,1999:blog-2920559226409209345.post-20066118601654680202023-03-27T18:48:00.009+02:002023-04-20T10:49:38.956+02:00<p> <span style="font-size: x-small;">Copyright © Dipl.-Ing. Johannes Hofer 2022<span> </span><span> </span></span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span></p><p> </p><h1><span style="text-align: center;">Ki2Plc</span></h1><h1 style="text-align: center;"></h1><h1><blockquote style="border: none; font-size: medium; font-weight: 400; margin: 0px 0px 0px 40px; padding: 0px;"></blockquote></h1><h2 style="text-align: center;"><span style="font-size: 14pt; text-align: left;">Die Möglichkeiten einer SPS-Programmierung, um diese am Geschehen der künstlichen Intelligenz zu beteiligen</span></h2><p></p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/DpmVKVuLpEQ" width="320" youtube-src-id="DpmVKVuLpEQ"></iframe></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><p></p><h2 style="text-align: left;"><span style="font-size: medium;">Die pyPlc</span></h2><div style="text-align: justify;"><span style="font-size: medium;">Nachdem nun doch einige nachgefragt haben, wie es nun mit der KI2Plc weitergeht, habe ich mich entschlossen zunächst eine pyPlc in Python zu programmieren. Damit wird die Grundlage gebildet, mit einer SPS nach Industriestandard vorerst seine eigenen Projekte unter Windows und Python zu testen, um diese danach in ein Gerät zu laden. Hier wird in der ersten Phase folgendes Ziel zur Umsetzung geplant:</span></div><div><br /></div><div style="text-align: left;"><ul style="text-align: left;"><li><span style="color: #990000; font-size: medium;">pyPlc komplett in Python-Code auf PyCarm</span></li><li><span style="color: #990000; font-size: medium;">Funktionen entsprechend nach IEC 61131-3 - allerdings in Python </span></li><li><span style="color: #990000; font-size: medium;">Operanden nach internationaler Darstellung (englisch)</span></li><li><span style="color: #990000; font-size: medium;">Merker (M, MW, MDW)</span></li><li><span style="color: #990000; font-size: medium;">Input (I, IW)</span></li><li><span style="color: #990000; font-size: medium;">Output (Q, QW)</span></li><li><span style="color: #990000; font-size: medium;">Datenbaustein (DB)</span></li><li><span style="color: #990000; font-size: medium;">Timer (TON, TONR, TOF, TP)</span></li><li><span style="color: #990000; font-size: medium;"><span>Zähler(CTU, </span><span>CTD, CTUD)</span></span></li><li><span style="color: #990000; font-size: medium;"><span>Scale</span></span></li><li><span style="color: #990000; font-size: medium;"><span>Unscale</span></span></li><li><span style="color: #990000; font-size: medium;">Funktionsbausteine (FB)</span></li><li><span style="color: #990000; font-size: medium;">Functionen (FC)</span></li><li><span style="color: #990000; font-size: medium;">plc_Server</span></li><li><span style="color: #990000; font-size: medium;">und vieles mehr, wie z.B.: Taktkette, py2SCL, Zweipunkt-Regler, PID ...</span></li></ul></div><div><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Das ganze basiert auf Basis mit meinem YouTube-Kanal, allerdings nur in Kurzform als jeweilige Einleitung zum Thema. Die Videos fürs Mitmachen allerdings auf meinem Blog oder einer neuen Webseite (mal sehen). Da kann dann jeder beliebig oft die Videos studieren ohne mit einer scheiss Werbung belästigt zu werden.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><h4 style="text-align: justify;"><span style="font-size: medium;">pyPlc lernt Machine-Learning 😂</span></h4><div style="text-align: justify;"><span style="font-size: medium;">In Python kann die Idee KI2Plc sehr gut angewendet werden. Dieser Prozess kann ebenfalls in einem Gerät, wie z. B. die Simatic in SCL übersetzt zur Anwendung kommen. Der Übersetzer Python2SCL ist bereits in Arbeit. </span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="color: #990000; font-size: medium;">Das bedeutet, dass in der Plc ein Lernprozess stattfindet, der beständig ist und nie endet.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Die Umsetzung ist relativ einfach, wenn man von dem Wissen der KI ableitet. Zur Bewertung bzw. Klassifizierung werden die Daten in der PLC innerhalb des Programmes erzeugt und kommen so zur Auswertung. Das sind in erster Linie :</span></div><div><ul style="text-align: left;"><li><span style="color: #990000; font-size: medium;">Prozesszeit</span></li><li><span style="color: #990000; font-size: medium;">Gewichtung der Prozesse</span></li></ul></div><div style="text-align: justify;"><span style="font-size: medium;">Diese bestimmen dann den weiteren Ablauf und erklärt auch, dass die Prozesse in FCs und FBs aufgeteilt sein sollten. Es gibt in der pyPlc also keine eigenständigen Funktionen (def), zumindest wird das nicht empfohlen. Dazu dienen die Methoden.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="color: #990000; font-size: medium;">Natürlich kann jeder PLC-Programmierer in Python machen was er will, bedeutet aber, dass sein Algorithnus in diesem Fall nicht bewertet werden kann und somit auch nicht sooo lernfähig ist.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><h2 style="text-align: justify;"><span style="font-size: medium;">Die gelante Software-Struktur</span></h2><div style="text-align: justify;"><span style="font-size: medium;">Wir überlassen nichts dem Zufall und planen unser Vorhaben wie bereits der jetzige Stand zeigen kann:</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmkoarIjFd3hmaX7uFiwCG-c0fcsKOPZraW3MoryThHGJn2AVCxzrvyFyGMbfFF7LVjP0Di4bVD0Lep5WnOxYKGBWeqruYa0IrfREcLwOoKWQgEj3cPAnXagz3EthdO7ndBHTT6bCnvO6XUhG06KWyAeF5xkH3XycZHueBX7T-fScTFmgcDd0adaCb/s806/29-03-_2023_12-26-47.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="798" data-original-width="806" height="550" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmkoarIjFd3hmaX7uFiwCG-c0fcsKOPZraW3MoryThHGJn2AVCxzrvyFyGMbfFF7LVjP0Di4bVD0Lep5WnOxYKGBWeqruYa0IrfREcLwOoKWQgEj3cPAnXagz3EthdO7ndBHTT6bCnvO6XUhG06KWyAeF5xkH3XycZHueBX7T-fScTFmgcDd0adaCb/w555-h550/29-03-_2023_12-26-47.jpg" width="555" /></a></div></div><div style="text-align: justify;"><span style="font-size: medium;">Die Klasse <i>c_pyPlc</i> ist unsere Ausgangsklasse, welche von der Klasse <i>c_plc_init</i> abgeleitet wird. Diese wiederum ist von <i>c_plc_helper</i> abgeleitet und letztendliche diese von <i>c_info</i>. Damit können wir die Methoden aus allen Ableitungen in der Klasse <i>c_pyPlc</i> nutzen (nicht die private). Zudem hat die Klasse <i>c_pyPlc</i> zusätzlich die Komposition mit der Klasse <i>c_plc_fct</i>, welche eine Vielzahl der SPS-Funktionen anbietet.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Und damit es nicht langweilig wird, besitzt die Klasse <i>c_plc_init</i> noch die Klassen <i>socket</i> und <i>c_plc_database</i>, denn schliesslich brauchen wir Merker, Fbs, Fcs, Eingänge, Ausgänge und noch vieles mehr.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;"> </span></div><div style="text-align: justify;"><span style="font-size: medium;">..... Fortsetzung folgt im nächsten Blog-Beitrag 🙋</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Zum Thema auf meinem Blog:</span></div><div style="text-align: justify;"><span style="font-size: medium;">Natürlich wie immer hier kostenfrei und mit entsprechender Interesse zu diesem Thema, kann ich das umgsetzen. Also meldet euch! </span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div><div><span><div style="font-size: medium; text-align: justify;">Mein KI-Berater:</div><div style="font-size: medium; text-align: justify;"><a href="https://kran-automation.marcel-rosiak.de/">https://kran-automation.marcel-rosiak.de/</a></div><div style="font-size: medium; text-align: justify;"><br /></div><div style="font-size: medium; text-align: justify;"><span face="Roboto, Noto, sans-serif" style="background-color: white; color: #0d0d0d; font-size: 15px; text-align: start; white-space: pre-wrap;">Von mir verwendete Tools u. a.:</span><span face="Roboto, Noto, sans-serif" style="background-color: white; color: #0d0d0d; font-size: 15px; text-align: start; white-space: pre-wrap;">
</span><span face="Roboto, Noto, sans-serif" style="background-color: white; color: #0d0d0d; font-size: 15px; text-align: start; white-space: pre-wrap;"><a href="https://thonny.org/">https://thonny.org/</a></span><span face="Roboto, Noto, sans-serif" style="background-color: white; color: #0d0d0d; font-size: 15px; text-align: start; white-space: pre-wrap;">
</span><span face="Roboto, Noto, sans-serif" style="background-color: white; color: #0d0d0d; font-size: 15px; text-align: start; white-space: pre-wrap;"><a href="https://www.jetbrains.com/de-de/pycharm/">https://www.jetbrains.com/de-de/pycharm/</a></span></div><div style="font-size: medium; text-align: justify;"><a href="https://support.industry.siemens.com/cs/start?lc=de-WW">https://support.industry.siemens.com/cs/start?lc=de-WW</a></div><div style="text-align: justify;"><a href="https://pypi.org/project/python-snap7/">https://pypi.org/project/python-snap7/</a></div></span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div>TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.com0tag:blogger.com,1999:blog-2920559226409209345.post-3057887121878713422023-03-22T18:47:00.006+01:002023-03-22T20:35:25.941+01:00<p> <span style="font-size: x-small;">Copyright © Dipl.-Ing. Johannes Hofer 2022<span> </span><span> </span></span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span></p><p> </p><h1><span style="text-align: center;">Ki2Plc</span></h1><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><h1 style="text-align: center;"></h1><h2 style="text-align: center;"><span style="font-size: 14pt; text-align: left;">Die Möglichkeiten einer Programmierung im TIA-Portal, um diese am Geschehen der künstlichen Intelligenz zu beteiligen</span></h2></blockquote><p><br /></p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/SBr__f-V3hE" width="320" youtube-src-id="SBr__f-V3hE"></iframe></div><br /><p><b><span style="font-size: medium;">Simatic S7-1200 und Snap7 - Teil 2 (matrix)</span></b></p><div style="text-align: justify;"><b><span style="font-size: medium;"><br /></span></b></div><div style="text-align: justify;"><span style="font-size: medium;">Die Grundposition ist der Ausgangspunkt aller Dinge. Wie auch in Python wird hier zuerst die Grundposition überprüft und erst danach ist eine weitere Verarbeitung möglich. Deswegen auch diese etwas verwirrenden Zeilen zum folgenden Bild:</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiATUbqzFnE4oauzNv77JJfmc2LC1jzYqss91Q-AFhCg8x_udifWJ2qzc9D9RxnLsQ5pDsPFvUNg2IKJ8zCHDnQhXAHqwzGs4wDF-j79xGGFPM-VnDqr83nnK_bALdwehQHJkbW4L02gc6uT50bJEZhkHFLv8ufjfC5BqVOIt56xmGrAEehaVaafGza/s1100/22-03-_2023_18-06-10.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="404" data-original-width="1100" height="231" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiATUbqzFnE4oauzNv77JJfmc2LC1jzYqss91Q-AFhCg8x_udifWJ2qzc9D9RxnLsQ5pDsPFvUNg2IKJ8zCHDnQhXAHqwzGs4wDF-j79xGGFPM-VnDqr83nnK_bALdwehQHJkbW4L02gc6uT50bJEZhkHFLv8ufjfC5BqVOIt56xmGrAEehaVaafGza/w626-h231/22-03-_2023_18-06-10.jpg" width="626" /></a></div><br /><span style="font-size: medium;">Zunächst wird in Zeile 41 der IPL in ein <i>char</i> gewandelt um danach weiterhin verwendet zu werden. In unserem DB sind die Zustände als <i>char</i> gespeichert, deswegen die Anweisung von <i>INT_TO_CHAR</i>.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Solange also die Grundposition (gp) nicht erreicht wurde, wird der Baustein mit Zeile 46 verlassen. Ist die Grundposition erreicht, wird in Zeile 49 der Merker gesetzt und ein eventuell aufgetretener Fehler in Zeile 50 gelöscht. Nun wird solange das RETURN ausgeführt (Zeile 51), bis die Grundposition verlassen wird. In unserem Fall durch drücken des Eingangs V1 für den Zyl. auszufahren. So schlägt keine IF-Anweisung mehr (Zeilen 42 und 48) zu und das Programm kann ab Zeile 55 beginnen.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><div class="separator" style="clear: both; font-weight: bold; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjudAchTQssedSLSI_ocoRDU8ferJ5fgEUTV1iVlJf1Jqxqz7AE30mvPaqCNsGOpymO_CjN3paPHkWgjn9J-I2LRuWYPsRJnnA16QEOfqnodyastiGAb3eP0_yEMJQMzNXr87E-QxgQ-7-drAVSsr3JfNzeuVrXKARdjmqGZ1j0-PQTwkPMktmQfAh/s1033/22-03-_2023_18-16-28.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="349" data-original-width="1033" height="214" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjudAchTQssedSLSI_ocoRDU8ferJ5fgEUTV1iVlJf1Jqxqz7AE30mvPaqCNsGOpymO_CjN3paPHkWgjn9J-I2LRuWYPsRJnnA16QEOfqnodyastiGAb3eP0_yEMJQMzNXr87E-QxgQ-7-drAVSsr3JfNzeuVrXKARdjmqGZ1j0-PQTwkPMktmQfAh/w637-h214/22-03-_2023_18-16-28.jpg" width="637" /></a></div><span style="font-size: medium;"><br /><span>Nun kommt zuerst die Fehlerauswertung. Sollte der IPL den Zustand des error-Sektor besitzen, hier sind das zwei, dann wird der <i>error_status</i> gesetzt (Zeile 62), die Grundposition gelöscht (Zeile 61) und der Baustein verlassen. Da wir zu Beginn in Zeile 5 den Ausgang immer löschen (#matrix_out := False, in Teil-1 zu sehen) ist dieser automatisch False solange keine Zuweisung auf True erfolgt. Der <i>error_status</i> ist als Ausgang <i>Output</i> in der Bausteinschnittstelle deklariert deklariert (letztes Bild).</span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span><br /></span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOcIniMAEuGSp8_QTapsgtwwZpsoLCM5yDLWIan4DMhEysGVj65ZepT06QluO-gnUe5WUmcpNgJBdmaTTXOcTVJ34Q53r2VidtmRaGKH5Jeb16FPbKVCDAZuehWiJO3AFz63Ed3e4R2K7R0R5l_oZEPl8ZwtWsD-_TqmWcW-Yoh8uQerQsJiN3AEtq/s1068/22-03-_2023_18-25-00.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="347" data-original-width="1068" height="198" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOcIniMAEuGSp8_QTapsgtwwZpsoLCM5yDLWIan4DMhEysGVj65ZepT06QluO-gnUe5WUmcpNgJBdmaTTXOcTVJ34Q53r2VidtmRaGKH5Jeb16FPbKVCDAZuehWiJO3AFz63Ed3e4R2K7R0R5l_oZEPl8ZwtWsD-_TqmWcW-Yoh8uQerQsJiN3AEtq/w610-h198/22-03-_2023_18-25-00.jpg" width="610" /></a></div><br /><span>Der Zustand <i>no action</i> entsteht immer dann, wenn der V1 nicht gesetzt ist. Ist also der IPL mit den zwei Zuständen (Zeilen 68 und 70) erfüllt, wird der Ausgang und die Grundstellung gelöscht. Hier könnte Zeile 74 entfallen 😌 , da das ja beim Eintritt des FBs immer geschieht.</span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span><br /></span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTBFPULGv0k5ixfVa8243AMsC1b0MnEuB8-n5xbrRsF9v5V-UXaEVA6CnMhwXqFus44S70OSDHQUHM4BbwgFmFvs5e5F96v-QMSe5KZFGD03u88oHZSNtYeWmGImrDdAJgIGCgu0dBYXm4kIsV1GYGJB9LR4Kh0GaFdG9kp2cZ7ZilqEshlYyM1l34/s1027/22-03-_2023_18-28-56.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="433" data-original-width="1027" height="257" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTBFPULGv0k5ixfVa8243AMsC1b0MnEuB8-n5xbrRsF9v5V-UXaEVA6CnMhwXqFus44S70OSDHQUHM4BbwgFmFvs5e5F96v-QMSe5KZFGD03u88oHZSNtYeWmGImrDdAJgIGCgu0dBYXm4kIsV1GYGJB9LR4Kh0GaFdG9kp2cZ7ZilqEshlYyM1l34/w609-h257/22-03-_2023_18-28-56.jpg" width="609" /></a></div><br /><span>Der Zustand <i>action</i> entsteht immer wenn der Eingang V1 gesetzt ist. Ist also der IPL mit den Zeilen 80 bis 84 erfüllt, dann wird der Ausgang in Zeile 87 gesetzt. In Zeile 91 wird die Grundstellung gelöscht und entspricht im Python der Exception. Eines der drei Zustände <i>error</i>,<i> no action</i> oder <i>action</i> muss vorhanden sein. Wenn nicht wird diese Zeile 91 erreicht und es muss wieder eine Grundstellung erreicht werden, damit das Spiel von vorne beginnt.</span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span><br /></span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span>Das wäre eine getippte Lösung zur Matrix. Natürlich sollte die Matrix so interpretiert werden, dass jede beliebige Matrix übersetzt werden kann. Dabei ist auch zu überlegen, ob man nicht einen anderen Weg einschlägt, denn diese Matrix wird umfangreich, wenn grössere Projekte anstehen und auch SPS-spezifische Dinge hinzukommen.</span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span><br /></span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span style="color: #38761d;">Das könnten also Analogwerte sein, oder die noch nicht erklärten <i>warnings</i>, welche den Zeitfaktor berücksichtigen oder die in den Videos genannten <b>Synapsen</b>, welche zusätzliche Atrribute erhalten können.</span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span><br /></span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span>Fazit: ? </span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span style="color: #990000;">Man könnte eine Python-Sequenz an die SPS senden (write_DB), welche interpretiert wird. Also sowas wie IEC61131-3_Python? oder plc_python? oder sowas 😁, schließlich gibt es ja auch micropython!</span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span style="color: #990000;"><br /></span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span><br /></span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYnEWNsva453XPY4l11v6moHG4QtL5fd6YLcVuX9LG8RbnDz-L-Gn27fuZzIpy9gKzmpeO92m7zuFftBtAjdy-nVYYAkhljsnXEJXUflwQYBZ-RMkJeYEFOOikjuBGIQx6hdf3zMtQHGfkv2uemyTXVbTHHLl7wzO0BUtWKTUWmdsWFGGAZV-ifP9h/s617/22-03-_2023_18-46-37.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="612" data-original-width="617" height="534" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYnEWNsva453XPY4l11v6moHG4QtL5fd6YLcVuX9LG8RbnDz-L-Gn27fuZzIpy9gKzmpeO92m7zuFftBtAjdy-nVYYAkhljsnXEJXUflwQYBZ-RMkJeYEFOOikjuBGIQx6hdf3zMtQHGfkv2uemyTXVbTHHLl7wzO0BUtWKTUWmdsWFGGAZV-ifP9h/w539-h534/22-03-_2023_18-46-37.jpg" width="539" /></a></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div>🙋<br /><span><br /></span></span></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span style="font-size: medium;"><span><br /></span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div><div><b><span style="font-size: medium;"><br /></span></b></div><div><b><span style="font-size: medium;"><br /></span></b></div><div><b><span style="font-size: medium;"><br /></span></b></div><div><b><span style="font-size: medium;"><br /></span></b></div><div><b><span style="font-size: medium;"><br /></span></b></div><div><b><span style="font-size: medium;"><br /></span></b></div><div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div><div><div style="text-align: justify;">Mein KI-Berater:</div><div style="text-align: justify;"><a href="https://kran-automation.marcel-rosiak.de/">https://kran-automation.marcel-rosiak.de/</a></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span face="Roboto, Noto, sans-serif" style="background-color: white; color: #0d0d0d; font-size: 15px; text-align: start; white-space: pre-wrap;">Von mir verwendete Tools u. a.:</span><span face="Roboto, Noto, sans-serif" style="background-color: white; color: #0d0d0d; font-size: 15px; text-align: start; white-space: pre-wrap;">
</span><span face="Roboto, Noto, sans-serif" style="background-color: white; color: #0d0d0d; font-size: 15px; text-align: start; white-space: pre-wrap;"><a href="https://thonny.org/">https://thonny.org/</a></span><span face="Roboto, Noto, sans-serif" style="background-color: white; color: #0d0d0d; font-size: 15px; text-align: start; white-space: pre-wrap;">
</span><span face="Roboto, Noto, sans-serif" style="background-color: white; color: #0d0d0d; font-size: 15px; text-align: start; white-space: pre-wrap;"><a href="https://www.jetbrains.com/de-de/pycharm/">https://www.jetbrains.com/de-de/pycharm/</a></span></div><div style="text-align: justify;"><a href="https://support.industry.siemens.com/cs/start?lc=de-WW">https://support.industry.siemens.com/cs/start?lc=de-WW</a></div><div style="text-align: justify;"><a href="https://pypi.org/project/python-snap7/" style="font-size: large;">https://pypi.org/project/python-snap7/</a></div></div></div>TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.com0tag:blogger.com,1999:blog-2920559226409209345.post-27541381841309420792023-03-21T11:17:00.002+01:002023-03-22T17:59:40.325+01:00<p> <span style="font-size: x-small;">Copyright © Dipl.-Ing. Johannes Hofer 2022<span> </span><span> </span></span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span></p><p> </p><h1><span style="text-align: center;">Ki2Plc</span></h1><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><h1 style="text-align: center;"></h1><h2 style="text-align: center;"><span style="font-size: 14pt; text-align: left;">Die Möglichkeiten einer Programmierung im TIA-Portal, um diese am Geschehen der künstlichen Intelligenz zu beteiligen</span></h2></blockquote><p><br /></p><p><br /></p><h2 style="text-align: left;"><b><span style="font-size: medium;">Simatic S7-1200 und Snap7 - Teil 1</span></b></h2><div style="text-align: justify;"><span style="font-size: medium;">Die uns bereits bekannte Kommunikation mit den Bausteinen TRCV_C und TSENDE_C aus dem TIA-Portal (Open user communication) habe ich zur allgemeinen Information im Projekt belassen, <b>nutze diese hier aber nicht mehr</b>. </span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Wir verwenden jetzt <b>python-snap7</b> um die Kommunikation nun unabhängig der angebotenen Bausteine aus der Open user communication umzusetzen und schaffen so eine kleine Grundlage für ein mögliches Ziel 😁</span></div><div style="text-align: left;"><span style="font-size: medium;"><br /></span></div><div style="text-align: left;"><span style="color: #990000; font-size: medium;">IEC-61131-3-Python oder Plc-Python zu schaffen</span></div><div style="text-align: left;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Bevor wir uns damit in der Zukunft beschäftigen können, müssen wir die Grundlage erarbeiten, diese Aufgabe richtig zu verstehen. Erst dann ist eine Lösung bzw. mehrere Teil-Lösungen machbar.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;"><a href="https://pypi.org/project/python-snap7/">https://pypi.org/project/python-snap7/</a></span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLYZfSFqa3oU-zTqZ8Ob9dY6DJZPRG7yl1ui5-Q5cUTMjeXRb-5izsR_BXG3NeEubN2vFIO-YIhClqYbER5LSEKVZWXhbPAlWRwylAaTGCCYHJKoOD8hQoGR5H7448jtWll0D2z2XsX6Ma1CTi6rSupa3sb6Qy8Zt8ZWCD9TMBV8LS0-DXtDEkS-OY/s1818/20-03-_2023_09-42-15.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="982" data-original-width="1818" height="314" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLYZfSFqa3oU-zTqZ8Ob9dY6DJZPRG7yl1ui5-Q5cUTMjeXRb-5izsR_BXG3NeEubN2vFIO-YIhClqYbER5LSEKVZWXhbPAlWRwylAaTGCCYHJKoOD8hQoGR5H7448jtWll0D2z2XsX6Ma1CTi6rSupa3sb6Qy8Zt8ZWCD9TMBV8LS0-DXtDEkS-OY/w581-h314/20-03-_2023_09-42-15.jpg" width="581" /></a></div><br /><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Wir benötigen python-snap7, wie im Link gezeigt und können nun gezielt in einem DB Informationen ablegen, welche in SCL direkt übersetzt werden und eine quasi hardcodierte Lösung anbietet.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="color: #990000; font-size: medium;">Darüber muss man unbedingt nachdenken, denn jetzt kann eine quasi Hardcodierung aufgrund der Daten aus KI2Plc erfolgen, welche bei jedem Training eine neue Datei und somit einen neuen Ablauf ermöglicht.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Ich kannte snap7 noch aus meiner C/C++-Tätigkeit und freue mich sehr über diese neue integrierte Lösung in <b>python-snap7</b>, welche ausserordentlich gut funktioniert, wenn man diese richtig anwendet und dazu die Dinge in der SPS folgerichtig versteht 😎.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5bwXnGfYBnZT_X_5YQ9El--cMZXspndrnOUf6ZMoXt49wt_Z0rguGG8MfqznvBnaIgLnF7MgaT8uIKOjCPuZCIUSNYTh4o-hmXzjAJ5yeGNyJTSQoF0MdhpQVjCFhZkoaKyjzaBY75I3YA0bU47iBSATCU4552GRXvZapN1XS7xqXDQaWxcQYbLHv/s626/21-03-_2023_09-59-57.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="626" data-original-width="590" height="613" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5bwXnGfYBnZT_X_5YQ9El--cMZXspndrnOUf6ZMoXt49wt_Z0rguGG8MfqznvBnaIgLnF7MgaT8uIKOjCPuZCIUSNYTh4o-hmXzjAJ5yeGNyJTSQoF0MdhpQVjCFhZkoaKyjzaBY75I3YA0bU47iBSATCU4552GRXvZapN1XS7xqXDQaWxcQYbLHv/w578-h613/21-03-_2023_09-59-57.jpg" width="578" /></a></div><br /><div style="text-align: justify;"><span style="font-size: medium;">Der neue Baustein Cylinder_FB (Main[OB1]) beinhaltet nun alle Dinge welche notwendig sind unsere Matrix aus KI2Plc umzusetzen. Also IPL lesen, Matrix interpretieren und OPL setzen. Sozusagen wie ein Rezept in einem Kochbuch - all in one 😀</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Diese Lösung funktioniert, wie im noch ausstehendem Video zu sehen und soll keine komplette Lösung darstellen, sondern den neuen Weg erklären. Schritt für Schritt kommen wir so dem grossen Ziel näher.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOkvhvL0kipIL4nwqJ4yDw7Z8QGraPB251s7BQk0Ek5w8jq-ySsaE9hk9jvmCgpIZpeKUTPQJe7vqep1wWK3bwtROepSHcbhcyq1PluY5oLsqk7ISmpFf6XKh8mYm1nVCROqg9VSshZgBdnmKR65te4acdusFn969Na032LqcXJFwHc64yjuLG2g1x/s718/21-03-_2023_10-14-43.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="322" data-original-width="718" height="278" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOkvhvL0kipIL4nwqJ4yDw7Z8QGraPB251s7BQk0Ek5w8jq-ySsaE9hk9jvmCgpIZpeKUTPQJe7vqep1wWK3bwtROepSHcbhcyq1PluY5oLsqk7ISmpFf6XKh8mYm1nVCROqg9VSshZgBdnmKR65te4acdusFn969Na032LqcXJFwHc64yjuLG2g1x/w619-h278/21-03-_2023_10-14-43.jpg" width="619" /></a></div><br /></div><div style="text-align: justify;"><span style="font-size: medium;">Zunächst werden wir einen <b>kleinen</b> Check vornehmen und die gelieferten Daten überprüfen und dann den Input-Layer (IPL) lesen. Danach überprüfen wir die Grundposition und schliesslich den Rest aus der Matrix mit <i>error</i>, <i>no action</i> und <i>action</i>. So entsteht der Ausgangs-Layer (OPL).</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">Wir verwenden dazu den uns bereits bekannten DB <i>SendReceiveData</i> und davon den Receive-Abschnitt. Dort schreibt unser python-snap7 die Daten der Matrix hin.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnwm0kmpPrPXi9oJPtRuLboYbLl7hOTnf4wNtvqTC9wk0amhRHtkK7s_6JZYYj0UZcpxHMWFQ-8AE0Yfm3srtaP2WBdnPTXZ2s9YxND_93XHuaSaMaBwmsx_XXPYi_DYbtCV-TmROdvTCZjSAQrHiCbJazxvFVWd6N8lTjECE69w7X3V7ewp5ldLuR/s805/21-03-_2023_10-18-29.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="805" data-original-width="687" height="705" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnwm0kmpPrPXi9oJPtRuLboYbLl7hOTnf4wNtvqTC9wk0amhRHtkK7s_6JZYYj0UZcpxHMWFQ-8AE0Yfm3srtaP2WBdnPTXZ2s9YxND_93XHuaSaMaBwmsx_XXPYi_DYbtCV-TmROdvTCZjSAQrHiCbJazxvFVWd6N8lTjECE69w7X3V7ewp5ldLuR/w601-h705/21-03-_2023_10-18-29.jpg" width="601" /></a></div><br /><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">In Zeile 3 und 4 sehen wir z. B. die Anzahl der Bytes (84) welche die Matrix umfasst. Dann folgen die Matrix-Daten, welche nun hardcodiert übersetzt werden können. </span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="color: #990000; font-size: medium;">Das heisst: Die Indizes, wie beim Check zu sehen (Bild unten), werden jeweils speziell in einem DB abgelegt. Hier nicht, hier habe ich diese zur Vereinfachung der Erklärung in den DB unter Constant abgetippt - damit keine Mißverständnissse entstehen -. </span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;">So lässt sich das am einfachsten erklären.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg13Vj_rbqMduFQEICKn7bhlitZZ9PHlwtP3rg0RJux8InfspYeKYH78s_lE7InuusqdHbc2KHlQfTb7jirAd16uEUyjvaD9y8OtVHFsXJoUhLZATEzukqT__YL0KohQN7p7FKXky77nWFvEeWv3yS5A5ppvcNrYwoRASPb-LF9EB1vHfOONhl8hhlF/s942/21-03-_2023_10-24-11.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="597" data-original-width="942" height="395" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg13Vj_rbqMduFQEICKn7bhlitZZ9PHlwtP3rg0RJux8InfspYeKYH78s_lE7InuusqdHbc2KHlQfTb7jirAd16uEUyjvaD9y8OtVHFsXJoUhLZATEzukqT__YL0KohQN7p7FKXky77nWFvEeWv3yS5A5ppvcNrYwoRASPb-LF9EB1vHfOONhl8hhlF/w622-h395/21-03-_2023_10-24-11.jpg" width="622" /></a></div><br /><span style="font-size: medium;">Eine Datenprüfung im Sinne einer Checksum ist das nicht und soll es auch nicht sein. Wir sind damit zufrieden und gehen davon aus, wenn Zeile 15 erreicht wird, dass wir im Baustein weiter verfahren können um den IPL einzulesen.</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqfkOg9LSgVl4jfr2M4Vw5OhDV3JPOnroUnuH0T7e2Pq4viZzlJWO25twwilsbkDCDRzjLgM--DEtbL6O8HDpQLP2GVXw7Nkn4NuA7-L3TgbWAIDimQgoJolKkUicHuCP7tVdM7Qgq6l0trqjpnx9cIZQ_-VmNfB_-ixWiPez46L3_iI4kc-BuhGUv/s557/21-03-_2023_10-27-10.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="279" data-original-width="557" height="252" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqfkOg9LSgVl4jfr2M4Vw5OhDV3JPOnroUnuH0T7e2Pq4viZzlJWO25twwilsbkDCDRzjLgM--DEtbL6O8HDpQLP2GVXw7Nkn4NuA7-L3TgbWAIDimQgoJolKkUicHuCP7tVdM7Qgq6l0trqjpnx9cIZQ_-VmNfB_-ixWiPez46L3_iI4kc-BuhGUv/w503-h252/21-03-_2023_10-27-10.jpg" width="503" /></a></div><br /><span style="font-size: medium;">Auch hier kommen wir mit einer einfachen Auswertung zurecht und haben nun einen Wert in <i>#ipl</i>, welcher uns zum Vergleich in der Matrix dient. Wichtig ist, dass die Reihenfolge der Daten der Reihenfolge in KI2Plc entspricht. Also wie hier ist der erste Eingang der V1 für Zyl.-Vor-Zur.</span></div><div style="text-align: justify;"><span style="font-size: medium;">Beginnen wir im nächsten Teil mit der Grundposition 🙋</span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><span style="font-size: medium;"><br /></span></div><div style="text-align: justify;"><br /></div><div style="text-align: left;"><span style="font-size: medium;"><br /></span></div><div style="text-align: left;"><span style="font-size: medium;"><br /></span></div><div style="text-align: left;"><span style="font-size: medium;"><br /></span></div><div style="text-align: left;"><span style="font-size: medium;"><br /></span></div><div style="text-align: left;"><span style="font-size: medium;"><br /></span></div><div style="text-align: left;"><span style="font-size: medium;"><br /></span></div><div style="text-align: left;"><span style="font-size: medium;"><br /></span></div><div style="text-align: left;"><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><br /></span></div><div><div style="text-align: justify;">Mein KI-Berater:</div><div style="text-align: justify;"><a href="https://kran-automation.marcel-rosiak.de/">https://kran-automation.marcel-rosiak.de/</a></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span face="Roboto, Noto, sans-serif" style="background-color: white; color: #0d0d0d; font-size: 15px; text-align: start; white-space: pre-wrap;">Von mir verwendete Tools u. a.:</span><span face="Roboto, Noto, sans-serif" style="background-color: white; color: #0d0d0d; font-size: 15px; text-align: start; white-space: pre-wrap;">
</span><span face="Roboto, Noto, sans-serif" style="background-color: white; color: #0d0d0d; font-size: 15px; text-align: start; white-space: pre-wrap;"><a href="https://thonny.org/">https://thonny.org/</a></span><span face="Roboto, Noto, sans-serif" style="background-color: white; color: #0d0d0d; font-size: 15px; text-align: start; white-space: pre-wrap;">
</span><span face="Roboto, Noto, sans-serif" style="background-color: white; color: #0d0d0d; font-size: 15px; text-align: start; white-space: pre-wrap;"><a href="https://www.jetbrains.com/de-de/pycharm/">https://www.jetbrains.com/de-de/pycharm/</a></span></div><div style="text-align: justify;"><a href="https://support.industry.siemens.com/cs/start?lc=de-WW">https://support.industry.siemens.com/cs/start?lc=de-WW</a></div><div style="text-align: justify;"><a href="https://pypi.org/project/python-snap7/" style="font-size: large;">https://pypi.org/project/python-snap7/</a></div><div><br /></div></div><div style="text-align: left;"> </div>TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.com0tag:blogger.com,1999:blog-2920559226409209345.post-40583068889540951572023-03-20T13:25:00.004+01:002023-03-21T09:27:44.835+01:00<p> <span style="font-size: x-small;">Copyright © Dipl.-Ing. Johannes Hofer 2022<span> </span><span> </span></span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span></p><p> </p><h1><span style="text-align: center;">Ki2Plc</span></h1><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><h1 style="text-align: center;"></h1><h2 style="text-align: center;"><span style="font-size: 14pt; text-align: left;">Die Möglichkeiten einer Programmierung im TIA-Portal, um diese am Geschehen der künstlichen Intelligenz zu beteiligen</span></h2></blockquote><p><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/oP5mlz0wWMc" width="320" youtube-src-id="oP5mlz0wWMc"></iframe></div><br /> <p></p><h2 style="text-align: justify;"><b><span style="font-size: medium;">Pico-EVB als mini-plc Teil-3</span></b></h2><div style="text-align: justify;"><span style="font-size: medium;">Nun zur Matrix selbst. Ich denke dass auf einem Pico kein Programm im Sinne einer SPS zur Anwendung kommt. Projekte mit geringem Umfang sind sicherlich interessant und auch umsetzbar. Ich habe hier nun von der Matrix die <i>action</i>, <i>no_action</i> und den <i>error</i> aus der Matrix von KI2Plc verarbeitet. Die Grundposition fehlt hier im Beispielund macht wohl wenig Sinn, da der Zylinder ohnehin nur simuliert wird.</span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSd-lN0pVT5OOLZWjYTxdzjBa_spcKuut4oODgOPsvV1XRyOnZ0bzbqN7W73HkHh7TGRhXukCEAlZvTDWRGJytm-k4X-WDbeI0aE8nmv1KK4KROOzWcqGQs2eG_O75HJoNNiHzF1BdSqgAjRrTSV9sgVYK-xnO19DjXMuh8YpQW5Ztj5Aamwbm5ogc/s616/20-03-_2023_11-06-55.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="462" data-original-width="616" height="451" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSd-lN0pVT5OOLZWjYTxdzjBa_spcKuut4oODgOPsvV1XRyOnZ0bzbqN7W73HkHh7TGRhXukCEAlZvTDWRGJytm-k4X-WDbeI0aE8nmv1KK4KROOzWcqGQs2eG_O75HJoNNiHzF1BdSqgAjRrTSV9sgVYK-xnO19DjXMuh8YpQW5Ztj5Aamwbm5ogc/w601-h451/20-03-_2023_11-06-55.jpg" width="601" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: justify;">Hier wird <b>_matrix()</b> vom _thread aufgerufen und sollte ohne Unterbrechung über <i>while True</i> laufen. Diese Funktion ruft _<b>_matrix</b> auf, wenn <i>run</i> eingeschaltet ist (True). Dazu wird auch die <b>LED.on()</b> verwendet, damit wir auch etwas sehen können. Der Ausgang <b>V1_Od</b> wird ebenfalls auf True gesetzt. Ist <i>run</i> False oder die Funktion <b>__matrix()</b> liefert False, dann schalten wir die LED ab und setzen den Ausgang zurück.</div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixRFe9ZfVbheky3pkX5MZvZR0v1IE7HfdO42dUJQ4Cv2F9UpYq-o5dVeXx7XtSqcMWE30XEk-choLHyIdNM-6N7j0scCD-Ua3kN6y-MsuRZYOKRIjBBHxPYB8K_51tKtuAJ542XArCFOmHWhvm-PJZR5FfNHS2YdC4lGY1MR9gxpEcfk8tZWF2xGLL/s719/20-03-_2023_11-09-05.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="536" data-original-width="719" height="481" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixRFe9ZfVbheky3pkX5MZvZR0v1IE7HfdO42dUJQ4Cv2F9UpYq-o5dVeXx7XtSqcMWE30XEk-choLHyIdNM-6N7j0scCD-Ua3kN6y-MsuRZYOKRIjBBHxPYB8K_51tKtuAJ542XArCFOmHWhvm-PJZR5FfNHS2YdC4lGY1MR9gxpEcfk8tZWF2xGLL/w643-h481/20-03-_2023_11-09-05.jpg" width="643" /></a></div><br /><div class="separator" style="clear: both; text-align: justify;">In der Funktion <b>__matrix()</b> erfolgt die Auswertung der Liste <i>matrix_lst</i> mit der Reihenfolge <i>error</i> (Zeile 135), <i>no action</i> (Zeile 140) und <i>action</i> (Zeile 144). </div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">Wie auch immer ist hier diese Funktion nur dann anwendbar, wenn die Daten aus KI2Plc vorhanden sind. Der <i>status</i> wird ja in Zeile 130 gelesen und mit den Werten aus der Liste verglichen. Fehlt also diese Liste, gibt es keine gültige Auswertung. Da wir hier im Pico lediglich ein Beispiel erklären, fehlt die Speicherung der Daten im Pico. Das wäre ohne Probleme möglich, müsste aber dann auch wieder gelesen werden. Dieser Aufwand ist nicht lohnenswert, da ohnehin keiner den Pico als Zylindersteuerung verwendet 😀</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">Im nächsten Bild sei noch einmal der Python-Abschnitt gezeigt, welcher in KI2Plc verwendet wird. Hier ist auch die Grundstellung berücksichtigt (Zeile 300).</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDI1UOGedAk3s6ujfkoziNXkKAOP78rMsaYpxMi29pi61CUKMLHXN2qq1GhrsoWixvPDn-iSIHzHoTBR3E8GZrD7voPWZnvGw8Ofwi56iM-putIRDga_2ZaTRx_4lt-TMsjYNcdnXXTb0Cosc7CLyFtJXFmd7yvHJlpKHgZYFzLdGeNsOn9xP-RPFg/s825/20-03-_2023_13-11-54.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="773" data-original-width="825" height="604" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDI1UOGedAk3s6ujfkoziNXkKAOP78rMsaYpxMi29pi61CUKMLHXN2qq1GhrsoWixvPDn-iSIHzHoTBR3E8GZrD7voPWZnvGw8Ofwi56iM-putIRDga_2ZaTRx_4lt-TMsjYNcdnXXTb0Cosc7CLyFtJXFmd7yvHJlpKHgZYFzLdGeNsOn9xP-RPFg/w644-h604/20-03-_2023_13-11-54.jpg" width="644" /></a></div><br /><div class="separator" style="clear: both; text-align: justify;">Im nächsten Teil werde ich die Anwendung des Zylinders in einer Simatic S7-1200 mit Python und Snap7 zeigen 🙋</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><div style="font-size: medium; text-align: left;"><span style="font-size: medium;"><br /></span></div><div style="font-size: medium; text-align: left;"><span style="font-size: medium;"><br /></span></div><div style="font-size: medium; text-align: left;"><div style="text-align: justify;">Mein KI-Berater:</div><div style="text-align: justify;"><a href="https://kran-automation.marcel-rosiak.de/">https://kran-automation.marcel-rosiak.de/</a></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span face="Roboto, Noto, sans-serif" style="background-color: white; color: #0d0d0d; font-size: 15px; text-align: start; white-space: pre-wrap;">Von mir verwendete Tools u. a.:</span><span face="Roboto, Noto, sans-serif" style="background-color: white; color: #0d0d0d; font-size: 15px; text-align: start; white-space: pre-wrap;">
</span><span face="Roboto, Noto, sans-serif" style="background-color: white; color: #0d0d0d; font-size: 15px; text-align: start; white-space: pre-wrap;"><a href="https://thonny.org/">https://thonny.org/</a></span><span face="Roboto, Noto, sans-serif" style="background-color: white; color: #0d0d0d; font-size: 15px; text-align: start; white-space: pre-wrap;">
</span><span face="Roboto, Noto, sans-serif" style="background-color: white; color: #0d0d0d; font-size: 15px; text-align: start; white-space: pre-wrap;"><a href="https://www.jetbrains.com/de-de/pycharm/">https://www.jetbrains.com/de-de/pycharm/</a></span></div><div style="text-align: justify;"><a href="https://support.industry.siemens.com/cs/start?lc=de-WW">https://support.industry.siemens.com/cs/start?lc=de-WW</a></div><div><br /></div></div></div><br /><br /></span></div>TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.com0tag:blogger.com,1999:blog-2920559226409209345.post-91585912673036604012023-03-15T20:23:00.005+01:002023-03-21T09:27:32.587+01:00<p> <span style="font-size: x-small;">Copyright © Dipl.-Ing. Johannes Hofer 2022<span> </span><span> </span></span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span></p><p> </p><h1><span style="text-align: center;">Ki2Plc</span></h1><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><h1 style="text-align: center;"></h1><h2 style="text-align: center;"><span style="font-size: 14pt; text-align: left;">Die Möglichkeiten einer Programmierung im TIA-Portal, um diese am Geschehen der künstlichen Intelligenz zu beteiligen</span></h2></blockquote><p><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/oP5mlz0wWMc" width="320" youtube-src-id="oP5mlz0wWMc"></iframe></div><br /> <p></p><h2 style="text-align: justify;"><b><span style="font-size: medium;">Pico-EVB als mini-plc Teil-2</span></b></h2><div style="text-align: justify;"><span>Nachdem der <b>Loop</b> 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 <b>rem_socket.send(set_neuron_ipl_str(set_neuron_ipl()))</b> 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 <b>set_neuron_ipl()</b> zusammengesetzt, welche danach von <b>set_neuron_ipl_str()</b> als String zum Versenden zusammengesetzt wird. </span></div><div style="text-align: justify;"><span><br /></span></div><div style="text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1aM9PyDnhmLIYcUILStfR4fR7sqhMKL8-ch3Bxo8k0TN11akV0-aqno9-oK1iyRawP_tAFxag4OdGqEE_Mg0bHRakHCcLbrIqCMtVB08lS0E4h-m7dDsH2QR-tBkqi6Irz56lU2oeaIQoSWms6htkLFL2qbo_2HALgGRgVrnuQzpoXszUeWSJ6FgW/s1258/15-03-_2023_17-13-03.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="703" data-original-width="1258" height="355" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1aM9PyDnhmLIYcUILStfR4fR7sqhMKL8-ch3Bxo8k0TN11akV0-aqno9-oK1iyRawP_tAFxag4OdGqEE_Mg0bHRakHCcLbrIqCMtVB08lS0E4h-m7dDsH2QR-tBkqi6Irz56lU2oeaIQoSWms6htkLFL2qbo_2HALgGRgVrnuQzpoXszUeWSJ6FgW/w636-h355/15-03-_2023_17-13-03.jpg" width="636" /></a></div><div style="text-align: justify;"><br /></div>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.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG3OGTSaKlAErZ21eDIhUVOwxtRSUqQHFvPVoKoDKzu6arsUVoSOPqFxcwORSWTIEdvhcRvnDW9iwJcQDFPOrxtZucZj3L_kwe0-bKQQKIpy-YIIm8z_m5Zm1Tv0P6CJxdUgci3yOAbn1NHX83cQofT1gOVoevk_x2kgD1OzwphSikeF1LfawBSKkA/s1123/15-03-_2023_17-21-35.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="235" data-original-width="1123" height="128" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG3OGTSaKlAErZ21eDIhUVOwxtRSUqQHFvPVoKoDKzu6arsUVoSOPqFxcwORSWTIEdvhcRvnDW9iwJcQDFPOrxtZucZj3L_kwe0-bKQQKIpy-YIIm8z_m5Zm1Tv0P6CJxdUgci3yOAbn1NHX83cQofT1gOVoevk_x2kgD1OzwphSikeF1LfawBSKkA/w611-h128/15-03-_2023_17-21-35.jpg" width="611" /></a></div><br /><div style="text-align: justify;">In der Funktion <b>set_neuron_ipl_str()</b> wird diese Information als String zusammengesetzt und an die KI2Plc gesendet.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Der Request für die neue Matrix ist im Teil-1 in Zeile 233 ersichtlich. Dieser wird von der Funktion <b>set_matrix(datas)</b> umgesetzt. Die Daten werden als Dictionary von KI2Plc gesendet und müssen nun als Matrix-Daten aufgelöst werden. </div><div style="text-align: justify;"><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJB30MlyfgFR-R1dlTyQwsnWIFQzeC3Xq_-ncs9YkhByYjbUIW-BHsYK4V3LwFeUNnCX4X3-9HHqDxWEMFvm7ztXK4iuj9ji76FzjWVOou8LebGP1HkJ0uqEMACNt26xNArdn12zjwg7jXlJ23-5Rme9XHWXzT9yFiyUYHKlSJYdqFdbmNKLGfxrBd/s891/15-03-_2023_19-40-51.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="626" data-original-width="891" height="374" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJB30MlyfgFR-R1dlTyQwsnWIFQzeC3Xq_-ncs9YkhByYjbUIW-BHsYK4V3LwFeUNnCX4X3-9HHqDxWEMFvm7ztXK4iuj9ji76FzjWVOou8LebGP1HkJ0uqEMACNt26xNArdn12zjwg7jXlJ23-5Rme9XHWXzT9yFiyUYHKlSJYdqFdbmNKLGfxrBd/w532-h374/15-03-_2023_19-40-51.jpg" width="532" /></a></div><br /></div><div style="text-align: justify;">Wichtig dabei ist, dass dir globale Variable <b>run</b> 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 <b>run = 1</b> die Bearbeitung wieder freigegeben werden. Funktioniert so wunderbar 👍</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">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 <b>get_status()</b> und <b>get_status_str()</b> zuständig. Wobei hier das return in Zeile 90 den Status aus der Funktion <b>cylinder_simulation()</b> erfolgt.</div><div style="text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaGiS4XRnQflx45Vkx1B3tJ_Ib11rdrTF19BstTS8AhEcPNebCk3iitffiDGWp8HPq2OpbLgQDdbnBPmDTfsGgqA1A_uu6I-LFmjYLE35bhmRw5oLeCwG6taR037tZlNbta7n1o-KsIriGEoimCAS4X7-B2XD9YUQOyyEA-39YaUPE-RTrhEb2Jvk3/s875/15-03-_2023_19-48-37.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="209" data-original-width="875" height="132" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaGiS4XRnQflx45Vkx1B3tJ_Ib11rdrTF19BstTS8AhEcPNebCk3iitffiDGWp8HPq2OpbLgQDdbnBPmDTfsGgqA1A_uu6I-LFmjYLE35bhmRw5oLeCwG6taR037tZlNbta7n1o-KsIriGEoimCAS4X7-B2XD9YUQOyyEA-39YaUPE-RTrhEb2Jvk3/w559-h132/15-03-_2023_19-48-37.jpg" width="559" /></a></div><br /><div style="text-align: justify;">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 <b>match</b>, deswegen die Auflösung mit einem If-Grab 😀</div><div style="text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_0mTUqp1hVsKhOhSHnQj7CeiVKXK82GfJ7CTL6ww_e0lChVZjQMdXRUcyKSPB_HI8Ul3F_5rDUFmFh9C2tjW4pEmtFv_7bEMAdlrHHameSBw3pDEAEGiRUbR0ZmqGA7N8lg2UD2owOZM3-8Uu0qvm-5aoA6b0o_Tft27amanIObfisgGnUnAKpt2k/s829/15-03-_2023_19-53-36.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="829" data-original-width="577" height="651" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_0mTUqp1hVsKhOhSHnQj7CeiVKXK82GfJ7CTL6ww_e0lChVZjQMdXRUcyKSPB_HI8Ul3F_5rDUFmFh9C2tjW4pEmtFv_7bEMAdlrHHameSBw3pDEAEGiRUbR0ZmqGA7N8lg2UD2owOZM3-8Uu0qvm-5aoA6b0o_Tft27amanIObfisgGnUnAKpt2k/w453-h651/15-03-_2023_19-53-36.jpg" width="453" /></a></div><br /><div style="text-align: justify;">Diese Zustände haben wir im Video gesehen. Und nun fehlt noch der dritte Teil zur Matrix selbst, der in Kürze folgt. 🙋</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><div style="text-align: left;"><span style="font-size: medium;"><br /></span></div><div style="text-align: left;"><span style="font-size: medium;"><br /></span></div><div style="text-align: left;"><div style="text-align: justify;">Mein KI-Berater:</div><div style="text-align: justify;"><a href="https://kran-automation.marcel-rosiak.de/">https://kran-automation.marcel-rosiak.de/</a></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span face="Roboto, Noto, sans-serif" style="background-color: white; color: #0d0d0d; font-size: 15px; text-align: start; white-space: pre-wrap;">Von mir verwendete Tools u. a.:</span><span face="Roboto, Noto, sans-serif" style="background-color: white; color: #0d0d0d; font-size: 15px; text-align: start; white-space: pre-wrap;">
</span><span face="Roboto, Noto, sans-serif" style="background-color: white; color: #0d0d0d; font-size: 15px; text-align: start; white-space: pre-wrap;"><a href="https://thonny.org/">https://thonny.org/</a></span><span face="Roboto, Noto, sans-serif" style="background-color: white; color: #0d0d0d; font-size: 15px; text-align: start; white-space: pre-wrap;">
</span><span face="Roboto, Noto, sans-serif" style="background-color: white; color: #0d0d0d; font-size: 15px; text-align: start; white-space: pre-wrap;"><a href="https://www.jetbrains.com/de-de/pycharm/">https://www.jetbrains.com/de-de/pycharm/</a></span></div><div style="text-align: justify;"><a href="https://support.industry.siemens.com/cs/start?lc=de-WW">https://support.industry.siemens.com/cs/start?lc=de-WW</a></div><div><br /></div></div></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><br /><span><br /></span></div><div><span><br /></span></div>TIA-Experthttp://www.blogger.com/profile/09595026491603709457noreply@blogger.com0