Problem mit der Nutzung von Handles im ADSIGRP_SUMUP_READWRITE Request

oVi1337

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen in die Runde :)

Ich bin gerade dabei die node-ads Library zu erweitern, jedoch hänge ich an einem Problem fest, bei dem ich mir nicht ganz sicher bin,
woran es scheitert. Ich kann die Dokumentation leider auch nicht so richtig deuten...
Es geht konkret um das ADS SumReadWrite (0xF082 ADSIGRP_SUMUP_READWRITE) und die entsprechende Erweiterung der Library, da die Funktionaltät im aktuellen Zustand nicht funktionierte.
Mit meinem aktuellen PullRequest ist man zumindest in der Lage mehrere Werte über die IndexGroup und den IndexOffset abzurufen. Allerdings würde ich auch gern nur über den SymbolName, anstelle der IndexGroup und dem IndexOffset gehen wollen. Dies wäre ja eigentlich über Handles (0x0000F005 READ_/WRITE_SYMVAL_BYHANDLE) möglich. Allerdings scheine ich an einer Stelle einen Fehler zu machen, da zwar das Handle habe, ich aber keine Werte zurück bekomme...
Falls es weiter helfen sollte, erhalte ich den ErrorCode 1794, welcher laut Dokumentation "DeviceInvalidGroup = 1794" besagt.
https://github.com/roccomuso/node-ads/pull/12

Ein paar Informationen darüber habe ich zwar gefunden, helfen mir aber leider nicht wirklich weiter...
https://infosys.beckhoff.com/index....ple_VC/HTML/TcAdsDll_API_CPP_Sample17.htm&id=
https://infosys.beckhoff.de/english...33/tc3_adsdevicenc/72057594750989835.html&id=

Kann irgendwie jemand helfen oder weiß, ob und wie das Datenpaket für den ADSIGRP_SUMUP_READWRITE Request aussehen muss, wenn ich Daten über einen Handle abrufen oder schrieben möchte?

Besten Dank im Voraus!
 
Hi,
ich klugscheiße jetzt mal aus meiner eigenen Erfahrungskiste, ohne mir den Code angeschaut zu haben.

Ich dachte früher, auch es muss doch möglich sein die Variablen über den Namen zu lesen. Dabei bin ich auch mit dem Kopf gegen die Wand und mit der Fehlermeldung zurückgeprallt.
Man benötigt immer 2 Zugriffe. Zuerst muss man mit der Variable die Group und den Offset bestimmen. Danach das Value lesen oder Schreiben. Ich hab das mal in C++ gemacht. Bin mir auch sicher, dass beides über den Multiread ging. Die Handels bleiben solange gültig bis sich die Version der SYM ändert. Das geht einem Single Read mit indexGroup: ads.ADSIGRP.SYM_VERSION, indexOffset: 0, bytelength: ads.BYTE. Dadurch ist es möglich die Handels zwischen zu speichern. Ein Beispiel für die SYM hab ich dem NODE-ADS hinzugefügt.

Ich bin aber davon abgekommen große Mengen zu Pollen. Wenn man Array Strukturen oder Typen in des SPS nutzt, kann man diese mit einer Notifikation in einem Rutsch übermittelt bekommen. Hierzu muss man nur die Größe in Byte beim Read in NODE-ADS angeben, nicht die fertigen typen. Programmupdates bekommt der Lauscher ebenfalls über eine Notifikation wie oben beschrieben mit. Beckhoff spricht bei Notifikation von max. 500 Stück, bei Größe egal… so wat :cool:

Bei NODE-RED setze ich voll auf Notifikation und Typen. Hab das Modul bald fertig. Sollte meine alte Temperatur-Ankopplung schnell ablösen können. Bin übrigens fast durch, nur noch der Status :grin:


LG
ChrisHanuta
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Erstmal besten Dank für deine Antwort!
Also aktuell mache ich einen Warmup, indem ich mir alle Symbols hole, wodurch ich eine Art Konfiguration mit den benötigten IndexGroups, IndexOffsets und Datentypen bekomme.
Mit dieser Konfiguration kann ich die Daten relativ einfach und mit einem einzelnen Request als Collection abrufen. Es wäre allerdings eleganter, wenn die multiRead Funktion der Library ebenfalls mit dem Variablennamen arbeiten könnte.

Ich mache soweit auch alles über Notifications, aber ich möchte mir einen initialen Status aller Werte für ein Webinterface abrufen, da der Umfang sehr hoch ist.

Es geht konkret um eine komplette Haussteuerung für ein Mehrstöckiges Haus, in der jede Steckdose optional schaltbar und messbar, jeder Lichtschalter, jede Lichtquelle, jeder Bewegungsmelder, alle Rollos und Fenster, Temperatur, Feuchtigkeit, Helligkeit in Räumen, Klimaregelung, Heizung, Warmwasser, Türsensoren, Fenstersensoren, diverse Beamer, Fernseher und HomeEntertainment, Alarmanlage, Feuermelder, etc in jedem Raum per Touchscreen abrufbar und steuerbar sind. Hierzu habe ich einen zentralen Server, der ein Webinterface per WebSockets speist. Da kommen schnell riesige Datenmengen zusammen und will deshalb vieles einfach simpel per Request pollen da sich viele Zustände nicht so oft aktualisieren bzw. weniger zeitkritisch sind.

Ich muss mal schauen, ob ich mehrere Werte als Array abrufe - der Ansatz ist generell schon mal eine gute Idee. Hast du ggf. ein Code-Beispiel wie du ein komplettes Array abrufst?

Besten Dank erstmal :)
 
Zurück
Oben