<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to Ausgabe eines laufende Python Skript in CODESYS lesen?</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/e52c3a8884/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/e52c3a8884/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/Deutsch/thread/e52c3a8884/</id><updated>2021-06-05T19:14:29.246000Z</updated><subtitle>Recent posts to Ausgabe eines laufende Python Skript in CODESYS lesen?</subtitle><entry><title>Ausgabe eines laufende Python Skript in CODESYS lesen?</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/e52c3a8884/?limit=25#0b57/9b65/c971" rel="alternate"/><published>2021-06-05T19:14:29.246000Z</published><updated>2021-06-05T19:14:29.246000Z</updated><author><name>Ingo</name><uri>https://forge.codesys.com/u/ingo/</uri></author><id>https://forge.codesys.com67265fe631bdd10419ef932985741367e9e41f6f</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hey Eddy,&lt;br/&gt;
hab' dir das Projekt mal angehängt. Ist ein "proof of concept". Also erwarte nicht zu viel 😉&lt;/p&gt;
&lt;p&gt;Folgende Zeilen sind vielleicht interessant:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="err"&gt;    // call main&lt;/span&gt;
&lt;span class="err"&gt;    szCommand := CONCAT(CONCAT('hugo=', DWORD_TO_STRING(hugo)), '$n');&lt;/span&gt;
&lt;span class="err"&gt;    SysFile.SysFileWrite(hFifo, ADR(szCommand), LEN(szCommand), 0);&lt;/span&gt;
&lt;span class="err"&gt;    szCommand := CONCAT('main', '$n');&lt;/span&gt;
&lt;span class="err"&gt;    SysFile.SysFileWrite(hFifo, ADR(szCommand), LEN(szCommand), 0);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Damit habe ich einen Zähler in eine Variable, Namens "hugo" geschrieben. Und dann die Methode "main" aufgerufen. In der Funktion "main" in dem Python Skript habe ich dann immer einfach alle Variablen der Klasse ausgegeben, um zu sehen, dass "hugo" auch geschrieben wurde:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="err"&gt;class plc_prg(codepy.program):&lt;/span&gt;
&lt;span class="err"&gt;    def main(self):&lt;/span&gt;
&lt;span class="err"&gt;                print("hello worldz!")&lt;/span&gt;
&lt;span class="err"&gt;        print(self.__dict__)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Wie du siehst, die Idee ist, dass jemand mit einem Python Skript, welches eine Klasse enthält, die von "codepy.program" ableitet, einfach Variablen mit CODESYS austauschen kann, und CODESYS Methoden aufrufen kann.&lt;/p&gt;
&lt;p&gt;Aktuell geht es nur Variablen zu schreiben. Der nächste Schritt ist aber natürlich das Lesen 😉&lt;/p&gt;
&lt;p&gt;Falls dir die Idee gefällt, lass es mich wissen. Das motiviert natürlich, die Idee schöner, und nicht nur für meinen Hausgebrauch umzusetzen ;)&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Ausgabe eines laufende Python Skript in CODESYS lesen?</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/e52c3a8884/?limit=250#ae09" rel="alternate"/><published>2021-06-05T17:02:05.045000Z</published><updated>2021-06-05T17:02:05.045000Z</updated><author><name>dkugler</name><uri>https://forge.codesys.com/u/dkugler/</uri></author><id>https://forge.codesys.coma5da45c1eca26a8b48267fd8bb13d4d1932994b5</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;vielleicht wäre eine Lösung über "Shared Memory" eine Lösung? Das PythonScript schreibt das Gewicht ins Ram, Codesys greift ebenfalls auf den Ram zu und liest die Werte aus. Wir im Projekt openCV so angewendet um die Koordinaten von im Video/Foto erkannten Objekten an Codesys zu übergeben: &lt;br/&gt;
&lt;a href="https://forge.codesys.com/prj/codesys-example/opencv-example2/home/Home/"&gt;https://forge.codesys.com/prj/codesys-example/opencv-example2/home/Home/&lt;/a&gt;&lt;br/&gt;
&lt;a href="https://forge.codesys.com/prj/codesys-example/shared-memory/home/Home/"&gt;https://forge.codesys.com/prj/codesys-example/shared-memory/home/Home/&lt;/a&gt;&lt;br/&gt;
&lt;a href="https://forge.codesys.com/prj/codesys-example/shared-memory-c/"&gt;https://forge.codesys.com/prj/codesys-example/shared-memory-c/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Über OPCUA sollte es auch möglich sein:&lt;br/&gt;
&lt;a href="https://www.codesys-blog.com/kommunikation/python-opc-ua-client-mit-codesys-verbinden/" rel="nofollow"&gt;https://www.codesys-blog.com/kommunikation/python-opc-ua-client-mit-codesys-verbinden/&lt;/a&gt;&lt;br/&gt;
Viel Erfolg!&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Ausgabe eines laufende Python Skript in CODESYS lesen?</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/e52c3a8884/?limit=25#0b57/9b65" rel="alternate"/><published>2021-06-05T12:50:23.460000Z</published><updated>2021-06-05T12:50:23.460000Z</updated><author><name>eddykl</name><uri>https://forge.codesys.com/u/eddykl/</uri></author><id>https://forge.codesys.com2e2c17dccbaf6ddb563b8fc0be2f84f2541e0f3c</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Wow super, danke dir!&lt;/p&gt;
&lt;p&gt;Okay, wie ich es verstanden habe, wird dann also noch ein Cleanup benötigt, um den Buffer vom SysProcessExecuteCommand zu leeren.&lt;/p&gt;
&lt;p&gt;Leider bin ich der Python Sprache nicht mächtig und ich habe bis vor paar Wochen nur mit TIA Portal gearbeitet. Ich hoffe, ich habe mir nicht etwas zu großes vorgenommen...&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Ausgabe eines laufende Python Skript in CODESYS lesen?</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/e52c3a8884/?limit=25#0b57" rel="alternate"/><published>2021-06-05T12:21:21.205000Z</published><updated>2021-06-05T12:21:21.205000Z</updated><author><name>Ingo</name><uri>https://forge.codesys.com/u/ingo/</uri></author><id>https://forge.codesys.comb9becf43e9f16057c4a2a2b43c423864e76cfba8</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hi Eddy!&lt;br/&gt;
Bin gerade unterwegs. Aber ich habe einen experimentellen aufbau in dem ich was ganz ähnliches probiert hab, was nur noch nicht so stabil und flexibel lief, wie ich es mir gewünscht hätte. &lt;/p&gt;
&lt;p&gt;Das kann ich aber gerne mit dir Teilen. Die groben Eckpfeiler was ich gemacht habe:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SysProcessExecuteCommand2 aufgerufen um das script zu starten&lt;/li&gt;
&lt;li&gt;im Script den Prozess "daemonized"&lt;/li&gt;
&lt;li&gt;im Script eine Pipe angelegt&lt;/li&gt;
&lt;li&gt;im FB die pipe geöffnet &lt;/li&gt;
&lt;li&gt;aus dem FB Kommandos geschrieben, um Funktionen in dem python skript aufzurufen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Soweit hatte das funktioniert. Cleanup ist noch nicht so gut, und für den Prozessdatenaustausch hat mir noch 'ne zündente Idee gefehlt.&lt;/p&gt;
&lt;p&gt;Ich schicks dir heute oder morgen.&lt;/p&gt;
&lt;p&gt;SysProcessExecuteCommand hat jedenfalls das Problem, dass es nur einen begrenzten Buffer, einmalig liest. Du bekommst also keinen Stream, wie du es von python kennst.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Ausgabe eines laufende Python Skript in CODESYS lesen?</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/e52c3a8884/?limit=25#c6e2" rel="alternate"/><published>2021-06-05T11:36:28.392000Z</published><updated>2021-06-05T11:36:28.392000Z</updated><author><name>eddykl</name><uri>https://forge.codesys.com/u/eddykl/</uri></author><id>https://forge.codesys.comc5232a9826c259d1ecdc1b92b4fd5d9aadbf337e</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hallo,&lt;/p&gt;
&lt;p&gt;Ich plane, eine Waage mit einem HX711-ADC in CODESYS zu implementieren, wobei eine Wägezelle mit einem Raspberry Pi verwendet werden soll.&lt;/p&gt;
&lt;p&gt;Ich habe ein funktionierendes Python-Skript, das mir das Gewicht in Gramm (in INT) ausgibt.&lt;br/&gt;
Das Skript wird beim Boot/Log-in automatisch ausgeführt.&lt;/p&gt;
&lt;p&gt;Ich habe von der Funktion &lt;strong&gt;SysProcessExecuteCommand2 (FUN)&lt;/strong&gt; gehört, die es mir ermöglichen sollte, die Prozesswerte aus dem Python-Skript, in CODESYS zu lesen.&lt;/p&gt;
&lt;p&gt;Kann mir jemand diese Funktion/Methode erklären, wie ich es zum Laufen bringen kann? Am besten in mit einem kleinen Codebeispiel.&lt;/p&gt;
&lt;p&gt;Die Funktion:&lt;br/&gt;
&lt;a href="https://help.codesys.com/webapp/SysProcessExecuteCommand2;product=SysProcess%20Implementation;version=3.5.17.0" rel="nofollow"&gt;https://help.codesys.com/webapp/SysProcessExecuteCommand2;product=SysProcess%20Implementation;version=3.5.17.0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Danke im Voraus&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>