Jump to content

stefanwe

Members
  • Gesamte Inhalte

    9
  • Benutzer seit

  • Letzter Besuch

Letzte Besucher des Profils

Der "Letzte Profil-Besucher"-Block ist deaktiviert und wird anderen Benutzern nicht angezeit.

stefanwe's Achievements

Rookie

Rookie (2/14)

  • Week One Done
  • Dedicated Rare
  • First Post
  • Conversation Starter

Recent Badges

0

Reputation in der Community

  1. @MatzeTF Ich hab eine Excelliste mit Registern bekommen, dort steht aber auch nicht weiter zur Schnittstelle. Nur eine Auflistung der Bytes und Beschreibung dazu. Ich werde mal jetzt weiter den Hersteller nerven. Danke so weit!
  2. Hallo @MatzeTF, ich bin gerade die Anleitung durch, konnte aber keine Einstellungen finden dazu (außer die Modbus Adresse). Ich hab mal das Dokument angehangen zum Gerät. Meine Vermutung ist jetzt schon das es vielleicht nicht In Ordnung ist. Wenn du vielleicht Zeit hast, kannst du mal das Dokument mal überfliegen. user's manual 3kW.pdf
  3. Hallo @MatzeTF, danke für deine Antwort. Hier sind Bilder von unserem experimentellen Aufbau. Das Gerät soll später dann raus an ein Windgenerator.
  4. @rtrbt Ich wollte jetzt "modbusMasterReadHoldingRegisters" benutzen und bekam "BrickletRS485.EXCEPTION_CODE_TIMEOUT". const rs485 = new BrickletRS485('24RB', ipcon); .... let rs485requestId = 0; ipcon.on(IPConnection.CALLBACK_CONNECTED, (connectReason: number) => { rs485.setRS485Configuration( 9600, BrickletRS485.PARITY_NONE, BrickletRS485.STOPBITS_1, BrickletRS485.WORDLENGTH_8, BrickletRS485.DUPLEX_HALF ); rs485.setMode(BrickletRS485.MODE_MODBUS_MASTER_RTU); rs485.setModbusConfiguration(1, 1000); rs485.modbusMasterReadHoldingRegisters(2, 1, 6, (requestID: number) => { rs485requestId = requestID; }); }); ... rs485.on(BrickletRS485.CALLBACK_MODBUS_MASTER_READ_HOLDING_REGISTERS_RESPONSE, (requestID: number, exceptionCode: number, holdingRegisters: number[]) => { console.log(`CALLBACK_MODBUS_MASTER_READ_HOLDING_REGISTERS_RESPONSE: requestID: "${requestID}" exceptionCode: "${exceptionCode}" holdingRegisters: "${holdingRegisters}" \n`); }); Ich hab das ganze dann per Hand im Brick Viewer nachgeprüft: Dort ist es genau so. Eine Idee was ich falsch mache? Wenn ich den Modus umstelle, kommen in einer Dauerschleife immer 2 Nachrichten an, am Brick: Vielleicht kannst du mich aufklären, mir fehlt hier die Erfahrung mit modbus.
  5. @rtrbt du kannst noch "rolesMappedData" überall außer in der read Methode entfernen, es wird deklariert aber nicht benutzt in den anderen Methoden. (im BrickletRS485)
  6. Hallo rtrbt, ich arbeite gerade an den Bricks die ich benutze. Hier ist mein repo: https://github.com/stefanwerfling/tfe In der Tat eine Menge Arbeit. Durch ESLint stelle ich auch if/else`s um. Die Evals hab ich auch entfernt. Knackpunkt ist ESM, ich konnte einfach die JSLib nicht laden für mein Projekt. Meine Idee ist noch später Objekte als Zusatz zu schreiben die mit promis die callback daten dann liefern. Die Original-API soll erhalten bleiben, damit die Dokumentation stimmt. Über alle Typen von den Variablen bin ich mir aber noch nicht bewusst. Das Beste ist, wenn ich alle "any" typen aufklären kann. :)
  7. Ich werde es ausprobieren, in meinen Fall wäre es aber keines der Write Funktionen wie im Beispiel, sondern "modbusMasterReadHoldingRegisters" weil ich ja mit "code 3" etwas auslesen will?
  8. Hallo, wie im Titel schon gesehen, hab ich begonnen mir die JSlib sauber ins TypeScript umzuschreiben. Im Javascript Code gibt es viele Ungereimtheiten, vieles lässt sich durch Beispiele lösen. Frage nun, ich sehe gerade im Quellcode das "device" benutzt wird, obwohl es nirgends übergeben wird. Ist das ein Fehler oder woher kommt dieses Objekt? BrickletRS485, Zeile 1607 this.modbusSlaveAnswerReadCoilsRequest = function(requestID, coils, returnCallback, errorCallback) { /* In Modbus slave mode this function can be used to answer a master request to read coils. * Request ID: Request ID of the corresponding request that is being answered. * Coils: Data that is to be sent to the Modbus master for the corresponding request. This function must be called from the :cb:`Modbus Slave Read Coils Request` callback with the Request ID as provided by the argument of the callback. */ var coilsLength = 0; var coilsChunkData = []; var coilsChunkOffset = 0; var streamStateObject = this.streamStateObjects[25]; if (coils.length > 65535) { if (errorCallback !== null){ errorCallback(IPConnection.ERROR_INVALID_PARAMETER); } this.resetStreamStateObject(streamStateObject); if (streamStateObject['responseProperties']['callQueue'].length > 0) { streamStateObject['responseProperties']['callQueue'].shift()(device); // <-- wo kommt es her? } return; }
  9. Hallo, ich bin neu im Thema Modbus und BrickletRS485. Ich frage mich gerade wie das ganze Funktioniert, hier mal folgendes Beispiel von mir: pcon.on(IPConnection.CALLBACK_CONNECTED, (connectReason: number) => { console.log(connectReason); ipcon.enumerate(); rs485.setRS485Configuration( 9600, BrickletRS485.PARITY_NONE, BrickletRS485.STOPBITS_1, BrickletRS485.WORDLENGTH_8, BrickletRS485.DUPLEX_HALF ); rs485.setMode(BrickletRS485.MODE_RS485); rs485.setModbusConfiguration(1, 1000); rs485.enableReadCallback(); const request = Buffer.from([ // address 0x02, // function code 0x03, // address 0x00, 0x01, // quantity 0x00, 0x06, // CRC 0x00, 0x00 ]); console.log(Utils.toHex(request.toString())); const crc = CRC.crc16modbus(request.slice(0, request.length - 2)); request.writeUInt16BE(crc, request.length - 2); const msg = request.toString('binary'); console.log(msg.split('')); console.log(Utils.toHex(msg)); //rs485.write(Utils.hex2a('0203FC000100035438').split('')); rs485.write(msg.split('')); }); let buffer = ''; rs485.on(BrickletRS485.CALLBACK_READ, (message: string[]) => { buffer += message.join(''); if (buffer.length >= 8) { console.log(`Message: "${Utils.toHex(buffer)}"\n`); buffer = ''; } }); Auf dem BrickletRS485.CALLBACK_READ event kommen auf message immer 1 Zeichen, die ich auf buffer sammel. Ich frage mich nun wie das Funktioniert um auf die Antwort von der Anfrage "0203000100063b94" zu warten, wenn dort auch andere Nachrichten kommen. Beispiel im Brick-Viewer sehe ich alle 3 Sekunden mehrere Nachrichten, je nachdem wie ich verbinde, komme ich bei der Nachricht versetzt an. Wann weiß ich, wann eine Nachricht komplett da ist? (crc16 ist mir bekannt, aber wo fängt man an bei Nachrichten an, wenn man versetzt die ersten bytes bekommen hat) Wie setzt ihr das ganze um? Gibt es mehr Beispiele, um zusehen, was ich machen kann :) Schonmal vielen Dank!
×
×
  • Neu erstellen...