Register Adressen

Für Themen rund um das Prozessabbild des RevPi Core
Post Reply
User avatar
Ingo
Posts: 267
Joined: 10 Nov 2016, 21:56
Location: Luth.Wittenberg

Register Adressen

Post by Ingo »

Hallo,

ich muss heute mal vieleicht eine dumme Frage Stellen.

Ich habe 2 Modbus Master und ein Slave als Virtuelle Geräte. Ich habe nun den Fall das ich mit dem ersten Master einen Rabperry Daten austausche. Das geht auch.
Mit dem 2ten Master Tausche ich Daten mit einem Arduino aus. Soweit so gut. Daten vom Arduino kommen am Pi an. Aber die Daten die ich Senden möchte kommen bei Arduino nicht an.
Jetzt die Frage: im ersten Master geht die Register Adresse ja bei 1 los. Wie verhällt es sich bei dem 2ten Master, geht es da auch bei 0 los? Weil ich kann ja nicht 2x die QW0 oder so haben.
Wie Adresserie ich nun die beiden Master so das sie sich nicht in die Quere kommen?

Da ich von Modbus nicht wirklich viel Ahnung habe frage ich hier lieber einmal nach .
User avatar
dirk
KUNBUS
Posts: 2095
Joined: 15 Dec 2016, 13:19

Re: Register Adressen

Post by dirk »

Lieber Ingo, also das Senden der Daten vom RevPi auf den Arduino Slave fuktioniert nicht. Ich habe folgendes zum Aufbau verstanden du hast zwei Modbus Master auf dem RevPi, richtig? Was steht denn in den Status Registern?
Also Modbus_Master_Status, ggfs. Master_Status_Reset=1 setzen und nochmals auslesen. Das selbe mit den Modbus_Action_Status_[1..32] und Action_Status_Reset_[1 … 32]...
Wie sieht es mit der Verkabelung aus und kannst du das ganze mal z.B. mit QModMaster probieren? Denn da hast du viele Debugging Möglichkeiten schon on board ;)
User avatar
Ingo
Posts: 267
Joined: 10 Nov 2016, 21:56
Location: Luth.Wittenberg

Re: Register Adressen

Post by Ingo »

Hallo Dirk.

Auf dem Arduino läuft ein Master.
Folgende Hardware ist Verbaut.
RevPi 2x ModbusMaster 1x Slave
1 Arduino Modbus Master.
1 Raspberry Modbus Master und Slave.
1 One Wire TCP/IP
Zenario:
der One Wire sendet seine Daten an den Raspberry und dieser dann an den RevPi Slave. Funktioniert.
Der Arduino sendet seine Daten an den RevPi Modbus Master 2. Funktioniert auch,
Der RevPi sendet diese Daten wiederum an den Raspberry Master "Visualisieung" Funktioniert auch.
Nun sende ich aber daten vom RevPi Master 2 an den Arduino. Funktioniert nicht.
Ich habe dazu ein Testprogramm "Q-Mod Master" wo ich die Master auslesen kann, aber vom Master 2 OutputWORD" wird dort nichts angezeigt. nur vom Master 1,Master 2 "Inputs" und vom Slave sehe ich dort die werte die gesendet werden.

Auch habe ich das Problem wenn ich Master 1 Register QW25 Aktiv benutzen will und über die LC3 Software einbinde das mir das ganze System die Register Adressen durcheinander bringt und Schaltzustände auftreten die eigendlich nicht auftreten dürften. Dies ist aber nur bei dieser einen Adresse so, Ohne das ich QW25 benutze funktioniert alles. " Register Adressen Verschieben sich" Warum habe ich nicht rausgefunden.

Auch wenn ich die Status Register Aktiv benutzen will bekomme ich auf allen nach wenigen sec Fehlerzustände angezeigt. Bool= True Daher benutze ich diese schon garnicht. Hatte ich aber schon in einem anderen Thema geschrieben

Wegen der Verkabelung.
RevPI hat die IP Adresse xxx.xxx.178.10. Modbus Port 502 Der Raspberry die xxx.xxx178.100 Port 3502 der Arduino die IP xxx.xxx.178.13 und der OhneWire xxx.xxx.178.15
RevPi Modbus Master 1 sendest an die IP xxx.xxx.178.100. und bekommt Daten vom Raspberry
Modbus Master 2 sendet an die IP xxx.xxx178.13.
Modbus Slave Raspberry hat den Port 3502


Deswegen meine Frage ob ich bei der Adressierung etwas beachten muss.

Ich hoffe ich habe dir das jetzt Richtig Erklärt und du Steigst da durch
Sonst müsstet du dir das Eventuell selber einmal anschauen.

gruss
Eduard
KUNBUS
Posts: 209
Joined: 18 Jun 2018, 16:16

Re: Register Adressen

Post by Eduard »

Hallo Ingo,

kannst du bitte zu einem besseren Verständnis einen Verdrahtungsplan deines Aufbaus erstellen?
Mir ist nicht klar warum du so viele Modbus Geräte in deinem Aufbau hast.

Gruß,
Eduard
User avatar
Ingo
Posts: 267
Joined: 10 Nov 2016, 21:56
Location: Luth.Wittenberg

Re: Register Adressen

Post by Ingo »

Hallo Eduard,
Ich habe soviele Modbusgeräte da ich die Daten nicht alle mit dem RevPi verarbeiten kann.
OneWire kann der RevPi nicht also ein OneWire TCP Gerät.
Analoge Signale kann nur ein AIO was aber zu diesem Zeitpunkt nicht Verfügbar war und daher als ersatz der Arduino Fungiert. Da er I2C unterstützt was beim Rev Pi leider nicht nach aussesn geführt wurde.

Da ich noch mit dem CM1 modul arbeite dient der Raspberry für die Visu und der SQL Datenbank.
Und dieses muss ich ja alles unter einen Hut bringen (noch). daher dieser etwas Kompliezierte Aufbau.
Aufbau Modbus.jpg
Aufbau Modbus.jpg (41.24 KiB) Viewed 16830 times
an wen die Geräte Daten senden

One Wire ----> Raspberry 3
Arduino ------> Raspberry 3
Raspberry 3 <------> RvPi
RevPi <-------> Raspberry
RevPi -----> Arduino
Eduard
KUNBUS
Posts: 209
Joined: 18 Jun 2018, 16:16

Re: Register Adressen

Post by Eduard »

Hallo Ingo,
danke für die Ausführliche Erklärung.

„Nun sende ich aber daten vom RevPi Master 2 an den Arduino. Funktioniert nicht.“
So wie ich das Verstanden habe. Versuchst du mit dem „RevPi Modbus TCP Master“ die Register des „Arduino Modbus TCP Master“ zu schreiben. Soweit ich weiß kann ein Modbus TCP Master nur Register von einem Modbus TCP Slave’s lesen und schreiben.
Mir fehlt in deiner Übersicht noch die Konfiguration der Modbus TCP Geräte. Also wo ist ein Master und wo ein Slave konfiguriert.
User avatar
Ingo
Posts: 267
Joined: 10 Nov 2016, 21:56
Location: Luth.Wittenberg

Re: Register Adressen

Post by Ingo »

Hallo Eduard,

Der RevPi hat Modbus Master 1 Adr.64
Modus Slave Adr 65 Port:502
Modbus Master 2 Adr 66
Raspberry Modbus Master
Modbus Slave Port 3502
Arduino Modbus Master

OneWire ist nur ein TCP/IP Gerät und schickt seine Daten an den Raspberry und von da aus dann an den RevPi.
Das senden Vom Arduino Master an den RevPi Master2 Funktioniert ja, die Daten werden Empfangen in der LC3 Software verarbeitet und dann an den Raspberry gesendet und dort angezeigt
pictory.png
pictory.png (144.38 KiB) Viewed 16669 times
visu.png
visu.png (123.61 KiB) Viewed 16669 times
soweit so gut, nur andersrum geht es nicht.
Hier die Config vom Master 2 der Daten vom Arduino Empfangen tut und auch senden soll.
config.png
config.png (32.76 KiB) Viewed 16669 times
Eduard
KUNBUS
Posts: 209
Joined: 18 Jun 2018, 16:16

Re: Register Adressen

Post by Eduard »

Hallo Ingo,

hast du eine Übersicht der Modbus Register vom Arduino?
Wie hast du ein Modbus Master auf dem Arduino realisiert?
User avatar
Ingo
Posts: 267
Joined: 10 Nov 2016, 21:56
Location: Luth.Wittenberg

Re: Register Adressen

Post by Ingo »

Hallo Eduard,
auf den Arduino war es eigendlich ganz einfach

Code: Select all

#include "adcHelper.h"
#include <Wire.h>
#include <SPI.h>
#include <Ethernet2.h>
#include "MgsModbus.h"
#include "TimerOne.h"
#include <avr/wdt.h>

MgsModbus Mb;

// Ethernet settings (depending on MAC and Local network)
byte mac[] = {0x90, 0xA2, 0xDA, 0x0E, 0x94, 0xB5 };
IPAddress ip(xxx, xxx, xxx, 13);

//  Mb.SetBit(0,false);
  Mb.MbData[0] = 0; // PH-Wert   I2C (99 0x63)
  Mb.MbData[1] = 0; // ORP-Wert  I2C (98 0x62)
  Mb.MbData[2] = 0; // CCL-Wert  I2C (100 0x64)
  Mb.MbData[3] = 0; // CalTemp-Wert I2C (102 0x66)
  Mb.MbData[4] = 0; // DS_Pin[0] (A0) 
  Mb.MbData[5] = 0; // DS_Pin[5] (A5) 
  Mb.MbData[7] = 0; // Calibrierung  // Funktioniert nicht
}

void mb() {
 Mb.MbsRun();
 Mb.MbData[0] = ph *10.0; // senden
 Mb.MbData[1] = orp *10.0; // senden
 Mb.MbData[4] = pressure60 /100.0 ; // senden
 Mb.MbData[5] = pressure5 /100.0; // senden
 Mb.MbData[7] = CalMod;   // empfangen 
 }


Ist nur der Teil von dem Modbus.
Eduard
KUNBUS
Posts: 209
Joined: 18 Jun 2018, 16:16

Re: Register Adressen

Post by Eduard »

Bist du dir sicher, dass der Arduino ein Modbus Register mit der Modbus Adresse 1 besitzt
den du auch über den Funktion Code „Write Multiple Holding Register“ ansprechen kannst?

Prüfe bitte auf dem RevPi das Modbus_Action_Status_2 Byte des Modbus Master 2.
Post Reply