50556-30 Section 6 Mod Bus Comm Map REV 6
50556-30 Section 6 Mod Bus Comm Map REV 6
1
2
•
•
•
•
•
•
•
•
•
•
•
•
•
•
• .
3
4
Contents
1. Introduction Page 10
5
6
5. Decimal point and engineering unit look-up registers Page 43
7
1. Introduction
The ANGI Series II dispenser supports the ModBus protocol on its half-duplex RS485 serial
communication port COMM 5 as a slave device with dispenser program revisions 3.960 and
greater. This port is found on the Series II Interface board 403-07263 TB6. It is electrically
isolated from the dispenser circuitry by opto-couplers and an isolated DC-DC power converter.
The port is powered from the interface board. An on-board terminating resistor/capacitor is
integrated on the interface board and is brought out on the terminal strip TB6. The provided
terminating resistor can be wired in to the end of the transmission cable. The ModBus protocol
is enabled by turning switch SW1-8 on (up) on the dispenser interface board. The dispenser will
revert to the proprietary Series II Monitor protocol if this switch is off. Swiches SW1-2 through
SW1-6 and a parameter establish the ModBus node ID (see section 10).
All other functions are not supported and, if called for, will return an error. Function 3 and 4 are
identical. The terms “holding” and “input” that apply to a Modicon PLC do not apply to the Series
II dispenser. Both functions are simplified to just being read-register functions. There are no
“coils” defined in the Series II dispenser controller. Those coil functions are not supported.
The Series II control uses a field of 32-bit registers exclusively to hold long and floating point
words. All the register words are aliened to the ModBus odd address: word at memory address
0 is at ModBus address 1. All the register words must be read or written as two consecutive
ModBus integer address starting with the odd address. Registers addressed on the even
ModBus address or in amounts not in sets of two integers will return an exception error. This
rule does not apply to function 22 mask write single register. Function 22 will mask write the
upper or lower 16 bits of the 32-bit register based on the Modbus address.
The value in the dispenser’s 32-bit register can be placed in the two consecutive ModBus
integers in either a big-endian or little-endian format. The desired format is selected by the
parameter configuration bit “extra_configuration / use_little_endian” in the dispenser. A ‘1’ in this
bit puts the ModBus communication in the little-endian format mode, a ‘0’ big-endian. With the
big-endian format the odd address holds the most significant half and the even (higher) address
holds the least significant half of the dispenser’s 32-bit register value. The little-endian format is
reversed, the odd address holds the least significant half and the even (higher) address holds
the most significant half. The lower address is always sent first in the response packet. The byte
order of the ModBus integer values is always big-endian: the most significant half (byte) of the
8
integer is sent first. In function 22 mask write register, the big or little endian format will apply to
which half of the dispenser’s 32-bit register is mask written. In big endian mode the odd
Modbus address mask writes the most significant half of the dispenser’s 32-bit register. Visa
versa for little endian mode. This option exists to allow the dispenser to conform to how the host
system, using the ModBus protocol, may order it’s register values.
The Series II dispenser’s register set is divided into blocks containing 64 long words (long word
= 32 bits). Each block is dedicated to a specific dispenser function. Sets of blocks are, in turn,
assembled into groups. The individual registers are ModBus addressed in a block from 1 to 128
(1 to 80 hex). The blocks are ModBus addressed in values of 128 (80 hex) added to the
ModBus address. The ModBus protocol subtracts a 1 from the address and sends the values 0
to 127 to the dispenser for addressing the registers in the blocks. The dispenser will align the
ModBus address to the dispenser memory point by dividing it by 2. Examples:
Input Modbus address 51 (33 hex) - 1 = 50 (32 hex) sent in the master packet. In the dispenser
50 / 128 = 0 block, 50 / 2 = 25, the 25th register in the dispenser is addressed in block 0.
Input Modbus address 407 (197 hex) - 1 = 406 (196 hex) sent in the master packet. In the
dispenser 406 / 128 = 3 block, 406 remainder 128 = 22 (17 hex) the 22th register in the
dispenser is addressed in block 3.
A formulas for dispenser to ModBus addressing would be:
Block# * 128 + register# x 2 + 1 = ModBus address.
(ModBus address – 1) / 128 = block# (truncate decimal fraction)
((ModBus address – 1) logical-and 127) / 2 = register#
Addressing registers not defined in the dispenser program will not return a traditional ModBus
exception error. The dispenser will return a zero if read and do nothing if written. An exception
error will also not be generated by a ModBus write command if the register is write protected.
The register will simply not be written.
The function 23 multiple read/write will write the registers first then read. If the same register is
written and read with the register being write protected, the write will be denied and the original
unmodified value will be read.
The write protect on the dispenser registers can be unlocked by writing a password number to a
register. There are two password registers, one unlocks the write protect according to the
protection level given to the password value and the other unlocks the write protect only during
the reception of a packet. The first password register value will unlock the write protect and set-
up a ten second time-out timer. The write protect will lock-up after ten seconds if another
transmission from the master is not sent. The unlock timer will be reset every time the ModBus
master poles the dispenser with any function. The use of second password register is not
practical with the ModBus protocol since registers cannot be arbitrarily addressed but are read
or written as a contiguous block. The registers are write protected at the end of processing the
ModBus command reception using password #2.
9
4. The Series II dispenser register set: block definitions
Note: GTI: Gas Technology Institute
All register values are long words, registers containing floating point values are noted
as “float” in their decimal point declaration.
All control addresses are stated as “block.register” in decimal.
ModBus addresses are stated as decimal value and hex value – 1.
The item list number given to the defined registers in sequential order.
For more information on the function of these register consult the ANGI Series II Dispenser
Technical Function manual.
An asterisk by the control address thus x.x* indicates the register is a set of Boolean bits.
Block 0: Directory. The register value provides a list item index to the base register in the
named block. Note: the listing item number is not the control address used in the ModBus
addressing.
Item Control ModBus Description
Numb Address Address / Name
10
Item Control ModBus Description
Numb Address Address / Name
Block 1: Common parameters. Shared by both hoses. Write protected. Items with * write
protected by switch 1-1.
11
Block 2: ‘A’ Hose variables. All write protected by password and switch 1-1.
12
List Control ModBus Description Units Decimal
Numb Address Address / Name
Block 3: ‘A’ Hose Flow meter variables. All write protected by switch 1-1. All IEEE real.
13
Block 4: ‘A’ Hose parameters. All write protected by password. * indicates switch 1-1.
14
Block 5: ‘A’ Hose fill monitor variables. Read only
15
List Control ModBus Description Units Decimal
Numb Address Address / Name
16
Block 6: ‘A’ Hose totalizer variables. Read only
17
Block 7: ‘B’ Hose variables. All write protected by switch 1-1.
Block 8: ‘B’ Hose Flow meter variables. All write protected by switch 1-1.
19
Block 9: ‘B’ Hose parameters. All write protected by password. * indicates switch 1-1.
20
Block 10: ‘B’ Hose fill monitor variables. Read only
22
Block 11: ‘B’ Hose totalizer variables. Read only
23
Block 12: Program control variables.
24
Block 13: Analog input variables.
25
Block 15: GTI ‘A’ Hose signal variables (floating point)
26
List Control ModBus Description Units Decimal
Numb Address Address / Name
27
Block 18: GTI ‘A’ Hose parameters (floating point).
28
Block 20: GTI ‘B’ Hose control variables.
29
Block 22: GTI ‘B’ Hose fill variables (floating point).
30
Block 23: GTI ‘B’ Hose fill monitor variables.
31
Block 25: GTI ‘B’ Hose parameters
32
Block 28: ‘A’ Hose process
33
Block 30: ‘A’ Hose Gilbarco communication variables
34
List Control ModBus Description Units Decimal
Numb Address Address / Name
35
Block 31: ‘B’ Hose Gilbarco communication variables
36
List Control ModBus Description Units Decimal
Numb Address Address / Name
37
Block 32: ‘A’ Hose test variables
Note: test variables are subject to be different between program revisions.
38
Block 34: Extra parameters
39
none 34.45 4443 115Ah not defined
…
none 34.63 4479 117Eh not defined
40
5. Decimal point and engineering unit look-up registers.
Accompanying the variable and parameter register set is a range of ModBus addresses that
hold code values for the engineering unit and decimal point that go with the variable and
parameter register values. This register range from 8193 to 16286 ( 2000h to 3FFFh ) and is
read only. These registers are laid out in matching order to the variable and parameter range.
Addresses for the registers are obtained by adding 8192 (2000 hex) to the ModBus address for
the variable or parameter. The value returned would be a 32-bit value with the decimal point
number in the LSW and the engineering unit code in the MSW.
Example:
To get the decimal point and engineering unit for the ‘A’ hose pressure from the sensor below
add 8192 to 263 (2000h to 106h) for a ModBus address of 8297 (2106h). A read of this register
will return 1966082 (001E0002 hex). The LSW of 0002 hex is the placement of 2 decimal points
and the MSW of 1E hex is engineering unit code of 30 for MPa (MegaPascals).
A read if the ‘A’ hose pressure register at 263 (106 hex) of 2069 with the above information
means this value is 20.69 Mpa. This converts to 3000 PSI (145 PSI / Mpa).
41
6. Engineering unit code table
Engineering units of variables and parameters used in the dispenser control and their number code read
from the decimal point and engineering unit address range.
43
7. Audit trail register range.
The range of registers from 16287 to 24576 ( 4000 hex to 5FFF hex ) is the sorted audit trail log
of parameter changes through the life of the dispenser. The dispenser records any new
parameter value with a time and date stamp and change counter. Each of these fields is a 32-bit
long word so each change record item is four 32-bit words: count-address, new value, time, and
date. The audit trail contains 1024 possible records. The audit trail is kept in the dispenser’s
nonvolatile flash memory for permanent storage. A sorting routine reads the trail, orders the
records according to their control addresses, and put the sorted result in the dispenser’s volatile
memory. This sorted result is mapped to these ModBus addresses and are read only.
Each record is placed in this range in groups of four 32-bit words starting at address 16287
(4000 hex) and taking up 8 ModBus addresses so the first record lies in addresses 16287 to
16294 (4000 hex to 4007 hex). The next record starts at the next ModBus address 16295 (4008
hex), the next 8 at 16303 (4010h), and so on (A reminder: hex values shown are official ModBus
addresses minus one). A read of 8 addresses for the first record would return:
The first 32-bit word is encoded with the change count and control address. The audit change
count is stored in the MSW (upper 16-bits) and the parameter control address is stored in the
LSW (lower 16-bits) of this 32-bit word. The LSW is further encoded: this word is divided into
two sections: bits 0 – 13 are the dispenser control address or flow-meter address, bits 14 and
15 are indicators for a meter parameter change. Bit 14 = 1 indicates a parameter change on the
‘A’ hose meter. Bit 15 = 1 indicates a parameter change on the ‘B’ hose meter. If the parameter
change was a meter value change through the dispenser controller, bits 0 – 13 holds the
ModBus address of the MicroMotion meter parameter. Bits 14 and 15 can never be 1 at the
same time. With bit bits 14 and 15 = 0, bits 0 – 13 holds the dispenser control address for the
dispenser parameter. Bits 0 – 13 are, in turn, divided into 2 sections, bits 8 – 13 hold the block
address and bits 0 – 7 hold the control register number ranging 0-63 for that block.
The time word is encoded as value = seconds + minutes * 100 + hours * 10000 where the hours
are military 24 hours The date word is encoded as value = year + day * 100 + month * 10000 +
day-of-week * 1000000. The year is 0-99. The day-of-week is 0 - 6 for Sunday through Saturday
respectively. Example:
The fifth change to parameter Apmax_fixed at control address 4.36 (ModBus address 585 248h)
to 26.20 MPa made at 1:47:35pm on a Thurdsday the 15th of March 2007 would be recorded as:
control address word = 328740 (00050424 hex) -> 5th change, 4th block, 36th word (24 hex)
new parameter value = 2620
time stamp = 134735 (20E4F hex) -> 13th hour,47 minutes, 35 seconds
date stamp = 4031507 (3D8413 hex) -> 4 = Thursday, 03 = March, 15th day, year = 2007.
44
8. Monitor fill result history log range.
The ranges 24577 to 40959 (6000 hex to 9FFF hex) and 40961 to 57344 (A000 hex to DFFF
hex) are 128 blocks of 64 fill result register for the ‘A’ and ‘B’ hose respectively. The monitor fill
result variable blocks 5 and 10 (‘A’ and ‘B’ hose respectively) are copied to flash memory in a
circular buffer at the end of a fill. This buffer is addressed in these ranges. The variables are laid
out in the same order in each 64 32-bit registers as the variable block. Each block spans 128
ModBus addresses.
Example:
A read of ModBus address 24581 (6002 hex) will return a recording of the variable Amid_target
at control address 5.2. A read of ModBus address 24709 (6082 hex) will return a recording of
the variable Amid_target of another fill.
The variables 2.56 Acurrent_mons_page and 7.56 Bcurrent_mons_page points to the latest
block recorded for their respective hoses. The ModBus address for the latest record for the ‘A’
hose would be: ModBus address = Acurrent_mons_page * 128 + 24577.
Signal Terminal
Shield 57
RS484-A (+) 56
RS484-B (-) 55
RS484-A (+) Terminating RC 54
RS484-B (-) Terminating RC 53
The ModBus node number is set by 5 DIP switches on the dispenser interface board SW1-2
through SW1-6 for with a binary value of 0 to 31 and a parameter ModBus_node_base 34.5.
The ModBus node value is the sum of the switch value and the parameter value. The valid
range for a ModBus node number ID is 1 – 255, ID 0 is a master broadcast to all slaves. Slaves
do not send a response to a node 0 command. The ModBus communication will be disabled if
the sum of the switch and parameter values are out of the valid node range. The switch “weight”
values for the SW1-2 through SW1-6 is SW1-2 = 1, SW1-3 = 2, SW1-4 = 4, SW1-5 = 8, and
SW1-6 = 16.
45
11. Bit definitions for registers with Booleans
Bit Name
0 drop_flag
1 lost_authorize
2 quit_flag
3 bursted
4 no_zero_flow
5 flowing
6 lowb4full
7 p3high
8 mass_changing
9 p3ibhigh
10 press_error
11 filling
12 rate_low
13 rate_mid
14 rate_high
15 pressure_dip
16 authorized
17 p1high
18 p2high
19 abort_fill
20 drop_time_out
21 temperror
22 handl_inhb
23 power_loss
24 display_updated
25 fill_request
26 lowbank_flag
27 midbank_flag
28 highbank_flag
29 fill_done
30 sonic_flow
31 meter_updated
46
Bits definitions Acontrol_bits 2.18 and Bcontrol_bits 7.18
Bit Name
0 force_mass_freq
1 force_sale_freq
2 force_comp_bit
3 force_screen_bit
4 blank_screen_bit
5 simulate_fill
6 sim_preset
7 first_resist_bit
8 error_bit
9 sim_handle
10 wait_enable
11 flow_settled_bit
12 handles_off
13 resist_calculated
14 other_Left
15 other_Right
16 handleL_fill
17 handleR_fill
18 send_authorize
19 burst
20 fill_data_recvd
21 power_on_dwel_bit
22 comm_authorize
23 tank_measured_bit
24 choke_bit
25 pressure_broken
26 pressure2_broken
27 save_log
28 fill_acknowlage
29 qty_enable
30 pressure_short
31 pressure2_short
47
Bits definitions Aerror_reg 2.26 and Berror_reg 7.26
Bit Name
0 Change_on_flow
1 Press_over_trip
2 Press_over_Smax
3 Tank_over_target_press
4 Abort_fill
5 Lost_authorize
6 Hose_burst_flow
7 Flow_valve_off
8 Nozzle_open_timeout
9 Meter_busy
10 Switch_1_up
11 Flow_when_idle
12 Temp_out_range
13 Press_signal_loss
14 Meter_Comm_loss
15 Display_Comm_loss
16 Press_conflict
17 Comm_overrun
18 Comm_parity
19 Comm_framing
20 Comm_checksum
21 Comm_data_length
22 Comm_bad_command
23 Comm_invalid_grade
24 Parameter_changed
25 Wrong_flow_unit
26 Wrong_mass_unit
27 Press2_sig_loss
28 Press2_sig_short
29 Press_sig_short
30 Gilbarco_off_line
31 Fill_press_dip
48
Bits definitions Ameter_status 2.58 and Bmeter_status 7.58
Bit Name
0 not defined
1 not defined
2 not defined
3 not defined
4 not defined
5 not defined
6 not defined
7 not defined
8 not defined
9 not defined
10 checksum_fail
11 RAM_fail
12 sensor_fail
13 temp_sensor_fail
14 input_overrange
15 pulse_saturated
16 not_configured
17 interrupt_fail
18 primary_saturated
19 secondary_saturated
20 primary_fixed
21 secondary_fixed
22 density_overrange
23 zero_fail
24 zero_to_low
25 zero_to_high
26 electronics_fail
27 zeroing
28 slug_flow
29 power_reset
30 config_changed
31 initializing
49
Bits definitions Asignal_config 4.21 and Bsignal_config 9.21
Bit Name
0 use_meter_mass_flow
1 use_meter_vol_flow
2 use_analog_mass_flow
3 use_meter_vol_total
4 use_meter_mass_total
6 use_meter_temperature
7 use_analog_temperature
8 use_right_handle
9 use_left_handle
10 use_dual_display
11 use_total_pushbutton
12 use_auth1_input
13 use_auth2_input
14 use_auth3_input
15 use_tier_input
16 use_pmax_fixed
17 use_price_decimal
18 spc_com_enable
19 use_ored_authorize
20 use_redundant_pressure
21 use_early_check
22 use_resist_ave
23 use_comm_authorize
24 limit_pmax
25 disable_flow_max
26 use_restrict
27 share_display
28 use_totalizer
29 use_remote_valves
30 single_bank_valve
31 meter_9739_type
50
Bits definitions io_inputs 12.2
Bit Name
0 A_handle_left
1 A_handle_right
2 A_handle_hose_seated
3 A_spare_input
4 B_handle_left
5 B_handle_right
6 B_handle_hose_seated
7 B_spare_input
8 A_authorization_1
9 A_authorization_2
10 A_authorization_3
11 A_tier_2
12 B_authorization_1
13 B_authorization_2
14 B_authorization_3
15 B_tier_2
16 SW1_1
17 SW1_2
18 SW1_3
19 SW1_4
20 SW1_5
21 SW1_6
22 SW1_7
23 SW1_8
24 spare_24
25 spare_25
26 spare_26
27 spare_27
28 spare_28
29 spare_29
30 spare_30
31 spare_31
51
Bits definitions io_outputs 12.3, force_out_off 12.4, and force_out_on 12.5
Bit Name
0 not_defined_0
1 not_defined_1
2 not_defined_2
3 not_defined_3
4 not_defined_4
5 not_defined_5
6 not_defined_6
7 not_defined_7
8 ESD_Active
9 ESD_Active
10 A_lowbank_valve
11 A_midbank_valve
12 A_highbank_valve
13 B_lowbank_valve
14 B_midbank_valve
15 B_highbank_valve
16 A_choke
17 A_demand
18 A_filling
19 A_authorize
20 A_complete
21 A_error
22 B_choke
23 B_demand
24 B_filling
25 B_authorized
26 B_complete
27 B_error
28 A_sale_pulse_output
29 A_mass_pulse_output
30 B_sale_pulse_output
31 B_mass_pulse_output
52
Bits definitions main_loop_boolean 12.8
Bit Name
0 comm0_connected
1 not_writing_flash
2 one_sec_os
3 use_modbus5
4 single_meter
5 calibrate_enable
6 sw1_1_on
7 mon_override
8 display_0_ok
9 display_1_ok
10 audit_sorted
11 single_step
12 supply_above_22v
13 supply_below_21v
14 supply_was_ok
15 supply_loss
16 supply_loss_ack
17 param_changed
18 param_scanned
19 quick_scan
20 fill_A_right
21 fill_A_left
22 fill_B_right
23 fill_B_left
24 display_2_ok
25 display_3_ok
26 totals_ready
27 simulating_fill
28 display_totals_bit
29 comm_connected
30 meter_data_force
31 tier_display_bit
53
Bits definitions extra_configuration 34.6
Bit Name
0 MB_little_endian
1 Comm5_read_only
2 MB_ASCII
3 MB_rcv_refresh
4 Roseman_protocol
5 extra_config5
6 extra_config6
7 extra_config7
8 A_momentary_btn
9 B_momentary_btn
10 disable_short_stop
11 use_independent_qty
12 comm_refresh_off
13 no_check_off
14 disable_freq_calc
15 disable_autozero
16 Atwo_step_single
17 Btwo_step_single
18 use_prev_adjust
19 Control_air_enbl
20 Amid_with_low
21 Bmid_with_low
22 extra_config22
23 extra_config23
24 extra_config24
25 extra_config25
26 extra_config26
27 extra_config27
28 extra_config28
29 extra_config29
30 extra_config30
31 GTI_select
54
Bits definitions Aaccount_1 5.40 and Baccount_1 10.40
0 27 process_started Right
1 27 process_started left
2 26 pressure_drop_detected
3 26 no_pressure_drop
4 24 waiting_short_delay
5 24 low_bank_on
6 24 waiting_motor_delay
7 24 motor_delay_time_out_bank_off
8 24 high_flow_flag_bank_off
9 22 high_bank_on_for_hose_check
10 22 high_bank_off_above_hose_mass
11 22 hose_check_time_out
12 22 abort_during_hose_check
13 22 lost_authorize_during hose_check
14 21 pressure_and_flow_settled_after_hose_check
15 21 mass_>_hose_mass_go_record_pressure
16 21 mass_<_hose_mass_wait_for_hose_drop
17 21 spare
18 20 waiting_for_hose_drop
19 20 abort_time_out_start_delay
20 20 detected pressure drop
21 20 pressure_and_flow_settled_after_hose_drop
22 19 waiting_for_pressure_and_flow_settle
23 19 pressure_settled
24 19 flow settled
25 19 flow_not_settled_10_sec_time_out_abort
26 19 initial_pressure_and_temperature_measured
27 19 spare
28 18 calculating_target mode 0
29 18 calculating_target mode 2
30 18 calculating_target mode 4
31 18 temperature compensation off
55
Bits definitions Aaccount_2 5.41 and Baccount_2 10.41
56
Bits definitions Aaccount_3 5.42 and Baccount_2 10.42
57
Bits definitions Aaccount_4 5.43 and Baccount_2 10.43
58
12. Document Revision History
Rev. 2: release 5-2-2012: added variables and parameters from program revisions
3.962 through 3.966.
Rev. 3: corrected B process addresses page 35. Changed parameter 207 and 400 to
ave_gas_temp from final_flags for program revision 3.967 and higher. Added
parameters 847 control_air_thres and 848 control_air_cal for program revision 3.968
and higher. Added extra_config bit 19 Conrol_air_enbl for program revision 3.968 and
higher.
Rev 5: 9-8-2016 Updated Amass and Bmass decimal point definitions to program
revision 3.962..
Rev 6: 10-10-2016 Corrected ModBus addressing above analog input section starting at
1793 and up to the end of the list.
59