<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to Scripting - Beispiele und Rezepte</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/98bdd88510/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/98bdd88510/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/Deutsch/thread/98bdd88510/</id><updated>2020-02-28T01:24:36.910000Z</updated><subtitle>Recent posts to Scripting - Beispiele und Rezepte</subtitle><entry><title>Scripting - Beispiele und Rezepte</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/98bdd88510/?limit=25#923f" rel="alternate"/><published>2020-02-28T01:24:36.910000Z</published><updated>2020-02-28T01:24:36.910000Z</updated><author><name>Anonymous</name><uri>https://forge.codesys.com/u/*anonymous/</uri></author><id>https://forge.codesys.comdc6b9422a9ad5923e5324f4031593923a1d74075</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;&lt;em&gt;Originally created by:&lt;/em&gt; M.Schaber&lt;/p&gt;
&lt;p&gt;Einige Anwender möchten sich die Ausgangsbasis für ihre Projekte gerne aus einem Subversion-Repository holen.&lt;/p&gt;
&lt;p&gt;Das folgende Beispiel (das auch dem Beispiel 4 in der Dokumentation entspricht) erzeugt ein neues Projekt, und fügt darin via PLCOpenXML ein Gerät ein:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="s s-Atom"&gt;\#&lt;/span&gt; &lt;span class="nv"&gt;Imports&lt;/span&gt; &lt;span class="s s-Atom"&gt;a&lt;/span&gt; &lt;span class="nv"&gt;Device&lt;/span&gt; &lt;span class="s s-Atom"&gt;in&lt;/span&gt; &lt;span class="nv"&gt;PLCOpenXML&lt;/span&gt; &lt;span class="s s-Atom"&gt;from&lt;/span&gt; &lt;span class="nv"&gt;Subversion&lt;/span&gt; &lt;span class="s s-Atom"&gt;via&lt;/span&gt; &lt;span class="s s-Atom"&gt;command&lt;/span&gt; &lt;span class="s s-Atom"&gt;line&lt;/span&gt; &lt;span class="s s-Atom"&gt;svn&lt;/span&gt; &lt;span class="s s-Atom"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="s s-Atom"&gt;\#&lt;/span&gt; &lt;span class="nv"&gt;We&lt;/span&gt; &lt;span class="s s-Atom"&gt;enable&lt;/span&gt; &lt;span class="s s-Atom"&gt;the&lt;/span&gt; &lt;span class="s s-Atom"&gt;new&lt;/span&gt; &lt;span class="s s-Atom"&gt;python&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="s s-Atom"&gt;print&lt;/span&gt; &lt;span class="s s-Atom"&gt;syntax&lt;/span&gt;
&lt;span class="s s-Atom"&gt;from&lt;/span&gt; &lt;span class="k"&gt;__&lt;/span&gt;&lt;span class="s s-Atom"&gt;future__&lt;/span&gt; &lt;span class="s s-Atom"&gt;import&lt;/span&gt; &lt;span class="s s-Atom"&gt;print_function&lt;/span&gt;
&lt;span class="s s-Atom"&gt;import&lt;/span&gt; &lt;span class="s s-Atom"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s s-Atom"&gt;os&lt;/span&gt;
&lt;span class="s s-Atom"&gt;\#&lt;/span&gt; &lt;span class="s s-Atom"&gt;some&lt;/span&gt; &lt;span class="s s-Atom"&gt;variable&lt;/span&gt; &lt;span class="nn"&gt;definitions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="nv"&gt;SVNEXE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s s-Atom"&gt;r&lt;/span&gt;&lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;C&lt;/span&gt;&lt;span class="s s-Atom"&gt;:\&lt;/span&gt;&lt;span class="nv"&gt;Program&lt;/span&gt; &lt;span class="nv"&gt;Files&lt;/span&gt;&lt;span class="s s-Atom"&gt;\&lt;/span&gt;&lt;span class="nv"&gt;Subversion&lt;/span&gt;&lt;span class="s s-Atom"&gt;\bin\svn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="s s-Atom"&gt;exe&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="s2"&gt;XMLURL = "&lt;/span&gt;&lt;span class="nn"&gt;file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s s-Atom"&gt;///&lt;/span&gt;&lt;span class="nv"&gt;D&lt;/span&gt;&lt;span class="s s-Atom"&gt;:/testrepo&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="s s-Atom"&gt;testfolder&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;TestExport&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="s s-Atom"&gt;xml&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="s2"&gt;PROJECT = r"&lt;/span&gt;&lt;span class="nv"&gt;D&lt;/span&gt;&lt;span class="s s-Atom"&gt;:\test&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="s s-Atom"&gt;project&lt;/span&gt;&lt;span class="err"&gt;"&lt;/span&gt;
&lt;span class="s s-Atom"&gt;\#&lt;/span&gt; &lt;span class="s s-Atom"&gt;clean&lt;/span&gt; &lt;span class="s s-Atom"&gt;up&lt;/span&gt; &lt;span class="s s-Atom"&gt;any&lt;/span&gt; &lt;span class="s s-Atom"&gt;open&lt;/span&gt; &lt;span class="nn"&gt;project&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="s s-Atom"&gt;if&lt;/span&gt; &lt;span class="s s-Atom"&gt;projects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nn"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
   &lt;span class="s s-Atom"&gt;projects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="s s-Atom"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="s s-Atom"&gt;\#&lt;/span&gt; &lt;span class="nv"&gt;Fetch&lt;/span&gt; &lt;span class="s s-Atom"&gt;the&lt;/span&gt; &lt;span class="s s-Atom"&gt;plcopenxml&lt;/span&gt; &lt;span class="s s-Atom"&gt;data&lt;/span&gt; &lt;span class="s s-Atom"&gt;from&lt;/span&gt; &lt;span class="s s-Atom"&gt;subversion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; 
&lt;span class="s s-Atom"&gt;\#&lt;/span&gt; &lt;span class="nv"&gt;The&lt;/span&gt; &lt;span class="s s-Atom"&gt;'with'&lt;/span&gt; &lt;span class="s s-Atom"&gt;construct&lt;/span&gt; &lt;span class="s s-Atom"&gt;automatically&lt;/span&gt; &lt;span class="s s-Atom"&gt;closes&lt;/span&gt; &lt;span class="s s-Atom"&gt;the&lt;/span&gt; &lt;span class="s s-Atom"&gt;open&lt;/span&gt; &lt;span class="s s-Atom"&gt;pipe&lt;/span&gt; &lt;span class="s s-Atom"&gt;for&lt;/span&gt; &lt;span class="s s-Atom"&gt;us&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="s s-Atom"&gt;with&lt;/span&gt; &lt;span class="s s-Atom"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;popen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s s-Atom"&gt;'"'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nv"&gt;SVNEXE&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s s-Atom"&gt;'" cat '&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nv"&gt;XMLURL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s s-Atom"&gt;'r'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="s s-Atom"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;pipe&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
   &lt;span class="s s-Atom"&gt;xmldata&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s s-Atom"&gt;pipe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="s s-Atom"&gt;\#&lt;/span&gt; &lt;span class="s s-Atom"&gt;create&lt;/span&gt; &lt;span class="s s-Atom"&gt;a&lt;/span&gt; &lt;span class="s s-Atom"&gt;new&lt;/span&gt; &lt;span class="nn"&gt;project&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="s s-Atom"&gt;proj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s s-Atom"&gt;projects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;PROJECT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="s s-Atom"&gt;\#&lt;/span&gt; &lt;span class="s s-Atom"&gt;create&lt;/span&gt; &lt;span class="s s-Atom"&gt;the&lt;/span&gt; &lt;span class="s s-Atom"&gt;import&lt;/span&gt; &lt;span class="s s-Atom"&gt;reporter&lt;/span&gt;
&lt;span class="s s-Atom"&gt;class&lt;/span&gt; &lt;span class="nv"&gt;Reporter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ImportReporter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="s s-Atom"&gt;:&lt;/span&gt;
   &lt;span class="s s-Atom"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s s-Atom"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s s-Atom"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="s s-Atom"&gt;:&lt;/span&gt;
      &lt;span class="s s-Atom"&gt;system&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write_message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Severity&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s s-Atom"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="s s-Atom"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;warning&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s s-Atom"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s s-Atom"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="s s-Atom"&gt;:&lt;/span&gt;
      &lt;span class="s s-Atom"&gt;system&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write_message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Severity&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;Warning&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s s-Atom"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   
   &lt;span class="s s-Atom"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;resolve_conflict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s s-Atom"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s s-Atom"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="s s-Atom"&gt;:&lt;/span&gt;
      &lt;span class="s s-Atom"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;ConflictResolve&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;Copy&lt;/span&gt;
   
   &lt;span class="s s-Atom"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;added&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s s-Atom"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s s-Atom"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="s s-Atom"&gt;:&lt;/span&gt;
      &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"added: "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s s-Atom"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="s s-Atom"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;replaced&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s s-Atom"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s s-Atom"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="s s-Atom"&gt;:&lt;/span&gt;
      &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"replaced: "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s s-Atom"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="s s-Atom"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;skipped&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s s-Atom"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s s-Atom"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="s s-Atom"&gt;:&lt;/span&gt;
      &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"skipped: "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s s-Atom"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      
   &lt;span class="s s-Atom"&gt;@property&lt;/span&gt;
   &lt;span class="s s-Atom"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;aborting&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s s-Atom"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="s s-Atom"&gt;:&lt;/span&gt;
      &lt;span class="s s-Atom"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;False&lt;/span&gt;
&lt;span class="s s-Atom"&gt;\#&lt;/span&gt; &lt;span class="s s-Atom"&gt;create&lt;/span&gt; &lt;span class="s s-Atom"&gt;the&lt;/span&gt; &lt;span class="s s-Atom"&gt;importer&lt;/span&gt; &lt;span class="s s-Atom"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="s s-Atom"&gt;reporter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;Reporter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;      
&lt;span class="s s-Atom"&gt;\#&lt;/span&gt; &lt;span class="s s-Atom"&gt;import&lt;/span&gt; &lt;span class="s s-Atom"&gt;the&lt;/span&gt; &lt;span class="s s-Atom"&gt;data&lt;/span&gt; &lt;span class="s s-Atom"&gt;into&lt;/span&gt; &lt;span class="s s-Atom"&gt;the&lt;/span&gt; &lt;span class="s s-Atom"&gt;project&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="s s-Atom"&gt;proj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;import_xml&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s s-Atom"&gt;reporter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s s-Atom"&gt;xmldata&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="s s-Atom"&gt;\#&lt;/span&gt; &lt;span class="s s-Atom"&gt;and&lt;/span&gt; &lt;span class="s s-Atom"&gt;finally&lt;/span&gt; &lt;span class="s s-Atom"&gt;save&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="p"&gt;:-)&lt;/span&gt;
&lt;span class="s s-Atom"&gt;proj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"--- Script finished. ---"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Den dazu notwendigen Kommandozeilen-Client für Subversion gibt es von verschiedenen Anbietern frei herunterzuladen. Die &lt;a class="" href="http://subversion.apache.org/packages.html#windows" rel="nofollow"&gt;Subversion Download-Seite&lt;/a&gt; enthält Links zu einigen davon, im &lt;a class="" href="http://www.cygwin.com/" rel="nofollow"&gt;Cygwin-Projekt&lt;/a&gt; ist ein weiterer enthalten.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Scripting - Beispiele und Rezepte</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/98bdd88510/?limit=25#aeef" rel="alternate"/><published>2020-02-28T01:24:31.769000Z</published><updated>2020-02-28T01:24:31.769000Z</updated><author><name>Anonymous</name><uri>https://forge.codesys.com/u/*anonymous/</uri></author><id>https://forge.codesys.comea57203566bc5bbedd1619f07101bf750656d0d6</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;&lt;em&gt;Originally created by:&lt;/em&gt; M.Schaber&lt;/p&gt;
&lt;p&gt;Im Moment kann man Geräte per Skript nur anhand der Device ID hinzufügen. Wenn man die Device ID eines Gerätes nicht weiß, kann folgendes Skript dabei helfen. Man fügt das Gerät ins aktuelle Projekt ein, und startet das Skript:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;\&lt;span class="c1"&gt;# Prints out all devices and other objects in the currently open project.&lt;/span&gt;
\&lt;span class="c1"&gt;# We enable the new python 3 print syntax&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;__future__&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;print_function&lt;/span&gt;
\&lt;span class="c1"&gt;# define the printing function&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;printtree&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;treeobj&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;depth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;treeobj&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; 
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;treeobj&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_device&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;deviceid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;treeobj&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_device_identification&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"{0} - {1} {2}"&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"   "&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;depth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;deviceid&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;child&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;treeobj&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_children&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;printtree&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;depth&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;projects&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;primary&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_children&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;printtree&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"--- Script finished. ---"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Die Ausgabe sieht dann so aus:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;CoDeSys_Control_Win_V3&lt;/span&gt; &lt;span class="n"&gt;DeviceID&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4096&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'0000 0001'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;Version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'3.4.2.0'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;CANbus&lt;/span&gt; &lt;span class="n"&gt;DeviceID&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'181015'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;Version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'3.4.2.0'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;CANopen_Manager&lt;/span&gt; &lt;span class="n"&gt;DeviceID&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'181016'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;Version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'3.4.2.0'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;--- Script finished. ---&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Und schon kennt man die Device ID des gesuchten Gerätes.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Scripting - Beispiele und Rezepte</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/98bdd88510/?limit=25#7bd4" rel="alternate"/><published>2020-02-28T01:24:29.842000Z</published><updated>2020-02-28T01:24:29.842000Z</updated><author><name>Anonymous</name><uri>https://forge.codesys.com/u/*anonymous/</uri></author><id>https://forge.codesys.com1a6ac911243a06461f935475d05a7e89fea61eef</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;&lt;em&gt;Originally created by:&lt;/em&gt; M.Schaber&lt;/p&gt;
&lt;p&gt;Gerade wenn man Scripte über die Kommandozeile heraus aufruft, wäre es manchmal nützlich, wenn man Parameter an die Skripte übergeben könnte. &lt;/p&gt;
&lt;p&gt;Als Workaround für diese Funktionalität kann man mit Environment-Variablen arbeiten:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;__future__&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;print_function&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"project to open: "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"PROJECT"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
\&lt;span class="c1"&gt;# Wir gehen hier davon aus, dass die App auf dem Device bereits am laufen ist:&lt;/span&gt;
&lt;span class="n"&gt;proj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;projects&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"PROJECT"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;onlineapp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;online&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_online_application&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;proj&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;active_application&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;onlineapp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;login&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OnlineChangeOption&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Try&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"variables to read:"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"VARIABLES"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;","&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"    "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;" = "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;onlineapp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read_value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Das kann man dann z. B. aus einer Batch-Datei wie folgt aufrufen:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;@&lt;span class="nv"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;off&lt;/span&gt;
&lt;span class="nv"&gt;SET&lt;/span&gt; &lt;span class="nv"&gt;PROJECT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;D&lt;/span&gt;:\&lt;span class="nv"&gt;TestScripts&lt;/span&gt;\&lt;span class="nv"&gt;Data&lt;/span&gt;\&lt;span class="nv"&gt;OnlineTest&lt;/span&gt;.&lt;span class="nv"&gt;project&lt;/span&gt;
&lt;span class="nv"&gt;SET&lt;/span&gt; &lt;span class="nv"&gt;VARIABLES&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;POU&lt;/span&gt;.&lt;span class="nv"&gt;testint&lt;/span&gt;,&lt;span class="nv"&gt;POU&lt;/span&gt;.&lt;span class="nv"&gt;testoutput&lt;/span&gt;
&lt;span class="nv"&gt;start&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;wait&lt;/span&gt; &lt;span class="nv"&gt;CoDeSys&lt;/span&gt;.&lt;span class="nv"&gt;exe&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nv"&gt;profile&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CoDeSys V3.4 SP3&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nv"&gt;noUI&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nv"&gt;runscript&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;D:\TestScripts\Forum_Environment.py&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Das Ergebnis sieht dann so aus:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;C&lt;/span&gt;:\&lt;span class="nv"&gt;Program&lt;/span&gt; &lt;span class="nv"&gt;Files&lt;/span&gt;\&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="nv"&gt;S&lt;/span&gt; &lt;span class="nv"&gt;CoDeSys&lt;/span&gt; &lt;span class="nv"&gt;V3&lt;/span&gt;.&lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="nv"&gt;SP3&lt;/span&gt;\&lt;span class="nv"&gt;CoDeSys&lt;/span&gt;\&lt;span class="nv"&gt;Common&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nv"&gt;d&lt;/span&gt;:\&lt;span class="nv"&gt;TestScripts&lt;/span&gt;\&lt;span class="nv"&gt;Forum_Environment&lt;/span&gt;.&lt;span class="nv"&gt;bat&lt;/span&gt;
&lt;span class="nv"&gt;project&lt;/span&gt; &lt;span class="nv"&gt;to&lt;/span&gt; &lt;span class="nv"&gt;open&lt;/span&gt;:  &lt;span class="nv"&gt;D&lt;/span&gt;:\&lt;span class="nv"&gt;TestScripts&lt;/span&gt;\&lt;span class="nv"&gt;Data&lt;/span&gt;\&lt;span class="nv"&gt;OnlineTest&lt;/span&gt;.&lt;span class="nv"&gt;project&lt;/span&gt;
&lt;span class="o"&gt;------&lt;/span&gt; &lt;span class="nv"&gt;Build&lt;/span&gt; &lt;span class="nv"&gt;started&lt;/span&gt;: &lt;span class="nv"&gt;Application&lt;/span&gt;: &lt;span class="nv"&gt;CoDeSys_Control_Win_V3&lt;/span&gt;.&lt;span class="nv"&gt;Application&lt;/span&gt; &lt;span class="o"&gt;-------&lt;/span&gt;
&lt;span class="nv"&gt;The&lt;/span&gt; &lt;span class="nv"&gt;application&lt;/span&gt; &lt;span class="nv"&gt;is&lt;/span&gt; &lt;span class="nv"&gt;up&lt;/span&gt; &lt;span class="nv"&gt;to&lt;/span&gt; &lt;span class="nv"&gt;date&lt;/span&gt;
&lt;span class="nv"&gt;Build&lt;/span&gt;: &lt;span class="nv"&gt;Information&lt;/span&gt;: &lt;span class="nv"&gt;Size&lt;/span&gt; &lt;span class="nv"&gt;of&lt;/span&gt; &lt;span class="nv"&gt;generated&lt;/span&gt; &lt;span class="nv"&gt;code&lt;/span&gt;: &lt;span class="mi"&gt;6453&lt;/span&gt; &lt;span class="nv"&gt;bytes&lt;/span&gt;
&lt;span class="nv"&gt;Build&lt;/span&gt;: &lt;span class="nv"&gt;Information&lt;/span&gt;: &lt;span class="nv"&gt;Size&lt;/span&gt; &lt;span class="nv"&gt;of&lt;/span&gt; &lt;span class="nv"&gt;global&lt;/span&gt; &lt;span class="nv"&gt;data&lt;/span&gt;: &lt;span class="mi"&gt;2606&lt;/span&gt; &lt;span class="nv"&gt;bytes&lt;/span&gt;
&lt;span class="nv"&gt;Build&lt;/span&gt;: &lt;span class="nv"&gt;Information&lt;/span&gt;: &lt;span class="nv"&gt;Total&lt;/span&gt; &lt;span class="nv"&gt;allocated&lt;/span&gt; &lt;span class="nv"&gt;memory&lt;/span&gt; &lt;span class="nv"&gt;size&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nv"&gt;code&lt;/span&gt; &lt;span class="nv"&gt;and&lt;/span&gt; &lt;span class="nv"&gt;data&lt;/span&gt;: &lt;span class="mi"&gt;12505&lt;/span&gt; &lt;span class="nv"&gt;bytes&lt;/span&gt;
&lt;span class="nv"&gt;Build&lt;/span&gt;: &lt;span class="nv"&gt;Information&lt;/span&gt;: &lt;span class="nv"&gt;Memory&lt;/span&gt; &lt;span class="nv"&gt;area&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="nv"&gt;contains&lt;/span&gt;  &lt;span class="nv"&gt;Data&lt;/span&gt;, &lt;span class="nv"&gt;Input&lt;/span&gt;, &lt;span class="nv"&gt;Output&lt;/span&gt;, &lt;span class="nv"&gt;Memory&lt;/span&gt; &lt;span class="nv"&gt;and&lt;/span&gt; &lt;span class="nv"&gt;Code&lt;/span&gt;: &lt;span class="nv"&gt;highest&lt;/span&gt; &lt;span class="nv"&gt;used&lt;/span&gt; &lt;span class="nv"&gt;address&lt;/span&gt;: &lt;span class="mi"&gt;1048576&lt;/span&gt;, &lt;span class="nv"&gt;largest&lt;/span&gt; &lt;span class="nv"&gt;contiguous&lt;/span&gt; &lt;span class="nv"&gt;memory&lt;/span&gt; &lt;span class="nv"&gt;gap&lt;/span&gt;: &lt;span class="mi"&gt;1036071&lt;/span&gt; &lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;98&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;Compile&lt;/span&gt; &lt;span class="nv"&gt;complete&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="nv"&gt;errors&lt;/span&gt;, &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="nv"&gt;warnings&lt;/span&gt;
&lt;span class="nv"&gt;variables&lt;/span&gt; &lt;span class="nv"&gt;to&lt;/span&gt; &lt;span class="nv"&gt;read&lt;/span&gt;:
     &lt;span class="nv"&gt;POU&lt;/span&gt;.&lt;span class="nv"&gt;testint&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt;  &lt;span class="nv"&gt;INT&lt;/span&gt;&lt;span class="sc"&gt;#1&lt;/span&gt;
     &lt;span class="nv"&gt;POU&lt;/span&gt;.&lt;span class="nv"&gt;testoutput&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt;  &lt;span class="nv"&gt;INT&lt;/span&gt;&lt;span class="sc"&gt;#3&lt;/span&gt;
&lt;span class="nv"&gt;C&lt;/span&gt;:\&lt;span class="nv"&gt;Program&lt;/span&gt; &lt;span class="nv"&gt;Files&lt;/span&gt;\&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="nv"&gt;S&lt;/span&gt; &lt;span class="nv"&gt;CoDeSys&lt;/span&gt; &lt;span class="nv"&gt;V3&lt;/span&gt;.&lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="nv"&gt;SP3&lt;/span&gt;\&lt;span class="nv"&gt;CoDeSys&lt;/span&gt;\&lt;span class="nv"&gt;Common&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;</summary></entry><entry><title>Scripting - Beispiele und Rezepte</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/98bdd88510/?limit=25#0cf7" rel="alternate"/><published>2020-02-28T01:24:24.702000Z</published><updated>2020-02-28T01:24:24.702000Z</updated><author><name>Anonymous</name><uri>https://forge.codesys.com/u/*anonymous/</uri></author><id>https://forge.codesys.com2e6938efe87bbc097b3381062aeb5139853c058e</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;&lt;em&gt;Originally created by:&lt;/em&gt; M.Schaber&lt;/p&gt;
&lt;p&gt;Dieses Beispiel ist eine Weiterentwicklung des Beispiel 1 aus der Dokumentation.&lt;/p&gt;
&lt;p&gt;Der Einsatzzweck: Aus einem externen Programm oder einer Batchdatei heraus wird eine Variable aus einer Steuerung ausgelesen, und auf der Standardausgabe ausgegeben, damit sie vom Aufrufer ausgewertet werden kann, zum Beispiel:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;C&lt;/span&gt;:\&lt;span class="nv"&gt;Program&lt;/span&gt; &lt;span class="nv"&gt;Files&lt;/span&gt;\&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="nv"&gt;S&lt;/span&gt; &lt;span class="nv"&gt;CoDeSys&lt;/span&gt; &lt;span class="nv"&gt;V3&lt;/span&gt;.&lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="nv"&gt;SP3&lt;/span&gt;\&lt;span class="nv"&gt;CoDeSys&lt;/span&gt;\&lt;span class="nv"&gt;Common&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nv"&gt;start&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;wait&lt;/span&gt; &lt;span class="nv"&gt;CoDeSys&lt;/span&gt;.&lt;span class="nv"&gt;exe&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nv"&gt;profile&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CoDeSys V3.4 SP3&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nv"&gt;noUI&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nv"&gt;runscript&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;D:\TestScripts\ReadVariable.py&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; 
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Und hier das eigentliche Programm:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;\&lt;span class="c1"&gt;# coding=utf-8&lt;/span&gt;
\&lt;span class="c1"&gt;# Da wir in den Kommentaren Umlaute verwenden, müssen wir das Encoding des Quelltextes&lt;/span&gt;
\&lt;span class="c1"&gt;# angeben.&lt;/span&gt;
\&lt;span class="c1"&gt;# Wir nutzen die Python 3 Variante von print&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;__future__&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;print_function&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; 
\&lt;span class="c1"&gt;# Unsere Projektdatei liegt im Data-Unterverzeichnis aus dem Verzeichnis,&lt;/span&gt;
\&lt;span class="c1"&gt;# in dem das Skript liegt, wir hangeln uns also relativ den Pfad entlang.&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;
&lt;span class="n"&gt;scriptdir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dirname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vm"&gt;__file__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# Da liegt unser Skript.&lt;/span&gt;
&lt;span class="n"&gt;datadir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scriptdir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"Data"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# ins Unterverzeichnis rein.&lt;/span&gt;
&lt;span class="n"&gt;projectpath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;datadir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"Ampel.project"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# Und den Projektnamen dran.&lt;/span&gt;
\&lt;span class="c1"&gt;# jetzt können wir unser Projekt öffnen.&lt;/span&gt;
&lt;span class="n"&gt;proj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;projects&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;projectpath&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
\&lt;span class="c1"&gt;# Wir holen die aktive Applikation (aus dem Ampel-Projekt)&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;proj&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;active_application&lt;/span&gt;
\&lt;span class="c1"&gt;# Und die entsprechende online-Applikation dazu.&lt;/span&gt;
&lt;span class="n"&gt;onlineapp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;online&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_online_application&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
\&lt;span class="c1"&gt;# Wir loggen uns aufs Gerät ein.&lt;/span&gt;
&lt;span class="n"&gt;onlineapp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;login&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OnlineChangeOption&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Try&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
\&lt;span class="c1"&gt;# Falls die Applikation noch nicht läuft, starten wir sie.&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;onlineapp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;application_state&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;ApplicationState&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;onlineapp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
\&lt;span class="c1"&gt;# Wir geben der Applikation etwas Zeit zum Arbeiten.&lt;/span&gt;
&lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
\&lt;span class="c1"&gt;# Und lesen den Vert der gewünschten Variable aus&lt;/span&gt;
&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;onlineapp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read_value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"PLC_PRG.iVar1"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
\&lt;span class="c1"&gt;# Wir geben den Wert auf der Standardausgabe aus, damit unser Aufrufer&lt;/span&gt;
\&lt;span class="c1"&gt;# den Wert weiterbearbeiten kann.&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
\&lt;span class="c1"&gt;# Und räumen am Ende auch schön auf.&lt;/span&gt;
&lt;span class="n"&gt;onlineapp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;logout&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;proj&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Das ganze sieht von einem CMD-Fenster aus dann wie folgt aus:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;C&lt;/span&gt;:\&lt;span class="nv"&gt;Program&lt;/span&gt; &lt;span class="nv"&gt;Files&lt;/span&gt;\&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="nv"&gt;S&lt;/span&gt; &lt;span class="nv"&gt;CoDeSys&lt;/span&gt; &lt;span class="nv"&gt;V3&lt;/span&gt;.&lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="nv"&gt;SP3&lt;/span&gt;\&lt;span class="nv"&gt;CoDeSys&lt;/span&gt;\&lt;span class="nv"&gt;Common&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nv"&gt;start&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;wait&lt;/span&gt; &lt;span class="nv"&gt;CoDeSys&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nv"&gt;profile&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CoDeSys V3.4 SP3&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nv"&gt;noUI&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nv"&gt;runscript&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;D:\TestScripts\Forum_ReadVariable.py&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="o"&gt;------&lt;/span&gt; &lt;span class="nv"&gt;Build&lt;/span&gt; &lt;span class="nv"&gt;started&lt;/span&gt;: &lt;span class="nv"&gt;Application&lt;/span&gt;: &lt;span class="nv"&gt;Device&lt;/span&gt;.&lt;span class="nv"&gt;App&lt;/span&gt; &lt;span class="o"&gt;-------&lt;/span&gt;
&lt;span class="nv"&gt;The&lt;/span&gt; &lt;span class="nv"&gt;application&lt;/span&gt; &lt;span class="nv"&gt;is&lt;/span&gt; &lt;span class="nv"&gt;up&lt;/span&gt; &lt;span class="nv"&gt;to&lt;/span&gt; &lt;span class="nv"&gt;date&lt;/span&gt;
&lt;span class="nv"&gt;Build&lt;/span&gt;: &lt;span class="nv"&gt;Information&lt;/span&gt;: &lt;span class="nv"&gt;Size&lt;/span&gt; &lt;span class="nv"&gt;of&lt;/span&gt; &lt;span class="nv"&gt;generated&lt;/span&gt; &lt;span class="nv"&gt;code&lt;/span&gt;: &lt;span class="mi"&gt;6419&lt;/span&gt; &lt;span class="nv"&gt;bytes&lt;/span&gt;
&lt;span class="nv"&gt;Build&lt;/span&gt;: &lt;span class="nv"&gt;Information&lt;/span&gt;: &lt;span class="nv"&gt;Size&lt;/span&gt; &lt;span class="nv"&gt;of&lt;/span&gt; &lt;span class="nv"&gt;global&lt;/span&gt; &lt;span class="nv"&gt;data&lt;/span&gt;: &lt;span class="mi"&gt;2594&lt;/span&gt; &lt;span class="nv"&gt;bytes&lt;/span&gt;
&lt;span class="nv"&gt;Build&lt;/span&gt;: &lt;span class="nv"&gt;Information&lt;/span&gt;: &lt;span class="nv"&gt;Total&lt;/span&gt; &lt;span class="nv"&gt;allocated&lt;/span&gt; &lt;span class="nv"&gt;memory&lt;/span&gt; &lt;span class="nv"&gt;size&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nv"&gt;code&lt;/span&gt; &lt;span class="nv"&gt;and&lt;/span&gt; &lt;span class="nv"&gt;data&lt;/span&gt;: &lt;span class="mi"&gt;10997&lt;/span&gt; &lt;span class="nv"&gt;bytes&lt;/span&gt;
&lt;span class="nv"&gt;Build&lt;/span&gt;: &lt;span class="nv"&gt;Information&lt;/span&gt;: &lt;span class="nv"&gt;Memory&lt;/span&gt; &lt;span class="nv"&gt;area&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="nv"&gt;contains&lt;/span&gt;  &lt;span class="nv"&gt;Data&lt;/span&gt;, &lt;span class="nv"&gt;Input&lt;/span&gt;, &lt;span class="nv"&gt;Output&lt;/span&gt;, &lt;span class="nv"&gt;Memory&lt;/span&gt; &lt;span class="nv"&gt;and&lt;/span&gt; &lt;span class="nv"&gt;Code&lt;/span&gt;
: &lt;span class="nv"&gt;highest&lt;/span&gt; &lt;span class="nv"&gt;used&lt;/span&gt; &lt;span class="nv"&gt;address&lt;/span&gt;: &lt;span class="mi"&gt;1048576&lt;/span&gt;, &lt;span class="nv"&gt;largest&lt;/span&gt; &lt;span class="nv"&gt;contiguous&lt;/span&gt; &lt;span class="nv"&gt;memory&lt;/span&gt; &lt;span class="nv"&gt;gap&lt;/span&gt;: &lt;span class="mi"&gt;1037579&lt;/span&gt; &lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;98&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;Compile&lt;/span&gt; &lt;span class="nv"&gt;complete&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="nv"&gt;errors&lt;/span&gt;, &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="nv"&gt;warnings&lt;/span&gt;
&lt;span class="nv"&gt;INT&lt;/span&gt;&lt;span class="sc"&gt;#2263&lt;/span&gt;
&lt;span class="nv"&gt;C&lt;/span&gt;:\&lt;span class="nv"&gt;Program&lt;/span&gt; &lt;span class="nv"&gt;Files&lt;/span&gt;\&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="nv"&gt;S&lt;/span&gt; &lt;span class="nv"&gt;CoDeSys&lt;/span&gt; &lt;span class="nv"&gt;V3&lt;/span&gt;.&lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="nv"&gt;SP3&lt;/span&gt;\&lt;span class="nv"&gt;CoDeSys&lt;/span&gt;\&lt;span class="nv"&gt;Common&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;</summary></entry><entry><title>Scripting - Beispiele und Rezepte</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/98bdd88510/?limit=25#c1b7" rel="alternate"/><published>2020-02-28T01:24:22.857000Z</published><updated>2020-02-28T01:24:22.857000Z</updated><author><name>Anonymous</name><uri>https://forge.codesys.com/u/*anonymous/</uri></author><id>https://forge.codesys.com5c4b48440408f57aac3cb31a3d03fb641824dc48</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;&lt;em&gt;Originally created by:&lt;/em&gt; M.Schaber&lt;/p&gt;
&lt;p&gt;In diesem Thread möchten wir Beispiele und Rezepte sammeln, wie man komplexere Vorgänge in der CoDeSys Scriptsprache implementieren kann.&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>