Sample Data Groups — Modbus Only

The following are sample Modbus data groups. Your needs determine exactly how the data groups are defined.

See the following subsections for details:

Default Data Group — Non-ordinalized

Default data groups can be defined in a device template file.

Example

Copy
Default Data Group — Non-ordinalized
<defDataGroups>
    <Version/>
    <BasicPoll/>
    <AnlgScale/>
    <PlungerCtl/>
</defDataGroups>

Default Data Group — Ordinalized

Default data groups can be defined in a device template file.

Example

Copy
Default Data Group — Ordinalized
<defDataGroups>
    <Gas ordinal="1" niceName="Gas Analysis Run #1"/>
    <Gas ordinal="2" niceName="Gas Analysis Run #2"/>
    <Gas ordinal="3" niceName="Gas Analysis Run #3"/>
    <Gas ordinal="4" niceName="Gas Analysis Run #4"/>
</defDataGroups>

Data Group — Contiguous Registers

Register numbers are contiguous, so all data can be returned in a single read block.

Example

Data is a read-only group.

Copy
Data Group — Contiguous Registers
<AnlgInput niceName="Analog Inputs">
    <dgElements byteOrder="bigEndian" secLev="4" type="r4">
        <AI1 desc="Analog #1" regNum="9501"/>
        <AI2 desc="Analog #2" regNum="9502"/>
        <AI3 desc="Analog #3" regNum="9503"/>
        <AI4 desc="Analog #4" regNum="9504"/>
        <AI5 desc="Analog #5" regNum="9505"/>
        </dgElements>
    <modbusReadBlocks>
        <block1 regNum="9501" regCnt="5" funcCode="3" regOff="0" regByteLen="4"/>
    </modbusReadBlocks>
</AnlgInput>

Data Group — Multiple Read Blocks

Multiple read blocks are required for two reasons: 1) the byte count exceeds 250; or 2) multiple function codes are required.

Example

Copy
Data Group — Multiple Read Blocks
<Inst niceName="Instant Data" baseOrd="1" maxCnt="4" forceSave="true">
    <dgElements byteOrder="bigEndian" secLev="4" type="r4">
        <DayFlRt desc="Daily Flow Rate" regDef="1:0"/>
        <BattVolt desc="Battery Voltage" regNum="6102"/>
        <DP desc="Differential Pressure" regDef="3:0"/>
        <SP desc="Static Pressure" regDef="3:1"/>
        <Temp desc="Temperature" regDef="3:2"/>
        <InstRate desc="Instantaneous Flow Rate" regDef="3:3"/>
        <ToFlow desc="Today's Flow" regDef="3:4"/>
        <ToEner desc="Today's Energy" regDef="3:5"/>
        <Totaliz desc="Totalizer" regDef="3:6"/>
        <YestFlow desc="Yesterday's Flow" regDef="3:7"/>
        <UncTot desc="Uncorrected Total" regDef="3:8"/>
        <SqrtExt desc="Square Root Ext" regDef="3:9"/>
        <Beta desc="Beta" regDef="3:10"/>
        <FPV desc="FPV" regDef="3:11"/>
        <FnFr desc="Fn/Fr" regDef="3:12"/>
        <FslFr desc="Fsl/Fr E/d" regDef="3:13"/>
        <FcFr desc="Fc/Fr K" regDef="3:14"/>
        <Red desc="ReD/Fb" regDef="3:15"/>
        <Fg desc="Fg" regDef="3:16"/>
        <Y1 desc="Y1/Fa" regDef="3:17"/>
        <Ftf desc="Ftf" regDef="3:18"/>
        <Fpb desc="Fpb" regDef="3:19"/>
        <Ftb desc="Ftb" regDef="3:20"/>
        <SpExpY desc="Spare/EXP Y" regDef="3:21"/>
        <SpY desc="Spare/Y Sub" regDef="3:22"/>
        <Zb desc="Zb" regDef="3:23"/>
        <Zf desc="Zf/GAMMA" regDef="3:24"/>
        <Zs desc="Zs/SIGMA3" regDef="3:25"/>
        <SpEps desc="Spare/Epsilon" regDef="3:26"/>
        <DayEnRt desc="Daily Energy Rate" regDef="1:1"/>
    </dgElements>
    <modbusReadBlocks regByteLen="4">
        <block1 regNum_ord1="21003" regNum_ord2="21015" regNum_ord3="21027" regNum_ord4="21039" regCnt="2" funcCode="3"/>
        <block2 regNum="6102" regCnt="1" funcCode="3"/>
        <block3 regNum_ord1="8001" regNum_ord2="8101" regNum_ord3="8201" regNum_ord4="8301" regCnt="27" funcCode="3"/>
    </modbusReadBlocks>
</Inst>

Data Group — Single Element Read/Write Group

Data group with a single element.

Example

Group is a read/write group.

Copy
Data Group — Single Element Read/Write Group
<TankLvl niceName="Tank Level" udcCat="UDCALL" maxCnt="1" canSend="true" uccSend="true">
    <dgElements byteOrder="bigEndian" secLev="4" type="boolean">
        <di3 desc="Tank Level High" regNum="99"/>
    </dgElements>
    <modbusReadBlocks regOff="-1">
        <block1 regNum="99" regCnt="1" funcCode="1" regBitLen="1"/>
    </modbusReadBlocks>
    <modbusWriteBlocks regOff="-1">
        <block1 regNum="99" regCnt="1" funcCode="5" regBitLen="1"/>
    </modbusWriteBlocks>
</TankLvl>

Data Group — Reference

One data group element contains a reference to another data group element.

Example

The element ClkTm references ClkTimRaw for its value.

Copy
Data Group — Reference
<ClkTmRaw desc="Click Time Raw" regNum="40001"/>
<ClkTm desc="Click Time" type="r4" ref="ClkTmRaw" scaleFactor="0.1"/>

Data Group — Enumerated Data

Enumerated data.

Example

The data is retrieved for the element TapLocRaw. This element is hidden. The element TapLoc references TapLocRaw for the data. The mapVal attribute defines the element that contains the conversion values, which in this example is TapLocOptions.

Copy
Data Group — Enumerated Data
<TapLocRaw desc="Tap Location Raw Data" regNum="99" hidden="true"/>
<TapLoc desc="Tap Location" ref="TapLocRaw" mapVal="TapLocOptions">
    <TapLocOptions>
        <e0 value="Downstream"/>
        <e1 value="Upstream"/>
    </TapLocOptions>
</TapLoc>

Data Group — Bit Position

Bit position.

Example

The elements derive their data from the bits of register 40100.

Copy
Data Group — Bit Position, register 40100
<TrndARaw desc="Trend Analogs" regNum="40100" dMask="0x%08X"/>
<TaCp desc="Trend CP" type="boolean" ref="TrndARaw" bPos="0"/>
<TaTp desc="Trend TP" type="boolean" ref="TrndARaw" bPos="1"/>
<TaIp desc="Trend IP" type="boolean" ref="TrndARaw" bPos="2"/>
<TaDp desc="Trend DP" type="boolean" ref="TrndARaw" bPos="3"/>
<TaLp desc="Trend LP" type="boolean" ref="TrndARaw" bPos="4"/>
<TaLt desc="Trend LT" type="boolean" ref="TrndARaw" bPos="5"/>
<TaUt desc="Trend ST" type="boolean" ref="TrndARaw" bPos="6"/>
<TaAl desc="Trend AL" type="boolean" ref="TrndARaw" bPos="7"/>

The elements derive their data from the bits of register 40223.

Copy
Data Group — Bit Position, register 40223
<StatusBits desc="StatusBits" regNum="40223" type="r4"/>
<bCutOff desc="Meter Below Cutoff flag" type="boolean" bPos="0" ref="StatusBits"/>
<bCalcOn desc="Calc Enabled Flag" type="boolean" bPos="4" ref="StatusBits"/>
<bAGAErr desc="AGA 8 Error flag" type="boolean" bPos="6" ref="StatusBits"/>

Data Group — Ordinalized

The regDef attribute of the data group element defines the read block and the offset to the starting register (Block#:RegisterOffset#).

Example

The read block attribute regNum_ord# defines the starting register for the # instance of the group.

Copy
Data Group — Ordinalized, regNum_ord#
<FlowVals niceName="Flow Values" devDG="true" maxCnt="2"  baseOrd="1">
    <dgElements byteOrder="BigEndian" secLev="4" type="i2">
        <SP desc="Static Pressure" regDef="1:00"/>
        <DP desc="Diff Pressure" regDef="1:01"/>
        <Temp desc="Gas Temp" regDef="1:02"/>
        <FlowRate desc="Flow Rate" regDef="1:03"/>
    </dgElements>
    <modbusReadBlocks>
        <block1 regCnt="4" funcCode="3" regNum_ord1="710" regNum_ord2="910" regOff="0" regByteLen="2"/>
    </modbusReadBlocks>
</FlowVals>

Multiple read blocks can be defined, if necessary.

Copy
Data Group — Ordinalized, multiple read blocks
<FlowVals niceName="Flow Values" devDG="true" maxCnt="2"  baseOrd="1">
    <dgElements byteOrder="BigEndian" secLev="4" type="i2">
        <SP desc="Static Pressure" regDef="1:00"/>
        <DP desc="Diff Pressure" regDef="1:01"/>
        <Temp desc="Gas Temp" regDef="1:02"/>
        <FlowRate desc="Flow Rate" regDef="1:03"/>
        <EnRate desc="Energy Rate" regDef="2:00"/>
        <FlowTdy desc="Flow Time Today" regDef="3:00"/>
    </dgElements>
    <modbusReadBlocks>
        <block1 regCnt="4" funcCode="3" regNum_ord1="710" regNum_ord2="910" regOff="0" regByteLen="2"/>
        <block2 regCnt="1" funcCode="3" regNum_ord1="751" regNum_ord2="951" regOff="0" regByteLen="2"/>
        <block3 regCnt="1" funcCode="3" regNum_ord1="803" regNum_ord2="1003" regOff="0" regByteLen="2"/>
    </modbusReadBlocks>
</FlowVals>

Alternatively, use regNum + ordIncrement to define ordinalized data groups.

Copy
Data Group — Ordinalized, regNum + ordIncrement
<FlowVals niceName="Flow Values" devDG="true" maxCnt="2" baseOrd="1">
    <dgElements byteOrder="BigEndian" secLev="4" type="i2">
        <SP desc="Static Pressure" regDef="1:00"/>
        <DP desc="Diff Pressure" regDef="1:01"/>
        <Temp desc="Gas Temp" regDef="1:02"/>
        <FlowRate desc="Flow Rate" regDef="1:03"/>
    </dgElements>
    <modbusReadBlocks regByteLen="2"/>
        <block1 regNum="11001" ordIncrement="4" regCnt="4" funcCode="3"/>
    </modbusReadBlocks>
</FlowVals>

Back to top