Modbus - Illegal Function

Hi,

weiß einer Rat? Ich versuche mich gerade im autodidaktischen Lernen wie man ein Modbus-System anspricht, genauer beim KWL von Pluggit. Ich habe auch eine rudimentäre Modbus-Beschreibung bekommen vom Hersteller.

Also legte ich eine Modbus-Instanz an, wechselte auf das damit angelegte Gateway und stellte die Schnittstelle ein (TCP, IP ist bekannt, Port 502). Darüber empfängt er jetzt fröhlich „Daten?“… aber im Log taucht immer folgendes auf:

[ModBus Gerät] = Illegal_Function
Client Socket Error forwarding data to #12134 (Modbus-Gateway) : Waiting for buffer usage time out

Die selbe Meldung kommt auch wenn ich ModBus_RequestRead(…) aufrufe.

P.S.: Meldungen in der Gui per Copy&Paste hier rein kopieren zu können wäre toll :slight_smile:

>> Mit der IPS-Beta funktioniert das :wink: Rechte Maustaste oder Strg + C :wink:

Grüße,
Chris

Wahrscheinlich stimmen die Einstellungen in der ModBus Instanz nicht. Schau mal in der Doku ganz unten (Modbus RTU/TCP — IP-Symcon :: Automatisierungssoftware)

Dort ist eine Übersetzung zwischen IP-Symcon und den Namen die in den normalen ModBus Dokus stehen.

paresy

Das ist der KWL etwas speziell, folgender Text steht in der Anleitung:

All parameters of RTDB have a 32-bits dimension: integer, unsigned integer, float.

However the Modbas works with registers which have 16-bits dimension. Each parameter

of RTDB is separated on two parts (Low and High) and Modbus model stores it like two

registers (R0 and R1 according), which are located together in sequence. A register with

Low part of parameters has less address.

For changing of the RTDB parameter it is necessary to send both parts of parameter

in one packet.

Kannst du mir da weiterhelfen?

Hier auch noch mal die ganze Anleitung: 21-10-2013 Modbuss Addresses.pdf - Google Drive

Du willst in IPS die Datentypen Integer, DWORD und Real nutzen. Außerdem steht unter Punkt 5, dass dein Gerät die 0x03 Holding Register nutzt.

Sieht soweit aber gut aus :slight_smile:

paresy

Mmh, das hatte ich… so sieht meine Gerätekonfig aus:
modbus.png

und dachte das wäre OK, oder?

Kann es sein das IPS die Lese-Adresse manchmal auffüllt, hab ja jetzt die 40133 drin stehen, vorhin hab ich nach dem öffnen plötzlich 401330 drin stehen gehabt und das schon 2x, beim erstem mal dachte ich an einen vertipper meinerseits.

Das sieht korrekt aus. Und damit kommen dann genau von der Instanz die Fehlermeldungen?

paresy

modbus2.png

So sieht die Fehlermeldung in gänze aus

Keiner mehr eine Idee?? Gibts noch ein Log oder sonstwas wo man mehr über die Art des Fehlers rausfinden kann?

Magst du mal mit ModBusPoll gegentesten, ob es damit geht? Laut Protokoll klingt das alles sehr gut :confused:

paresy

Mmh, ich hab entweder die Anleitung falsch verstanden… oder bin zu blöd :slight_smile:

Also zuerst hab ich ModbusPoll versucht, dort fiel man dann der kleine erklärende Text auf „40010 => 10“… den ich nach zig Fehlern erst gesehen habe. Also habe ich dort statt 40133 nur noch 133 eingetragen und siehe da, es kamen dort Werte. Bei der IPS-Anleitung konnte ich aber selbst mit Fantasy nichts derartiges finden, aber ich hab einfach die Geräte-ID auf 4 gestellt (so wie man bei ModbusPoll ja auch den „Bereich“ auswählt) und nur noch die 133 eingetragen und siehe da es kamen Werte… ist das jetzt Zufall oder so gewollt? bei letzterem: DRINGEND die Doku anpassen (oder mir zeigen wo ich zu blind war).

Tatsache. Bei uns wird diese Umrechnung nicht erklärt. Hatte ich auch leider nicht mehr auf dem Schirm. Werde das korrigieren lassen.

Bitte beachten aber, dass 40133 zu 132 umgerechnet werden muss. Immer eins weniger! :wink:

In der neusten Beta übrigens auch mit Umrechnungsfunktion… Das sollte so einige Hilfsvariablen wegsparen!

paresy

Nanu, eins weniger? Aber ich bekomme trotzdem mit 133 die richtigen Werte? Zumindest den Vor-Komma-Teil kann ich pi-mal-Auge mit der App vergleichen, der schnell wechselnde Nachkomma-Teil bei der Temperatur ist nicht direkt vergleichbar.

Habs nochmal probiert, die Werte machen nur ohne -1 Sinn…

Also Float-Werte bekomme ich nun alle wunderbar richtig rein… bei UINT hab ich so meine Sorgen… z.B. soll unter der Adresse 109 die Maschinenuhrzeit abgefragt werden… das klappt aber nicht so richtig… die Uhrzeit geht 2 Stunden vor und „steht“… Was ich jetzt nicht auf die schnelle raus bekommen habe, ob es mit diesem Absatz zusammen hängt ?

Durch die Tatsache, dass PHP 5.3.x Integer als größten ganzzahligen Wert anbietet, können DWORDs (unsigend ints) in IP-Symcon zwar gelesen werden, sie werden jedoch auf Integer abgebildet, was bedeutet, nur die unteren 31Bit können ausgewertet werden.

Wenn ja, gibt es einen Workaround der funktioniert?

Anscheinend brauche ich folgendes Format aus ModBus-Poll: Long - CD AB

Push? :confused::rolleyes:

Hallo zusammen,
ich bin nach kurzem suchen zu KWL / Pluggit über diesen Eintrag gestolpert. Bei mir ist das letzte nicht eingebundene Gerät, meine Pluggit-Anlage, die aber in Zukunft auch mit der IPS kommunizieren soll.

Hat das bei dir die Implementierung der Pluggit-Anlage in die IPS geklappt?
Wenn ja wäre eine kleines How To (Software/Hardware) super!:smiley:
Wenn nicht, wie ist der aktuelle Stand?

Dadurch, dass die Pluggit nativ ModBus unterstützt, musst Du nur für jede ModBus Adresse eine Instanz in IPS einbinden. Fertig. Software: IP-Symcon. Hardware: Netzwerkkabel

Grüße,
Christoph

Danke für die (doch) sehr knappe Erklärung. Es funktioniert. Ich habe von Mod Bus keine Ahnung und dachte, dass ich ein separates Hardware Gateway, wie z. B. bei Z-Wave, für die Einbindung meiner Pluggit KWL benötige.

Super das hier auch Anfänger ihr Erfolgserlebnis bekommen.

Das Auslesen (fast) aller Werte habe ich hinbekommen, aber das setzen von Werten bereitet mir immer noch Probleme.

Beim Auslesen sind vor allem die Bit-Felder für mich komisch, sie passen nicht zu meinen erwarteten Daten und Datum-Felder sind zu lang, deswegen stimmt die Uhrzeit nie.