Abfrage an einen OPCUA Server

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Ich glauebe, es wäre ganz hilfreich deinen ganzen Code zu sehen. Grundsätzlich gilt, dass jedes insert in eine Datenbank eine Transaktion öffnet, die am Ende mit einem "commit" fest in die Datenbank geschrieben werden muss. "commit" ist recht teuer. Wenn man recht viele Daten auf einmal einfügen möche, ist es also sinnvoll das zu bünden, bevor man commit aufruft. Dazu kommt, dass sqlite3 - wenn ich mich richtig erinnere - mit autocommit läuft, wenn man kein isolation_level angibt. Dann wird sowieso für jedes Statement ein commit ausgeführt, was ebenfalls alng dauert.

Wenn du deine Datenbank so angepasst hast, dass alles in einer tabelle steht, kannst du recht viele gleichlautende Daten mit "executemany" einfügen, da das Statement gleich bleibt und nur die Values sich ändern.

Das dürfte dann deutlich flotter werden.
Knausbär
User
Beiträge: 9
Registriert: Mittwoch 15. September 2021, 12:08

Hallo sparrow,

der ganze Code umfasst in etwa 1800 Zeilen.
Ich werde die Datenbank heute zusammenführen. Mit dem "executemany" füge ich schon alle Daten eines Sensors mit einem mal in die Datenbank ein. Nur das ich das für die 60 Sekunden mit einem mal schaffe, daran beiße ich mir die Zähne aus. Da wäre ich für einen Tipp dankbar.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@Knausbär: bei Deinem letzten Code benutzt Du noch `executemany` falsch, also wäre es gut, wenn Du Deinen aktuell benutzen Code hier posten würdest. Und wenn Du all das, was Dir hier als Tipps gegeben wurde, umgesetzt hast, sind es dann immer noch 1800 Zeilen Code?
Knausbär
User
Beiträge: 9
Registriert: Mittwoch 15. September 2021, 12:08

@Sirius3: ich bastel morgen die Datenbanken einmal um. Und poste dann den relevanten Code. Und wenn ich alle Tipps umsetze kommen wir vielleicht auf 1200 Zeilen Code.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1012
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

rogerb hat geschrieben: Donnerstag 16. September 2021, 07:46 @Knausbär,

Grundsätzlich, kann ich mir kaum vorstellen, dass Python zu langsam hierfür wäre. Was aber jetzt so lange dauert ist schwer zu sagen.

Nein, es seiden Python schafft es nicht alle 100 ms irgendwas zu machen.
Die Samplerate beträgt bei den normalen Modellen 100 ms und die kostspieligen können sogar 10 ms.
Auch das ist kein Problem für Python, es seiden man macht die Aufrufe zu komplex, dass sie länger als 100 ms brauchen.

Generell würde ich die Pfade zusammenfassen, um Copy&Pase-Fehler zu verhindern.
Man kann auch Listen mit einzelnen str nutzen, um die Symbole zu addressieren.

Ein weiter Vorteil ist es, wenn man bei der SPS eine OPC-UA-Spezifikation anlegt und anstatt auf die Standard-Stimatic-Schnitstelle, auf seine eigene zugreift.
Ich glaube das geht aber erst seit Tia Portal v15. Aktuell ist V17. Mit den verdammten Installationen komme ich gar nicht mehr nach.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten