A Bit Stuck on Writing Multiple MODBUS Registers
-
If they're integers (16 bit) then I think that'd be preferable in at least you're consistent. I mean you could write 0x02 instead of 0x0002 but I am not sure if it will recognise that and treat it as so.
Sorry this will be a crash course for me too man!
Fox
-
hmm, I tried
And get this pop up error
Then I have to refresh the page and go back in and select all the stuff again before I can have another go :-/.
I must be close haha! -
Then this one
-
does 0x02 not work? it's asking for a string as well... is the datatype not an integer?
-
I think it's wanting '2' then '35702' written into 4104 and 4105 respectively, both at once using function 16 multiple write.
Here's an excerpt from the manual for what they're getting at..- One of the system control keys from the table below must be written into register 8 and its ones-compliment written into register 9
with a single function 16 (write multiple registers) to perform the specified system control function. - Writing any other value or using a function that is not available will return extended exception code 7 (Illegal value written to
register) and have no affect.
The table looks like this..
- One of the system control keys from the table below must be written into register 8 and its ones-compliment written into register 9
-
@dan said in A Bit Stuck on Writing Multiple MODBUS Registers:
35702
I've entered it in like this since the values are a different length:
-
Oh, that makes more sense :)
I'll try that, thanks heaps. -
-
That doesn't give you much to work with does it??
I got this working!
-
oh yeh, that's interesting, I'll try the coils.
Cheers for that hey.
-
FML...
It does say Control Registers at the top of the info page..
-
So it's a nope? - note your 0x2 should be 0x02
-
Na I don't think I can write to coils on this device.
-
write
4104
0
2
ASCII
0x8B76,0x8B76
That sets that control key and calls function 2 -
Hi Dan
Ive run into similar situations before with modbus device.
Make sure your data source hasUse multiple write commands only
checked.
Modbus function 16 writes to holding registers
Use a 4 byte unsigned int.
I believe the decimal number would be 166774:
Turn on the log I/O of the data source so you can inspect the modbus commands.
There may be a chance you might need to use a4 byte unsigned int swapped
If you dont come right paste your I/O commands here.
-
Hi Craig, I've definitely got multiple writes selected in the data source.
I might have to re-visit the calculator / converter looking at that number. I was just sending it the raw hex value.
I'll give it a go. Thanks :)
-
Hey Dan
Did a quick tet for you. I believe it is correct checkout the snapshot I took from Wireshark:
Something to note about modbus is that sometime in manuals they will prefix the register number with the register type. Holding register is decimal 4. So when you see that on a manual you will just put offset 104 in mango. You will also see that some manual are 0 based and some are 1 based. So you might need to try 103 instead of 104.
Below is the settings I used for my point. I used decimal 166774
-
Ok, so I can understand using 166774 gives you 0x00028b76, basically just bit shifts the entire thing in. And that by using a holding register implicitly puts a 4 in the front so only 104 is needed... But if the manual states you need a control key into 8 and its 1's complement into register 9, shouldn't it be 0x8B768B76 = 2339801974 DEC?
Fox
-
OK, now my brain is really hurting, I'll turn on the i/o log and see what mine is outputting.
Just to clarify a little further, the MODBUS register I need to write to is on 'Page 16', the manual says to multiply 256 x Page then add the Offset, so in this case I'm on (256 x 16) + 8 = 4104
When reading off battery voltages and other engine diagnostics off this the formula seems to work.
I'll try again with the decimal.Cheers
-