Die fragen bleiben aber offen.
Ist dafür 06 Write Single Register oder 15 Write multiple Coils das richtige?
Und wie übergebe ich den wert und wo nehme ich die prüfsumme her ?
xxx 7:14: warning: large integer implicitly truncated to unsigned type [-Woverflow]
byte wert1 = 2755;
^~~~
xxx In function 'void setup()':
spannung:16:42: error: no matching function for call to 'ModbusMaster::writeSingleRegister(int, int, byte&)'
node.writeSingleRegister(10,9007, wert1);
^
C:\Users\S~1\Documents\Arduino\libraries\ModbusMaster-master\src/ModbusMaster.h:211:14: note: candidate: uint8_t ModbusMaster::writeSingleRegister(uint16_t, uint16_t)
uint8_t writeSingleRegister(uint16_t, uint16_t);
^~~~~~~~~~~~~~~~~~~
C:\Users\S~1\Documents\Arduino\libraries\ModbusMaster-master\src/ModbusMaster.h:211:14: note: candidate expects 2 arguments, 3 provided
In file included from C:\Users\S~1\\Documents\Arduino\libraries\ModbusMaster-master\src/ModbusMaster.h:58:0,
from
C:\Users\S~1\Documents\Arduino\libraries\ModbusMaster-master\src/util/crc16.h: At global scope:
C:\Users\S~1\Documents\Arduino\libraries\ModbusMaster-master\src/util/crc16.h:71:17: warning: 'uint16_t crc16_update(uint16_t, uint8_t)' defined but not used [-Wunused-function]
static uint16_t crc16_update(uint16_t crc, uint8_t a)
^~~~~~~~~~~~
Bibliothek ModbusMaster-master in Version 2.0.1 im Ordner: C:\Users\S~1\\Documents\Arduino\libraries\ModbusMaster-master wird verwendet
exit status 1
no matching function for call to 'ModbusMaster::writeSingleRegister(int, int, byte&)'
und wenn ich anstelle von node.writeSingleRegister(06,9007, wert1); nur node.writeSingleRegister(9007, wert1); verwende wird es fehlerfrei geschrieben den wert ändert tut es aber natürlich nicht.
Und ob ich jetzt node.writeSingleRegister(06,9007, wert1); oder node.writeSingleRegister(0x06,9007, wert1); schreibe spielt wohl keine rolle.
write single register verlangt zwei Parameter, das Register und den Wert. jeweils in einem uint16_t
außerdem gib dir im Fehlerfall auch den returncode von Result in HEX aus.
Auch beim write single register bekommst du von der Funktion ein ergebnis zurück - lies das wie beim read in einen Variable ein und gib es aus!
ok auf ein neues.
Dank deiner Tipps kann ich es zumindest mal hoch laden.
Mit einen Fehler der aber automatisch übergangen wird.
In file included from C:\Users\S1\Documents\Arduino\libraries\ModbusMaster-master\src/ModbusMaster.h:58:0,
from C:\Users\S1\AppData\Local\Temp\arduino_modified_sketch_438559\spannung.ino:1:
C:\Users\S1\Documents\Arduino\libraries\ModbusMaster-master\src/util/crc16.h:71:17: warning: 'uint16_t crc16_update(uint16_t, uint8_t)' defined but not used [-Wunused-function]
static uint16_t crc16_update(uint16_t crc, uint8_t a)
Auch ist mir aufgefallen das ich falsch geguckt habe es muss mit 10 und nicht mit 6 gesendet werden also nicht node.writeSingleRegister sondern node.writeMultipleRegisters.
Am Ergebnis ändert es leider nichts wert wird nicht geändert.
also ob single older Multiple soll nur daran liegen, ob du einen Wert oder mehrere setzen willst. Mir scheint du willst nur einen Wert setzen. Möchtest du mehrere Werte setzen wirst du vieleicht ein Array übergeben müssen.
dass soll wohl eher so sein:
if (result != node.ku8MBSuccess) // on error
und dann würde ich an deiner Stelle mal das Holding register aus der Variable id verwenden und nicht 15 Werte auslesen, sondern exakt das vorhin geschriebene Register.
1 Wert geschrieben --> 1 Wert zurücklesen.
naja die Doku zu dem Regler ist nur die aus dem andern link.
if (result != node.ku8MBSuccess) // on error
Ok geändert.
Ich möchte eigentlich NUR diesen einen wert ändern. Boost charging voltage / 9007 (03 read)(10 write)
"Sicher das es HEX ist?"
Nein bin ich nicht aber zum auslesen wird hex genutzt also bin ich davon ausgegangen.
Spielt aber auch keine rolle ob ich 0x mit setzte oder nicht wert wird so und so nicht geändert.
"Wo wird result gesetzt?"
Ich habe es mit und ohne versucht ändert auch nichts nur das ich mal 0 und mal Gar keine Ausgabe bekomme.
Dein verlinken Beitrag hab ich schon mehrfach versucht zu verstehen aber hab es nicht verstanden. Weswegen ich nach eine Beispiel gefragt hatte. an dem ich mir das ableiten kann.
Für was da (0, 2); ist bleibt mir zz verborgen.
Jetzt bekomme ich beim schreiben schonmal den fehler code:
result = node.writeMultipleRegisters(id, wert1); //10 schreiben 3 Lesen
if (result != node.ku8MBSuccess) // do something if read is successfull
Anstelle von
node.writeMultipleRegisters(id, wert1); //10 schreiben 3 Lesen
if (result == node.ku8MBSuccess) // do something if read is successfull
"P.S.: die Registeradressen sind in HEX im PDF."
Ja habe ich gesehen habe es zum test mit und ohne 0x versucht ist aber nicht das Problem wie ich dachte.
An unrecoverable error occurred while the server (or slave) was
attempting to perform the requested action.
@ingroup constant
*/
static const uint8_t ku8MBSlaveDeviceFailure = 0x04;
na, dann halt doch mit FC 10 ... probiern... dauert was muss mir das erst durchsehen...
C:\Users\S1\AppData\Local\Temp\arduino_modified_sketch_199562\sketch_mar28a.ino: In function 'void schreiben()':
sketch_mar28a:17:37: error: void value not ignored as it ought to be
result = node.clearTransmitBuffer();
^
In file included from C:\Users\S1\Documents\Arduino\libraries\ModbusMaster-master\src/ModbusMaster.h:58:0,
from C:\Users\S1\AppData\Local\Temp\arduino_modified_sketch_199562\sketch_mar28a.ino:5:
C:\Users\S1\Documents\Arduino\libraries\ModbusMaster-master\src/util/crc16.h: At global scope:
C:\Users\S1\Documents\Arduino\libraries\ModbusMaster-master\src/util/crc16.h:71:17: warning: 'uint16_t crc16_update(uint16_t, uint8_t)' defined but not used [-Wunused-function]
static uint16_t crc16_update(uint16_t crc, uint8_t a)
^~~~~~~~~~~~
Bibliothek ModbusMaster-master in Version 2.0.1 im Ordner: C:\Users\S1\Documents\Arduino\libraries\ModbusMaster-master wird verwendet
exit status 1
void value not ignored as it ought to be