Technical FAQs

Ask a Question

Can StruxureWare Data Center Expert output a 32 bit register with its Modbus output?

Issue:

A single register in StruxureWare Data Center Expert's modbus output is limited to 16 bit.

Product Line:

StruxureWare Central / StruxureWare Data center Expert

Environment:

StruxureWare Central any version
StruxureWare Data center Expert any version

Cause:

The output of a single register for StruxureWare is a 16 bit unsigned integer. This means that any value larger than 65535 can not be handled by a single register. This includes values lower than 65535 that report with a decimal such as 6553.5. DCE will output 65535 but your BMS will need to divide by 10 in such cases.

Resolution:

We can not output a 32 bit register in StruxureWare. To overcome this limitation, StruxureWare Data Center Expert can be configured to output a value to 2 registers. This must be configured during the initial setup for the output of each register. StruxureWare does not know which registers may be too large for an individual register so each must be done manually. Each should be polled a 16 bit unsigned integer

To configure this option, go to the system menu and building management settings. Select the device that you will be using and choose modify device settings. If you double click any register, you get the option to "Edit the Slave Sensor Register Value" which is not necessary and you get the option to "Edit the number of registers used for this sensor". This second field can take a value of either 1 or 2. For values above 65535, you must enter the number 2 and hit OK. If the register chosen was 31000, the next available register will now be 31002. The sensor that may have been set to use 31001 will now change. This is also why this should be done upon initial setup as if the system is already configured and a register is changed, the polling software must be reconfigured with the new registers.

If you set 31000 to a double register, you then need to poll 31000 and 31001. you then take the 1st register and left shift the first register (31000) by 16. In binary, it would look like this:

Assuming a value of 131071, a 32 bit register would return:
00000000000000011111111111111111

With 2 registers, you must poll both.
31000 returns 0000000000000001 If this were a single register, = 1
31001 returns 1111111111111111 = 65535

With 2 registers however, you must left shift the 1st register and add it to the second.

00000000000000010000000000000000 is the 1st register left shifted by 16 and is equal to 65536.
Add this value to the value returned from the second register:
1111111111111111 = 65535


Now you have a 32 bit number capable of holding values up to 4,294,967,295
00000000000000011111111111111111 = 65535 + 65536 = 131071

This math must all done on the side of the querying application.
 
Was this helpful?
What can we do to improve the information ?