Wago /SPS über Modbus(TCP/IP) in FHEM steuern

Begonnen von lechez, 05 Mai 2013, 10:50:13

Vorheriges Thema - Nächstes Thema

der-Lolo

Wow, combineReads funktioniert auf den ersten blick super.

Solange es performant genug bleibt also keine spielereien mit Coils in Registern...

1000Dank!

der-Lolo

Hallo ChrisD,
nach einem FHEM neustart fällt mir zur Zeit die folgende Zeile auf....

Zitat2017.10.19 13:53:34 2: ModbusTCPServer_Parse: except (code 2)

Kannst Du versuchen mir zu erklären was die aussage hinter der Meldung ist?


ChrisD

Hallo,

Die Meldung bedeutet dass versucht wird auf eine Adresse zuzugreifen die die SPS nicht kennt. Hast du die Meldung nur einmalig beim Start oder kommt sie regelmäßig ?

Grüße,

ChrisD

der-Lolo

nur einmalig beim start...
Ich habe aber noch eine ungewöhnlich hohe Prozessorlast(70%) und Speichernutzung(2/3 von 2GB) unter htop festgestellt - die DS716+ii ist als FhemHost aber stark genug, ich kann das problem nachstellen - ich hatte den Poll Interval immer auf 0.1 stehen, ich vermute das die menge an Coils und Registern die ich abrufe mittlerweile ein problem beim pollen sind und etwas wie ein "Que" voll läuft. Ab 0.5 ist wieder alles wie zuvor, Prozessorlast unter 10% und auch der Speicher scheint wieder normal zu funktionieren.

Nochmal ein list des Controllers in FHEM damit du überblicken kannst wieviel mittlerweile kommuniziert wird.
Internals:
   DEF        192.168.1.4
   DeviceName 192.168.1.4:502
   FD         13
   LAST_ERROR 7
   LAST_EXCEPT 2
   NAME       WagoController
   NR         23
   NTFY_ORDER 50-WagoController
   PARTIAL
   STATE      ok
   TYPE       ModbusTCPServer
   statistics 110168 / 110168 / 4351418 / 1322016
   READINGS:
     2017-10-20 16:10:47   state           opened
   helper:
     delayNextRead 0
     delayNextWrite 0
     fc         1
     hd_tr_id   64190
     hd_unit_id 0
     lastFrame  SimpleWrite [FA BE 00 00 00 06] 00 01 30 00 00 48
     lastSimpleWrite ��0H
     last_fc    3
     last_hd_tr_id 65190
     seq        65191
     seqCoils   64191
     state      idle
     Wago:
       AI         12
       AO         12
       DI         96
       DIOffset   192
       DO         72
       DOOffset   192
       initDone   1
       x          1
     bm:
       ModbusTCPServer_Notify:
         cnt        16890
         dmx        0
         mAr
         mTS
         max        0
         tot        0
       ModbusTCPServer_Read:
         cnt        110168
         dmx        0
         mTS        20.10. 17:42:56
         max        90
         tot        2651455
         mAr:
           HASH(0x1b6daa8)
       ModbusTCPServer_Set:
         cnt        3
         dmx        0
         mAr
         mTS
         max        0
         tot        0
     combineReads:
       cfg:
         maxSize    80
         maxSpace   20
       coils:
         ARRAY(0x96d7740)
         ARRAY(0x7f75308)
         ARRAY(0x96d4e30)
         ARRAY(0x826cb48)
         ARRAY(0x826d110)
         ARRAY(0x968c630)
         ARRAY(0x96db5f0)
         ARRAY(0x8266838)
         ARRAY(0x82664e0)
         ARRAY(0x96d7830)
         ARRAY(0x9680600)
         ARRAY(0x9665228)
         ARRAY(0x8265c40)
         ARRAY(0x96d57a0)
         ARRAY(0x9699468)
         ARRAY(0x96d4c50)
         ARRAY(0x8266820)
         ARRAY(0x967b198)
         ARRAY(0x96d6d28)
         ARRAY(0x96db938)
         ARRAY(0x966c0a0)
         ARRAY(0x96574e8)
         ARRAY(0x9647c60)
         ARRAY(0x8267f70)
         ARRAY(0x96d77b8)
         ARRAY(0x966c100)
         ARRAY(0x9640748)
         ARRAY(0x96d41a0)
         ARRAY(0x96d6e48)
         ARRAY(0x9675cb8)
         ARRAY(0x96db470)
         ARRAY(0x96d5db8)
         ARRAY(0x96d6350)
         ARRAY(0x96d5b60)
         ARRAY(0x96d7890)
       data:
         64058:
           0
           1
           12288
           72
         64314:
           0
           1
           12288
           72
         65082:
           0
           3
           12488
           26
         65338:
           0
           3
           12488
           26
       registers:
         ARRAY(0x96d7650)
         ARRAY(0x95f87e0)
         ARRAY(0x96db488)
         ARRAY(0x96d4938)
         ARRAY(0x967b330)
         ARRAY(0x7fd89f0)
         ARRAY(0x8267e98)
         ARRAY(0x96d62c0)
         ARRAY(0x9698ca0)
         ARRAY(0x96d3db8)
         ARRAY(0x96db5d8)
         ARRAY(0x8267d78)
         ARRAY(0x96d4a88)
         ARRAY(0x96d5158)
         ARRAY(0x96d4008)
         ARRAY(0x8265ac0)
         ARRAY(0x9647408)
         ARRAY(0x96d3800)
         ARRAY(0x96d7560)
         ARRAY(0x96d7aa0)
         ARRAY(0x96d5218)
         ARRAY(0x96d7cb0)
         ARRAY(0x966aba8)
         ARRAY(0x826bff0)
         ARRAY(0x96d6c68)
         ARRAY(0x96d7da0)
     statistics:
       bytesIn    4351418
       bytesOut   1322016
       pktIn      110168
       pktOut     110168
Attributes:
   combineReads 20:80
   event-on-change-reading .*
   pollInterval 0.4
   room       99-Controller
   serverType Wago


Vielleicht hängt das problem auch mit combine reads zusammen, das habe ich aber noch nicht abgeschaltet - weil es wirklich viel hilft.

Ich gebe und nehme aber immer noch lange nicht alle Daten die ich brauche, ob ich mir auf Wago Seite auch gedanken bzgl. Tasks und Task Klassen machen muss?

ChrisD

Hallo,

Durch das Attribut combineReads werden die Daten zwar schneller von der SPS gelesen, es kommen pro Lesezyklus aber auch wesentlich mehr Daten bei FHEM an die verarbeitet werden müssen. Ohne combineReads und mit einem Poll-Intervall von 0.1 muss FHEM alle 100 ms einen Wert verarbeiten, bei combineReads 20:80 sind es alle 100 ms bis zu 80 Werte. Du kannst die Verarbeitung durch FHEM etwas 'optimieren' indem du das Attribut event-on-change-reading bei allen Registern und Coils auf .* setzt. Das Poll-Intervall sollte auch so stehen dass die SPS genügend Zeit hat auf die Anfrage zu antworten. Es kann sein dass die 100 ms etwas zu kurz sind.

Auf der SPS sollte bei der Anzahl von I/Os keine Aufteilung in Tasks nötig sein, du kannst dir aber die Auslastung z.B. im PLC-Browser ansehen. Aktionen die länger brauchen (Zugriff auf Dateisystem oder Netzwerk) solltest du in eigene Tasks auslagern.

Grüße,

ChrisD

der-Lolo

Guten Morgen ChrisD,
alle vom TYPE=Modbus.* haben bereits event-on-change-reading .*
Wie kann ich schauen ob die SPS genug Zeit zum antworten hat?
Kannst DU mir kurz erklären wie ich mir die auslastung der 880 anschauen kann?
Zugriffe auf das Dateisystem oder Netzwerk habe ich nicht, ausser ich bin mit Codesys verbunden oder eben der ModbusTCP

Ich bin ja auch alles in allem glücklich - wunderte mich nur aufgrund des Arbeitsspeicher bedarf auf der fhemHost seite. Hier stelle ich auch immer noch über die laufzeit einen meiner meinung nach hohen bedarf fest...

Nach einem FHEM neustart sind es 2-3% nach nun etwa 18Stunden bin ich bei 15% Speicherbedarf..
Hab ein bisschen bedenken das System über einen LANGEN Zeitraum unbeobachtet laufen zu lassen. Vielleicht lasse ich FHEM irgendwann nachts mal neustarten...

ChrisD

Hallo,

Die Auslastung kannst du im PLC-Browser in CoDeSys sehen. Dazu musst du dich mit der SPS verbinden, dann unten links den Tab Ressourcen aktivieren und dort 'PLC - Browser' anklicken. Dabei sollte sich rechts ein leeres Fenster öffnen über dem sich eine Eingabezeile befindet. Dort kannst du Befehle an die SPS schicken. Mit '?' wird dir eine Liste der möglichen Befehle angezeigt. Die Auslastung kannst du dir mit 'tsk' anzeigen lassen.

Grüße,

ChrisD

der-Lolo

Hm...

tsk im PLC-Browser ergibt
Zitattsk
Not authenticated.

ChrisD

Hallo,

Du musst dich zuerst einloggen mit 'login user password'. Falls du kein Passwort gesetzt hast sollte 'login admin wago' funktionieren.

Grüße,

ChrisD

der-Lolo

Ok, Danke...
Ich poste hier mal die ausgabe da ich es nicht so recht interpretieren kann...

Zitattsk
Number of Tasks: 1
Task 0: DefaultTask,  ID: 0
   Cycle count: 118409830
   Cycletime:       2 ms
   Cycletime (min): 1 ms
   Cycletime (max): 4 ms
   Cycletime (avg): 1 ms
   Status: RUN
   Mode:   UNHANDLED
   ----
   Priority:  1
   Intervall: 0 ms
   Event:     NONE
   ----
   Function pointer: 16#28C84F78
   Function index:   465


ChrisD

Hallo,

Der Task ist freilaufend, kann also soviel Zeit wie nötig verwenden. Bei einer mittleren Zykluszeit von 1 ms hat die SPS fast nichts zu tun, du hast also noch sehr viel Reserve. Nach jedem Programmzyklus macht die SPS automatisch ~1 ms Pause in der sie sich um andere Sachen kümmert (Verbindung zu CoDeSys, ModbusTCP, Web-Visu, ...).

Was den Speicherbedarf und die Auslastung von FHEM angeht muss ich mir ansehen wodurch dies kommen könnte.

Grüße,

ChrisD

der-Lolo

Ich hab da nochmal ne frage ChrisD,
heute hatten wir einen Stromausfall - wahrscheinlich nur kurz, oder es waren nicht alle Phasen betroffen - einige Zeitanzeigen z.b. am Herd waren noch ok...

Zukunftsmusik: Die 24V werde ich noch über eine SiTop USV sichern. Somit sollte die wago bei kurzen unterbrechungen kein problem haben... 7Ah

Aber die DiskStation würde 230V benötigen...

FHEM startet also neu und verbindet sich mit dem frisch gestartetem Wago Programm. Die verbindung wird mit etwas verzögerung aufgebaut - das schiebe ich auf den ausfall der Netzwerkumgebung - Ubiquitti brauch recht lange zum Booten.

Das eigentliche problem ist glaube das die Wago den Zustand von FHEM nicht kennt, ich bin am überlegen ob ich auf
defmod startApptimeINITIAL notify global:INITIALIZED apptime
attr startApptimeINITIAL room 97-Helper

setstate startApptimeINITIAL 2017-10-24 08:54:34
setstate startApptimeINITIAL 2017-10-24 08:53:58 state active


noch die Zustände meiner PreSets setzen sollte. Sodass die Wago nach einem Neustart auch die Einstellwerte der Presets hat - und eben nicht erst wenn diese verändert werden...

Wie würdest Du dieses problem einfangen? 

ChrisD

Hallo,

Ich würde die wichtigen Daten remanent in der SPS speichern. So behalten sie auch nach einem Stromausfall ihren Wert, unabhängig davon ob FHEM funktioniert. Dazu kannst du z.B. die Variablenkonfiguration in 'Globale_Variablen' um einen Block erweitern
VAR_GLOBAL RETAIN PERSISTENT
...
END_VAR


Sobald FHEM dann wieder läuft werden die Daten aus der SPS gelesen.

Grüße,

ChrisD

darkstorm

Hallo ich habe da ein kleines Problem bei mir und der Wago ich habe die Plugins installiert und soweit auch alles konfiguriert kann auch mit dem list wago die Wago auslesen mit den ein und ausgängen jedoch bekomme ich andauernd in ca 3 minuten abstand diesen fehler.

2017.12.03 03:54:59 1: 192.168.1.254:502 disconnected, waiting to reappear (wago)
2017.12.03 03:54:59 1: 192.168.1.254:502 reappeared (wago)
2017.12.03 03:54:59 2: ModbusTCPServer_Parse: except (code 2)

könnt ihr mir vlt. nen ansatz geben wo ich da suchen könnte?

der-Lolo

Das scheint eher ein Netzwerkproblem zu sein, ModbusTCPServer_Parse: except (code 2) ist wenn ich mich richtig erinnere ein Adressierungsproblem, ich habe das auch - aber nur nach einem FHEM neustart - was ja einem verbindungsaufbau gleich zu setzen ist.