https://wiki.ibhsoftec.com/de/api.php?hidebots=1&days=30&limit=50&target=Hauptseite&action=feedrecentchanges&feedformat=atom
IBHsoftec Wiki - Änderungen an Seiten, die von „Hauptseite“ verlinkt sind [de]
2024-03-29T06:45:46Z
Änderungen an verlinkten Seiten
MediaWiki 1.23.14
https://wiki.ibhsoftec.com/de/index.php?title=IBH_Link_UA:Konfiguration_einer_Logo!_Steuerung_mit_dem_IBH_OPC_UA_Editor&diff=4418&oldid=4323
IBH Link UA:Konfiguration einer Logo! Steuerung mit dem IBH OPC UA Editor
2024-03-20T12:41:50Z
<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← Nächstältere Version</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Version vom 20. März 2024, 12:41 Uhr</td>
</tr><tr><td colspan='4' style='text-align: center;' class='diff-multi'>(3 dazwischenliegende Versionen des gleichen Benutzers werden nicht angezeigt)</td></tr><tr><td colspan="2" class="diff-lineno">Zeile 1:</td>
<td colspan="2" class="diff-lineno">Zeile 1:</td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>'''[https://download.ibhsoftec.com/german/Handbuecher/<del class="diffchange diffchange-inline">Beispiel–IBH</del>-OPC-UA-<del class="diffchange diffchange-inline">EditorKonfiguration-TCP-IP</del>-LOGO.pdf Handbuch]'''</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>'''[https://download.ibhsoftec.com/german/Handbuecher/<ins class="diffchange diffchange-inline">IBH</ins>-OPC-UA-<ins class="diffchange diffchange-inline">Editor</ins>-LOGO<ins class="diffchange diffchange-inline">!</ins>.pdf Handbuch]'''</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>'''[https://download.ibhsoftec.com/german/Beispiele/SPS-Beispiel-LOGO.zip Beispiel passend zum Handbuch]'''</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>'''[https://download.ibhsoftec.com/german/Beispiele/SPS-Beispiel-LOGO.zip Beispiel passend zum Handbuch]'''</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Zeile 5:</td>
<td colspan="2" class="diff-lineno">Zeile 5:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Der '''IBH OPC UA Editor''' steht kostenfrei zur Verfügung:</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Der '''IBH OPC UA Editor''' steht kostenfrei zur Verfügung:</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>'''[https://download.ibhsoftec.com/neutral/<del class="diffchange diffchange-inline">IBHOPCUAEditor749Setup</del>.exe IBH OPC UA Editor]'''</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>'''[https://download.ibhsoftec.com/neutral/<ins class="diffchange diffchange-inline">IBHOPCUAEditor750Setup</ins>.exe IBH OPC UA Editor]'''</div></td></tr>
</table>
Andreas
https://wiki.ibhsoftec.com/de/index.php?title=IBH_Link_UA:Python/Methoden/Datenmodelle&diff=4414&oldid=4412
IBH Link UA:Python/Methoden/Datenmodelle
2024-03-14T11:36:44Z
<p><span dir="auto"><span class="autocomment">Visual Studio Code</span></span></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← Nächstältere Version</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Version vom 14. März 2024, 11:36 Uhr</td>
</tr><tr><td colspan='4' style='text-align: center;' class='diff-multi'>(Eine dazwischenliegende Version des gleichen Benutzers werden nicht angezeigt)</td></tr><tr><td colspan="2" class="diff-lineno">Zeile 22:</td>
<td colspan="2" class="diff-lineno">Zeile 22:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[Image:IBH_Link_UA_Nodeset.png|504px]]</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[Image:IBH_Link_UA_Nodeset.png|504px]]</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">== Visual Studio Code==</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">Um eine komfortable Code Autovervollständigung in Visual Studio Code zu bekommen, kann die Definition ibhua.pyi in das Arbeitsverzeichnis kopiert werden..<br></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">'''[http://download.ibhsoftec.com/neutral/ibhua.pyi.zip ibhua.pi]'''</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>=Funktionen aus dem Modul ibhua=</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>=Funktionen aus dem Modul ibhua=</div></td></tr>
</table>
Andreas
https://wiki.ibhsoftec.com/de/index.php?title=IBH_Link_UA:Python/Methoden/Datenmodelle&diff=4412&oldid=4406
IBH Link UA:Python/Methoden/Datenmodelle
2024-03-14T10:51:32Z
<p><span dir="auto"><span class="autocomment">setSystemLog (Gruppe,logtext,status)</span></span></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← Nächstältere Version</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Version vom 14. März 2024, 10:51 Uhr</td>
</tr><tr><td colspan='4' style='text-align: center;' class='diff-multi'>(4 dazwischenliegende Versionen des gleichen Benutzers werden nicht angezeigt)</td></tr><tr><td colspan="2" class="diff-lineno">Zeile 30:</td>
<td colspan="2" class="diff-lineno">Zeile 30:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>  import ibhua</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>  import ibhua</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>  ibhua.RedirectLogOutput()</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>  ibhua.RedirectLogOutput()</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>  print("Test")</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>   </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline"> def init_opc():</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">  </ins>print("Test")</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>   </div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>   </div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[Image:IBH_Link_UA_Redirect.png|839px]]</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[Image:IBH_Link_UA_Redirect.png|839px]]</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Zeile 44:</td>
<td colspan="2" class="diff-lineno">Zeile 46:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Beispiel:</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Beispiel:</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>  import ibhua</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>  import ibhua</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>  ibhua.setSystemLog("meine Gruppe","mein Logtext",4711)</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>   </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline"> def init_opc():</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">  </ins>ibhua.setSystemLog("meine Gruppe","mein Logtext",4711)</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[Image:IBH_Link_UA_setsystemlog.png|845px]]</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[Image:IBH_Link_UA_setsystemlog.png|845px]]</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Zeile 81:</td>
<td colspan="2" class="diff-lineno">Zeile 85:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>  ibhua.RedirectLogOutput()</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>  ibhua.RedirectLogOutput()</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>   </div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>   </div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>  uhrzeit=ibhua.OPCReadVar("ns=0;i=2258")</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>  <ins class="diffchange diffchange-inline">def init_opc():</ins></div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline"> </del>print(uhrzeit)</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">  </ins>uhrzeit=ibhua.OPCReadVar("ns=0;i=2258")</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">  </ins>print(uhrzeit)</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>In diesem Beispiel wird in die Diagnose nach dem Neustart die aktuelle Uhrzeit eingetragen.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>In diesem Beispiel wird in die Diagnose nach dem Neustart die aktuelle Uhrzeit eingetragen.</div></td></tr>
</table>
Axel
https://wiki.ibhsoftec.com/de/index.php?title=IBH_Link_UA:Python/Methoden/Datenmodelle&diff=4406&oldid=0
IBH Link UA:Python/Methoden/Datenmodelle
2024-03-01T10:29:34Z
<p>Die Seite wurde neu angelegt: „Diese Option ist nur im '''[https://www.ibhsoftec.com/IBH-Link-UA-QC IBH-Link-UA-QC]''' aktiviert, da hierfür mehr Speicher benötigt wird.<br><br> Es lassen…“</p>
<p><b>Neue Seite</b></p><div>Diese Option ist nur im '''[https://www.ibhsoftec.com/IBH-Link-UA-QC IBH-Link-UA-QC]''' aktiviert, da hierfür mehr Speicher benötigt wird.<br><br><br />
Es lassen sich jetzt mit der Programmiersprache Python Methoden realisieren, sowie Daten einfacher austauschen und verarbeiten.<br><br />
Einige Beispiele zur Umsetzung komplexer Funktionen:<br><br />
Es lassen sich komplexe Aufgaben automatisieren, wie z.B. die<br />
Überwachung von Maschinenparametern oder die Optimierung von Produktionsprozessen.<br><br />
Große Datenmengen können analysiert und ausgewertet werden,<br />
um Trends und Muster zu erkennen und Prozesse zu optimieren.<br />
<br />
Durch die Integration von Python-Modulen für Machine Learning<br />
können Maschinenparameter und -daten analysiert werden, um Vorhersagen und Empfehlungen für die Optimierung der Maschinenleistung zu treffen.<br />
Daten sind aus verschiedenen Quellen und Systemen integrierbar, um ein umfassendes Bild der Maschinenleistung und -produktivität zu erhalten<br />
Um Datenmodelle bzw. Companion Specs mit Python-Modulen auf dem IBH Link UA zu koppeln, wird zunächst das gewünschte Companion Spec oder Datenmodell in das Projekt auf dem IBH Link UA eingebunden. Dazu kann das entsprechende XML-File über den Webserver des IBH Link UA hochgeladen werden. Die OPC Foundation hat Datenmodelle für eine Vielzahl von Branchen spezifiziert. Für die Industrieautomatisierung etwa gibt es Datenmodelle für die Automatisierung von Produktionsanlagen und Maschinen, wie Maschinensteuerung, Überwachung und Diagnose, sowie Produktionsprozessverwaltung und Energiemanagement. Die Datenmodelle können mit speziellen Nodeset-Tools (UAModeler – ein kostenpflichtiges Werkzeug von Unified Automation oder Siome – eine Freeware von Siemens) erstellt werden und beschreiben die Schnittstelle, über die die Daten ausgetauscht werden sollen.<br />
<br />
=Aufbau eines Python Programmes=<br />
<br />
Im Python Programm werden die speziellen Funktionen des IBHLinkUA importiert. Zur Initialisierung ruft der IBHLinkUA die Funktion "init_opc()" auf. <br />
Beispiel:<br />
import ibhua<br><br><br />
def init_opc():<br />
return<br />
Es können mehrere Python Programme eingelesen werden. Zusätzlich sind auch Python Programme ohne diese Spezialfunktionen möglich.<br />
<br />
[[Image:IBH_Link_UA_Nodeset.png|504px]]<br />
<br />
=Funktionen aus dem Modul ibhua=<br />
== RedirectLogOutput() ==<br />
Leitet alle print, stdout und stderr Ausgaben ins Systemlog um. Diese kann in der Web-Oberfläche unter „Diagnose Systemereignisse“ betrachtet werden.<br />
<br />
Beispiel:<br />
import ibhua<br />
ibhua.RedirectLogOutput()<br />
print("Test")<br />
<br />
[[Image:IBH_Link_UA_Redirect.png|839px]]<br />
<br />
==setSystemLog (Gruppe,logtext,status)==<br />
Schreibt einen Eintrag ins Systemlog. Diese kann in der Web-Oberfläche unter „Diagnose Systemereignisse“ betrachtet werden.<br />
<br />
Parameter:<br />
- Gruppe : String<br />
- logtext : String<br />
- Status : Integer<br />
<br />
Beispiel:<br />
import ibhua<br />
ibhua.setSystemLog("meine Gruppe","mein Logtext",4711)<br />
<br />
[[Image:IBH_Link_UA_setsystemlog.png|845px]]<br />
<br />
== Breakpoint() ==<br />
Setzt einen Breakpoint. Wenn der Breakpoint erreicht wird, wird der Debugger aktiviert. Man kann den Debugger über einen Webbrowser über das Port 5555 erreichen.<br />
http://<adresse IBHLinkUA>:5555<br />
<br />
Beispiel:<br />
import ibhua<br />
<br />
def init_opc():<br />
a=1<br />
ibhua.Breakpoint()<br />
b=a+20<br />
b=b+a+20<br />
<br />
Nach Laden des Beispiels:<br />
<br />
[[Image:IBH_Link_UA_Breakpoint1.png|845px]]<br />
<br />
Nach Drücken der Step Taste:<br />
<br />
[[Image:IBH_Link_UA_Breakpoint2.png|1612px]]<br />
<br />
== OPCReadVar(node) ==<br />
Funktion zum Lesen von OPC - Nodes.<br />
<br />
Parameter:<br />
* node: Nodeid<br />
* Returnwert: Scalarwert oder Stringvariable<br />
<br />
Beispiel:<br />
<br />
import ibhua<br />
ibhua.RedirectLogOutput()<br />
<br />
uhrzeit=ibhua.OPCReadVar("ns=0;i=2258")<br />
print(uhrzeit)<br />
<br />
In diesem Beispiel wird in die Diagnose nach dem Neustart die aktuelle Uhrzeit eingetragen.<br />
<br />
== monitor("node", "Monitor Funktion", Intervall, Triggermode, Deadband) ==<br />
Bei Änderung der OPC-Variablen “Node” wird die Funktion “Monitor Funktion“ aufgerufen.<br />
<br />
„Intervall“: bestimmt den Abtastintervall in ms. <br />
<br />
„Triggermode“ : <br />
* 0 = wird immer Getriggert<br />
* 1=Trigger bei Wertänderung<br />
* 2=Trigger bei ansteigender Flanke<br />
* 3=Trigger bei abfallender Flanke<br />
<br />
„Deadband“: bestimmt die minimale Wertänderung, die zum Trigger führt<br />
Die Monitorfunktion enthält einen Eingangsparameter mit dem gelesenen Wert.<br />
<br />
Beispiel:<br />
import ibhua<br />
ibhua.RedirectLogOutput()<br />
<br />
def Monitor(Var):<br />
print(Var)<br />
return <br />
<br />
def init_opc():<br />
ibhua.monitor("ns=0;i=2258","Monitor",1000,0,0)<br />
return<br />
<br />
In diesem Beispiel wird in die Diagnose jede Sekunde die aktuelle Uhrzeit eingetragen.<br />
<br />
== OPCWriteVar(node,var) ==<br />
<br />
Funktion zum Schreiben von Scalar Nodes und String Nodes. Der OPCTyp wird aus der Zielvariablen automatisch ermittelt.<br />
<br />
Parameter:<br />
* node: Nodeid<br />
* var: Scalar oder String Wert<br />
<br />
Beispiel:<br />
<br />
import ibhua<br />
<br />
def Monitor(Var):<br />
ibhua.OPCWriteVar("ns=4;s=QuadcoreNodesetExample.SoftPLC.Generic.ActualWatch",Var)<br />
return <br />
<br />
def init_opc():<br />
ibhua.monitor("ns=0;i=2258","Monitor",1000,0,0)<br />
return<br />
<br />
<br />
In diesem Beispiel wird die Uhrzeit jede Sekunde in die SPS Stringvariable "QuadcoreNodesetExample.SoftPLC.Generic.ActualWatch" eingetragen.<br />
<br />
<br />
== OPCResult() ==<br />
<br />
Gibt das Ergebnis der Funktionen OPCReadVar, OPCWriteVar und OPCCallMethod zurück.<br />
<br />
Parameter:<br />
* Returnwert: 0=Erfolgreich<br />
<br />
=Zugriff auf externe OPC Server=<br />
Zum Zugriff auf externe OPC Sever muss zuerst in der Client Funktion ein externer Server eingerichtet werden.<br />
<br />
[[Image:IBH_Link_UA_Select_Server.png|1386px]]<br />
<br />
Den Funktionen: <br />
<br />
'''OPCReadVar'''<br />
<br />
'''OPCWriteVar'''<br />
<br />
'''OPCCallMethod'''<br />
<br />
wird als erstes Parameter der Servername angegeben.<br />
<br />
'''Achtung ! Der Servername muss exakt wie in der Weboberfläche (Leerzeichen vor dem „(„ beachten) angegeben werden !'''<br />
<br />
Beispiel:<br />
ExternerServer = "urn:ibhlinkua-002808:IBHsoftec:IBHLinkUA (opc.tcp://10.0.12.88:48010)"<br />
…<br />
OPCVar=ibhua.OPCReadVar(ExternerServer,"ns=4;s=PC-Station.Software PLC_1.GlobalVars.Tag_1")<br />
<br />
==OPCConnectedServers ()==<br />
Diese Funktion gibt eine Liste mit den Verbundenen OPC Servern zurück.<br />
<br />
Mit dieser Funktion kann man einfach den kompletten Namen eines externen Servers ermitteln.<br />
<br />
Beispiel:<br />
<br />
In den folgenden Beispielen wird davon ausgegangen, dass sie in der Clientfunktion eine Verbindung zu dem Demo Server von Unified Automation (opc.tcp://opcuaserver.com:48010) hergestellt haben.<br />
<br />
import ibhua<br />
ibhua.RedirectLogOutput()<br />
<br />
ExternServer=""<br />
<br />
def init_opc():<br />
#search in ExternServer "opcuaserver.com"<br />
ExternServers=ibhua.OPCConnectedServers ()<br />
print (ibhua.OPCConnectedServers ())<br />
for line in ExternServers:<br />
if "opcuaserver.com" in line:<br />
ExternServer=line<br />
if ExternServer:<br />
print (ExternServer)<br />
else: <br />
print("no extern Server") <br />
<br />
if ExternServer:<br />
FillLevelSetPoint=ibhua.OPCReadVar(ExternServer,"ns=2;s=Demo.BoilerDemo.Boiler1.FillLevelSetPoint")<br />
print(FillLevelSetPoint)<br />
<br />
==OPCCallMethod(ExternerServer,object-nodeid, method-nodeid)==<br />
Aufruf einer Methode ohne Parameter<br />
<br />
Parameter:<br />
* ExternerServer<br />
* object-nodeid : Nodename des übergeordneten Objekts<br />
* method-nodeid : Nodename der Methode<br />
* return : Ergebnis (0=Erfolgreich)<br />
<br />
Beispiel:<br />
<br />
import ibhua<br />
ibhua.RedirectLogOutput()<br />
<br />
ExternServer="" <br />
<br />
def init_opc():<br />
#search in ExternServer "opcuaserver.com"<br />
ExternServers=ibhua.OPCConnectedServers ()<br />
for line in ExternServers:<br />
if "opcuaserver.com" in line:<br />
ExternServer=line<br />
<br />
if ExternServer:<br />
result=ibhua.OPCCallMethod(ExternServer,"ns=2;s=Demo","ns=2;s=Demo.StartSimulation")<br />
print(result)<br />
<br />
==OPCCallMethod(ExternerServer,object-nodeid, method-nodeid,[parameter_1,…parameter_n)==<br />
<br />
Aufruf einer Methode mit Parametern<br />
<br />
Parameter:<br />
* ExternerServer<br />
* object-nodeid : Nodename des übergeordneten Objekts<br />
* method-nodeid : Nodename der Methode<br />
* [parameter]: Eingangs-Parameterliste<br />
* return Ausgangs-Parameterliste<br />
<br />
Beispiel:<br />
<br />
import ibhua<br />
ibhua.RedirectLogOutput()<br />
<br />
ExternServer=""<br />
<br />
def init_opc():<br />
#search in ExternServer "opcuaserver.com"<br />
ExternServers=ibhua.OPCConnectedServers ()<br />
for line in ExternServers:<br />
if "opcuaserver.com" in line:<br />
ExternServer=line<br />
<br />
if ExternServer:<br />
results=ibhua.OPCCallMethod(ExternServer,"ns=2;s=Demo.Method","ns=2;s=Demo.Method.Multiply",[2.14,3.5])<br />
status=ibhua.OPCResult()<br />
if status==0:<br />
for result in results:<br />
print(result)<br />
else:<br />
print("Error")<br />
<br />
Anbei ein Beispiel, das eine Methode mit Parametern aus der SPS steuert:<br />
<br />
import ibhua<br />
ibhua.RedirectLogOutput()<br />
<br />
ExternServer=""<br />
<br />
def Multiply(var):<br />
global ExternServer<br />
if ExternServer:<br />
Mul_a=ibhua.OPCReadVar("ns=4;s=QuadcoreNodesetExample.SoftPLC.Generic.Mul_a")<br />
Mul_b=ibhua.OPCReadVar("ns=4;s=QuadcoreNodesetExample.SoftPLC.Generic.Mul_b")<br />
results=ibhua.OPCCallMethod(ExternServer,"ns=2;s=Demo.Method","ns=2;s=Demo.Method.Multiply",[Mul_a,Mul_b])<br />
status=ibhua.OPCResult()<br />
if status==0:<br />
for result in results:<br />
ibhua.OPCWriteVar("ns=4;s=QuadcoreNodesetExample.SoftPLC.Generic.MUL_Result ",result)<br />
else:<br />
print("Error") <br />
<br />
<br />
def init_opc():<br />
global ExternServer<br />
#search in ExternServer "opcuaserver.com"<br />
ExternServers=ibhua.OPCConnectedServers ()<br />
for line in ExternServers:<br />
if "opcuaserver.com" in line:<br />
ExternServer=line<br />
<br />
ibhua.monitor("ns=4;s=QuadcoreNodesetExample.SoftPLC.Generic.StartMul","Multiply",1000,2,0)<br />
<br />
=Arbeiten mit Nodesets=<br />
<br />
Es ist jetzt möglich Nodesets einzulesen und mit Python Modulen zu verknüpfen. <br />
<br />
Die Nodesets werden mit dem UAModeler oder mit SiOME (Freeware von Siemens) erstellt. <br />
Im Modeler gibt man das Projekt als XML File aus.<br />
<br />
Eine Dokumentation zum SiOME finden Sie hier: https://support.industry.siemens.com/cs/document/109755133/siemens-opc-ua-modeling-editor-(siome)?dti=0&lc=de-DE<br />
<br />
Das Handbuch finden Sie hier: https://support.industry.siemens.com/cs/attachments/109755133/109755133_SiOME_MAN_V27_de.pdf<br />
<br />
Führen Sie laut Handbuch "Modellieren des Adressraums" aus und exportieren Sie das Informationsmodell (3.19):<br />
<br />
[[Image:IBH_Link_UA_Siome.png|762px]] <br />
<br />
<br />
Laden Sie das Informationsmodell<br />
<br />
[[File:IBH_Link_UA_Siome_Nodeset.png|504px]]<br />
<br />
Danach erscheint das angelegte Objet im Adressraum des OPC Servers:<br />
<br />
[[Image:IBH_Link_UA_Nodeset_Example.png|432px]]<br />
<br />
Jetzt können Sie die Variablen und Methoden mit dem Python Programm verknüpfen.<br />
<br />
== OPCError (OPC Fehlercode) ==<br />
<br />
Bricht bei einem Fehlercode ungleich 0 die Ausführung ab und gibt den OPC-Fehlercode zurück.<br />
<br />
Wird eine 0 übergeben, hat die Funktion keine Wirkung.<br />
<br />
== get_namespace(name) ==<br />
<br />
Diese Funktion gibt die Namespacenummer zurück. Als Eingansparameter gibt man den Namespacenamen an.<br />
Der Namespacename findet man im UAExpert unter Server:<br />
<br />
[[Image:IBH_Link_UA_Name_Space.png|441px]]<br />
<br />
Beispiel:<br />
import ibhua<br />
ibhua.RedirectLogOutput()<br />
<br />
def init_opc():<br />
ns=ibhua.get_namespace("http://example.com")<br />
print(ns)<br />
<br />
== method(ns, id, "funktion") ==<br />
<br />
Verknüpft eine Methode, die in einem eingelesenen Nodeset definiert wurde, mit einer Python Funktion.<br />
<br />
Parameter: <br />
* ns : Namespacenummer<br />
* Id : Nodename oder Numerischer ID<br />
* Funktion die beim Aufruf der Methode aufgerufen wird<br />
Die Funktion enthält für jedes Eingangsparamter ein Argument und kann für jedes Ausgangsparameter ein Argument zurückgeben.<br />
<br />
Funktionen ohne einen Ausgangsparameter dürfen keinen Wert zrückgeben.<br />
<br />
Das Funktionsergebnis (Erfolg/Misserfolg) muss generell mit OPCError() übergeben werden. <br />
<br />
„id“ kannen mit dem UAExpert ernittelt werden :<br />
<br />
[[Image:IBH_Link_UA_Attributes.png|345px]]<br />
<br />
<br />
Beispiel:<br />
import ibhua<br />
ibhua.RedirectLogOutput()<br />
<br />
def UserMethod(a,b):<br />
result=0<br />
c=a*b<br />
ibhua.OPCError(result)<br />
return c<br />
<br />
def init_opc():<br />
ns=ibhua.get_namespace("http://example.com")<br />
ibhua.method(ns,7000,"UserMethod")<br />
<br />
==variable(ns, id, "read funktion", "write funktion")==<br />
Verknüpft eine Variable, die in einem eingelesenen Nodeset definiert wurde, mit einer Python Funktion.<br />
<br />
Parameter: <br />
* ns : Namespacenummer<br />
* Id : Nodename oder Numerischer ID<br />
* read funktion : Funktion die beim lesen der Variablen aufgerufen wird<br />
Die Funktion enthält kein Eingangsparamter und ein Ausgangsparameter. <br />
* write funktion : Funktion die beim schreiben der Variablen aufgerufen wird<br />
Die Funktion enthält ein Eingangsparamter und kein Ausgangsparameter.<br />
<br />
Beispiel:<br />
<br />
import ibhua<br />
<br />
OPCVar=123.456<br />
<br />
def UserRead():<br />
result=0<br />
global OPCVar<br />
ibhua.OPCError(result)<br />
return OPCVar<br />
<br />
def UserWrite(var):<br />
result=0<br />
global OPCVar<br />
OPCVar=var<br />
ibhua.OPCError(result)<br />
return <br />
<br />
def init_opc():<br />
ns=ibhua.get_namespace("http://example.com")<br />
ibhua.variable(ns,6008,"UserRead","UserWrite")<br />
<br />
==map(ns, id, ns_destination, id_destination )==<br />
Verbindet die OPCVariable (ns,id) mit einer anderen Variablen. <br />
<br />
Der Vorteil dieser Funktion ist, dass kein Python Programm beim lesen und schreiben durchlaufen wird. (schneller)<br />
<br />
'''Achtung: Die Datentypen müssen übereinstimmen!'''<br />
<br />
Parameter:<br />
* ns : Namespacenummer<br />
* id : Nodename oder Numerischer ID<br />
* ns_destination : Namespacenummer der Zielvariablen<br />
* id_destination : Nodename oder Numerischer ID der Zielvariablen<br />
* node : Nodeid der Variablen in einem anderen Namespace<br />
*<br />
* Returnwert: 1=Erfolgreich, -1=nicht erfolgreich<br />
<br />
Beispiel:<br />
<br />
import ibhua<br />
<br />
def init_opc():<br />
ns=ibhua.get_namespace("http://example.com")<br />
ibhua.map(ns,6011,4,"QuadcoreNodesetExample.SoftPLC.Generic.PLCFloatVar")<br />
<br />
=Ausführliche Beispiele=<br />
<br />
==Beispiel mit einer S7-1500 ==<br />
Die Dokumentation und die Beispiele werden uns von unserem Schulungspartner '''[https://www.ibhsoftec.com/Training TTI]''' zur Verfügung gestellt.<br />
<br />
'''[https://download.ibhsoftec.com/german/Handbuecher/IBH-Link-UA-Phyton-Methoden-Datenmodelle-CPU1500.pdf Dokumentation passend zum Beispiel S7-1500 ]'''<br />
<br />
'''[https://download.ibhsoftec.com/german/Beispiele/NodeSet-Manual-CPU-1500.zip Beispiel passend zur Dokumention]'''<br />
<br />
Die Zip Datei enthält Phyton, IBH OPC UA Editor Beispiele, sowie das TIA V18 Projekt<br />
<br />
==Eine Methode aus dem Nodeset führt einen Funktionsbaustein in der SPS aus==<br />
<br />
Python Programm :<br />
<br />
import ibhua<br />
import time<br />
<br />
#OPC Error Codes<br />
Bad_Timeout=0x800A0000<br />
Bad_UnexpectedError=0x80010000<br />
<br />
def SetTemperature(SetPoint):<br />
Method_Control=ibhua.OPCReadVar("ns=4;s=QuadcoreNodesetExample.SoftPLC.GlobalVars.UA_Method_Control")<br />
if Method_Control==0:<br />
ibhua.OPCWriteVar("ns=4;s=QuadcoreNodesetExample.SoftPLC.Programs.DB 1.SetPoint",SetPoint)<br />
ibhua.OPCWriteVar("ns=4;s=QuadcoreNodesetExample.SoftPLC.GlobalVars.UA_Method_Control",1)<br />
Method_Control=1<br />
<br />
seconds = time.time()<br />
while Method_Control==1:<br />
Method_Control=ibhua.OPCReadVar("ns=4;s=QuadcoreNodesetExample.SoftPLC.GlobalVars.UA_Method_Control")<br />
if time.time()>(seconds+2):<br />
ibhua.OPCError(Bad_Timeout)<br />
ibhua.OPCWriteVar("ns=4;s=QuadcoreNodesetExample.SoftPLC.GlobalVars.UA_Method_Control",0)<br />
ActualTemperature=Method_Control=ibhua.OPCReadVar("ns=4;s=QuadcoreNodesetExample.SoftPLC.Programs.DB 1.Actual")<br />
else:<br />
ibhua.OPCError(Bad_UnexpectedError)<br />
return ActualTemperature<br />
<br />
def ReadTemp():<br />
return ibhua.OPCReadVar("ns=4;s=QuadcoreNodesetExample.SoftPLC.GlobalVars.Temperature")<br />
<br />
<br />
def init_opc():<br />
ns=ibhua.get_namespace("http://example.com")<br />
print(ns)<br />
ibhua.method(ns,7001,"SetTemperature")<br />
ibhua.monitor("ns=4;s=QuadcoreNodesetExample.SoftPLC.GlobalVars.Temperature","Temperature",1000,0,0)<br />
ibhua.variable(ns,6014,"ReadTemp","")<br />
<br />
Auszug aus dem SPS Programm:<br />
<br />
L "UA_Method_Control" // Call Method <br />
L 1<br />
<>I <br />
SPB noc<br />
CALL FB 1, DB 1<br />
SetPoint := <br />
Actual := <br />
L 2 // Method Complete<br />
T "UA_Method_Control"<br />
noc:</div>
Andreas