Jump to content

Warp3, kein Zugriff auf Modbus


Recommended Posts

Posted

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 )
      }
    } )
  }
} )
Posted

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.

Posted

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?

Posted

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.

Posted

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...