Arduino + EternetShield + 1-Wire Temperatursensoren über Modbus anbinden

Hallo Leute,

mein Kollege, der bei uns die IP-Symcon Temperaturüberwachung eingerichtet hat ist in Urlaub. Ich habe den Auftrag bekommen die neue Temperatursensoren in Betrieb zu nehmen. Dazu habe ich ein Sketch erstellt welches die beiden Temperaturwerte abfrägt und diese in ein Modbus Register schreibt. Die Arduino Seite scheint soweit zu funktionieren.

Ich komme mit dem IP-Symcon nicht zurecht. Kann mir jemand erklären wie ich den Arduino richtig in IP-Symcon einbinde?
Das wäre sehr nett.
Danke
Gruß Eddie

Hallo Urlaubsvertretung,
nimm die Pokey-Anleitung aus der Wiki hier.

Ob nun Arduino oder Pokey5xE, es wird ähnlich sein.

Die Modbusadressen auf dem µP weißt Du?

Gruß Helmut

Hi Helmut,

die 1-Wire Adressen der Sensoren weiß ich, aber nicht die Modbus Adressen, wie finde ich die?
Danke
Gruß Eddie

Die könnten im C-Code lesbar sein, schätze ich. Wenn Du Den hast ??

Gruß Helmut

ja den habe ich aber so richtig schlau werde ich nicht daraus.

So wird das in meinem Sketch übergeben


void Modbus(float Temp1, float Temp2) {
 //Modbus starten
 Mb.Run();
 
//Analog inputs 0-1023
 Mb.R[0] = Temp1;
 Mb.R[1] = Temp2;
}

und diese Lib habe ich verwendet:
https://code.google.com/p/mudbus/

die 0 und die 1 ist es nicht oder doch?

Müßte in der Def-Datei stehen ?(Mudbus.h) ?

Probiere mal die Adressen die in #define declariert sind, beachte: das wird wohl Hex sein.

Yes you can expand the tables as you like, but you have some memory restrictions because of the limited ram of the Arduino.
The declarations in the Mudbus.h file are just memory arrays. It is up to the application to copy the contents of these to and from actual I/O pins or A/D or D/A converters. In the examples there is a file copy_in2out_mb that is copying just the memory arrays to each other so it looks like if the outputs where connected to inputs…
These declarations works:
#define MB_N_C_0x 100
#define MB_N_I_1x 100
#define MB_N_IR_3x 64
#define MB_N_HR_4x 64
These are in the Mudbus.h file.
You can pull from my Gitorious repo.

hier steht was. Hat auch die Lib benutzt.
Ev passen die Adressen auch hier ?!

Gruß Helmut

da habe ich das hier drin:


#define MB_N_R 125 //Max 16 bit registers for Modbus is 125
#define MB_N_C 128 //Max coils for Modbus is 2000 - dont need that many so here is a multiple of 8
#define MB_PORT 502

Was ist Eigentlich die Geräte ID und was ist die Lese Adresse?

Ich habe jetzt ein Splitter angelegt ModBus RTU TCP mit der Geräte-ID 125
einen Client Socket mit der IP des Arduinos am Port 502
Und ein ModBus Gerät Adress
mit Einheit Dword 32 Bit unsigned
Schreibadresse 0
LeseAdresse 0 Und Hacken bei Nur Lesen
Intervall 5000
und als übergeordnete Instanz ist Modbus RTU TCP ausgewählt

Wenn ich das debugging auf dem Clientsocket aktiviere bekomme ich alle 10 Skunden einen Eintrag der dann so aussieht
Dropbox - Error bzw so
Dropbox - Error

Jetzt kenne ich mich nicht mehr aus.

Die Eintragung als Geräte ID ist falsch, Du solltest mal mit 0 anfangen.

Die 125 er Eintragung ist die maximale Anzahl der Register.

Die Geräte ID steht nicht in Deinem Def-Eintrag - Auszug.

Leseadresse kann gleich der Schreibadresse sein. Lesen solltest Du angewählt haben in IPS.

Intervall mach mal zum Testen auf 1000, brauchst nicht so lange warten. Hex im Debug-Fenster anwählen.

Gruß Helmut

Hallo Helmut,
vielen Dank für Deine Geduld mit mir.
Jetzt habe ich es geschafft. Ich habe die Geräte ID 0 eingestellt (wobei es mit 1 genauso geht)
Ich musste mein Arduine Sketchanpassen damit er die Temp Werte in den Register etwas auseinander macht. Das war scheinbar das Problem.
Jedenfalls ahbe ich jetzt als Lese und SchreibAdresse 0 und 2 und damit geht es.
Danke noch mal für Deine Hilfe
Gruß Eddie

Eine kurze Frage noch.
Da die Modbus Variable Integer ist konnte die keine komma. Nun habe ich im Sketch mal Hundert multipliziert. In Ip-Symcon eine neue Variable angelgt, und diese tile ich nun durch 100. Auf der Weboberfläche wird sie auch angezeigt aber kein Diagramm dazu. Wie kann ich das einstellen?
Danke!!!
Ich hoffe ich nerv zum letzten mal.

Hallo Eddie,
Du nervst nicht, jedenfalls nicht mich. Bin iM allerdings etwas busy

Mache ich bei den Pokey’s auch, hol mir die Integer und setzte die Floatvariable, guggst Du:

<?
SetValueFloat(21954 /[Keller\Warm Wasser\Warm Wasser]/, GetValueInteger(31897 /[Keller\Warm Wasser\Value]/)/100);
?>

Du wirst 'ne Floatvariable für die Temperatur erstellt haben, die Variable editieren und einmal „weiter“ klicken.

Da kannst Du die beiden Haken setzen (zum Charten)

Leseadresse Schrittweite 2 wegen der Registerbitbreite.

Gruß Helmut

Hallo, habe ein ähnliches Problem mit der Mudbus Library. Habe mein Theard aber in einem anderen bereich hier im Forum erstellt. Ich verknüpf das mal hier: