guidoBln Geschrieben March 4, 2025 at 14:34 Geschrieben March 4, 2025 at 14:34 Problem: Ich kann die Modbus Register weder auslesen noch setzen. Modbus ist Firmware: 2.7.5+67bf44a8 (erstellt 26.02.2025 17:43:20, von Tinkerforge GmbH) Der nachfolgende Code bei den liefert Adressen 1002 und 1004 immer <Buffer 00 00 00 00> zurück, egal ob geladen wird oder nicht. Auch kann ich auf keine anderen Register zugreifen ("IllegalDataAddress"). Was mache ich falsch? // typescript 4.9.5 import modbus, { TCPStream } from 'modbus-stream' modbus.tcp.connect( 502, '192.168.178.55', { debug: '_' }, ( err: any, connection: TCPStream | undefined ) => { if ( err ) { console.error( err ) } else if ( connection ) { connection.readHoldingRegisters( { address: 1002, quantity: 4, }, ( err: any, data: any ) => { if ( err ) { console.error( err ) } else { const test = Buffer.from( data.response.data ) console.log( test ) } } ) } } ) Zitieren
rtrbt Geschrieben March 4, 2025 at 14:48 Geschrieben March 4, 2025 at 14:48 An Holding Register 1002 und 1003 liegt der von Modbus erlaubte Ladestrom, an 1004 und 1005 das Front-LED-Blinkmuster. Wolltest du stattdessen die Input Register 1002 bis 1005 lesen? Dann würdest du den Ladestatus und die User-ID zurückbekommen. Zitieren
guidoBln Geschrieben March 4, 2025 at 21:15 Autor Geschrieben March 4, 2025 at 21:15 Ja, genau das habe ich vor. Zitieren
rtrbt Geschrieben March 5, 2025 at 07:01 Geschrieben March 5, 2025 at 07:01 Nur um das offensichtliche auszuschließen: Du hast unter Schnittstellen -> Modbus TCP mindestens den Lesezugriff aktiviert und die WARP Charger-Registertabelle ausgewählt? Bekommst du im Ereignislog eine Ausgabe in der Art von "modbus_tcp_srvr | client connected: peer_address=123456789 port=47496"? On 3/4/2025 at 10:15 PM, guidoBln said: Ja, genau das habe ich vor. Sorry, ich bin verwirrt. Du hast vor die Holding oder die Input Register zu lesen? Zitieren
guidoBln Geschrieben March 5, 2025 at 07:42 Autor Geschrieben March 5, 2025 at 07:42 Ich gestehe, ich bin noch ganz offfensichtlich nicht ausreichend vertraut mit modbus. Ich kenne die Unterschiede zwischen den Registerarten nicht. Zitieren
guidoBln Geschrieben March 5, 2025 at 07:43 Autor Geschrieben March 5, 2025 at 07:43 Ich möchte die Input Register 1002 (Ladestatus), 1004 (User-ID) und 2002 (2002) auslesen. Zitieren
rtrbt Geschrieben March 5, 2025 at 08:36 Geschrieben March 5, 2025 at 08:36 Du benutzt connection.readHoldingRegisters versuch stattdessen mal connection.readInputRegisters Zitieren
guidoBln Geschrieben March 5, 2025 at 12:08 Autor Geschrieben March 5, 2025 at 12:08 readInputRegisters( { address: address, quantity: numberOfRegisters, }, ( err: any, data: any ) => { const buf = Buffer.from( data.response.data ) console.log( buf ) } }) Zitieren
guidoBln Geschrieben March 5, 2025 at 12:10 Autor Geschrieben March 5, 2025 at 12:10 (bearbeitet) ...liefert für die Adressen 1002 und 1004 immer nur "<Buffer 00 00 00 00>". Dabei läuft ein Ladevorgang. bearbeitet March 5, 2025 at 12:10 von guidoBln Zitieren
rtrbt Geschrieben March 5, 2025 at 12:33 Geschrieben March 5, 2025 at 12:33 Versuch mal direkt console.log(data.response.data) anstatt von const test = Buffer.from( data.response.data ) console.log( test ) data.response.data ist schon ein Array von Buffern. Ich bekomme [ <Buffer 00 00>, <Buffer 00 01>, <Buffer ff ff>, <Buffer ff ff> ] wenn ein Auto angesteckt ist, also einen Buffer pro Register mit je 2 Byte drin. Du müsstest dann noch herausbekommen, wie man aus jeweils zwei Buffern eine 32-Bit-Zahl macht. Zitieren
guidoBln Geschrieben March 5, 2025 at 14:38 Autor Geschrieben March 5, 2025 at 14:38 Ich hab's hinbekommen: Ladeleistung (Register 2002): connection.readInputRegisters({ address: 2002, quantity: 8 }, (err, data) => { return Buffer.concat(data.response.data).readFloatBE() }) Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.