Modbus to sixnet plc

I have a flexy connected to a sixnet plc via modbus tcp. it is communicating but the values being read are weird.

Address - +407113H
Floating Point
no scaling

the value i get is 2.66438e+36
but the hmi reads 210041

ive tried every modifier with no luck. do i need to do any scaling???

Hi Lonny,

You might need to try one of the other modifiers below instead of H

image

i tried each of them

HMI VALUE IS 206994

TRIED THE MODIFIERS WITH THE FOLLOWING RESULTS

W-0 NO SIGNAL
I-0 NO SIGNAL
D-1225948160
E-2080393490
L-1225948160
M-2080393490
F-600000
H-2.66438E+36

i am available for support to log into my flexy today. I can send you a login to the device.

Do you have a manual for the device that explains the order that the data should be read in? I don’t believe we have any other modifiers we can use but I can try and figure out what is going wrong with the way it’s being read

i dont have the manual but here is a link that ive been looking through this morning

I’m wondering if maybe there’s some kind of offset, can you try setting the register your reading to be one higher or one lower and see if that makes a difference?

i tried that, when i did that i got 0

I don’t think we have any other modifiers available, do other tag values seem to be reading correctly or do they all seem to be having issues?

Can you try and read from these values using something like the Modbus CAS scanner below and let me know if that seems to be getting the correct value?

Modbus Scanner

You should be able to do something like this. Can you open the software and click on the whitespace here:

Then hit add connection and enter the IP address of the device.

image

Then hit add device and enter the slave address of the modbus device

image

Then click on the device, go to add request and then go to read holding registers and enter the offset and length.

Once you do that go back to the main screen and click on the value and then hit poll. Once you do that can you show me what it says for the values of the UINT 32, Int 32 or Float 32?

here are the results

So for those 2 registers 407113 and 407114 we’re getting these hex values

HEX: 7C00
BINARY: 0111 1100 0000 0000

HEX: 4912
BINARY: 0100 1001 0001 0010

32 bit float
210041?

Binary first 16 bits 0100 1000 0100 1101
Binary second 16 bits 0001 1110 0100 0000

So it must not be interpeting it as a float, none of the bits seem to be lining up

How are they doing the conversion? If it do it as just a decimal conversion of 210041 it comes out to what’s below and that doesn’t match.

0000 0000 0000 0011
0011 0100 0111 1001

I’ve tried playing around with the byte order using this site for a little bit but I can’t get it to equal 210041 using those hex values that your device is outputting. Can you check with Sixnet and find out how those should be read?

https://babbage.cs.qc.cuny.edu/IEEE-754.old/32bit.html

Hi Lonny,

Are you able to reach out to the maker of that Modbus device to get any additional info for us?

-Tim

I found that I can access the I/O without a problem but I can’t get any internal registers. The register I was trying to read was a calculated value that just wouldn’t come through properly. I gave up trying, pulled in the un scaled analog value and did the calculations in basic. We plan on replacing this plc so I didn’t want to waste any more time. Thanks

Regards,

Lonny Demers

Instrumentation and Controls Technician

Clearford Water Systems Inc.

Ok thanks for the update Lonny, glad to hear that you were able to get it reading with the analog value