201.028 REV 1 Date of Issue: 18 June 2018
They may be simple numeric quantities such as ``test time in seconds’’. They can also be enumerations such as
``result format’’ where ``0’’ means ISO4406, ``1’’ means NAS1638 etc.
Signed Integers - These are used for quantities that may become negative, such as °C. They are also used for
result codes using formats similar to NAS1638, where we have to represent the NAS ``00’’ class as -1, and ``000’’
as -2.
Signed integers are represented in single Modbus registers using the ``twos complement’’ standard, as usual in
computing. If a user-written program incorrectly interprets a signed integer as unsigned, then positive numbers
will still be interpreted correctly. However, small negative numbers will appear as large positive ones. In
particular, -1 appears as 65535 and -2 as 65534. These might be seen when interpreting the NAS codes
mentioned above.
Take care when writing software dealing with NAS codes or Temperature measurements.
32 Bit Unsigned Integers - Some quantities are (or may become) too large to fit into a single 16-bit register. For
example the Test Number could eventually increment to more than 65535. These items are represented using
two consecutive registers; the combination makes up a 32-bit integer. For example, the value of such a 32 bit
unsigned integer stored in registers 8-9 may be calculated using the formula:
𝑣𝑎𝑙𝑢𝑒 = (65536 × (𝑟𝑒𝑔𝑖𝑠𝑡𝑒𝑟 8)) + (𝑟𝑒𝑔𝑖𝑠𝑡𝑒𝑟 9)
Bitmaps - Bitmaps are again single 16-bit Modbus registers, but they have a special interpretation. Each ``bit’’ in
the register has a separate function. The most important example is the ``status flags’’ register (31). Each register
bit encodes a separate function, for example ``result valid’’, ``new result’’, ``over temperature alarm’’ etc. In this
document bits are numbered starting with bit 0 = least significant bit.
A user programming environment such as a PLC programming system or a high level computer language will
normally have functions that allow easy access of individual bit values in a register.
Arrays - An Array is simply a sequence of objects packed in consecutive registers. For example the ``result codes’’
are in an array of 8 registers. Code [0] is in register 56; code [1] is in register 57 etc.
In the case of an array of 32-bit integers, each element itself takes up 2 registers, so there are twice as many
registers used as elements in the array. In the case of the particle counts array, there are 8 particle sizes counted
so these are stored in 8 × 2 = 16 registers.
Packed Characters - These are used to encode the user-settable ``test reference’’ string, used to label each test.
Characters are packed two per Modbus register. This will probably not be used in a user-written Modbus
program, but in principle the test reference could be set to a different value for each test. The test reference
string consists of 16 characters packed into an array of 8 consecutive registers.
Date/Time - A ``Date’’ represents a calendar date and time as a 32 bit unsigned integer (it is the number of
seconds since Jan 1 1970). User programs will not generally have to deal with this, but in principle they could e.g.
read or set the real time clock from registers 24-25. It can be useful during development to be able to read the
clock and see a continuously incrementing value of seconds.