Jump to content
View in the app

A better way to browse. Learn more.

Tinkerunity

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Geschrieben

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

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

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
  • Autor

Ich gestehe, ich bin noch ganz offfensichtlich nicht ausreichend vertraut mit modbus. Ich kenne die Unterschiede zwischen den Registerarten nicht.

Geschrieben
  • Autor

Ich möchte die Input Re­gis­ter 1002 (Lade­status), 1004 (User-ID) und 2002 (2002) auslesen.

Geschrieben
  • Autor
readInputRegisters( {
  address: address,
  quantity: numberOfRegisters,
}, ( err: any, data: any ) => {
  const buf = Buffer.from( data.response.data )

 

  console.log( buf )

}

})

Geschrieben
  • Autor

...liefert für die Adressen 1002 und 1004 immer nur "<Buffer 00 00 00 00>". Dabei läuft ein Ladevorgang.

bearbeitet von guidoBln

Geschrieben

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
  • 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.

Gast
Reply to this topic...

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.