Anbei die Kommunikationsseite des Handbuchs. Alles andere sind nur die Werte, die man durch Drücken der SET-Taste nacheinander am Zähler angezeigt bekommt. Wie gesagt, so richtig kann ich daraus nichts entnehmen, was die Kommunikation angeht.
Da ich keinen Beitrag im Forum zu diesem Zähler gefunden habe, gibt es vielleicht jemanden, der mal die grundsätzliche Kommunikation erklären könnte. Mit dem Hex-Geraffel kenne ich mich ncht wirklich aus.
Aus anderen Scripten habe ich mal folgendes entnommen: Es wird sicherlich so sein, dass man dem Zähler etwas senden muss (Anfragen an Register), damit er die entsprechenden Werte zurückschickt. Dazu kommen noch Steuerzeichen, oder?
Schau mal in den Thread von dem SDM630 rein, das ist ziemlich weit hinten ein Script zum umrechnen der Hex Werte drin. Vielleicht kannst du damit was anfangen.
Beim 630 ist es wohl das Low-Byte in dezimal, also für L1 Power 0C -> 12. Oder die exportierte Energie 4A -> 74. Die 12 bzw. 74 muss dann wohl als Leseadresse in die ModBus-Instanz. Im Moment kann ich es mangels installiertem Zähler noch nicht testen. Also vorerst nur Theorie. Eine richtige?
Woher bekomme ich denn die Modbus-Adressen für den DRS210C? Oder kann ich mir die berechnen? Das gibt es am Beiblatt (Anhang von hier) keine Angaben zum Low-Byte. Dennoch soll ModBus unterstützt werden.
Schau mal in den Thread von dem SDM630 rein, das ist ziemlich weit hinten ein Script zum umrechnen der Hex Werte drin. Vielleicht kannst du damit was anfangen.
Die Adressen müssen im Manual stehen und deren Bedeutung. Wenn das so wie bei dem SDM630 funktioniert bekommt man die Fload Werte als 16 Bit Hex zurück welche Exponent und Mantisse repräsentieren.
Habe mich bei B+G um eine lesbare Anleitung beworben und wurde angenommen:)
Im Anhang das Beiblatt als pdf. Als Com-Parameter sind 1200/8/1/even zu benutzen.
Habe das Beispiel mit der Seriennummer probiert. Zumindest kommt etwas zurück.
00 03 10 00 00 08 41 1D
<?
$id_regvar = 12597 /*[Serial Port - Zähler PV-Anlage (RS485)\Register Variable]*/ ;
$id_comport = 38258 /*[Serial Port - Zähler PV-Anlage (RS485)]*/ ; //Serial Port
$sleep=400;
//********************************************** SN auslesen ****************************************
// Inhalt von RegVar löschen
RegVar_SetBuffer($id_regvar, "");
// Hexwerte senden
$cmd = chr(0x00).chr(0x03).chr(0x10).chr(0x00).chr(0x00).chr(0x08).chr(0x41).chr(0x1D); // SN
COMPort_SendText($id_comport, $cmd);
// Warten
ips_sleep($sleep);
// Inhalt von RegVar löschen
RegVar_SetBuffer($id_regvar, "");
?>
Nun wollte ich die Spannung auslesen:
00 ID
03 Function code
20 Register (1)
00 Register (2)
00 ??
01 Länge:2
?? CRC?
?? CRC?
Was muss ich da noch ergänzen? Die CRC berechnet sich doch irgendwie aus den vorangegangenen Werten. Aber wie? Ich komme auch mit Online-Rechnern nicht im oberen Beispiel auf 41 1D.
Ist Das nicht Modbus RTU? Da brauchst Du nur das Ergebniss entsprechend umrechnen, nix mit CRC…
Also Splitterinstance (Modbus RTU) auf eine serielle Schnittstelle (RS232 Boudrate 1200 o RS485) und die default Adresse laut PDF „1“
Dann mal eine Modbus lese instance auf Das was Du lesen willst. zB Adr 02000 Dword --> Spannung.
Ihr habt recht - ich habe keine Ahnung. Deshalb frag euch ja.
Modbus ist ein Weg, da bekomme ich keine Werte. Ihr schaut euch das pdf an und wisst , worum es geht. Ich nicht. Daher würde ich gern den Zusammenhang wissen.
Nach viel Herumprobieren bekomme ich mit Leseadresse 4096 keine Werte. Typ bzw. Einheit String gibt bei mir nicht. Alle Einheiten durchgegangen. Auch habe ich in der Splitter-Instanz ID 0 und 1 wowie LSW/MSW-Werte vertauschen an-/abgehakt. Nichts.
Mit den Modbus-Einistellungen und 4096 bekomme ich 5,87747245476075E-39 als Ergebnis, was die Seriennummer darstellen soll. Mit 12288 (0x300 für die total active energy) bekomme ich diesen Wert 1098184131. Also etwas scheint zu funktionieren. Ich gehe mal davon aus, das man mit total active energy den Gesamtzählerstand meint.
Und jag das mal durch das Skript, dass ich weiter oben gepostet habe.
Wobei im hinteren Teil steht als Übergabe Value „Float“ vielleicht muss gar nichts umgerechnet werden.
Leider bekomme ich nur einen Wert für die Leseadresse 12288. Wer weiß, was ich damit auslese. Wahrscheinlich hat das gar nichts mit total active energy zu tun. Bei anderen Leseadresse = INT(hexadresse) kommt immer 0.
Ich werde mal auf die angeforderten Modbus-Adressen von B+G warten.
Aber mal auf den Anfang des Threads zurück. Wenn ich das ein wenig anpasse, sehe ich im Debug-Fenster der RegisterVar auch was ankommen. Wie kann man das in lesebare Zeichen wandeln? Kann man sich das anderweitig (echo, array, …) anschauen, damit ich das umrechnen kann?
Schau hier. Das ist das File von B+G. Auch wenn es anders heißt, ist es für den DRS210C passend. Ist aber für mich bisher nicht viel versprechend.
Modbus-Adressen habe ich nicht bekommen. Hatte eine Mail geschrieben, aber keine befriedigende Antwort bekommen. Die vertreiben die Geräte nur und haben vom Fabrikanten sehr wenig Infos. Hatte neulich ein dann doch sehr freundliches Telefonat ohne ebenfalls weitere Angaben zu bekommen. Alle Infos, die die geben, sind größtenteils selbst herausgefunden. Daher nur sehr dürftig erscheinender Support.
Mein ToDo (wenn mal mehr Zeit dafür bleibt):
[ul]
[li]Auslesen bzw. Abfrage nach drapple’s Prinzip. [/li][li]Die Schnittstellenparameter sind vorerst fix, sollen durch Schreibbefehle jedoch änderbar sein. Das ist für mich wichtig, da ich den SDM630M auf dem gleichen Bus betreiben möchte. Der wiederum lässt nur 2,4 - 38,4kbaud zu.[/li][li]Dann noch die Modbus-Adressen erforschen. Beim 630er sind diese Registeradresse - 1. Vielleicht ist es hier ähnlich.[/li][/ul]