Geschrieben March 4, 2025 at 14:344. Mär 2025 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 ) } } ) } } )
Geschrieben March 4, 2025 at 14:484. Mär 2025 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.
Geschrieben March 5, 2025 at 07:015. Mär 2025 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?
Geschrieben March 5, 2025 at 07:425. Mär 2025 Autor Ich gestehe, ich bin noch ganz offfensichtlich nicht ausreichend vertraut mit modbus. Ich kenne die Unterschiede zwischen den Registerarten nicht.
Geschrieben March 5, 2025 at 07:435. Mär 2025 Autor Ich möchte die Input Register 1002 (Ladestatus), 1004 (User-ID) und 2002 (2002) auslesen.
Geschrieben March 5, 2025 at 08:365. Mär 2025 Du benutzt connection.readHoldingRegisters versuch stattdessen mal connection.readInputRegisters
Geschrieben March 5, 2025 at 12:085. Mär 2025 Autor readInputRegisters( { address: address, quantity: numberOfRegisters, }, ( err: any, data: any ) => { const buf = Buffer.from( data.response.data ) console.log( buf ) } })
Geschrieben March 5, 2025 at 12:105. Mär 2025 Autor ...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:105. Mär 2025 von guidoBln
Geschrieben March 5, 2025 at 12:335. Mär 2025 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.
Geschrieben March 5, 2025 at 14:385. Mär 2025 Autor Ich hab's hinbekommen: Ladeleistung (Register 2002): connection.readInputRegisters({ address: 2002, quantity: 8 }, (err, data) => { return Buffer.concat(data.response.data).readFloatBE() })
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.