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

Ich setze eine Wago SPS ein, kenne den passenden Port für die Beckhoff auch nicht - was sagt denn Tante Google?

ChrisD

Hallo,

Ist der ModbusTCP-Server auf der SPS installiert ? Nach den Infos hier muss er getrennt installiert werden.

Grüße,

ChrisD

vicky

#407
Hallo,
jetzt versteh ich:
Auf den CX-Systemen muß noch ein "Modbus-TCP-Server" installiert werden.
Die BC(Buskontroller) haben das "onboard".

Zum Glück habe ich hier noch eine BC9000.
Verbindung eingerichtet: define bc9000 ModbusTCPServer 172.16.17.2
Verbindung ok(FHEM3.png)

Variable angelegt
SPS    = "bce_DG_Bad_SW AT %MB130 :INT" (MW130.png):
FHEM = "define BC9000_MW130 ModbusRegister bc9000 MW130"
Leider wird kein Value angezeigt.
Für INT ist MW ok?

Anbei das Log. Könnte weiterhelfen:
Was bedeuten die "PERL WARNING"

2017.05.01 21:26:27 1: starting in console mode
2017.05.01 21:26:27 1: Including fhem.cfg
2017.05.01 21:26:27 3: telnetPort: port 7072 opened
2017.05.01 21:26:27 3: WEB: port 8083 opened
2017.05.01 21:26:27 3: WEBphone: port 8084 opened
2017.05.01 21:26:27 3: WEBtablet: port 8085 opened
2017.05.01 21:26:27 2: eventTypes: loaded 6 events from ./log/eventTypes.txt
2017.05.01 21:26:27 1: PERL WARNING: Argument "bc9000" isn't numeric in numeric lt (<) at ./FHEM/37_ModbusRegister.pm line 135, <$fh> line 43.
2017.05.01 21:26:27 1: PERL WARNING: Argument "MW130" isn't numeric in numeric lt (<) at ./FHEM/37_ModbusRegister.pm line 135, <$fh> line 43.
2017.05.01 21:26:27 3: BC9000_MW130: I/O device is bc9000
2017.05.01 21:26:27 1: Including ./log/fhem.save
2017.05.01 21:26:27 3: Opening bc9000 device 172.16.17.2:502
2017.05.01 21:26:27 3: bc9000 device opened
2017.05.01 21:26:27 3: Opening cx502 device 172.16.17.20:502
2017.05.01 21:26:30 3: Can't connect to 172.16.17.20:502: Unknown error
2017.05.01 21:26:30 3: Opening cx801 device 172.16.17.20:801
2017.05.01 21:26:30 3: cx801 device opened
2017.05.01 21:26:30 3: initialUsbCheck return value: This command is not yet supported on windows
2017.05.01 21:26:30 2: SecurityCheck:  WEB,WEBphone,WEBtablet has no associated allowed device with basicAuth. telnetPort has no associated allowed device with password/globalpassword.  Restart FHEM for a new check if the problem is fixed, or set the global attribute motd to none to supress this message.
2017.05.01 21:26:30 0: Featurelevel: 5.8
2017.05.01 21:26:30 0: Server started with 13 defined entities (fhem.pl:13447/2017-02-19 perl:5.010001 os:MSWin32 user:xxxx pid:1234)
2017.05.01 21:26:32 2: ModbusRegister_Parse: invalid address 3 0 0
2017.05.01 21:26:32 2: ModbusRegister_Parse: invalid address 3 0 0
2017.05.01 21:26:32 3: bc9000: Unknown code ModbusRegister:0:0:3:1:0, help me!
2017.05.01 21:26:37 2: ModbusRegister_Parse: invalid address 3 0 0
2017.05.01 21:26:37 2: ModbusRegister_Parse: invalid address 3 0 0



Eine Frage zum Port 801 bleibt:
Ist eine Nutzung des ADS-Protokoll möglich?
Eine Verbindung besteht ja laut Status jedenfalls schon mal.


ChrisD

Hallo,

Wie ich schon geschrieben hatte ist hinter ModbusRegister nur 'wago' (oder eine Modbus-Adresse) zulässig, du musst die Definition also anpassen:

define BC9000_MW130 ModbusRegister wago MW130

ZitatIst eine Nutzung des ADS-Protokoll möglich?
Mit den Modbus-Modulen kannst du kein ADS verwenden, du müsstest dafür eigene Module schreiben.

ZitatEine Verbindung besteht ja laut Status jedenfalls schon mal.
Der Status 'opened' bedeutet nur dass jemand die Verbindung angenommen hat, ob über diese Verbindung aber Daten ausgetauscht werden können ist nicht gesagt. In diesem Fall wird es nicht funktionieren.

Grüße,

ChrisD

der-Lolo

Hallo ChrisD,
jetzt geht die Inbetriebnahme los, hierbei fällt mir auf das ich an dem funktionsblock immer nur einen Kanal "anschliessen" kann. Hast Du eine Idee wie ich mehrere kanäle auf einem Baustein zusammenfassen kann? Toll wäre auch wenn ich die einzelnen Kanäle mit klareren namen versehen könnte. Variablen deklarieren war noch nie meine stärke...

ChrisD

Hallo,

Wenn du die Kanäle in Gruppen schalten möchtest kannst du die Arrayelemente einfach kopieren (siehe B1.png).

ZitatToll wäre auch wenn ich die einzelnen Kanäle mit klareren namen versehen könnte.
Meinst du damit die Elemente von 'abDMX_Values' ?

Wenn ja kannst du das über den Umweg des Merkerbereiches machen. Dazu musst du zuerst das Array als globale Variable auf eine feste Adresse legen, z.B.
abDMX_Values AT %MB10001 : ARRAY[1..DMX_MAX_CH] OF BYTE;

und anschließend die einzelnen Kanäle definieren, z.B.
DMX_Licht_Bad_1 AT %MB10001 : BYTE; (* Kanal 1 *)
DMX_Licht_Bad_2 AT %MB10007 : BYTE; (* Kanal 7 *)
DMX_Licht_Keller AT %MB10009 : BYTE; (* Kanal 9 *)


Beim Aufruf von FB_Schlafen_1 kannst du dann statt abDMX_Values[1]  DMX_Licht_Bad_1 verwenden (siehe B2.png).

Grüße,

ChrisD

der-Lolo

Guten Morgen ChrisD,
tausend Dank, das funktioniert und ist für mich auch gut händelbar...
Ich habe ja nun in meinem FB einen wert "preSet" der von FHEM kommen soll.
Fhem soll je nach Tageszeit, oder twilight status den startwert der Dimmer beeinflussen, sodass es z.b. nachts, falls man mal zur Toilette muss nicht richtig hell wird...
Das funktioniert ja wie gedacht/geplant... Ein problem wäre es aber wenn FHEM nicht zur Verfügung steht.
Hast Du vielleicht schon eine art Watchdog parat um die Verfügbarkeit von FHEM zu checken? Ich könnte ja "preSet" bei nicht Verfügbarkeit von FHEM auf einen festen wert setzen, oder?

Der Dimmer ist mir nun wo alles montiert ist doch etwas zu schnell. Wie könnte ich das verlangsamen ohne direkt die ganze Tags langsamer zu machen?

einen schönen Sonntag wünsche ich Dir...
Michael

der-Lolo

mit FHEM stelle ich nun noch mehr probleme fest - der Eventmonitor steht nicht mehr still, kann das mit dem kopieren des Arrays auf den MB10001 zusammen hängen?

ChrisD

Hallo,

Was steht im Event-Monitor ?

Grüße,

ChrisD

der-Lolo

Im Eventmonitor tauchen die Preset werte die FHEM an Wago übergeben soll auf, fortlaufend, permanent obwohl event-on-change gesetzt ist. Diese liegen auf %MW200,202,204 bei MW201,203 und 205 kommen aktualisierungen nur wenn sich auch was ändert..

ChrisD

Hallo,

Kannst du einen Auszug aus dem Event-Monitor sowie ein list eines der betroffenen Presets posten ?

Schreibt FHEM auf die Presets (z.B. über notify oder DOIF) ?

Grüße,

ChrisD


der-Lolo

Fhem schreibt noch nicht auf die Presets
exemplarisch ein list auf "PAnkleide"
Internals:
   DEF        wago MW202
   IODev      WagoController
   LASTInputDev WagoController
   MSGCNT     19162
   ModbusRegister_lastRcv 2017-07-02 14:51:40
   NAME       PAnkleide
   NR         327
   NTFY_ORDER 50-PAnkleide
   STATE      0
   TYPE       ModbusRegister
   WagoController_MSGCNT 19162
   WagoController_TIME 2017-07-02 14:51:40
   lastUpdate Sun Jul  2 14:51:40 2017
   nextUpdate Sun Jul  2 14:51:40 2017
   Readings:
     2017-07-02 14:51:40   PreSet          0
     2017-07-02 14:51:40   RAW             0000
     2017-07-02 14:51:40   state           0
   Helper:
     addr       3 0 12490
     address    12490
     disableRegisterMapping 1
     lastUpdate 1498999900.78585
     nextUpdate 1498999900.98712
     nread      1
     readCmd    0�
     register   12490
     registerType 3
     unitId     0
     updateIntervall 0.1
     wago       1
     wagoDataType W
     Cnv:
       a          1
       b          0
       max        65535
       min        0
       step       100
Attributes:
   IODev      WagoController
   room       01-Schlafzimmer
   setList    PreSet:slider,0,1,255
   stateAlias PreSet
   webCmd     PreSet


Nun noch ein auszug aus dem Eventmonitor...

02 14:53:45 ModbusRegister PAnkleide 0
2017-07-02 14:53:45 ModbusRegister PAnkleide RAW: 0000
2017-07-02 14:53:45 ModbusRegister PAnkleide PreSet: 0
2017-07-02 14:53:45 ModbusRegister PSchlafbereich 0
2017-07-02 14:53:45 ModbusRegister PSchlafbereich RAW: 0000
2017-07-02 14:53:45 ModbusRegister PSchlafbereich PreSet: 0
2017-07-02 14:53:45 ModbusRegister PSchlafbereichRGB 0
2017-07-02 14:53:45 ModbusRegister PSchlafbereichRGB RAW: 0000
2017-07-02 14:53:45 ModbusRegister PSchlafbereichRGB PreSet: 0
2017-07-02 14:53:45 ModbusRegister PAnkleide 0
2017-07-02 14:53:45 ModbusRegister PAnkleide RAW: 0000
2017-07-02 14:53:45 ModbusRegister PAnkleide PreSet: 0
2017-07-02 14:53:45 ModbusRegister PSchlafbereich 0
2017-07-02 14:53:45 ModbusRegister PSchlafbereich RAW: 0000
2017-07-02 14:53:45 ModbusRegister PSchlafbereich PreSet: 0
2017-07-02 14:53:45 ModbusRegister PSchlafbereichRGB 0
2017-07-02 14:53:45 ModbusRegister PSchlafbereichRGB RAW: 0000
2017-07-02 14:53:45 ModbusRegister PSchlafbereichRGB PreSet: 0
2017-07-02 14:53:46 ModbusRegister PAnkleide 0
2017-07-02 14:53:46 ModbusRegister PAnkleide RAW: 0000
2017-07-02 14:53:46 ModbusRegister PAnkleide PreSet: 0
2017-07-02 14:53:46 ModbusRegister PSchlafbereich 0
2017-07-02 14:53:46 ModbusRegister PSchlafbereich RAW: 0000
2017-07-02 14:53:46 ModbusRegister PSchlafbereich PreSet: 0
2017-07-02 14:53:46 ModbusRegister PSchlafbereichRGB 0
2017-07-02 14:53:46 ModbusRegister PSchlafbereichRGB RAW: 0000
2017-07-02 14:53:46 ModbusRegister PSchlafbereichRGB PreSet: 0
2017-07-02 14:53:46 ModbusRegister PAnkleide 0
2017-07-02 14:53:46 ModbusRegister PAnkleide RAW: 0000
2017-07-02 14:53:46 ModbusRegister PAnkleide PreSet: 0
2017-07-02 14:53:46 ModbusRegister PSchlafbereich 0
2017-07-02 14:53:46 ModbusRegister PSchlafbereich RAW: 0000
2017-07-02 14:53:46 ModbusRegister PSchlafbereich PreSet: 0
2017-07-02 14:53:46 ModbusRegister PSchlafbereichRGB 0
2017-07-02 14:53:46 ModbusRegister PSchlafbereichRGB RAW: 0000
2017-07-02 14:53:46 ModbusRegister PSchlafbereichRGB PreSet: 0
2017-07-02 14:53:46 ModbusRegister PAnkleide 0
2017-07-02 14:53:46 ModbusRegister PAnkleide RAW: 0000
2017-07-02 14:53:46 ModbusRegister PAnkleide PreSet: 0
2017-07-02 14:53:46 ModbusRegister PSchlafbereich 0
2017-07-02 14:53:46 ModbusRegister PSchlafbereich RAW: 0000
2017-07-02 14:53:46 ModbusRegister PSchlafbereich PreSet: 0
2017-07-02 14:53:46 ModbusRegister PSchlafbereichRGB 0
2017-07-02 14:53:46 ModbusRegister PSchlafbereichRGB RAW: 0000
2017-07-02 14:53:46 ModbusRegister PSchlafbereichRGB PreSet: 0
2017-07-02 14:53:46 ModbusRegister PAnkleide 0

ChrisD

Hallo,

Bei 'PAnkleide' scheint das Attribut event-on-change-reading nicht gesetzt zu sein, kannst du es hinzufügen und bei den anderen überprüfen ob es wirklich gesetzt ist ?

Grüße,

ChrisD

der-Lolo

Mäno, wieder so ein Copy&Paste fehler..
Jetzt ist es stiller im Event Monitor. Danke Dir.

Hast Du eine Idee bzgl. watchdog?

ChrisD

#419
Hallo,

Du kannst den Watchdog über einen sich regelmäßig ändernden Wert realisieren, z.B.:

define fhemalivecheck ModbusRegister wago MD1000
attr fhemalivecheck event-on-change-reading .*
define atFhemalivecheckToPLC at +*00:01:00 {fhem "set fhemalivecheck ".time()}

Damit wird die Uhrzeit von FHEM 1x pro Minute an die SPS geschickt. In der SPS kannst du überwachen ob sich der Wert ändert, z.B. mit einem TON. Variablen in der SPS:

fhemalivecheck AT %MD1000 : DWORD;
fhemalivecheckTmp : DWORD;
xfhemdead : BOOL;
TON_fhemalivecheck : TON;


Code in B3.png

Die Variable 'xfhemdead' kannst du in der SPS anschließend verwenden um z.B. ein Notprogramm laufen zu lassen oder Werte fest vorzugeben.

ZitatDer Dimmer ist mir nun wo alles montiert ist doch etwas zu schnell. Wie könnte ich das verlangsamen ohne direkt die ganze Tags langsamer zu machen?
Im Moment hängt die Dimmgeschwindigkeit von der Zykluszeit der SPS ab. Die einfache Lösung ist die Zykluszeit zu erhöhen, was aber nicht sehr flexibel wäre. Alternativ könntest du die Geschwindigkeit mit an den Baustein FB_Dim zu übergeben.

Dazu könntest du in FB_Dim bei VAR_INPUT
DimTakt : TIME:=T#1ms;
hinzufügen und bei VAR
TON_DimTakt : TON;
taktFreigabe : BOOL;

Den Taktgeber kannst du wie in B4 gezeigt am Anfang des FBs einbauen. Den Schritt 'Hoch-Runter Dimmen' kannst du wie in B5 gezeigt ändern. Wenn du DimTakt auf T#0ms setzt, hast du das bisherige Verhalten.

Grüße,

ChrisD