Moin,
mit 2.5 Monaten Verspätung ist letzte Woche endlich mein Batterie-Wechselrichter eingetroffen, gestern habe ich es nun auch geschafft diesen fertig anzuschließen. Zusammen mit dem Solar-WR habe ich jetzt 2 Modbus-Geräte, mit welchen ich Daten austauschen möchte.
Der Datenaustausch mit dem 1. Wechselrichter hat bislang reibungslos funktioniert, also habe ich nach gleichem Muster einen zweiten Kommunikationsweg aufgebaut:
//--------------------------------------------------------------------------------------------------------------------------------------
//Modbus Init
WR_PV_Handle=modbusmaster($192.168.2.225$, 502u16, 5u32, 5)
WR_Bat_Handle=modbusmaster($192.168.2.226$, 502u16, 5u32, 3)
//--------------------------------------------------------------------------------------------------------------------------------------
So weit, so gut... Allerdings habe ich jetzt das Phänomen, dass die Daten, welche eigentlich mit dem ersten WR (WR-PV) ausgetauscht werden sollen, scheinbar auch vom WR der Batterie geholt werden. Irgendetwas scheint hier beim Erzeugen der Modbus-Handles nicht sauber zu funktionieren...
Im Debugger tauchen beide als verschiedene Handle-Nummern auf (WR_PV_Handle = 1u08, WR_Bat_Handle = 2u08), das habe ich bereits geprüft. Allerdings liefert die Modbus-Abfrage vom Betriebszustand falsche Werte zurück:
//--------------------------------------------------------------------------------------------------------------------------------------
WR_PV_Betrieb_Status = readmodbus(WR_PV_Handle, MB_INPUT_REGISTER, 40029u16, WR_PV_Betrieb, BIG_ENDIAN, BIG_ENDIAN); /* Betriebsstatus WR_PV */
WR_Bat_Betrieb_Status = readmodbus(WR_Bat_Handle, MB_INPUT_REGISTER, 40029u16, WR_Bat_Betrieb, BIG_ENDIAN, BIG_ENDIAN); /* Betriebsstatus WR_Bat */
//--------------------------------------------------------------------------------------------------------------------------------------
Beim Auslesen dieser Werte wird mir folgendes ausgegeben:
WR_Bat_Betrieb = 1295 (entspricht "Batterie Standby", passt)
WR_PV_Betrieb = 1295 (passt nicht, diesen Betriebszustand kann der PV-WR garnicht einnehmen, müsste 295 = "In Betrieb" sein)
>> Augenscheinlich liefert die Abfrage über beide Modbus-Handles immer Ergebnisse des selben Gerätes (anstelle zweier verschiedener)
>> wenn ich die Reihenfolge der Programmierung ändere (erst WR_Bat_Handle, dann WR_PV_Handle), dann liefern beide Abfragen immer den Wert des zuletzt programmierten
Habe ich hier irgendwo einen Denkfehler? Oder ist dies noch ein Firmware-Bug?
Grüße,
Brian
mit 2.5 Monaten Verspätung ist letzte Woche endlich mein Batterie-Wechselrichter eingetroffen, gestern habe ich es nun auch geschafft diesen fertig anzuschließen. Zusammen mit dem Solar-WR habe ich jetzt 2 Modbus-Geräte, mit welchen ich Daten austauschen möchte.
Der Datenaustausch mit dem 1. Wechselrichter hat bislang reibungslos funktioniert, also habe ich nach gleichem Muster einen zweiten Kommunikationsweg aufgebaut:
//--------------------------------------------------------------------------------------------------------------------------------------
//Modbus Init
WR_PV_Handle=modbusmaster($192.168.2.225$, 502u16, 5u32, 5)
WR_Bat_Handle=modbusmaster($192.168.2.226$, 502u16, 5u32, 3)
//--------------------------------------------------------------------------------------------------------------------------------------
So weit, so gut... Allerdings habe ich jetzt das Phänomen, dass die Daten, welche eigentlich mit dem ersten WR (WR-PV) ausgetauscht werden sollen, scheinbar auch vom WR der Batterie geholt werden. Irgendetwas scheint hier beim Erzeugen der Modbus-Handles nicht sauber zu funktionieren...
Im Debugger tauchen beide als verschiedene Handle-Nummern auf (WR_PV_Handle = 1u08, WR_Bat_Handle = 2u08), das habe ich bereits geprüft. Allerdings liefert die Modbus-Abfrage vom Betriebszustand falsche Werte zurück:
//--------------------------------------------------------------------------------------------------------------------------------------
WR_PV_Betrieb_Status = readmodbus(WR_PV_Handle, MB_INPUT_REGISTER, 40029u16, WR_PV_Betrieb, BIG_ENDIAN, BIG_ENDIAN); /* Betriebsstatus WR_PV */
WR_Bat_Betrieb_Status = readmodbus(WR_Bat_Handle, MB_INPUT_REGISTER, 40029u16, WR_Bat_Betrieb, BIG_ENDIAN, BIG_ENDIAN); /* Betriebsstatus WR_Bat */
//--------------------------------------------------------------------------------------------------------------------------------------
Beim Auslesen dieser Werte wird mir folgendes ausgegeben:
WR_Bat_Betrieb = 1295 (entspricht "Batterie Standby", passt)
WR_PV_Betrieb = 1295 (passt nicht, diesen Betriebszustand kann der PV-WR garnicht einnehmen, müsste 295 = "In Betrieb" sein)
>> Augenscheinlich liefert die Abfrage über beide Modbus-Handles immer Ergebnisse des selben Gerätes (anstelle zweier verschiedener)
>> wenn ich die Reihenfolge der Programmierung ändere (erst WR_Bat_Handle, dann WR_PV_Handle), dann liefern beide Abfragen immer den Wert des zuletzt programmierten
Habe ich hier irgendwo einen Denkfehler? Oder ist dies noch ein Firmware-Bug?
Grüße,
Brian
Kommentar