Ich habe es jetzt nur in einem Script umrechnen lassen.
Also so:
$data = pack('f', 5.9887670820435075e-39); // falscher Float Wert von Adresse 3205 wieder nach BIN
echo bin2hex($data).PHP_EOL; //BIN in lesbares HEX für die Console.
echo unpack('V',$data)[1].PHP_EOL; // BIN (wie es auch vom Splitter kommt) mit unpack 'V' getestet
Äh… danke.
Das ist jetzt aber doch etwas Quark… Ändere das mal mit dem pack und unpack.
So war das von mir nicht gedacht
$total= $this->SendDataToParent(json_encode(Array("DataID" => "{E310B701-4AE7-458E-B618-EC13A1A6F6A8}", "Function" => 3, "Address" => 3205, "Quantity" => 2, "Data" => "")));
if ($total === false)
{
$this->unlock($IO);
return false;
}
// WECH
// $total= unpack("f", strrev(substr($total, 2)))[1];
// WECH
// $total = pack('f', $total); // falscher Float Wert von Adresse 3205 wieder nach BIN
// Und jetzt statt 'V' in 'N' ändern
$total = (unpack('N',substr($total,2))[1])/1000;
$this->SendDebug('Total', $total, 0);
SetValue($this->GetIDForIdent("Total"), $total);
Das du keinen Splitter auswählen kannst, ist merkwürdig.
Zumal ja Daten übertragen werden, also einer verbunden ist.
Zeig mal die module.json.
Hast du dort die GUIDs bei implemented und parentRequirements verändert ? Du müssen zum Modus-Gateway ‚passen‘.
Also nicht verändern.
Michael
Danke, das war schon mal gut. Ein Modul mal von https in git umgestellt - klappte. Habe den Fix dennoch installiert, damit kamen die restlichen auch und warfen keine Fehler.
Somit läßt sich das Modul auch mit vielen Variablen anlegen, allerdings werden die Werte nicht gefüllt. Die Zeit habe ich mit 10000 ms angegeben.In den Meldungen sehe ich kein Einträge, die auf das Modul hinweisen würden.
habe entgegen der Bezeichungen am Adapter/Zähler mal die Adern vertauscht und es kamen Werte. Allerdings nicht lange. Daher den Adapter (alt: CH340 neu: FTDI) ersetzt und die Adern zurückgetauscht - und schon läuft es auch damit. Inwieweit der neue stabil bleibt, wird sich zeigen. Was mich wundert, dass gleich beide alten Adapter defekt sein sollen…
Welchen Adapter benutzt du bzw. wie hast du deine Zähler angeschaltet?
Produktiv läuft das alles bei mir noch immer nicht, keine Zeit. Verteilung(en) zu klein usw…
Aber ich habe es sowohl mit einem USB/RS485 Adapter (FTDI-Chip), als auch mit einem USR-TCP232 ausprobiert.
Letztere ist ja auch ‚doof‘ also TCP zu RS485 wird 1:1 durchgereicht. Somit ist das in IPS dann Modbus RTU over TCP.
Zusätzlich habe ich mit MSC51 unsere eigene Hardware erfolgreich getestet.
Die Kann sowohl ModBus TCP zu ModBus RTU wandeln als auch 1:1 durchreichen. Zusätzlich hat es einen ‚cool down‘ Timer zwischen den Abfragen.
Leider hatte ich mit meinem Bauchgefühl recht - seit gestern steht die Verbindung wieder nicht.
Was habe ich gemacht?
Der Adapter hatte genau ein Gerät am Bus, den SDM630. Diesen habe ich abgeklemmt, um meinen neuen SDM230 vorübergehend anzuschließen. Dafür habe ich gleichen Einstellungen im Gerät verwendet (9600,n,8,1), nur die Geräte-ID auf 2 gesetzt. Dann eine neue Splitter-Instanz dafür erstellt mit Verweis auf den gleichen Serial Port. Nach ein wenig hin und her mit den passenden Registern kommen dessen Werte.
Nach dem Umklemmen des Busses wieder zurück auf den SDM630 kommen dessen Werte nun nicht mehr an. Noch mit Widerständen versucht. Alles ohne Erfolg, im SerialPort-Debug kommen seitdem nur Transmit-Meldungen ohne eine Antwort. Testweise wieder SDM230 dran: läuft.
Ziel war es, beide Geräte an einem Bus zu betrieben, die sich nur in der Geräte-ID unterscheiden.
Keine Ahnung warum es einzeln nicht (mehr) läuft.
Ich hatte folgende Themen beim zusammenschalten des SDM630 und DRS210C auf einem Bus:
Beide Unterstützen unterschiedliche Bereiche von Baudraten ( 9600, mehr kann der DRS nicht)
Unterschiedliche Werkeinstellungen Baud, Parität (imho kann der DRS nur mit Parität Odd betrieben werden)
Der DRS stellt sich ca 250ms ‚tot‘ wenn er vorher nicht seine Adresse über den Bus gibt.
Das Modul ist eigentlich nur für diesen letzten Punkt (+ der vereinfachten Einrichtung).
Da IPS nur die 3,5 Symbolrate Pause zwischen den Abfragen macht (= Modus RTU Specs) die Zähler aber leider eine größe Pause benötigen, löst dieses Modul dies durch eine Sperre über alle Instanzen dieses Moduls welche am gleichen IO hängen.
Problem siehe hier: IP-Symcon Community Forum
Also wirst du auch später keine Freude mit diesem Modul haben, wenn die Abfrage der SDM220 dazwischenfunkt.
Allerdings habe ich gesehen das die Register dem des SDM630 entsprechen, halt nur für eine Phase anstatt für drei.
Ich werde da heute Abend den SDM220 mit einbauen