MultiLoad II Communications Guide Including: MultiLoad II MultiLoad II SMP MultiLoad II SCS MultiLoad II Mobile Part # 6077 Firmware Version 3/4.31.40 November 2018 2 Copyright Notice Copyright © 2000 – 2018 Toptech Systems, Inc. The information contained in this document is proprietary and confidential. No part of this document may be copied, reproduced, or transmitted in any medium without the express written permission of Toptech Systems, Inc. Disclaimer Toptech Systems assumes no responsibility for damages resulting from installation or use of its products. Toptech Systems will not be liable for any claims of damage, lost data, or lost time as a result of using its products. Logos are registered trademarks of Toptech Systems, Inc. Copyright © 2000-2018 Toptech Systems, Inc. All Rights Reserved. 3 Table of Contents CHAPTER 1 PROTOCOL SPECIFICATION ..................................................................................................... 7 1.1 DEFINITIONS ............................................................................................................................................ 7 1.2 SMITH PROTOCOL .................................................................................................................................... 8 1.3 BROOKS PROTOCOL ................................................................................................................................. 8 1.4 DANIELS PROTOCOL ................................................................................................................................. 8 1.5 MODBUS-RTU PROTOCOL ........................................................................................................................ 9 1.5.1 Read Holding Registers (fn=3) .......................................................................................................... 9 1.5.2 Write Single Registers (fn=6)............................................................................................................. 9 1.5.3 Loopback/Maintenance (fn=8) ......................................................................................................... 10 1.5.4 Preset Multiple Registers (fn=16) .................................................................................................... 10 1.5.5 Error Responses (fn= +128) ............................................................................................................ 10 1.5.6 Modbus Register Map Summary ..................................................................................................... 11 1.5.7 Extended Services Register ............................................................................................................ 11 1.6 MODBUS-TCP/IP PROTOCOL ................................................................................................................. 12 1.6.1 Read Holding Registers (fn=3) ........................................................................................................ 13 1.6.2 Write Single Registers (fn=6)........................................................................................................... 13 1.6.3 Loopback/Maintenance (fn=8) ......................................................................................................... 13 1.6.4 Preset Multiple Registers (fn=16) .................................................................................................... 13 1.6.5 Error Responses (fn= +128) ............................................................................................................ 14 1.6.6 Modbus Register Map Summary ..................................................................................................... 15 1.6.7 Extended Services Register ............................................................................................................ 15 CHAPTER 2 MULTILOAD COMMAND RESPONSES ................................................................................... 16 CHAPTER 3 QUERY COMMAND: .................................................................................................................. 18 CHAPTER 4 FUNCTION COMMANDS: .......................................................................................................... 19 CHAPTER 5 TERMINAL COMMANDS: .......................................................................................................... 21 5.1 TERMINAL ESCAPE COMMANDS:.............................................................................................................. 21 CHAPTER 6 METER COMMANDS: ................................................................................................................ 26 6.1 AUTHORIZE PRESET (PRODUCT AND PRESET VOLUME): ........................................................................... 26 6.2 CLEAR ALARMS: ..................................................................................................................................... 26 6.3 ENABLE PRESET .................................................................................................................................... 26 6.4 END TRANSACTION................................................................................................................................. 26 6.5 BATCH COMPLETE .................................................................................................................................. 27 6.6 BATCH END:........................................................................................................................................... 27 6.7 END BATCH:........................................................................................................................................... 27 6.8 PRESET MESSAGE: ................................................................................................................................ 28 6.9 PROVING TRANSACTION MODE: .............................................................................................................. 28 6.10 REQUEST STATUS & PRESET ALARMS: .................................................................................................... 29 6.11 REQUEST TANK STATUS & TANK ALARMS:............................................................................................... 52 6.12 REQUEST SAMPLER STATUS & SAMPLER ALARMS: .................................................................................. 60 6.13 REQUEST SMP STATUS & PRESET ALARMS: ........................................................................................... 69 6.14 TRIP PRESET ALARMS: ........................................................................................................................... 69 4 6.15 6.16 6.17 6.18 6.19 6.20 6.21 6.22 6.23 REQUEST BAY ALARMS: ......................................................................................................................... 70 REQUEST COMPONENT ALARMS: ............................................................................................................ 71 REQUEST METER ALARMS: ..................................................................................................................... 72 REQUEST ADDITIVE ALARMS: .................................................................................................................. 73 REQUEST SAMPLER ALARMS: ................................................................................................................. 74 REQUEST TANK ALARMS:........................................................................................................................ 75 REMOTE TRANSACTION DATA: ................................................................................................................ 76 START PRESET FLOW : ............................................................................................................................ 77 STOP PRESET FLOW: ............................................................................................................................. 77 CHAPTER 7 REGISTER OPERATIONS: ........................................................................................................ 78 7.1 GENERIC REGISTERS ............................................................................................................................. 79 7.1.1 Register Data Types ........................................................................................................................ 79 7.1.2 000 – RCU Level Configuration Registers ...................................................................................... 91 7.1.3 100 – Bay Level Configuration Registers ........................................................................................ 94 7.1.4 101 – Preset Level Configuration Registers .................................................................................... 95 7.1.5 102 – Meter Level Configuration Registers ..................................................................................... 99 7.1.6 103 – Component Level Configuration Registers .......................................................................... 103 7.1.7 104 – Additive Level Configuration Registers ............................................................................... 106 7.1.8 108 –Trace Level Configuration Registers .................................................................................... 108 7.1.9 110 –Network Level Configuration Registers ................................................................................ 108 7.1.10 111 –Tank Level Configuration Registers ................................................................................. 109 7.1.11 115 –Sampler Level Configuration Registers ........................................................................... 110 7.1.12 116 –Security Level Configuration Registers ............................................................................ 110 7.1.13 117 –Report Level Configuration Registers .............................................................................. 112 7.1.14 105 – Custom Logic Definitions Registers ................................................................................ 113 7.1.15 107 – Custom Logic Value Registers ........................................................................................ 128 7.1.16 200 – Stand Alone BOL Definition Registers ............................................................................ 128 7.1.17 800 – Transaction Archive Registers ........................................................................................ 132 7.2 SPECIAL PURPOSE REGISTERS ............................................................................................................. 134 7.2.1 000 – MultiLoad Firmware Version ................................................................................................ 134 7.2.2 001 – Date and Time ..................................................................................................................... 134 7.2.3 003 – FCM Poll Rate ..................................................................................................................... 135 7.2.4 005 – Current BOL/Ticket Number ................................................................................................ 135 7.2.5 070 – Ethernet Enable ................................................................................................................... 135 7.2.6 071 – IP Address ........................................................................................................................... 135 7.2.7 072 – IP Mask ................................................................................................................................ 135 7.2.8 073 – IP Gateway .......................................................................................................................... 135 7.2.9 074 – IP Host ................................................................................................................................. 136 7.2.10 076 – ADMIN PASSWORD ....................................................................................................... 136 7.2.11 077 – USER PASSWORD ........................................................................................................ 136 7.2.12 085 – Modem Initialization String .............................................................................................. 136 7.2.13 091..093 – Communication Port Parameters ............................................................................ 136 7.2.14 094 – 095 Network Printer Number Of Copies ......................................................................... 137 7.2.15 112 - Real-Time Preset Total Gross Totalizers ......................................................................... 137 7.2.16 113 - Real-Time Preset Total Net Totalizers ............................................................................. 138 5 7.2.17 7.2.18 7.2.19 7.2.20 7.2.21 7.2.22 7.2.23 7.2.24 7.2.25 7.2.26 7.2.27 7.2.28 7.2.29 7.2.30 7.2.31 7.2.32 7.2.33 7.2.34 7.2.35 7.2.36 7.2.37 7.2.38 7.2.39 7.2.40 7.2.41 7.2.42 7.2.43 7.2.44 7.2.45 7.2.46 7.2.47 7.2.48 7.2.49 114 - Real-Time Preset Total Mass Totalizers .......................................................................... 138 120 - Real-Time Sampler Total Gross Totalizers ...................................................................... 138 129 – FCM Low Level Meter Status .......................................................................................... 139 133 – FCM IO Access ............................................................................................................... 139 134 – Discrete Parameter Security settings .............................................................................. 140 135 – Group Parameter Security settings ................................................................................. 140 136 – Access Parameter Security settings ............................................................................... 141 140 –Current Latitude/Longitude position Registers (MultiLoad Mobile Only) ......................... 142 141 – Current Transaction Latitude/Longitude/Site Index Registers (MultiLoad Mobile Only) . 142 400 - Preset Definition Registers .............................................................................................. 142 401 – External Preset Display Register .................................................................................... 143 402 – Tank Definition Register .................................................................................................. 143 500 - Product Definition Registers ............................................................................................ 144 600 - Standalone Driver Card Database ................................................................................... 144 605 Modbus Device Database .................................................................................................. 145 650 –GPS Site Database (MultiLoad Mobile Only) ................................................................... 145 700 - Configurable Language Prompts ..................................................................................... 146 710 - Bay Alarm Messages ....................................................................................................... 147 711 - Preset Alarm Messages ................................................................................................... 149 712 - Meter Alarm Messages .................................................................................................... 151 713 - Component Alarm Messages ........................................................................................... 153 714 - Additive Alarm Messages ................................................................................................ 155 716 - SamplerAlarm Messages ................................................................................................. 157 715 - TankAlarm Messages ...................................................................................................... 158 910 – Read Event Log Message Queue ................................................................................... 160 912 – Read W & M Change Log Message Queue .................................................................... 160 913 – Read AUDIT Log Message Queue ................................................................................. 160 950 - Current Driver Card Number ............................................................................................ 161 951..955 - Current Driver Prompt Information ........................................................................... 161 960 – Input Data ........................................................................................................................ 161 961 – Input Data Terminating Key ............................................................................................ 161 962 - Current Driver Card Data ................................................................................................. 162 998 – Bitmap Graphic Cache .................................................................................................... 163 CHAPTER 8 COMMUNICATION TRACE EXAMPLE ................................................................................... 164 8.1 STARTUP OF HOST SOFTWARE ............................................................................................................. 164 8.1.1 Update Date & Time ...................................................................................................................... 164 8.1.2 Update Product Definitions ............................................................................................................ 164 8.1.3 Update Preset Definitions .............................................................................................................. 165 8.1.4 Status Query .................................................................................................................................. 165 8.2 TRANSACTION AUTHORIZATION ............................................................................................................. 166 8.2.1 Process Driver Card In .................................................................................................................. 166 8.2.2 Authorize a Transaction on MultiLoad ........................................................................................... 167 8.2.3 Reading Totalizers ......................................................................................................................... 167 8.3 BATCH AUTHORIZATION ........................................................................................................................ 168 8.3.1 Authorize a Batch on MultiLoad ..................................................................................................... 168 6 8.3.2 Monitor Load During Delivery ........................................................................................................ 170 8.4 END OF BATCH PROCESSING ................................................................................................................ 170 8.4.1 Ending a Batch on MultiLoad ......................................................................................................... 170 8.5 END OF TRANSACTION PROCESSING ..................................................................................................... 171 8.5.1 Ending a Transaction on MultiLoad ............................................................................................... 171 8.6 SHUTDOWN OF HOST SOFTWARE .......................................................................................................... 171 CHAPTER 9 DATA COMMUNICATION NOTES AND RECOMMENDATIONS ........................................... 172 9.1 PROTOCOL SELECTION: RS-232 VS. RS-485 ........................................................................................ 172 9.1.1 RS-232 ........................................................................................................................................... 172 9.1.2 RS-485 ........................................................................................................................................... 172 9.2 CABLE SELECTION................................................................................................................................ 172 9.3 LINE TERMINATION IN MULTI-DROPPED COMMUNICATIONS ..................................................................... 172 9.4 OPTICAL ISOLATION .............................................................................................................................. 173 9.5 SHIELD GROUNDING ............................................................................................................................. 173 CHAPTER 10 PARAMETER ACCESS SECURITY .................................................................................... 174 10.1 UNDERSTANDING NEW USER AND SECURITY FEATURES ......................................................................... 174 Chapter 1 – Protocol Specification CHAPTER 1 7 PROTOCOL SPECIFICATION The MultiLoad auto-detects four low level computer protocols for host communications. - Smith Protocol - Brooks Protocol - Daniels - Modbus-RTU Protocol - Modbus- TCP/IP Protocol Note: All unknown or not allowed signal or code sequences are rejected and have no impact on the software or measurement data. Host communication can occur via multi-dropped RS-232/RS-485 serial on COM 1 or Ethernet 10/100 socket communication on port 7734. Port 7735 supports SSL encryption (TLS v1.2 only for security reasons) and can be enabled via the network setup screen. 1.1 DEFINITIONS The non-printing characters that form the skeleton of the Smith and Brooks protocols are standard ASCII (American Standard Code Information Interchange): ASCII CHARACTER DECIMAL HEX BINARY NUL 0 0 00000000 STX 2 2 00000010 ETX 3 3 00000011 SOH 1 1 00000001 PAD 127 7F 01111111 CHARACTER DESCRIPTION BCC Block Check Characters. The ASCII hex representation of the binary sum of all the data in the message from the SOH through the ETX character. LRC Longitudinal Redundancy Check. The LRC is an ASCII character computed as the exclusive or (XOR) sum of all characters following the STX and including the ETX. CRC Cyclic Redundancy Check. A1..A3 A 3-character ASCII unit address of the MultiLoad. Please refer to the MultiLoad User Guide for configuring the unit address. D1..Dn Data field characters. Fn Function field code. Adr A single character binary unit address of the MultiLoad. Chapter 1 – Protocol Specification 1.2 8 SMITH PROTOCOL The Smith protocol is compatible with devices from Smith Meter, such as the Accuload I and Accuload II minicomputer modes of operation. Using this protocol, MultiLoad accepts data in the format: NUL STX A1 A2 data ETX LRC PAD A1 and A2 are the last two digits of the unit address in the RCU configuration. 1.3 BROOKS PROTOCOL The Brooks protocol is compatible with devices from Brooks Instruments such as their Petrocount RAU™ and IMS Control™ units running in computer mode. Using this protocol, MultiLoad accepts data in the format: SOH DESTINATION A1 1.4 A2 A3 SOURCE S1 S2 STX data ETX S3 BCC 1 BCC 2 DANIELS PROTOCOL The Daniels protocol is compatible with devices from Daniels Flow Products. Using this protocol, MultiLoad accepts and responds with data in the format: Quiet Time ADR FN LEN (2 – 252) D1...DN CRC1 CRC2 Quiet Time Daniels protocol messages are framed by a quiet time of three and one-half characters. ADR is binary character of the address of the MultiLoad. Typically 0x01. Fn is expected to be 0x41/0x42 alternating on each command. Responses will have Fn as 0x41/0x42 for normal responses and 0xc1/0xc2 for exception responses. D1…Dn is string data containing the commands listed in this manual. Note: Modbus extension to return larger packet sizes: On messages with data packet sizes from 2 to 252 characters the Fn values of 0x41/0x42 will be returned. With messages outside this range, Fn will be the MSB value of the data size and the Len will be LSB of the data size. For Example: Fn = 0x41, Len = 0x80, when data packet size = 0x0080, Fn = 0x42, Len = 0x80, when data packet size = 0x0080, Fn = 0x00, Len = 0xFF, when data packet size = 0x00FF ( 255), Fn = 0x01, Len = 0x00, when data packet size = 0x0100 ( 256), Fn = 0x01, Len = 0x01, when data packet size = 0x0101 ( 257), Fn = 0x02, Len = 0x00, when data packet size = 0x0200 ( 512), Fn = 0x04, Len = 0x00, when data packet size = 0x0400 (1024), Fn = 0x08, Len = 0x00, when data packet size = 0x0800 (2048). Chapter 1 – Protocol Specification 1.5 9 MODBUS-RTU PROTOCOL The Modbus-RTU protocol has been implemented to be as compatible as possible with the original published Modicon Modbus-RTU standard. Note: The Modbus protocol allows parameter register access only as defined by the explicit mapping in this manual. To send the ASCII commands (R000, T`A, MAM, MRS, etc.) that are handled by the other three protocols, the Modbus Extended Services registers must be used. Using the Modbus protocol, MultiLoad accepts data in the following format: Quiet Time ADR FN ... CRC1 CRC2 Quiet Time Modbus-RTU protocol messages are framed by a quiet time of three and one-half characters. ADR is binary character of the address of the MultiLoad. Typically 0x01. Fn is the Modbus function. Functions implemented are as follows. The formal specification of Modbus lists the starting Holding Register address as 40001. The Modbus Holding Register functions (Fn 3, 6 and 16) all have an implied 4XXXX reference. Referencing Holding Register 40001 is addressed as register 0000 in the register address field in the message for fn 3, 6, and 16. Since Modbus addressing has been implemented in various ways over the years, to avoid confusion in this manual, the Modbus Holding Register addresses listed are the value in the register address field in the message. If it is necessary to know the formal Modbus Holding Register address, simply add 40001 to the register addresses listed in the manual. 1.5.1 READ HOLDING REGISTERS (FN=3) Note: Both Modbus registers MUST be read at the same time when reading 32-bit values. Tx: Number Quiet Time ADR FN=3 Start Register MSB Start Register LSB Of Registers MSB Number of Registers LSB CRC1 CRC2 Quiet Time Rx: FN=3 Quiet Time 1.5.2 ADR (+128 if error) Byte Count 1st Register MSB 1st Register LSB Next Register MSB Next Register MSB … CRC1 CRC2 Quiet Time WRITE SINGLE REGISTERS (FN=6) Note: cannot be used for 32-bit registers. Tx: Quiet Time ADR FN=6 ADR (+128 if error) Start Register MSB Start Register LSB Register Register MSB LSB Start Register MSB Start Register LSB Register Register MSB LSB CRC1 CRC2 Quiet Time CRC1 CRC2 Quiet Time Rx: FN=6 Quiet Time Chapter 1 – Protocol Specification 1.5.3 10 LOOPBACK/MAINTENANCE (FN=8) Note: only loopback of command supported. Tx: Quiet Time ADR FN=8 Diagnostic Code MSB Diagnostic Code LSB Data MSB Data LSB CRC1 CRC2 Quiet Time ADR FN=8 Diagnostic Code MSB Diagnostic Code LSB Data MSB Data LSB CRC1 CRC2 Quiet Time Rx: Quiet Time 1.5.4 PRESET MULTIPLE REGISTERS (FN=16) Note: Both Modbus registers MUST be written at the same time when writing 32-bit values. Tx: Number Quiet Time ADR FN=16 Start Register MSB Start Register LSB Of Registers MSB Number of Registers LSB 1st Register MSB Byte Count 1st Register LSB Next Register MSB Next Register MSB … CRC1 CRC2 Quiet Time Rx: FN=16 Quiet Time 1.5.5 ADR (+128 if error) Number Start Register MSB Start Register LSB Of Registers MSB Number of Registers LSB CRC1 CRC2 Quiet Time ERROR RESPONSES (FN= +128) Rx: Quiet Time ADR FN+128 Error Subcode CRC2 CRC1 Error Sub codes are: 1 = Invalid Function Code. Indicates that the use of an invalid or unimplemented function has been attempted. 2 = Invalid Address Field. Indicates that a read or write was made to an invalid address. Can also indicate that a read or write to a single register of a 32-bit value has been attempted. 3 = Invalid Data Field. Indicates that an attempt to write an invalid value to a register has occurred. This error code will also be returned if an attempt is made to change a value under Weights and Measures control without with W&M switch being in the active state. 4 = Query Processing Failure. This code is not returned. Chapter 1 – Protocol Specification 1.5.6 MODBUS REGISTER MAP SUMMARY 1 – 999 1000 – 1199 1200 – 1399 1400 – 1599 1600 – 1799 1800 – 1999 2000 – 2199 2200 – 2999 3000 – 3999 4000 – 6000 7000 – 7799 7800 – 7999 8000 – 8999 9000-10999 General, BOL Template, Misc. Configurations. RCU Configurations Bay Configurations Preset Configurations Meter Configurations Component Configurations Additive Configurations Product, Alarm, Database, Misc. Configurations Totalizers Preset, Meter, Component and Additive Status Status, Authorization Control and Alarms Transaction Archive Preset Definitions Extended Services Register Note: Tank and Sampler level is not available at the moment for Modbus. Use the custom logic mapping tool for this. 1.5.7 EXTENDED SERVICES REGISTER Not all commands native to the MultiLoad II have corresponding mapping to Modbus registers. The Extended Services register was implemented as a way to support sending and receiving native Multiload II commands across the Modbus RTU interface. Any native command listed can be sent to the MultiLoad via the extended Services Register. Modbus Registers: Write Holding Register=9000, Len=1, 16-Bit Integer (Command Length) Write Holding Register=9001, Max Len=999, Characters (Command Text) Read Holding Register=9000, Len=2, 32-Bit Integer (Reply Length) Read Holding Register=9001, Max Len=999, Characters (Reply Text) Perform the following operations to use of the Extended Services Register: 1. Write the Command Length into the Holding Register 9000 (max value of 999 characters). 2. Write the Command Text into the Holding Register 9001 (max length of 999). 3. Command will execute when the final character of the Command Text is written (9001+Command Length-1). 4. Read the Reply Length from the Holding Register 9000 (max value of 999 characters). 5. Read the Reply Text from the Holding Register 9001 (max length of 999). Steps 1 & 2 can be done with a single Modbus Function 16. Steps 4 & 5 can be done with a single Modbus Function 3. 11 Chapter 2 –MultiLoad Responses 1.6 12 MODBUS-TCP/IP PROTOCOL The Modbus-TCP/IP protocol has been implemented to be as compatible as possible with the original published Modbus-TCP/IP standard v1.0b. Note: The Modbus protocol allows parameter register access only as defined by the explicit mapping in this manual. To send the ASCII commands (R000, T`A, MAM, MRS, etc.) that are handled by the other three protocols, the Modbus Extended Services registers must be used. Using the Modbus tcp/ip-protocol, MultiLoad accepts data in the following format: MBAP FN DATA Modbus-TCP/IP protocol messages are framed by a MBAP-Header. Fields Length Description Client Transaction Identifier 2 Bytes Identification of a MODBUS Request/ Response transaction. Initialized client by the Recopied by the server from the received request Protocol Identifier 2 Bytes 0 = Protocol Initialized client by the Recopied by the server from the received request Length 2 Bytes Number of following bytes Initialized by client (request) the Initialized by the server (Response) Unit Identifier 1 Byte Identification of a remote slave connected on a serial line or on other buses Initialized client the Recopied by the server from the received request Modbus Server by The header is 7 bytes long: Transaction Identifier - It is used for transaction pairing, the MODBUS server copies in the response the transaction identifier of the request. Protocol Identifier – It is used for intra-system multiplexing. The MODBUS protocol is identified by the value 0. Length - The length field is a byte count of the following fields, including the Unit Identifier and data fields. Unit Identifier – This field is used for intra-system routing purpose. It is typically used to communicate to a MODBUS+ or a MODBUS serial line slave through a gateway between an Ethernet TCP-IP network and a MODBUS serial line. This field is set by the MODBUS Client in the request and must be returned with the same value in the response by the server. All MODBUS/TCP ADU are sent via TCP to registered port 502. Remark : the different fields are encoded in Big-endian. Fn is the Modbus function. Functions implemented are as follows. The formal specification of Modbus lists the starting Holding Register address as 40001. The Modbus Holding Register functions (Fn 3, 6 and 16) all have an implied 4XXXX reference. Referencing Holding Register 40001 is addressed as register 0000 in the register address field in the message for fn 3, 6, and 16. Chapter 2 –MultiLoad Responses 13 Since Modbus addressing has been implemented in various ways over the years, to avoid confusion in this manual, the Modbus Holding Register addresses listed are the value in the register address field in the message. If it is necessary to know the formal Modbus Holding Register address, simply add 40001 to the register addresses listed in the manual. 1.6.1 READ HOLDING REGISTERS (FN=3) Note: Both Modbus registers MUST be read at the same time when reading 32-bit values. Tx: Number MBAP Start Register MSB FN=3 Start Register LSB Of Registers MSB Number of Registers LSB Rx: FN=3 MBAP 1.6.2 (+128 if error) 1st Register Byte Count MSB 1st Register LSB Next Register MSB Next Register MSB … WRITE SINGLE REGISTERS (FN=6) Note: cannot be used for 32-bit registers. Tx: MBAP FN=6 MBAP (+128 if error) Start Register MSB Start Register LSB Register Register MSB LSB Start Register MSB Start Register LSB Register Register MSB LSB Rx: FN=6 1.6.3 LOOPBACK/MAINTENANCE (FN=8) Note: only loopback of command supported. Tx: MBAP FN=8 Diagnostic Code MSB Diagnostic Code LSB Data MSB Data LSB MBAP FN=8 Diagnostic Code MSB Diagnostic Code LSB Data MSB Data LSB Rx: 1.6.4 PRESET MULTIPLE REGISTERS (FN=16) Note: Both Modbus registers MUST be written at the same time when writing 32-bit values. Tx: Number MBAP FN=16 Start Register MSB Start Register LSB Of Registers MSB Number of Registers LSB Byte Count Chapter 2 –MultiLoad Responses 14 1st Register MSB 1st Register LSB Next Register MSB Next Register MSB … Rx: FN=16 MBAP 1.6.5 (+128 if error) Number Start Register MSB Start Register LSB Of Registers MSB Number of Registers LSB ERROR RESPONSES (FN= +128) Rx: MBAP FN+128 Error Subcode Error Sub codes are: 1 = Invalid Function Code. Indicates that the use of an invalid or unimplemented function has been attempted. 2 = Invalid Address Field. Indicates that a read or write was made to an invalid address. Can also indicate that a read or write to a single register of a 32-bit value has been attempted. 3 = Invalid Data Field. Indicates that an attempt to write an invalid value to a register has occurred. This error code will also be returned if an attempt is made to change a value under Weights and Measures control without with W&M switch being in the active state. 4 = Query Processing Failure. This code is not returned. Chapter 2 –MultiLoad Responses 1.6.6 MODBUS REGISTER MAP SUMMARY 1 – 999 1000 – 1199 1200 – 1399 1400 – 1599 1600 – 1799 1800 – 1999 2000 – 2199 2200 – 2999 3000 – 3999 4000 – 6000 7000 – 7799 7800 – 7999 8000 – 8999 9000-10999 1.6.7 General, BOL Template, Misc. Configurations. RCU Configurations Bay Configurations Preset Configurations Meter Configurations Component Configurations Additive Configurations Product, Alarm, Database, Misc. Configurations Totalizers Preset, Meter, Component and Additive Status Status, Authorization Control and Alarms Transaction Archive Preset Definitions Extended Services Register EXTENDED SERVICES REGISTER Not all commands native to the MultiLoad II have corresponding mapping to Modbus registers. The Extended Services register was implemented as a way to support sending and receiving native Multiload II commands across the Modbus TCP/IP interface. Any native command listed can be sent to the MultiLoad via the extended Services Register. Modbus Registers: Write Holding Register=9000, Len=1, 16-Bit Integer (Command Length) Write Holding Register=9001, Max Len=999, Characters (Command Text) Read Holding Register=9000, Len=2, 32-Bit Integer (Reply Length) Read Holding Register=9001, Max Len=999, Characters (Reply Text) Perform the following operations to use of the Extended Services Register: 6. Write the Command Length into the Holding Register 9000 (max value of 999 characters). 7. Write the Command Text into the Holding Register 9001 (max length of 999). 8. Command will execute when the final character of the Command Text is written (9001+Command Length-1). 9. Read the Reply Length from the Holding Register 9000 (max value of 999 characters). 10. Read the Reply Text from the Holding Register 9001 (max length of 999). Steps 1 & 2 can be done with a single Modbus Function 16. Steps 4 & 5 can be done with a single Modbus Function 3. 15 Chapter 2 –MultiLoad Responses CHAPTER 2 16 MULTILOAD COMMAND RESPONSES <command_status> <rcu_status> <card_status> <command specific response data> For MultiLoad to acknowledge a message two conditions must be met. First the message must fit the Message Framing Protocol with a valid LRC, BCC or CRC. Second, the address specified in the first two characters of the command must match the configured MultiLoad address. Any message that satisfies both of these requirements will be sent a response. Modbus: If using the Modbus protocol, the Modbus Extended Services Registers must be used to pass in these ASCII string commands. The first three characters of every response will contain command, RCU and card status data as defined below. enum { VALID_COMMAND = ‘0’, INVALID_PARAMETER = ‘1’, INVALID_COMMAND = ‘2’ } command_status; enum { IDLE AUTH_BAY MENU_MODE DIAG_MODE AUTHORIZING_LOAD LOAD_AUTHORIZED COMPLETING_LOAD TRANSACTION_DONE TRANSACTION_CANCEL PULLING_TRANSACTION ARCHIVING_TRANSACTION TRANSACTION_AUTHORIZED RCU_NOT_CONFIGURED RCU_POWER_UP INITIALIZING NO_TRANSACTION REMOTE_AUTH_PRESET1 REMOTE_AUTH_PRESET2 REMOTE_AUTH_PRESET3 REMOTE_AUTH_PRESET4 REMOTE_AUTH_PRESET5 REMOTE_AUTH_PRESET6 = = = = = = = = = = = = = = = = = = = = = = '0', 4', '9', '%', 'A', 'B', 'C', 'D', 'E', 'P', 'R', 'T', '?', '!', 'I', 'N', 'a', 'b', 'c', 'd', 'e', 'f', Chapter 2 –MultiLoad Responses REMOTE_AUTH_PRESET7 REMOTE_AUTH_PRESET8 REMOTE_AUTH_PRESET9 REMOTE_AUTH_PRESET10 REMOTE_AUTH_PRESET11 REMOTE_AUTH_PRESET12 REMOTE_AUTH_PRESET13 REMOTE_AUTH_PRESET14 } rcu_status; 17 = = = = = = = = 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n' Modbus: Read Only Register=7000, Len=1, Character (rcu_status) enum { CARD_NOT_INSERTED CARD_INSERTED CARD_SECOND_INSERTED } card_status; =’0’, =’1’, =’2’ Modbus: Read Only Register=7001, Len=1, Character (card_status) In most cases a command will return additional information specific to the command. This information will always follow the three status characters. For example if the following valid command to read the current firmware version is sent: Command R000 => => Response 0?0000MultiLoad II v3.31.xx Jan xx 2014 With “0?0” as the three status characters and “000MultiLoad II v3.31.xx Jan xx 2014” as the command specific response. Chapter 3 – Query Command CHAPTER 3 18 QUERY COMMAND: Query Command => Response Q => 0?0XXXX Where: XXXX = 4 digit hexadecimal number with bits representing the rcu_status as: union { unsigned int value; struct { unsigned char rcu_trans_header:1; unsigned char proving_mode:1; unsigned char power_up:1; // indicated system has been powered on unsigned char configured:1; // indicates configuration state unsigned char unassigned_keypress_on_load_screen:1; unsigned char logmsg_queued:1; // a log message is available unsigned char unused6:1; unsigned char audit_logmsg_queued:1; // a audit message is available unsigned char wm_logmsg_queued:1; // a w&m log message is available unsigned char host_up:1; // host system is up, card in will be allowed. Unsigned char input_in_progress:1; unsigned char input_done:1; unsigned char keypad_locked :1; // is keypad locked or not unsigned char reserved13:1; unsigned char wm_key:1; // W&M key is active unsigned char program_key:1; // Program key is active } flags; } rcu_status; This command also resets the Host Down Timer and should be issued periodically to notify MultiLoad that the Host is still active. Modbus: Read Only Register=7002, Len=1, 16-Bit Integer (XXXX) Chapter 4 – Function Commands CHAPTER 4 19 FUNCTION COMMANDS: FREBOOT = Performs a software reboot of the MultiLoad RCU. FFACTORY = Restores all MultiLoad registers to factory defaults. FUPDATEAPPFLASH = Updates the Flash with an uploaded image (req. W&M and a valid image) Modbus: Supported through Modbus Extended Services Registers. FKEYPADON FKEYPADOFF = = Enables the keypad on the MultiLoad RCU (default it is active) Disables the keypad on the MultiLoad RCU Write Only Register=7008, Len=1, 16-Bit Integer (any value=FKEYPADON) Write Only Register=7009, Len=1, 16-Bit Integer (any value=FKEYPADOFF) FUNCONFIG = Clears the configured RCU status bit. FRECONFIG = Sets the configured RCU status bit. Modbus: Write Only Register=7010, Len=1, 16-Bit Integer (any value=FUNCONFIG) Write Only Register=7011, Len=1, 16-Bit Integer (any value=FRECONFIG) FPOWERUP = Resets the power_up RCU status bit. This bit is set on power up. Modbus: Write Only Register=7012, Len=1, 16-Bit Integer (any value=FPOWERUP) FHOSTUP = Sets the host_up RCU status bit. Cleared on power up or when host down timeout expires between Q commands. Command should be issued when host system starts communicating with MultiLoad. Modbus: Write Only Register=7013, Len=1, 16-Bit Integer (any value=FHOSTUP) FHOSTDOWN = Clears the host_up RCU status bit. Command should be issued when host system stops communicating with MultiLoad. Modbus: Write Only Register=7014, Len=1, 16-Bit Integer (any value=FHOSTDOWN) FHOSTWAIT = Bypass host down timer once with alternate timeout. Modbus: Write Only Register=7015, Len=1, 16-Bit Integer (any value=FHOSTUP) FEODLOG = Prints EOD-Report for all totalizers type by arm and also gives the throughput between the feodlog commands Modbus: Write Only Register=7018, Len=1, 16-Bit Integer (any value=FEODLOG) Chapter 4 – Function Commands FPccc…. FCLEARPROD = = 20 Send ccc… characters to the attached printer port (if defined). Clear all product definitions (500 register) except for the 000-Unknown Product definition. Clear Access ID and PIN database. Clears all custom logic entries. Clear Audit Log Messages stored in Multiload. FCLEARID = FCLEARCUSTOM = FCLEARAUDITLOG = Modbus: Supported through Modbus Extended Services Registers. Chapter 5 – Terminal Commands CHAPTER 5 TERMINAL COMMANDS: Ts… Where: s… = Any text string to display. Display string may contain one or more terminal escape commands. 5.1 TERMINAL ESCAPE COMMANDS: <ESC><Terminal Escape Command and parameters > Where Terminal Escape Commands are: A Authorize Transaction: Authorize MultiLoad Transaction. Will display load screen. Modbus: Write Only Register=7016, Len=1, 16-Bit Integer (any value=Authorize Transaction) Cx Clear RCU counters Where, X = counter to clear, 1 = counter 1, 2 = counter 2 E Setup Data Entry Used to display a flashing cursor (Setup Data Entry Length > 1) and allow user input. Data to be retrieved at R960, R961. F Turn on Big Font Used to enable double size font. F Turn off Big Font Used to return to normal size font. G Set Foreground/Background Text Colors Where: f = (character) 0x20 + Foreground Color Palette Index b = (character) 0x20 + Background Color Palette Index Pixel color palette index values defined as: Black = 0x00 Blue = 0x01 Red = 0x02 Magenta = 0x03 Green = 0x04 Cyan = 0x05 Yellow = 0x06 White = 0x07 Custom 0 = 0x08 (Not available) 21 Chapter 5 – Terminal Commands Custom 1 = 0x09 (Not available) Custom 2 = 0x0a (Not available) Custom 3 = 0x0b (Not available) Custom 4 = 0x0c (Not available) Custom 5 = 0x0d (Not available) Flash 1 = 0x0e Flash 2 = 0x0f Example: To display a green word ‘Hello’ code the string as follows: T<ESC>G$’Hello $ = 0x20 + 0x04 (Green) ‘ = 0x20 + 0x07 (White) H Home Cursor to Position (0,0) Move cursor position to upper left corner of screen. Ircle Set Reverse Video Where: r = (character) 0x20 + Top Text Row Position (0 = top, 15 = bottom) c = (character) 0x20 + Left Text Column Position (0 = left, 39 = right) l = (character) 0x20 + Length in Text Columns e = “0” or “1” (0 = Set Inverse Text, 1 = Clear Inverse Text) J Erase from Cursor to End of Line Use with after <ESC>Y first to clear an entire line. Can be used as a CR since cursor will be positioned on next line. K Erase from Cursor to End of Screen Use with after <ESC>H to clear entire screen. Lxx Setup Data Entry Length Where: xx = Length of Data Entry Input Required (00-25) (0 = Key Press with No Flashing Cursor) N Turn On Cursor O Turn Off Cursor R Reset the RCU Display Modbus: Write Only Register=7017, Len=1, 16-Bit Integer (any value=Reset RCU Display) Yrc Set Cursor Position Where: r = (character) 0x20 + Top Text Row Position (0 = top, 15 = bottom) c = (character) 0x20 + Left Text Column Position (0 = left, 39 = right) X Clear Entire Display 22 Chapter 5 – Terminal Commands < Unlock the Display > Lock the Display @ Turn Character Echo On ! Turn Asterisk Echo On arcwh Draw Progress Box Where: r = (character) 0x20 + Top Text Row Position (0 = top, 15 = bottom) c = (character) 0x20 + Left Text Column Position (0 = left, 39 = right) w = (character) 0x20 + Width in Text Columns h = (character) 0x20 + Height in Text Rows Down brcwhp Update Progress Box Where: r = (character) 0x20 + Top Text Row Position (0 = top, 15 = bottom) c = (character) 0x20 + Left Text Column Position (0 = left, 39 = right) w = (character) 0x20 + Width in Text Columns h = (character) 0x20 + Height in Text Rows Down p = (character) 0x20 + Percent Value to Display (0 = None, 100 = Full) crcpf Display Animation Frame Where: r = (character) 0x20 + Top Text Row Position (0 = top, 15 = bottom) c = (character) 0x20 + Left Text Column Position (0 = left, 39 = right) p = (character) 0x20 + Animation Picture Index f = (character) 0x20 + Animation Frame Index Note: Test only since Animation Picture Index and Animation Frame Index values may change between firmware versions. Df Display Factory Logo Where: f = (character) 0x20 + Factory Logo Index Note: Test only since Factory Logo Index values may change between firmware versions. Ercwd… Draw Display Graphic Where: r = (character) 0x20 + Top Text Row Position (0 = top, 15 = bottom) c = (character) 0x20 + Left Text Column Position (0 = left, 39 = right) w = (character) 0x20 + Width in Text Columns d = (character) 0x20 + pixel color palette index values from left to right, top to bottom, Note: Each text column = 16 pixels wide, each text row = 30 pixels high Pixel color palette index values defined as: 23 Chapter 5 – Terminal Commands Black = 0x00 Blue = 0x01 Red = 0x02 Magenta = 0x03 Green = 0x04 Cyan = 0x05 Yellow = 0x06 White = 0x07 Custom 0 = 0x08 (Not available) Custom 1 = 0x09 (Not available) Custom 2 = 0x0a (Not available) Custom 3 = 0x0b (Not available) Custom 4 = 0x0c (Not available) Custom 5 = 0x0d (Not available) Flash 1 = 0x0e Flash 2 = 0x0f Example: To position a small graphic starting at row 5, column 20, column width 2, code the string as follows: T<ESC>e%4” ’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’ ’’’’’$$$’’’’’’’’’’’’’’’’$$$’’’’’ ’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’ ’’’’’’’’’’’’’’$$$’’’’’’’’’’’’’’’ ’’’’’$$’’’’’’’’’’’’’’’’’’$$’’’’’ ’’’’’’’$$$$’’’’’’’’’’$$$$’’’’’’’ ’’’’’’’’’’’$$$$$$$$$$’’’’’’’’’’’ Note: formatted for illustration only, there are no spaces or CRs in the above command. ‘%’ = 0x20 + 5 ‘4’ = 0x20 + 20 “ = 0x20 + 2 ‘ = 0x20 + 0x07 (White) $ = 0x20 + 0x04 (Green) grcwhc Fill Box with a Color Where: r = (character) 0x20 + Top Text Row Position (0 = top, 15 = bottom) c = (character) 0x20 + Left Text Column Position (0 = left, 39 = right) w = (character) 0x20 + Width in Text Columns h = (character) 0x20 + Height in Text Columns Down c = (character) 0x20 + color palette index value Pixel color palette index values defined as: Black = 0x00 Blue = 0x01 Red = 0x02 Magenta = 0x03 Green = 0x04 Cyan = 0x05 Yellow = 0x06 White = 0x07 Custom 0 = 0x08 (Not available) 24 Chapter 5 – Terminal Commands Custom 1 Custom 2 Custom 3 Custom 4 Custom 5 Flash 1 Flash 2 25 = 0x09 (Not available) = 0x0a (Not available) = 0x0b (Not available) = 0x0c (Not available) = 0x0d (Not available) = 0x0e = 0x0f hrcwhaaaaaaaa Display Graphic Cache Where: r = (character) 0x20 + Top Text Row Position (0 = top, 15 = bottom) c = (character) 0x20 + Left Text Column Position (0 = left, 39 = right) w = (character) 0x20 + Width in Text Columns h = (character) 0x20 + Height in Text Columns aaaaaaaa = 8 character hexadecimal cache offset start value. See R/U 998 command for more details on cache offset. Modbus: Supported through Modbus Extended Services Registers. Chapter 6 – Meter Commands CHAPTER 6 6.1 26 METER COMMANDS: AUTHORIZE PRESET (PRODUCT AND PRESET VOLUME): MAMpppaiiivvvvvvvvvcc Where: ppp = The specified zero-based preset or load arm number (000-011). A = Authorize bit, 0 = Cancel Authorization, 1 = Authorize. Iii = Product Index (500 register) for the authorized product. Vvvvvvvvv = Preset volume. Cc = Compartment number. Note: Will only accept Authorize Preset command when in REMOTE_AUTH_PRESET state or when preset is authorized and a batch not already authorized. Modbus: Write Only Register=7500+5*ppp, Len=1, 16-Bit Integer (iii) Write Only Register=7501+5*ppp, Len=2, 32-Bit Integer (vvvvvvvvv) Write Only Register=7503+5*ppp, Len=1, 16-Bit Integer (cc) Write Only Register=7504+5*ppp, Len=1, 16-Bit Integer (a) Note: Last Authorize Preset Register Used=7559 6.2 CLEAR ALARMS: MCAppp by preset Where: ppp = The specified zero-based preset or load arm number (000-011). Modbus: Write Only Register=7020+ppp, Len=1, 16-Bit Integer (any value) MCBA by bay Modbus: Write Only Register=7019, Len=1, 16-Bit Integer (any value) 6.3 ENABLE PRESET MEMpppa Where: ppp = The specified zero-based preset or load arm number (000-011). A = Enable Flag, 0 = Disabled, 1 = Enabled/Not Available, 2 = Available Modbus: Write Only Register=7032+ppp, Len=1, 16-Bit Integer (a) 6.4 END TRANSACTION MET When an ET command is received, a forced card out will occur. Chapter 6 – Meter Commands Note: The Host will still need to send a MEB command for each preset that reaches a PRESET_END_OF_BATCH state. Modbus: Write Only Register=7044, Len=1, 16-Bit Integer (any value) 6.5 BATCH COMPLETE MBCppp Where: ppp = The specified zero-based preset or load arm number (000-011). When a BC command is received, the preset flow will stop and the batch will be marked as complete. The operator will not be able to restart the batch, but will be allowed to clear the batch and preset another (pending Host authorization). Modbus: Write Only Register=7045+ppp, Len=1, 16-Bit Integer (any value) 6.6 BATCH END: MBEppp Where: ppp = The specified zero-based preset or load arm number (000-011). Command used to start end batch processing and to transition state to PRESET_END_OF_BATCH when flow stops and final values are received. Note: Typical end of batch command order is: MSMppp (tell Multiload to stop flow) MBCppp (tell Multiload to mark batch as complete, no further flowing on batch) MBEppp (tell Multiload to get ready for total pickup) wait for state==PRESET_END_OF_BATCH (ok to get totals) MRSppp to get totals MEBppp (ok to clear totals on Multiload) Modbus: Write Only Register=7057+ppp, Len=1, 16-Bit Integer (any value) 6.7 END BATCH: MEBppp Where: ppp = The specified zero-based preset or load arm number (000-011). Command is used to finish end-of-batch processing and that totals can be cleared. Modbus: Write Only Register=7069+ppp, Len=1, 16-Bit Integer (any value) 27 Chapter 6 – Meter Commands 6.8 PRESET MESSAGE: MPMpppssssssssssddddddddddddddddddddddddddddddddddddddd Where: ppp = The specified zero-based preset or load arm number (000-011). Ssssssssss = 10 Character Message. Ddddddddddddddddddddddddddddddddddddddd = 39 Character Detail Message. Displays a message for the particular preset. A detail message will be displayed when the preset is selected. Driver and acknowledge and clear the message by pressing CLR key. Modbus: Only supported through Modbus Extended Services Registers. 6.9 PROVING TRANSACTION MODE: MPTx When: x = Mode Status 0 = Off, 1 = On. Default Off when transaction is authorized. Command is used to indicate when a card in is done with a proving card and meter proving may be done during this transaction. Modbus: Write Only Register=7081, Len=1, 16-Bit Integer (x) 28 Chapter 6 – Meter Commands 6.10 REQUEST STATUS & PRESET ALARMS: MRSpppxxxxyyyyzzzzaaaa => RSppp… (Requested parameters as listed below). Where: ppp = The specified zero-based preset or load arm number (000-011). Xxxx = Optional response configuration bits #0 in hexadecimal as: union { unsigned int value; struct { unsigned int preset_state:1; unsigned int preset_status_0:1; unsigned int preset_alarms:1; unsigned int volume_preset_whole:1; unsigned int batch_gross_del_whole:1; unsigned int batch_net_del_whole:1; unsigned int batch_temp_tenths:1; unsigned int batch_pressure_tenths:1; unsigned int batch_gravity:1; unsigned int gross_flow_rate:1; unsigned int component_batch_gross_del_whole:1; unsigned int component_batch_net_del_whole:1; unsigned int component_batch_temp_tenths:1; unsigned int component_batch_pressure_tenths:1; unsigned int component_batch_gravity:1; unsigned int additive_batch_gross_del_thous:1; } flags; } query_0; (default value 0x965f.) 29 Chapter 6 – Meter Commands yyyy = Optional response configuration bits #1 in hexadecimal as: union { unsigned int value; struct { unsigned int preset_status_0:1; unsigned int preset_status_1:1; unsigned int preset_status_2:1; unsigned int meter_status_0:1; unsigned int meter_status_1:1; unsigned int meter_status_2:1; unsigned int component_status_0:1; unsigned int component_status_1:1; unsigned int component_status_2:1; unsigned int additive_status_0:1; unsigned int additive_status_1:1; unsigned int additive_status_2:1; unsigned int temp_press_in_hunds:1; unsigned int component_current_temp_hund:1; unsigned int component_current_pressure_hund:1; unsigned int component_current_density_tenths:1; } flags; } query_1; (default value 0x0000.) 30 Chapter 6 – Meter Commands zzzz = Optional response configuration bits #2 in hexadecimal as: union { unsigned int value; struct { unsigned int meter_batch_gross_del_whole:1; //Mass unsigned int meter_gross_flow_rate:1; // Mass unsigned int component_current_relative_density_tenthous:1; unsigned int current_bsw_hund:1; unsigned int component_current_api_gravity_tenths 1; unsigned int batch_bsw_hund:1; unsigned int component_batch_api_gravity_tenths:1; unsigned int batch_mass_del:1; unsigned int component_batch_mass_del:1; unsigned int component_current_volume_correction_factor:1; unsigned int component_current_temperature_correction_factor:1; unsigned int component_current_pressure_correction_factor:1; unsigned intsampler_batch_gross_del_thous:1; unsigned intsampler_batch_current_target_samples:1; unsigned int unused_14:1; unsigned int unused_15:1; } flags; } query_2; (default value 0x0000.) aaaa = Optional response configuration bits #3 in hexadecimal as: union { unsigned int value; struct { unsigned int component_meter_gross_del_whole:1; unsigned int component_meter_net_del_whole:1; // Mass unsigned int component_meter_batch_temp_tenths:1; unsigned int component_meter_batch_pressure_tenths:1; unsigned int component_meter_batch_gravity:1; unsigned int component_meter_current_temp_tenths:1; unsigned int component_meter_current_pressure_tenths:1; unsigned int component_meter_current_gravity:1; unsigned int component_meter_current_relative_density_tenthous:1; unsigned int unused_9:1; unsigned int component_meter_current_api_gravity_tenths:1; unsigned int unused_11:1; unsigned intcomponent_meter_batch_api_gravity_tenths:1; unsigned int component_meter_mass_del:1; 31 Chapter 6 – Meter Commands unsigned int unused_14:1; unsigned int unused_15:1; } flags; } query_3; (default value 0x0000.) Defaults are compatible with previous Multiload MRS replies. To query for preset information only use: MRSppp03ff To query for preset pressure only use: MRSppp0080 To query for additive delivered only use: MRSppp8000 RS = Request Status Response ppp = The specified zero-based preset or load arm number (000-011). 32 Chapter 6 – Meter Commands Query 0 and 1 Responses: wwww= preset state in hexadecimal as: enum { PRESET_IDLE = 0, PRESET_LOW_FLOW = 1, PRESET_HIGH_FLOW = 2, PRESET_1ST_TRIP = 3, PRESET_2ND_TRIP = 4, PRESET_FINAL_TRIP = 5, PRESET_START = 6, PRESET_ALARM = 7, PRESET_COMPLETE = 8, PRESET_NOT_AUTH = 9, PRESET_WAIT_TMS = 10, PRESET_AUTH = 11, PRESET_PRESET = 12, PRESET_DISABLED = 13, PRESET_STOP = 14, PRESET_REMOTE_MSG = 15, PRESET_END_OF_BATCH = 16, PRESET_ARCHIVING = 17, PRESET_CLEARING = 18, PRESET_TRANS_DONE = 19, PRESET_DIVERT = 20, PRESET_NO_STATE = 99 } preset_state; 33 Chapter 6 – Meter Commands xxxx= preset status #0 in hexadecimal as: union { unsigned int value; struct { unsigned char preset_enabled:1; unsigned char preset_host_enabled:1; unsigned char authorized:1; unsigned char flow_active:1; unsigned char batch_authorized:1; unsigned char remote_msg:1; unsigned char remote_desc:1; unsigned char load_complete:1; unsigned char end_batch:1; unsigned char end_batch_done:1; unsigned char tms_got_data:1; unsigned char archived:1; unsigned char batch_cleared:1; unsigned char clearing_load:1; unsigned char load_cleared:1; unsigned char trans_done:1; } flags: } preset_status_0; 34 // preset is enabled // preset enabled by host // preset available for use // flow state is not idle // product & preset has been authorized // remote message active // remote descriptive message active // no further loading on batch can be done // MBE command processing started // MBE command processing done // MEB command received // batch data has been archived into transaction database // batch has been cleared // load clear has been issued // load has been cleared // transaction is done Chapter 6 – Meter Commands 35 yyyy= preset alarms in hexadecimal as: union { unsigned int value; struct { unsigned char preset_fcm_com:1; Unsigned char preset_permissive:1; Unsigned char swing_arm_permissive:1; Unsigned char line_not_flushed:1; Unsigned char preset_block_valve:1; Unsigned char bay_alarm:1; Unsigned char component_alarm:1; Unsigned char additive_alarm:1; Unsigned char meter_stop:1; unsigned char preset_overrun:1; unsigned char excess_flow:1; Unsigned char unused11:1; unsigned char unused12:1; unsigned char unused13:1; unsigned char unused14:1; unsigned char configuration_error:1; } flags; } preset_alarms; // one or more FCMs that are required for PRESET status or signals are in com error. // preset permissive not active but preset is authorized to load. // swing arm not in bay and preset is authorized to load. // less than min_line_flush_vol has flowed since a non-flush component has flowed and batch was ended. // block value status does not agree with commanded valve position. // a bay level alarm currently exists. // a component level alarm currently exists for this preset. // a additive level alarm currently exists for this preset. // meter stop button for preset pressed // preset delivered volume is over target volume by overrun_alarm_vol. // preset flow rate has exceeded excess_flow_alarm_rate. // preset configuration has invalid data, check message log for details Chapter 6 – Meter Commands qqqqqqqqq= preset quantity in whole units ddddddddd = delivered gross quantity in whole units ddddddddd = delivered net quantity in whole units Note: if the Use Hundredths W&M RCU parameter is enabled, the gross and net quantity value will have an implied two decimal places. Sddddd = signed batch average temp in tenths or hundredths sddddd = signed batch average pressure in tenths or hundredths dddddd = depending on API table selected, batch average density in tenths OR batch average relative density in ten thousands OR batch average gravity in tenths ddddd = preset gross flow rate in whole units Modbus : Where: p = preset (0-11) Read Only Register=4000+p, Len=1, 16-Bit Integer (wwww) Read Only Register=4012+p, Len=1, 16-Bit Integer (xxxx) Read Only Register=4024+p, Len=1, 16-Bit Integer (yyyy) Read Only Register=4036+p, Len=2, 32-Bit Integer (qqqqqqqqq) Read Only Register=4060+p, Len=2, 32-Bit Integer (ddddddddd (gross)) Read Only Register=4084+p, Len=2, 32-Bit Integer (ddddddddd (net)) Read Only Register=4108+p, Len=2, 32-Bit Integer (sddddd (temp)) Read Only Register=4132+p, Len=2, 32-Bit Integer (sddddd (pressure)) Read Only Register=4156+p, Len=2, 32-Bit Integer (dddddd) Read Only Register=4180+p, Len=1, 16-Bit Integer (ddddd (rate)) 36 Chapter 6 – Meter Commands per meter(5): ddddddddd = meter delivered gross quantity in whole units Note: if the Use Hundredths W&M RCU parameter is enabled, the gross quantity value will have an implied two decimal places. Ddddd = meter gross flow rate in whole units Modbus : Where: p = preset (0-11), m = meter (0-4) Read Only Register=4192+p*5+m, Len=2, 32-Bit Integer (ddddddddd (gross)) Read Only Register=4312+p*5+m, Len=1, 16-Bit Integer (ddddd (rate)) 37 Chapter 6 – Meter Commands per component(8): ddddddddd = delivered gross quantity in whole units ddddddddd = delivered net quantity in whole units Note: if the Use Hundredths W&M RCU parameter is enabled, the gross and net quantity value will have an implied two decimal places. Sddddd = signed component batch average temp in tenths or hundredths sddddd = component batch average pressure in tenths or hundredths dddddd = depending on API table selected, component batch average density in tenths OR component batch average relative density in ten thousands OR component batch average gravity in tenths sddddd = signed component current temp in hundredths sddddd = signed component current pressure in hundredths sddddd = signed component current density in tenths sddddd = signed component current relative density in ten thousands sddddd = signed component current bsw hund sdddd = signed component current api gravity tenths sddddd = signed batch average bsw hund sdddd = signed batch average api gravity tenths ddddddddd = component meter delivered gross quantity in whole units ddddddddd = component meter delivered net quantity in whole units sddddd = signed component meter batch average temp in tenths or hundredths sddddd = component meter batch average pressure in tenths or hundredths dddddd = depending on API table selected, component meter batch average density in tenths OR component meter batch average relative density in ten thousands OR component meter batch average gravity in tenths sddddd = signed component meter current temp in hundredths sddddd = signed component meter current pressure in hundredths sddddd = signed component meter current density in tenths sddddd = signed component meter current relative density in ten thousands sddddd = signed component meter current bsw hund sdddd = signed component meter current api gravity tenths sddddd = signed meter batch average bsw hund sdddd = signed meter batch average api gravity tenths ddddddddd = delivered mass quantity in whole units Modbus : Where: p = preset (0-11), c = component (0-7) Read Only Register=4372+p*8+c, Len=2, 32-Bit Integer (ddddddddd (gross)) Read Only Register=4564+p*8+c, Len=2, 32-Bit Integer (ddddddddd (net)) Read Only Register=4756+p*8+c, Len=2, 32-Bit Integer (sddddd (component average temp)) Read Only Register=4948+p*8+c, Len=2, 32-Bit Integer (sddddd (component average pressure)) Read Only Register=5140+p*8+c, Len=2, 32-Bit Integer (dddddd (component average density/rel. dens./gravity)) Read Only Register=5332+p*8+c, Len=2, 32-Bit Integer (sddddd (component current temp)) Read Only Register=5524+p*8+c, Len=2, 32-Bit Integer (sddddd (component current pressure)) 38 Chapter 6 – Meter Commands Read Only Register=5716+p*8+c, Len=2, 32-Bit Integer (sddddd (component current density)) Read Only Register=6292+p*8+c, Len=2, 32-Bit Integer (sddddd (component current relative density)) Read Only Register=6484+p*8+c, Len=2, 32-Bit Integer (sddddd (component current bsw)) Read Only Register=6676+p*8+c, Len=2, 32-Bit Integer (sddddd (component current api gravity)) NOT AVAILABLE Len=2, 32-Bit Integer (sdddd (component average api gravity)) Read Only Register=6868+p*8+c, Len=2, 32-Bit Integer (ddddddddd (gross)) 39 Chapter 6 – Meter Commands per additive(16): ddddddddd = delivered quantity in thousands Modbus : Where: p = preset (0-11), a = additive (0-11) Read Only Register=5908+p*16+a, Len=2, 32-Bit Integer (ddddddddd (delivered quantity in thousands)) per sampler(20) ddddddddd = sampler batch gross delivered in thousandths ddddddddd = sampler batch current target 40 Chapter 6 – Meter Commands Query 1 Responses: xxxx= preset status #0 in hexadecimal as: union { unsigned int value; struct { unsigned char preset_enabled:1; unsigned char preset_host_enabled:1; unsigned char authorized:1; unsigned char flow_active:1; unsigned char batch_authorized:1; unsigned char remote_msg:1; unsigned char remote_desc:1; unsigned char load_complete:1; unsigned char end_batch:1; unsigned char end_batch_done:1; unsigned char tms_got_data:1; unsigned char archived:1; unsigned char batch_cleared:1; unsigned char clearing_load:1; unsigned char load_cleared:1; unsigned char trans_done:1; } flags: } preset_status_0; 41 // preset is enabled // preset enabled by host // preset available for use // flow state is not idle // product & preset has been authorized // remote message active // remote descriptive message active // no further loading on batch can be done // MBE command processing started // MBE command processing done // MEB command received // batch data has been archived into transaction database // batch has been cleared // load clear has been issued // load has been cleared // transaction is done Chapter 6 – Meter Commands xxxx= preset status #1 in hexadecimal as: union { unsigned int value; struct { unsigned char program_clear_errors:1; unsigned char remote_clear_errors:1; unsigned char driver_clear_errors:1; unsigned char clearing_errors:1; unsigned char flow_batch:1; unsigned char clear_batch:1; unsigned char clear_load:1; unsigned char flush_stage_needed:1; unsigned char open_blk_val:1; unsigned char blk_val_status:1; unsigned char close_blk_val:1; unsigned char remote_start:1; unsigned char swing_arm:1; unsigned char meter_stop:1; unsigned char alarm_out:1; unsigned char permissive:1; } flags: } preset_status_1; 42 // command to clear errors // command to clear errors // command to clear errors // currently clearing errors // command to flow/not flow product // command to clear batch // command to clear load // product flush stage required // block valve open // block valve status // block valve close // remote start button status // swing arm select status // meter stop button status // preset alarm output status // preset permissive input status Chapter 6 – Meter Commands xxxx= preset status #2 in hexadecimal as: union { unsigned int value; struct { unsigned char permissive_out:1; // preset permissive output status unsigned char load_interrupted:1; // has loading been interrupted unsigned char clearing_batch:1; // batch in process of clearing unsigned char alt_high_flow:1; // alt_high_flow input active unsigned char gross_value_measured_for_trade:1; // gross value is W&M approved unsigned char wm_clear_errors:1; // command to clear errors unsigned char batch_alarm:1; // one or more preset level alarms occurred during the batch unsigned char remote_clear:1; // remote clear from FCM input unsigned char no_auto_batch_auth:1; // prevents batch reauthorization unsigned char open_diverter_val:1; // divert valve open unsigned char diverter_invalid_bsw:1; // divert alarm unsigned char unused2_11:1; // future use unsigned char unused2_12:1; // future use unsigned char unused2_13:1; // future use unsigned char unused2_14:1; // future use unsigned char unused2_15:1; // future use } flags: } preset_status_2; Modbus: Supported through Modbus Extended Services Registers. 43 Chapter 6 – Meter Commands Per meter(6): xxxx= meter status #0 in hexadecimal as: union { unsigned int value; struct { unsigned char program_clear_errors:1; unsigned char remote_clear_errors:1; unsigned char driver_clear_errors:1; unsigned char clearing_errors:1; unsigned char clear_totals:1; unsigned char start_flow:1; unsigned char stop_flow:1; ; unsigned char high_flow:1; unsigned char upstream_valve:1; unsigned char downstream_valve:1; unsigned char alarm_out:1; unsigned char authorized:1; unsigned char permissive:1; unsigned char permissive_out:1; unsigned char wm_clear_errors:1; unsigned char unused0_15:1; } flags: } meter_status_0; 44 // command to clear errors // command to clear errors // command to clear errors // currently clearing errors // commanded to clear totals // commanded to start flow // commanded to stop flow // forcing flow into high flow // upstream valve status // downstream valve status // meter alarm output status // meter authorized output status // meter permissive input status // meter permissive output status // command to clear errors // future use Chapter 6 – Meter Commands xxxx= meter status #1 in hexadecimal as: union { unsigned int value; struct { unsigned char unused1_0:1; unsigned char unused1_1:1; unsigned char unused1_2:1; unsigned char unused1_3:1; unsigned char unused1_4:1; unsigned char unused1_5:1; unsigned char unused1_6:1; unsigned char unused1_7:1; unsigned char unused1_8:1; unsigned char unused1_9:1; unsigned char unused1_10:1; unsigned char unused1_11:1; unsigned char unused1_12:1; unsigned char unused1_13:1; unsigned char unused1_14:1; unsigned char unused1_15:1; } flags: } meter_status_1; 45 // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use Chapter 6 – Meter Commands xxxx= meter status #2 in hexadecimal as: union { unsigned int value; struct { unsigned char unused2_0:1; unsigned char unused2_1:1; unsigned char unused2_2:1; unsigned char unused2_3:1; unsigned char unused2_4:1; unsigned char unused2_5:1; unsigned char unused2_6:1; unsigned char unused2_7:1; unsigned char unused2_8:1; unsigned char unused2_9:1; unsigned char unused2_10:1; unsigned char unused2_11:1; unsigned char unused2_12:1; unsigned char unused2_13:1; unsigned char unused2_14:1; unsigned char unused2_15:1; } flags: } meter_status_2; Modbus: Supported through Modbus Extended Services Registers. 46 // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use Chapter 6 – Meter Commands Per component(8): xxxx= component status #0 in hexadecimal as: union { unsigned int value; struct { unsigned char program_clear_errors:1; unsigned char remote_clear_errors:1; unsigned char driver_clear_errors:1; unsigned char clearing_errors:1; unsigned char clear_batch:1; unsigned char remote_start_button:1; unsigned char pump_run:1; unsigned char pump_kill:1; unsigned char pump_status:1; unsigned char open_blk_val:1; unsigned char blk_val_status:1; unsigned char close_blk_val:1; unsigned char alarm_out:1; unsigned char authorized:1; unsigned char permissive:1; unsigned char permissive_out:1; } flags: } component_status_0; 47 // command to clear errors // command to clear errors // command to clear errors // currently clearing errors // commanded to clear batch // remote start button input status // pump run output status // pump kill output status // pump status input status // open block valve output status // block valve status input status // close block valve output status // alarm out output status // authorized output status // component permissive input status // component permissive output status Chapter 6 – Meter Commands xxxx= component status #1 in hexadecimal as: union { unsigned int value; struct { unsigned char blend_ready:1; // component blend ready unsigned char blend_complete:1; // component blend complete unsigned char flush_ready:1; // component flush ready unsigned char flush_complete:1; // component flush complete unsigned char sequential_delivery:1; // component to be sequentially delivered unsigned char clearing_batch:1; // component batch in process of clearing unsigned char gross_value_measured_for_trade:1; // gross value is W&M approved unsigned char wm_clear_errors:1; // command to clear errors unsigned char unused1_8:1; // future use unsigned char unused1_9:1; // future use unsigned char unused1_10:1; // future use unsigned char unused1_11:1; // future use unsigned char unused1_12:1; // future use unsigned char unused1_13:1; // future use unsigned char unused1_14:1; // future use unsigned char unused1_15:1; // future use } flags: } component_status_1; 48 Chapter 6 – Meter Commands xxxx= component status #2 in hexadecimal as: union { unsigned int value; struct { unsigned char unused2_0:1; unsigned char unused2_1:1; unsigned char unused2_2:1; unsigned char unused2_3:1; unsigned char unused2_4:1; unsigned char unused2_5:1; unsigned char unused2_6:1; unsigned char unused2_7:1; unsigned char unused2_8:1; unsigned char unused2_9:1; unsigned char unused2_10:1; unsigned char unused2_11:1; unsigned char unused2_12:1; unsigned char unused2_13:1; unsigned char unused2_14:1; unsigned char unused2_15:1; } flags: } component_status_2; Modbus: Supported through Modbus Extended Services Registers. 49 // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use Chapter 6 – Meter Commands Per additive(16): xxxx= additive status #0 in hexadecimal as: union { unsigned int value; struct { unsigned char program_clear_errors:1; unsigned char remote_clear_errors:1; unsigned char driver_clear_errors:1; unsigned char clearing_errors:1; unsigned char clear_batch:1; unsigned char test_button:1; unsigned char pump_run:1; unsigned char pump_kill:1; unsigned char pump_status:1; unsigned char open_blk_val:1; unsigned char blk_val_status:1; unsigned char close_blk_val:1; unsigned char flush_pump_run:1; unsigned char alarm_out:1; unsigned char authorized:1; unsigned char permissive:1; } flags: } additive_status_0; 50 // command to clear errors // command to clear errors // command to clear errors // commanded to clear errors // commanded to clear batch // test inject button input status // pump run output status // pump kill output status // pump status input status // open block valve output status // block valve status input status // close block valve output status // flush pump run output status // alarm out output status // authorized output status // additive permissive input status Chapter 6 – Meter Commands xxxx= additive status #1 in hexadecimal as: union { unsigned int value; struct { unsigned char permissive_out:1; unsigned char feedback_status:1; unsigned char wm_clear_errors:1; unsigned char unused1_3:1; unsigned char unused1_4:1; unsigned char unused1_5:1; unsigned char unused1_6:1; unsigned char unused1_7:1; unsigned char unused1_8:1; unsigned char unused1_9:1; unsigned char unused1_10:1; unsigned char unused1_11:1; unsigned char unused1_12:1; unsigned char unused1_13:1; unsigned char unused1_14:1; unsigned char unused1_15:1; } flags: } additive_status_1; 51 // permissive out output status // additive feedback input status // command to clear errors // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use Chapter 6 – Meter Commands xxxx= additive status #2 in hexadecimal as: union { unsigned int value; struct { unsigned char unused2_0:1; unsigned char unused2_1:1; unsigned char unused2_2:1; unsigned char unused2_3:1; unsigned char unused2_4:1; unsigned char unused2_5:1; unsigned char unused2_6:1; unsigned char unused2_7:1; unsigned char unused2_8:1; unsigned char unused2_9:1; unsigned char unused2_10:1; unsigned char unused2_11:1; unsigned char unused2_12:1; unsigned char unused2_13:1; unsigned char unused2_14:1; unsigned char unused2_15:1; } flags: } additive_status_2; Modbus: Supported through Modbus Extended Services Registers. 6.11 52 // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use REQUEST TANK STATUS & TANK ALARMS: MTKtttxxxxyyyyzzzzaaaa => TKttt… (Requested parameters as listed below). Where: ttt = The specified zero-based tank number (000-009). Xxxx = Optional response configuration bits #0 in hexadecimal as: union { unsigned int value; struct { unsigned int tank_state:1; unsigned int tank_status_0:1; unsigned int tank_alarms:1; unsigned int unused_3:1; unsigned int unused_4:1; unsigned int unused_5:1; unsigned int unused_6:1; unsigned int unused_7:1; Chapter 6 – Meter Commands unsigned int unused_8:1; unsigned int unused_9:1; unsigned int unused_10:1; unsigned int unused_11:1; unsigned int unused_12:1; unsigned int unused_13:1; unsigned int unused_14:1; unsigned int unused_15:1; } flags; } query_0; (default value 0x0000.) union { unsigned int value; struct { unsigned int tank_status_0:1; unsigned int tank_status_1:1; unsigned int tank_status_2:1; unsigned int unused_3:1; unsigned int unused_4:1; unsigned int unused_5:1; unsigned int unused_6:1; unsigned int unused_7:1; unsigned int unused_8:1; unsigned int unused_9:1; unsigned int unused_10:1; unsigned int unused_11:1; unsigned int unused_12:1; unsigned int unused_13:1; unsigned int unused_14:1; unsigned int unused_15:1; } flags; } query_1; union { unsigned int value; struct { unsigned int unused_0:1; unsigned int unused_1:1; unsigned int unused_2:1; unsigned int unused_3:1; unsigned int unused_4:1; unsigned int unused_5:1; unsigned int unused_6:1; unsigned int unused_7:1; 53 Chapter 6 – Meter Commands 54 unsigned int unused_8:1; unsigned int unused_9:1; unsigned int unused_10:1; unsigned int unused_11:1; unsigned int unused_12:1; unsigned int unused_13:1; unsigned int unused_14:1; unsigned int unused_15:1; } flags; } query_2; union { unsigned int value; struct { unsigned int unused_0:1; unsigned int unused_1:1; unsigned int unused_2:1; unsigned int unused_3:1; unsigned int unused_4:1; unsigned int unused_5:1; unsigned int unused_6:1; unsigned int unused_7:1; unsigned int unused_8:1; unsigned int unused_9:1; unsigned int unused_10:1; unsigned int unused_11:1; unsigned int unused_12:1; unsigned int unused_13:1; unsigned int unused_14:1; unsigned int unused_15:1; } flags; } query_3; Defaults are compatible with previous Multiload MTK replies. TK = Request Status Response ttt = The specified zero-based tank number (000-009). Query 0 and 1 Responses: wwww= tank state in hexadecimal as: enum { TANK_DEACTIVE TANK_LOADING TANK_UNLOADING = 0, = 1, = 2, Chapter 6 – Meter Commands TANK_UNLOAD_LOAD } tank_state; 55 = 3, Chapter 6 – Meter Commands xxxx= tank status #0 in hexadecimal as: union { unsigned int value; struct { unsigned char high_high_level:1; unsigned char high_level:1; unsigned char low_level:1; unsigned char low_low_level:1; unsigned char bypass_alarm:1; unsigned char active_tank:1; unsigned char alarm_out:1; unsigned char unused0_7:1; unsigned char unused0_8:1; unsigned char unused0_9:1; unsigned char unused0_10:1; unsigned char unused0_11:1; unsigned char unused0_12:1; unsigned char unused0_13:1; unsigned char unused0_14:1; unsigned char unused0_15:1; } flags: } tank_status_0; 56 // high high level alarm // high level alarm // low level alarm // low low level alarm // bypass level alarms // active tank // alarm out Chapter 6 – Meter Commands yyyy= tank alarms in hexadecimal as: union { unsigned int value; struct { unsigned char tank_fcm_com:1; Unsigned char high_high_level:1; Unsigned char high_level:1; Unsigned char low_level:1; Unsigned char low_low_level:1; Unsigned char tank_valve:1; Unsigned char unused06:1; Unsigned char unused07:1; Unsigned char unused08:1; unsigned char unused09:1; unsigned char unused10:1; Unsigned char unused11:1; unsigned char unused12:1; unsigned char unused13:1; unsigned char unused14:1; unsigned char unused15:1; } flags; } tank_alarms; Query 1 Responses: xxxx= tank status #0 in hexadecimal as: union { unsigned int value; struct { unsigned char high_high_level:1; unsigned char high_level:1; unsigned char low_level:1; unsigned char low_low_level:1; unsigned char bypass_alarm:1; unsigned char active_tank:1; unsigned char alarm_out:1; unsigned char unused0_7:1; unsigned char unused0_8:1; unsigned char unused0_9:1; unsigned char unused0_10:1; unsigned char unused0_11:1; 57 // one or more FCMs that are required for TANK status or signals are in com error. // Tank High High Level Alarm // Tank High Level Alarm // Tank Low Level Alarm // Tank Low Low_Level Alarm // Tankvalve Alarm // high high level // high level // low level // low low level // bypass alarm // active tank // alarm out Chapter 6 – Meter Commands unsigned char unused0_12:1; unsigned char unused0_13:1; unsigned char unused0_14:1; unsigned char unused0_15:1; } flags: } tank_status_0; 58 Chapter 6 – Meter Commands xxxx= tank_status #1 in hexadecimal as: union { unsigned int value; struct { unsigned char program_clear_errors:1; unsigned char remote_clear_errors:1; unsigned char driver_clear_errors:1; unsigned char clearing_errors:1; unsigned char wm_clear_errors:1; unsigned char open_tank_val:1; unsigned char tank_val_status:1; unsigned char close_tank_val:1; unsigned char trigger_start_level:1; unsigned char trigger_stop_level:1; unsigned char unused1_10:1; unsigned char unused1_11:1; unsigned char unused1_12:1; unsigned char unused1_13:1; unsigned char unused1_14:1; unsigned char unused1_15:1; } flags: } tank_status_1; 59 // command to clear errors // command to clear errors // command to clear errors // currently clearing errors // command to clear errors // tank valve open // tank valve status // tank valve closed // trigger start level // trigger stop level Chapter 6 – Meter Commands xxxx= tank_status #2 in hexadecimal as: union { unsigned int value; struct { unsigned char unused2_0:1; unsigned char unused2_1:1; unsigned char unused2_2:1; unsigned char unused2_3:1; unsigned char unused2_4:1; unsigned char unused2_5:1; unsigned char unused2_6:1; unsigned char unused2_7:1; unsigned char unused2_8:1; unsigned char unused2_9:1; unsigned char unused2_10:1; unsigned char unused2_11:1; unsigned char unused2_12:1; unsigned char unused2_13:1; unsigned char unused2_14:1; unsigned char unused2_15:1; } flags: } tank_status_2; 60 // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use Query 2 & 3 Responses: // future use 6.12 REQUEST SAMPLER STATUS & SAMPLER ALARMS: MSIsssxxxxyyyyzzzzaaaa => SIttt… (Requested parameters as listed below). Where: sss = The specified zero-based sampler number (000-003). Xxxx = Optional response configuration bits #0 in hexadecimal as: union { unsigned int value; struct { unsigned int sampler_state:1; unsigned int sampler_status_0:1; unsigned int sampler_alarms:1; unsigned int sampler_batch_gross_del_thous:1; unsigned int sampler_batch_current_target_samples:1; unsigned int unused_5:1; unsigned int unused_6:1; Chapter 6 – Meter Commands unsigned int unused_7:1; unsigned int unused_8:1; unsigned int unused_9:1; unsigned int unused_10:1; unsigned int unused_11:1; unsigned int unused_12:1; unsigned int unused_13:1; unsigned int unused_14:1; unsigned int unused_15:1; } flags; } query_0; (default value 0x0000.) union { unsigned int value; struct { unsigned int sampler_status_0:1; unsigned int sampler_status_1:1; unsigned int sampler_status_2:1; unsigned int unused_3:1; unsigned int unused_4:1; unsigned int unused_5:1; unsigned int unused_6:1; unsigned int unused_7:1; unsigned int unused_8:1; unsigned int unused_9:1; unsigned int unused_10:1; unsigned int unused_11:1; unsigned int unused_12:1; unsigned int unused_13:1; unsigned int unused_14:1; unsigned int unused_15:1; } flags; } query_1; union { unsigned int value; struct { unsigned int unused_0:1; unsigned int unused_1:1; unsigned int unused_2:1; unsigned int unused_3:1; unsigned int unused_4:1; unsigned int unused_5:1; unsigned int unused_6:1; 61 Chapter 6 – Meter Commands 62 unsigned int unused_7:1; unsigned int unused_8:1; unsigned int unused_9:1; unsigned int unused_10:1; unsigned int unused_11:1; unsigned int unused_12:1; unsigned int unused_13:1; unsigned int unused_14:1; unsigned int unused_15:1; } flags; } query_2; union { unsigned int value; struct { unsigned int unused_0:1; unsigned int unused_1:1; unsigned int unused_2:1; unsigned int unused_3:1; unsigned int unused_4:1; unsigned int unused_5:1; unsigned int unused_6:1; unsigned int unused_7:1; unsigned int unused_8:1; unsigned int unused_9:1; unsigned int unused_10:1; unsigned int unused_11:1; unsigned int unused_12:1; unsigned int unused_13:1; unsigned int unused_14:1; unsigned int unused_15:1; } flags; } query_3; Defaults are compatible with previous Multiload MSI replies. SI = Request Status Response ttt = The specified zero-based tank number (000-003). Query 0 and 1 Responses: wwww= sampler state in hexadecimal as: enum { SS_INACTIVE SS_READY = 0, = 1, Chapter 6 – Meter Commands SS_SAMPLE } sampler_state; 63 = 2, Chapter 6 – Meter Commands 64 xxxx= sampler_status #0 in hexadecimal as: union { unsigned int value; struct { unsigned char program_clear_errors:1; // command to clear errors unsigned char remote_clear_errors:1; // command to clear errors unsigned char driver_clear_errors:1; // command to clear errors unsigned char clearing_errors:1; unsigned char wm_clear_errors:1; unsigned char clear_batch:1; unsigned char unused0_6:1; unsigned char unused0_7:1; unsigned char unused0_8:1; unsigned char unused0_9:1; unsigned char unused0_10:1; unsigned hi_limit:1; unsigned char alarm_out:1; unsigned char authorized:1; unsigned char permissive:1; unsigned char permissive_out:1; } flags: } sampler_status_0; // command to clear errors // sampler high limit input Chapter 6 – Meter Commands yyyy= sampler alarms in hexadecimal as: union { unsigned int value; struct { unsigned char sampler_fcm_com:1; unsigned char sampler_permissive:1; unsigned char unused02:1; unsigned char unused03:1; unsigned char unused04:1; unsigned char unused05:1; unsigned char unused06:1; unsigned char unused07:1; unsigned char unused08:1; unsigned char unused09:1; unsigned char unused10:1; unsigned char unused11:1; unsigned char unused12:1; unsigned char unused13:1; unsigned char unused14:1; unsigned char unused15:1; } flags; } sampler_alarms; Query 1 Responses: xxxx= sampler status #0 in hexadecimal as: union { unsigned int value; struct { unsigned char program_clear_errors:1; unsigned char remote_clear_errors:1; unsigned char driver_clear_errors:1; unsigned char clearing_errors:1; unsigned char wm_clear_errors:1; unsigned char clear_batch:1; unsigned char unused0_06:1; unsigned char unused0_07:1; unsigned char unused0_08:1; unsigned char unused0_09:1; unsigned char unused0_10:1; 65 // one or more FCMs that are required for Sampler status or signals are in com error. // Sampler permissive Alarm // command to clear errors // command to clear errors // command to clear errors // currently clearing errors // command to clear errors Chapter 6 – Meter Commands unsigned hi_limit:1; // sampler high limit input unsigned char alarm_out:1; unsigned char authorized:1; unsigned char permissive:1; unsigned char permissive_out:1; } flags: } sampler_status_0; 66 Chapter 6 – Meter Commands 67 xxxx= sampler_status #1 in hexadecimal as: union { unsigned int value; struct { unsigned char unused1_0:1; unsigned char unused1_1:1; unsigned char unused1_2:1; unsigned char unused1_3:1; unsigned char unused1_4:1; unsigned char unused1_5:1; unsigned char unused1_6:1; unsigned char unused1_7:1; unsigned char unused1_8_15:8; } flags: } sampler_status_1; Chapter 6 – Meter Commands xxxx= sampler_status #2 in hexadecimal as: union { unsigned int value; struct { unsigned char unused2_0:1; unsigned char unused2_1:1; unsigned char unused2_2:1; unsigned char unused2_3:1; unsigned char unused2_4:1; unsigned char unused2_5:1; unsigned char unused2_6:1; unsigned char unused2_7:1; unsigned char unused2_8:1; unsigned char unused2_9:1; unsigned char unused2_10:1; unsigned char unused2_11:1; unsigned char unused2_12:1; unsigned char unused2_13:1; unsigned char unused2_14:1; unsigned char unused2_15:1; } flags: } sampler_status_2; Query 2 & 3 Responses: // future use 68 // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use // future use Chapter 6 – Meter Commands 6.13 REQUEST SMP STATUS & PRESET ALARMS: MSSpppxxxxyyyyzzzz => SSppp… (Requested parameters as listed above). The MSS command for the MultiLoad II SMP, is identical to the MRS command but only returns 1 component instead of 8, 1 meter instead of 4, and 2 additives instead of 16 additives in the response. 6.14 TRIP PRESET ALARMS: MTPApppyyyy => TPAppp (this only gives the first 16 alarm bits) MRPAppp => MRPAxxxx (this only gives the first 16 alarm bits) MRPA32ppp => RPA32xxxxxxxx (this gives all 32 alarm bits) Where: ppp = The specified zero-based preset or load arm number (000-011). yyyy= preset alarms in hexadecimal as: union { unsigned int value; struct { unsigned char preset_fcm_com:1; // one or more FCMs that are required for PRESET status or signals are in com error. unsigned char preset_permissive:1; // preset permissive not active but preset is authorized to load. unsigned char swing_arm_permissive:1; // swing arm not in bay and preset is authorized to load. unsigned char line_not_flushed:1; // less than min_line_flush_vol has flowed since a non-flush component has flowed and batch was ended. unsigned char preset_block_valve:1; // block value status does not agree with commanded valve position. unsigned char bay_alarm:1; // a bay level alarm currently exists. unsigned char component_alarm:1; // a component level alarm currently exists for this preset. unsigned char additive_alarm:1; // a additive level alarm currently exists for this preset. unsigned char meter_stop:1; // meter stop button for preset pressed unsigned char preset_overrun:1; // preset delivered volume is over target volume by overrun_alarm_vol. unsigned char excess_flow:1; // preset flow rate has exceeded excess_flow_alarm_rate. unsigned char bsw_error:1; // Bottom Sediment Water Error unsigned char tank_alarm:1; // a tank level alarm currently exists for this preset. unsigned char divert_alarm:1; // current BSW is not below the Divert BSW value for this preset 69 Chapter 6 – Meter Commands 70 unsigned char sampler_alarm:1; unsigned char configuration_error:1; // a sampler level alarm currently exists for this preset // preset configuration has invalid data, check message log for details } flags; } preset_alarms; Modbus: Write Only Register=7082+ppp, Len=1, 16-Bit Integer (yyyy) 6.15 REQUEST BAY ALARMS: MRBA => RBAxxxx (this only gives the first 16 alarm bits) MRBA32 => RBA32xxxxxxxx (this gives all 32 alarm bits) Where: xxxx = bay alarms in hexadecimal as: union { struct { unsigned char bay_fcm_com:1; // one or more FCMs that are required for BAY status or signals are in com error. Unsigned char bay_permissive0:1; // user definable preset permissive 0 not active but bay is authorized to load. Error message can be renamed to indicate permissive. Unsigned char bay_permissive1:1; // user definable preset permissive 1 not active but bay is authorized to load. Error message can be renamed to indicate permissive. Unsigned char bay_permissive2:1; // user definable preset permissive 2 not active but bay is authorized to load. Error message can be renamed to indicate permissive. Unsigned char bay_permissive3:1; // user definable preset permissive 3 not active but bay is authorized to load. Error message can be renamed to indicate permissive. Unsigned char bay_permissive4:1; // user definable preset permissive 4 not active but bay is authorized to load. Error message can be renamed to indicate permissive. Unsigned char bay_permissive5:1; // user definable preset permissive 5 not active but bay is authorized to load. Error message can be renamed to indicate permissive. Unsigned char bay_permissive6:1; // user definable preset permissive 6 not active but bay is authorized to load. Error message can be renamed to indicate permissive. Unsigned char bay_permissive7:1; // user definable preset permissive 7 not active but bay is authorized to load. Error message can be renamed to indicate permissive. Unsigned char all_stop:1; // all stop button pressed unsigned char bay_pcm_com:1; // one or more FCMs that are required for BAY status or signals are in comm error. Unsigned char printer_error:1; // one or more printers are in error. Unsigned char unused12:1; Chapter 6 – Meter Commands 71 unsigned char unused13:1; unsigned char deadman:1; unsigned char unused15:1 unsigned char power_fail:1 unsigned char unused17-31:1; } flags; unsigned int value; } bay_alarms; //deadman alarm active // if a hardware reboot flags get set Modbus: Read Only Register=7094, Len=1, 16-Bit Integer (xxxx) 6.16 REQUEST COMPONENT ALARMS: MRCAppp => RCApppxxxx… (this only gives the first 16 alarm bits) MRCA32 => RCA32xxxxxxxx… (this gives all 32 alarm bits) Where: ppp = The specified zero-based preset or load arm number (000-011). Per component(8): xxxx = component alarms in hexadecimal as: union { unsigned int value; struct { unsigned char component_fcm_com:1; // one or more FCMs that are required for COMPONENT status or signals are in comm error. Unsigned char component_permissive:1; // component permissive not active but component is authorized to load. Unsigned char component_block_valve:1; // block value status does not agree with commanded valve position. Unsigned char component_unauth_flow:1; // greater than unauth_flow_alarm_vol has been metered when component was not authorized for flow. Unsigned char component_pump_status:1; // pump status does not agree with commanded pump state. Unsigned char meter_alarm:1; // a meter level alarm currently exists for this component. Unsigned char component_over_blend_tol:1; // blend precent has been over by blend_chk_alarm_pct for blend_chk_alarm_time seconds. Unsigned char component_under_blend_tol:1; // blend precent has been under by blend_chk_alarm_pct for blend_chk_alarm_time seconds. Chapter 6 – Meter Commands 72 Unsigned char component_api_table:1; unsigned char component_back_pressure:1; // API VCF table error // if current flowrate falls below fallback minimum rate during pressure control unsigned char unused10:1; unsigned char unused11:1; unsigned char unused12:1; unsigned char unused13:1; unsigned char unused14:1; unsigned char unused15:1; unsigned char unused16-31:1; } flags; } component_alarm; Modbus: Where: p = preset (0-11), c = component (0-7) Read Only Register=7095+8*p+c, Len=1, 16-Bit Integer (xxxx) Note: Last Component Alarm Register Used=7190 6.17 REQUEST METER ALARMS: MRMAppp => RMApppxxxx… (this only gives the first 16 alarm bits) MRMA32 => RMA32xxxxxxxx… (this gives all 32 alarm bits) Where: ppp = The specified zero-based preset or load arm number (000-011). Per meter(5): xxxx = meter alarms in hexadecimal as: union { unsigned int value; struct { unsigned char meter_fcm_com:1; // one or more FCMs that are required for METER status or signals are in comm error. Unsigned char meter_permissive:1; // meter permissive not active but meter is authorized to load. Unsigned char fcm_invalid_config:1; // FCM reporting an error with loaded configuration. (Meter factors likely source of this type of error.) unsigned char fcm_wdt_reset:1; // FCM stopped flow due to lack of communication from RCU. Unsigned char fcm_com_timeout:1; // FCM com timed out due to a lack of communication from RCU. Unsigned char valve_fault:1; // greater than value_fault_alarm_vol has been metered since flow was stopped. Chapter 6 – Meter Commands 73 Unsigned char low_flow:1; // flow rate was below low_flow_alarm_rate for low_flow_alarm_time seconds while attempting to flow. Unsigned char excess_flow:1; // flow rate was above excess_flow_alarm_rate. Unsigned char quad_encoding:1; // max_quad_errors were received. Unsigned char density_error:1; // density signal not valid or density < alarm_low_density or density > alarm_high_density. Unsigned char temp_error:1; // temp signal not valid or temp < alarm_low_temp or temp > alarm_high_temp. unsigned char valve_control:1; // not able to slow for stop flow rate for valve_control_alarm_time. Unsigned char meter_creep:1; // greater than meter_creep_alarm_vol has been metered since flow was stopped. Unsigned char pressure_error:1; // pressure signal not valid or pressure < alarm_low_pressure or pressure > alarm_high_pressure. Unsigned char quad_encoding_a:1; // max_quad_errors were received on channel A. unsigned char quad_encoding_b:1; // max_quad_errors were received on channel B. unsigned char meter_com:1; // assigned serial (mass) meter is in comm error. Unsigned char unused_17:1; unsigned char api_gravity_error:1; // API Gravity Error unsigned char unused19-31:1; } flags; } meter_alarms; Modbus: Where: p = preset (0-11), m = meter (0-4) Read Only Register=7191+5*p+m, Len=1, 16-Bit Integer (xxxx) Note: Last Meter Alarm Register Used=7250 6.18 REQUEST ADDITIVE ALARMS: MRAAppp => RAApppxxxx… (this only gives the first 16 alarm bits) MRAA32 => RAA32xxxxxxxx… (this gives all 32 alarm bits) Where: ppp = The specified zero-based preset or load arm number (000-011). Per additive(16): xxxx = additive alarms in hexadecimal as: union { unsigned int value; struct { Chapter 6 – Meter Commands 74 unsigned char additive_fcm_com:1; // one or more FCMs that are required for ADDITIVE status or signals are in comm error. Unsigned char additive_permissive:1; // additive permissive not active but additive is authorized to load. Unsigned char additive_under_add:1; // recipe additive needed is under actual additive delivered by under_adtv_alarm_injects. Unsigned char additive_over_add:1; // recipe additive needed is over actual additive delivered by over_adtv_alarm_injects. Unsigned char additive_valve_fault:1; // greater than value_fault_alarm_vol has been metered since flow was stopped. Unsigned char additive_pump_status:1; // pump status does not agree with commanded pump state. Unsigned char additive_injection:1; // piston switch or pulser did not indicate an injection took place. Unsigned char additive_unauth_flow:1; // greater than unauth_flow_alarm_vol has been metered when additive was not authorized for flow. Unsigned char additive_line_not_flushed:1; // min_line_flush_volume of product has not flushed since last inject was completed and batch was ended. Unsigned char additive_meter_creep:1; // greater than meter_creep_alarm_vol has been metered since flow was stopped. Unsigned char additive_block_valve:1; // block valve status does not agree with commanded valve position. Unsigned char unused11:1; unsigned char unused12:1; unsigned char unused13:1; unsigned char unused14:1; unsigned char unused15:1; unsigned char unused16-31:1; } flags; } additive_alarms; Modbus: Where: p = preset (0-11), a = additive (0-15) Read Only Register=7251+16*p+a, Len=1, 16-Bit Integer (xxxx) Note: Last Additive Alarm Register Used=7442 6.19 REQUEST SAMPLER ALARMS: MRSAppp => RSApppxxxx… (this only gives the first 16 alarm bits) MRSA32 => RSA32xxxxxxxx… (this gives all 32 alarm bits) Where: ppp = The specified zero-based preset or load arm number (000-011). Per sampler(4): xxxx = sampler alarms in hexadecimal as: Chapter 6 – Meter Commands union { unsigned int value; struct { unsigned char sampler_fcm_com:1; // one or more FCMs that are required for Sampler status or signals are in comm error. unsigned char sampler_permissive:1; // sampler permissive not active but sampler is authorized to load. unsigned char sampler_hi_limit:1; // created for sampler high level incoming signal when no further product can be sampled. unsigned char unused2-31:1; } flags; } sampler_alarms; Modbus: Not supported. 6.20 REQUEST TANK ALARMS: MRTAttt => RTAtttxxxx… (this only gives the first 16 alarm bits) MRTA32 => RTA32xxxxxxxx… (this gives all 32 alarm bits) Where: ttt = The specified zero-based tank number (000-009). Per tank(10): xxxx = tank alarms in hexadecimal as: union { unsigned int value; struct { unsigned char tank_fcm_com:1; // one or more FCMs that are required for TANK status or signals are in comm error. unsigned char high_high_level:1; // Tank High High Level Alarm unsigned char high_level:1; // Tank High Level Alarm unsigned char low_level:1; // Tank Low Level Alarm unsigned char low_low_level:1; // Tank Low Low Level Alarm unsigned char tank_valve:1; // Tank value status does not agree with commanded valve position. unsigned char unused07:1; unsigned char unused08:1; unsigned char unused09:1; unsigned char unused10:1; unsigned char unused11:1; unsigned char unused12:1; unsigned char unused13:1; unsigned char unused14:1; 75 Chapter 6 – Meter Commands 76 unsigned char unused15:1; unsigned char unused16:1; unsigned char unused17:1; unsigned char unused18:1; unsigned char unused19:1; unsigned char unused20:1; unsigned char unused21:1; unsigned char unused22:1; unsigned char unused23:1; unsigned char unused24:1; unsigned char unused25:1; unsigned char unused26:1; unsigned char unused27:1; unsigned char unused28:1; unsigned char unused29:1; unsigned char unused30:1; unsigned char unused31:1; } flags; } tank_alarms; Modbus: Not supported. 6.21 REMOTE TRANSACTION DATA: MRTDpppaaa This command is used to get the batch data out of the Multiload2. Where: /* request transaction details for preset RTDpppaa /* where RTD = Request Transaction Detail /* ppp = preset number /* aaa = detail index /* /* if aaa = 000 reply RTDpppaaannn /* where RTD = Request Transaction Detail /* ppp = preset number /* aaa = detail index request (=000) /* nnn = number of details /* /* if aaa > 000 reply RTDpppaaa... /* where RTD = Request Transaction Detail /* ppp = preset number /* aaa = detail index request (>000) /* ... = detail values (same as R800) /* Modbus: */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ Chapter 6 – Meter Commands Read Only Register=N/A 6.22 START PRESET FLOW: MMSppp Where: ppp = The specified zero-based preset or load arm number (000-011). Starts flow for the particular preset. A message is placed into the Message Log when this command is executed. Modbus: Write Only Register=7443+ppp, Len=1, 16-Bit Integer (any value) 6.23 STOP PRESET FLOW: MSMpppssssssssssddddddddddddddddddddddddddddddddddddddd Where: ppp = The specified zero-based preset or load arm number (000-011). Ssssssssss = 10 Character Optional Message. Ddddddddddddddddddddddddddddddddddddddd = 39 Character Optional Detail Message. Stops flow and displays a message for the particular preset. A detail message will be displayed when the preset is selected. Driver and acknowledge and clear the message by pressing CLR key. Modbus: Write Only Register=7455+ppp, Len=1, 16-Bit Integer (any value) Stop Preset Message only supported through Modbus Extended Services Register. 77 Chapter 7 – Register Operations CHAPTER 7 78 REGISTER OPERATIONS: Read Register Command R<register/sub-registers> R004 R104021000001 R999 => => => => => Response <status><register/sub-registers><register value(s)> 0?00004000000001 0?0104021000001000000020 1?0999 (invalid register!) Update Register Command U<register/sub-registers><register value(s)> => U004000000001 U104021000001000000020 U999000000001 => Response <status><register/sub-registers> => 0?0004 => 0?0104021000001 => 1?0999 (invalid register or value!) MultiLoad contains literally hundreds of registers that configure everything from message toggling delay to meter factors. All of these registers are accessed using the same two commands. To read the value of a register the command is ‘R’ followed by the register and sub register numbers. The response will be the register and sub register numbers, followed by the register value. The value may be up to 9 decimal digits. To update the value of a register the command is ‘U’ followed by the register and sub register numbers and the value to be stored. While almost all registers can be read or updated, a few have only read access. Many others have protection that prevents updates while a transaction is in process, host system is up, or when Weights & Measures security is in effect. Chapter 7 – Register Operations 7.1 7.1.1 79 GENERIC REGISTERS REGISTER DATA TYPES All registers are read and updated as positive integers even when values expressed are non-positive or fractional. In some cases a several values are concatenated bit-wise to form the register value. “unsigned int” – Unsigned integer value. Numeric Value Register Value 12345 12345 “unsigned div10” – Unsigned numeric value with 1 decimal place. Numeric Value Register Value 1234.5 12345 “unsigned div100” – Unsigned numeric value with 2 decimal places. Numeric Value Register Value 123.45 12345 “unsigned div1000” – Unsigned numeric value with 3 decimal places. Numeric Value Register Value 12.345 12345 “unsigned div10000” – Unsigned numeric value with 4 decimal places. Numeric Value Register Value 1.2345 12345 “percent” – Unsigned percent value with 2 decimal places. Numeric Value Register Value 123.45% 12345 “percent div 10000” – Unsigned percent value with 4 decimal places. Numeric Value Register Value 1.2345% 12345 “signed int” – Signed integer value. Numeric Value +12345 +0 +1 +32767 -32768 -1 Register Value 12345 0 1 32767 32768 65535 “signed div10” – Signed numeric value with 1 decimal place. Numeric Value Register Value Chapter 7 – Register Operations +1234.5 +0.0 +0.1 +3276.7 -3276.8 -0.1 80 12345 0 1 32767 32768 65535 “signed div100” – Signed numeric value with 2 decimal places. Numeric Value Register Value +123.45 12345 +0.00 0 +0.01 1 +327.67 32767 -327.68 32768 -0.01 65535 “signed div1000” – Signed numeric value with 3 decimal places. Numeric Value Register Value +12.345 12345 +0.000 0 +0.001 1 +32.767 32767 -32.768 32768 -0.001 65535 “signed div10000” – Signed numeric value with 4 decimal places. Numeric Value Register Value +1.2345 12345 +0.0000 0 +0.0001 1 +3.2767 32767 -3.2768 32768 -0.0001 65535 “char” – Characters Value Hello World Register Value Hello World “disable enable” – Enumerated disable and enable values. Enum{ // Enumerated Value Register Value DISABLED = 0, ENABLED =1 }; “measure” – Enumerated measure values. Enum{ // Enumerated Value Register Value Chapter 7 – Register Operations GALLONS LITRES CUBIC_METERS TONNES KILOGRAMS GRAMS POUNDS BARRELS NO_MEASURE LITERS DECALITERS 81 = 0, = 1, = 2, = 3, = 4, = 5, = 6, = 7, = 8, = 9, = 10, }; “api table name” – Enumerated api table name values. Enum{ // Enumerated Value Register Value NONE = 0, TABLE_6A = 1', TABLE_6B = '2', TABLE_6C = 'F', TABLE_6D = 'U', TABLE_7 = 'M', TABLE_8 = 'H', TABLE_23E = 'a', TABLE_24A = '3', TABLE_24B = '4', TABLE_24E = 'S', TABLE_26 = 'B', TABLE_34 = '7', TABLE_53A = 'Q' TABLE_53B = 'R' TABLE_53D = 'Y' TABLE_54 = 'A', TABLE_54A = '5', TABLE_54B = '6', TABLE_54BE = 'P', TABLE_54C = '8', TABLE_54D = 'X', TABLE_59E = 'b', TABLE_60A = 'C', TABLE_60B = 'D', TABLE_60D = 'E', TABLE_60o = 'c', TABLE_901A = 'd', TABLE_TEC = '9', TABLE_TEC_ETH_US =’G’, TABLE_TEC_ETH_B100 = ‘200’, Chapter 7 – Register Operations TABLE_TEC_ETH_B40 TABLE_TEC_ETH_E40 TABLE_TEC_ETH_E100 TABLE_BIO_PTB TABLE_ETH_BRAZIL TABLE_HYDRO_BRAZIL TABLE_2004_6A = 1000, TABLE_2004_6B = 1001, TABLE_2004_6C = 1002, TABLE_2004_6D = 1003, TABLE_2004_6X = 1004, TABLE_2004_24A = 1008, TABLE_2004_24B = 1009, TABLE_2004_24C = 1010, TABLE_2004_24D = 1011, TABLE_2004_24X = 1012, TABLE_2004_5A = 1013, TABLE_2004_5B = 1014, TABLE_2004_5D = 1015, TABLE_2004_5X = 1016, TABLE_2004_23A = 1017, TABLE_2004_23B = 1018, TABLE_2004_23D = 1019, TABLE_2004_23X = 1020, TABLE_2004_54A = 1021, TABLE_2004_54B = 1022, TABLE_2004_54C = 1023, TABLE_2004_54D = 1024, TABLE_2004_60A = 1025, TABLE_2004_60B = 1026, TABLE_2004_60C = 1027, TABLE_2004_60D = 1028, TABLE_2004_60X = 1029, TABLE_2004_53A = 1030, TABLE_2004_53B = 1031, TABLE_2004_53D = 1032, TABLE_2004_59A = 1033, TABLE_2004_59B = 1034, TABLE_2004_59D = 1035, TABLE_2004_59X = 1036, TABLE_2004_1121 = 1040, TABLE_2004_1121M = 1041, TABLE_ETH_OIML_6 = 1056, TABLE_ETH_OIML_7 = 1057, TABLE_2007_23E = 1060, TABLE_2007_24E = 1061, 82 = ’201’, = ’202’, = ‘203’, = ’204’, =’205’, =’206’, Chapter 7 – Register Operations TABLE_2007_53E = 1062, TABLE_2007_54E = 1063, TABLE_2007_59E = 1064, TABLE_2007_60E = 1065, TABLE_ASTM_D1555 = 1080 }; Note: Register value is still an integer value not an ascii char. For example, to specify TABLE_54, the ascii value of ‘A’ or 65 would be the register value, not the character’A’. “fcm address” – FCM addressing parameters. (input or output type uses same function) This type is a bit-wise concatenation of four different FCM addressing parameters that is expressed as a single register value. struct fcm_address_type { unsigned int port_number:3; // FCM port range 0-7 unsigned int fcm_number:5; // FCM number range 0-31 unsigned int invert:1; // Normal signal = 0, Invert signal = 1 // For pulse outputs, single pulse = 0, dual pulse = 1 unsigned int enabled:1; // Disabled = 0, Enabled = 1 unsigned int ext_port:3; // ext_port(3) << 3 + port_number(3) => Port range 0-39 unsigned int custom_logic :1 ; // enable value to link to custom logic array unsigned int unused:2; }; Note: Register value is still an integer value not a binary structure. For example, to specify port_number 4, fcm_number 1, normal signal, enabled, (0000,0,1,0,00001,100) the numeric value of the bit-wise concatenation of these four different FCM addressing parameters would be 0x020C = 524. For example, to specify port_number 11, fcm_number 3, normal signal, enabled, (0000,1,1,0,00011,011) the numeric value of the bit-wise concatenation of these four different FCM addressing parameters would be 0x061B = 1563. “fcm address_analog_input” – Analog Input FCM addressing parameters. This type is a bit-wise concatenation of four different FCM addressing parameters that is expressed as a single register value. struct fcm_address_analog_input_type { unsigned int fcm_number:5; // FCM number range 0-31 or Custom Logic Index bits unsigned int analog_in_port_number:6; // FCM port range 0-4 or Custom Logic Index bits unsigned int analog_input_type:4; // 4-20mA signal = 0, 1-5V signal = 1 unsigned int enabled:1; // Disabled = 0, Enabled = 1 unsigned int custom_logic :1 ; // enable value to link to custom logic array unsigned int unused:15; }; Note: Register value is still an integer value not a binary structure. If the custom_logic bit is enabled, then the first 11 bits used for the FCM number and port number will used for the Custom Logic index number. 83 Chapter 7 – Register Operations Example #1: to specify analog input port number A04, fcm_number 1, 4-20mA signal, enabled, (0,1,0000,000100,00001) the numeric value of the bit-wise concatenation of these four different FCM addressing parameters would be 0x8081 = 32897. “language” – Enumerated language values. enum{ // Enumerated Value Register Value LANGUAGE_ENGLISH = 0, LANGUAGE_SPANISH = 1, LANGUAGE_PORTUGUESE = 2, LANGUAGE_FRENCH = 3, LANGUAGE_GERMAN = 4, LANGUAGE_SIMPLIFIED_CHINESE = 5, LANGUAGE_TRADITIONAL_CHINESE =6, LANGUAGE_THAI =7 }; “alarm count reset mode” – Enumerated alarm count reset mode values. enum{ // Enumerated Value Register Value AUTH_TRANS = 0, CLEAR_PROMOTED = 1, TIME_2_MIN = 2, TIME_5_MIN = 3, TIME_15_MIN = 4, TIME_30_MIN = 5, TIME_60_MIN = 6, TIME_3_HOURS = 7, TIME_6_HOURS = 8, TIME_12_HOURS = 9, TIME_24_HOURS = 10, }; 84 Chapter 7 – Register Operations “meter type” – Enumerated meter type values. enum{ // Enumerated Value METER_TYPE_VOLUME_PULSE_INPUT METER_TYPE_MASS_PULSE_INPUT METER_TYPE_VOLUME_ANALOG_INPUT METER_TYPE_KROHNE_INPUT METER_TYPE_MICROMOTION_INPUT }; 85 Register Value = 0, = 1, = 2, = 3, =4 “totalizer” – Totalizer selection parameter. This type is a bit-wise concatenation of five totalizer selection parameters that is expressed as a single register value. struct totalizer_selection_type { unsigned int preset_selected:1; unsigned int meter_selected:1; unsigned int component_selected:1; unsigned int additive_selected:1; unsigned int sampler_selected:4; unsigned int unused1:8; unsigned int unused2:8; unsigned int unused3:8; }; Note: Register value is still an integer value not a binary structure. For example, to specify preset_selected and component_selected, (00101) the numeric value of the bit-wise concatenation of these five different totalizer selection parameters would be 0x0005 = 5. “scs prompt” – SCS prompt selection parameter. This type is a bit-wise concatenation of four prompt selection parameters that is expressed as a single register value. struct totalizer_selection_type { unsigned int bsw_selected:1; unsigned int density_selected:1; unsigned int gross_selected:1; unsigned int temp_selected:1; unsigned int unused:28; }; Note: Register value is still an integer value not a binary structure. For example, to specify bsw_selected and gross_selected, (0101) the numeric value of the bit-wise concatenation of these four different prompt selection parameters would be 0x0005 = 5. “card-reader” Card-Reader selection parameter enum{ // Enumerated Value Register Value DISABLED = 0, // NO CARD-READER BUCKET_CAPTIVE = 1, // CAPTIVE CARD-READER Chapter 7 – Register Operations BUCKET_NONCAPTIVE SLOT_CAPTIVE SLOT_NONCAPTIVE IBUTTON BUCKET_DUAL_NONCAP SLOT_DUAL_NONCAP 86 = 2, // NONCAPTIVE CARD-READER = 3 // CAPTIVE CARD-READER = 4 // NONCAPTIVE CARD-READER = 5 // iBUTTON = 6 // NONCAPTIVE CARD-READER = 7 // NONCAPTIVE CARD-READER }; “processing mode” Select Processing mode parameter enum{ // Enumerated Value Register Value STAND_ALONE = 0, REMOTE = 1, UAP =2 }; “54YG products” Select 54YG Product parameter enum{ // Enumerated Value Register Value NO_PRODUCT = 0, PROPAN = 1, PROPYLEN = 2, BUTAN = 3, ISOBUTAN = 4, ISOBUTEN = 5, CISBUT2EN = 6, TRANSBUT2EN = 7, BUT1EN = 8, BUTA13DIEN = 9, METHANOL = 10, ETHANOL = 11, ISOPROPANOL = 12, ISOBUTANOL = 13, MTBE = 14, TAME = 15, BENZOL = 16, TOLUOL = 17, OXYLOL = 18, MXYLOL = 19, PXYLOL = 20 }; “density type” Select density type parameter enum{ // Enumerated Value Register Value KG = 1, // kg/m3 API = 2, // API Gravity REL = 3 // Relative Density }; Chapter 7 – Register Operations “pressure type” Select pressure type parameter enum{ // Enumerated Value Register Value PSIG = 1, // PSIG KPA = 2, // KPA BAR = 3 // BAR }; “additive type” Select additive type parameter enum{ // Enumerated Value Register Value SOLENOID_WITH_METER = 1, PISTON_WITH_NORM_FEEDBACK = 2, PISTON_WITH_INV_FEEDBACK = 3, PISTON_WITH_NO_FEEDBACK = 4, ANALOG_VALVE_WITH_METER =5 }; “deadman type” Select deadman type parameter Enum{// Enumerated Value Register Value CONTHLD =1 // Continuous push HLD&REL =2 // Continuous push with schedule PUSF =3 // Scheduled periodic push }; “blend on lead type” Select blend on lead type parameter Enum{// Enumerated Value Register Value FIRCOMP =1 // Lead on first component HIGPERC =2 // Highest Percentage is lead component LOWPERC =3 // Lowest Percentage is lead component }; “api bio product type” Select Api bio product type parameter Enum{// Enumerated Value Register Value NO_PRODUCT =0 E5 =1 E10 =2 E80 =3 E85 =4 E100 =5 BENZIN_PETROL =6 DIESEL =7 B5_RME =8 B7_RME =9 B100_RME =10 B5_SME =11 B7_SME =12 B100_SME =13 87 Chapter 7 – Register Operations 88 “Alarm to Host Mode” Select if the alarm needs to be send to the host Enum{// Enumerated Value Register Value DISABLED = 0, ENABLED =1 } “Mass Measures” Select the UOM of Mass Enum{// Enumerated Value NO_MASS_MEASURES MASS_POUNDS MASS_SHORT_TONS MASS_LONG_TONS MASS_GRAMS MASS_KILOGRAMS MASS_KILOGRAMS_AIR MASS_METRIC_TONS } Register Value = 0, = 1, = 2, = 3, = 4, = 5, = 6, = 7, “Delivery Type” Select the UOM in which the product needs to be delivered Enum{// Enumerated Value Register Value DELIVERY_TYPE_GROSS = 0, DELIVERY_TYPE_NET = 1, DELIVERY_TYPE_MASS =2 } “Blend Type” Select which type of blending is used. Enum{// Enumerated Value BLEND_TYPE_NONE BLEND_TYPE_RATIO BLEND_TYPE_SEQUENTAIL BLEND_TYPE_RATIO_AND_SEQUENTAIL BLEND_TYPE_WATERCUT } Register Value = 0, =1, = 2, = 3, = 4, “Temperature_UOM Type” Select which type of temperature UOM is used. Enum{// Enumerated Value Register Value TEMPERATURE_UOM_TYPE_CELSIUS = 0, TEMPERATURE_UOM_TYPE_FAHRENHEIT = 1 } “Additive Mode” Select which mode of additive is used. Enum{// Enumerated Value Register Value ADDITIVE_MODE_START_ON_BATCH = 0, ADDITIVE_MODE_START_ON_HIGH_FLOW = 1, ADDITIVE_MODE_START_ON_VOLUME =2 } Chapter 7 – Register Operations “Decimal Mark” Select which decimal is used in each screen Enum{// Enumerated Value DECIMAL_MARK_TYPE_DECIMAL = 0, DECIMAL_MARK_TYPE_COMMA =1 } 89 Register Value “Flow Rate Mode” Select which rate is used in each screen Enum{// Enumerated Value Register Value FLOW_RATE_MODE_MINUTES = 0, FLOW_RATE_MODE_HOURS =1 } “Api Astm D1555” Select which product to use for the D1555 table Enum{// Enumerated Value Register Value API_ASTM_D1555_PRODUCT_TYPE_NO_PRODUCT =0, API_ASTM_D1555_PRODUCT_TYPE_BENZENE =1, API_ASTM_D1555_PRODUCT_TYPE_CUMENE =2, API_ASTM_D1555_PRODUCT_TYPE_CYCLHEX =3, API_ASTM_D1555_PRODUCT_TYPE_ETHYLBE =4, API_ASTM_D1555_PRODUCT_TYPE_STYRENE =5, API_ASTM_D1555_PRODUCT_TYPE_TOLUENE =6, API_ASTM_D1555_PRODUCT_TYPE_MXYLENE =7, API_ASTM_D1555_PRODUCT_TYPE_OXYLENE =8, API_ASTM_D1555_PRODUCT_TYPE_PXYLENE =9, API_ASTM_D1555_PRODUCT_TYPE_300_350 =10, API_ASTM_D1555_PRODUCT_TYPE_350_400 =11 } “Baud Rate” Select which baud rate to use for serial communications Enum{// Enumerated Value Register Value BAUD_RATE_300 0 BAUD_RATE_1200 1 BAUD_RATE_2400 2 BAUD_RATE_4800 3 BAUD_RATE_9600 4 BAUD_RATE_19200 5 BAUD_RATE_38400 6 BAUD_RATE_57600 7 BAUD_RATE_115000 8 BAUD_RATE_230000 9 } “Data Bits” Select the number of data bits to use for serial communication Enum{// Enumerated Value Register Value DATA_BITS_7 0 DATA_BITS_8 1 } “Parity” Select which parity bit types to use for serial communication Enum{// Enumerated Value Register Value PARITY_NONE 0 Chapter 7 – Register Operations PARITY_ODD PARITY_EVEN 90 1 2 } “Stop Bits” Select the number of stop bits for serial communication Enum{// Enumerated Value Register Value STOP_BITS_1 1 STOP_BITS_2 2 } “Multidrop” Select which Multidrop mode to use Enum{// Enumerated Value MULTIDROP_SINGLE 0 MULTIDROP_MULTI 1 MULTIDROP_2WIRE 2 Register Value } “Communication Type” Select which communication type to use for a serial port Enum{// Enumerated Value Register Value COMMUNICATION_TYPE_NA 0 COMMUNICATION_TYPE_HOST 1 COMMUNICATION_TYPE_FCM 2 COMMUNICATION_TYPE_PRINT 3 COMMUNICATION_TYPE_LOG 4 COMMUNICATION_TYPE_ETHERNET 5 COMMUNICATION_TYPE_ALIBILOG 6 COMMUNICATION_TYPE_PTB_ALIBI 7 } “Tank Mode” Select the mode of operation for the tank Enum{// Enumerated Value TANK_MODE_DEACTIVE TANK_MODE_LOADING TANK_MODE_UNLOADING TANK_MODE_LOAD_UNLOAD Register Value 0 1 2 3 } “Security Complexity Mode” Select the password complexity that is required when creating a password for user accounts Enum{// Enumerated Value Register Value SECURITY_COMPLEXITY_TYPE_NONE 0 SECURITY_COMPLEXITY_TYPE_ALPHA 1 SECURITY_COMPLEXITY_TYPE_NUMERIC 2 SECURITY_COMPLEXITY_TYPE_ALPHA_NUMERIC 3 SECURITY_COMPLEXITY_TYPE_SPECIAL_CHAR 4 SECURITY_COMPLEXITY_TYPE_ALPHA_SPECIAL_CHAR 5 SECURITY_COMPLEXITY_TYPE_NUMERIC_SPECIAL_CHAR 6 Chapter 7 – Register Operations 91 SECURITY_COMPLEXITY_TYPE_ALL 7 } “Display Load Type” Select how the total amount of product being loaded will be displayed on the screen. Enum{// Enumerated Value Register Value DISPLAY_LOAD_TYPE_DISABLED 0 DISPLAY_LOAD_TYPE_GROSS 1 DISPLAY_LOAD_TYPE_NET 2 DISPLAY_LOAD_TYPE_MASS 3 } “SCS Display Type” Select when the SCS Prompts will be displayed, either before or after the load. Enum{// Enumerated Value Register Value SCS_PROMPTS_DISPLAY_TYPE_AFTER 0 SCS_PROMPTS_DISPLAY_TYPE_BEFORE 1 } 7.1.2 Prefix 000 – RCU LEVEL CONFIGURATION REGISTERS Register Description R/U 004 Reload ROM Lang File R/U 008 R/U Data Type Min Max Default Value Value Value Modbus Protection Register Len=2 disable/enable Enabled General 1008 Driver Language language English General 1016 009 Program Mode Language language English General 1018 R/U 010 Card Reader Type card-reader 1 General 1020 R/U 011 Prox Card Pull Secs unsigned int 3 General 1022 R/U 012 Processing Mode Enabled General 1024 R/U 013 Message Swap Delay unsigned int 1 60 3 General 1026 R/U 014 Message Hold Delay unsigned int 1 60 10 General 1028 R/U 015 Max GPS Site Distance (MultiLoad Mobile Only) unsigned int 0 10000 200 General R/U 016 Auto Authorize disable/enable Disabled General 1032 R/U 017 MM/DD/YY Date disable/enable Enabled W&M 1034 R/U 018 Mass Measure Used mass measure None W&M 1036 R/U 019 Load Date From End disable/enable Enabled General 1038 R/U 020 Measure Used measures Gallons W&M 1040 R/U 021 Print Blend Details unsigned int 1 General 1042 R/U 022 Compartment Entry disable/enable Disabled General 1044 R/U 023 Config Timeout Mins unsigned int 20 General 1046 R/U 024 Print Totalizers totalizers None General 1048 R/U 025 Simulation Mode disable/enable Disabled W&M 1050 R/U 026 Large Prompts disable/enable Disabled General 1052 R/U 027 Confirm Flow Starts disable/enable Disabled General 1054 R/U 028 Display Adtv as CCs disable/enable Disabled General 1056 2 30 remote processing 1030 0 0 2 99 Chapter 7 – Register Operations Prefix Register Description 92 Data Type Min Max Default Value Value Value Modbus Protection Register Len=2 R/U 029 Display Hundredths disable/enable Disabled General 1058 R/U 030 Use Hundredths disable/enable Disabled W&M 1060 R/U 031 W&M Density Lock disable/enable Disabled W&M 1062 R/U 032 Print Ticket disable/enable Disabled General 1064 R/U 033 Form Feed After Ticket disable/enable Enabled General 1066 R/U 034 Print Ticket on PCM disable/enable Disabled General 1068 R/U 035 Ticket PCM unsigned int 0 32 0 General 1070 R/U 036 Meter Arch Timeout unsigned int 0 120 120 General 1072 R/U 037 Inactivity Timeout unsigned int 0 60 35 General 1074 R/U 038 Print Msg Log on PCM Disabled General 1076 R/U 039 Message Log PCM# unsigned int 0 General 1078 R/U 040 No Prox Pull If Flow disable/enable Disabled General 1080 R/U 041 Host Down Timeout unsigned int 30 999 120 General 1082 R/U 042 Host Wait Timeout unsigned int 60 999 999 General 1084 R/U 043 Prt Alibi Log on PCM Disabled General 1086 R/U 044 Alibi Log PCM# 0 General 1088 R/U 045 Swing Arm Secondary disable/enable Disabled General 1090 R/U 046 Screen Saver Timeout unsigned int 0 65535 600 General 1092 R/U 047 Screen Saver Bright percent 0 10000 5000 General 1094 R/U 048 Min Time Change Secs unsigned int 0 65535 60 W&M 1096 R/U 049 Display Load Volume disable/enable Disabled General 1098 R/U 050 Display Help disable/enable Disabled General 1100 R/U 051 Measure On Load Scrn disable/enable Disabled W&M 1102 R/U 052 Status Scrn Lockout disable/enable Enabled General 1104 R/U 053 Load Screen Timeout unsigned int 0 65535 60 General 1106 R/U 054 Preset Slct Timeout unsigned int 0 65535 0 General 1108 R/U 055 Pixel Test disable/enable Disabled General 1110 R/U 056 Meter Proving Mode disable/enable Disabled General 1112 R/U 057 Decimal Mark Type Decimal Mark Decimal General 1114 R/U 058 Display Preset Totalizer disable/enable Disabled General 1116 R/U 059 Default Driver Number unsigned int 1 9999999 1 General 1118 R/U 060 Default Facility Code unsigned int 0 9999999 0 General 1120 R/U 061 SCS Prompting (SCS Only) scs prompt None All None General 1122 R/U 062 Sample UOM Sample UOM units None oz None General 1124 R/U 063 Unused General 1126 R/U 064 SCS Prompting Display (SCS Only) SCS Display After Before After General 1128 R/U 065 Max Lines on Ticket unsigned int 0 106 66 General 1130 disable/enable 0 32 disable/enable unsigned int 0 3 Chapter 7 – Register Operations Prefix Register Description R/U 066 Startup Keypad Locked R/U 067 Screen Brightness R/U 068 W&M Key FCM# R/U 069 R/U 090 93 Data Type Min Max Default Value Value Value disable/enable Modbus Protection Register Len=2 Disabled General 1132 10000 General 1134 fcm address Disabled W&M 1136 Program Key FCM# fcm address Disabled W&M 1138 RCU Address unsigned int 1 General 1180 Percent 500 0 10000 999 Chapter 7 – Register Operations 7.1.3 94 100 – BAY LEVEL CONFIGURATION REGISTERS Modbus Min Max Default Register Data Type Value Value Value Protection Len=2 Access Register Description R/U 100000 Number Bay Presets unsigned int 1 12 1 General 1200 R/U 100001 Number of FCMs unsigned int 0 32 1 General 1202 R/U 100002 Number of PCMs unsigned int 0 32 1 General 1204 R/U 100003 Temperature UOM Temperature UOM C W&M 1206 R/U 100004 Canada API Limits disable/enable Disabled W&M 1208 R/U 100005 Number of Tanks unsigned int 0 10 0 General 1210 R/U 100006 Bay Number unsigned int 0 9999 0 General 1212 R/U 100007 Number External Presets unsigned int 0 12 0 General 1214 R/U 100008 Unused General 1216 R/U 100009 Unused General 1218 R/U 100078 Output Pulse Type R/U 100079 R/U Delivery Type Gross W&M 1356 Start Transaction fcm address Disabled General 1358 100080 End Transaction fcm address Disabled General 1360 R/U 100081 Output Pulse FCM# fcm address Disabled General 1362 R/U 100082 Output Pulse Factor unsigned div 1000 0.001 50.000 10.000 W&M 1364 R/U 100083 Deadman Mode Unsigned int 0 3 0 General 1366 R/U 100084 Input Deadman FCM# fcm address Disabled General 1368 R/U 100085 Deadman Stop Timer Unsigned int 180 General 1370 R/U 100086 Output Deadman FCM# fcm address Disabled General 1372 R/U 100087 Deadman Warning Timer Unsigned int 30 General 1374 R/U 100088 Deadman Bypass FCM# fcm address Disabled General 1376 R/U 100089 Alarm Out FCM# fcm address Disabled General 1378 R/U 100090 Authorized FCM# fcm address Disabled General 1380 R/U 100091 Permiss 0 FCM# fcm address Disabled General 1382 R/U 100092 Permiss 1 FCM# fcm address Disabled General 1384 R/U 100093 Permiss 2 FCM# fcm address Disabled General 1386 R/U 100094 Permiss 3 FCM# fcm address Disabled General 1388 R/U 100095 Permiss 4 FCM# fcm address Disabled General 1390 R/U 100096 Permiss 5 FCM# fcm address Disabled General 1392 R/U 100097 Permiss 6 FCM# fcm address Disabled General 1394 R/U 100098 Permiss 7 FCM# fcm address Disabled General 1396 R/U 100099 Permiss Out FCM# fcm address Disabled General 1398 0 0 65535 65535 Chapter 7 – Register Operations 7.1.4 95 101 – PRESET LEVEL CONFIGURATION REGISTERS Note: ppp = The specified zero-based preset or load arm number (000-011). Modbus: The Modbus Preset Index Register sets the ppp index, Read/Write Register=996, Len=1, 16-Bit Integer Modbus Description Min Max Default Register Data Type Value Value Value Protection Len=2 Prefix Register R/U 101000ppp Number of Meters unsigned int 1 6 1 General 1400 R/U 101001ppp Number of Components unsigned int 1 8 1 General 1402 R/U 101002ppp Number of Additives unsigned int 0 16 0 General 1404 R/U 101003ppp Preset Enabled disable/enable Enabled General 1406 R/U 101004ppp Blending Type blend_type Disabled General 1408 R/U 101005ppp W&M Controlled disable/enable Disabled W&M 1410 R/U 101006ppp Proving Flow Rate unsigned int 0 9999 600 General 1412 R/U 101007ppp Excess Flw Alrm Rate unsigned int 0 9999 1100 General 1414 R/U 101008ppp Overrun Alarm Vol unsigned int 0 65535 5 General 1416 R/U 101009ppp Low Flow Start Vol unsigned int 0 65535 50 General 1418 R/U 101010ppp Low Flow Restart Vol unsigned int 0 65535 15 General 1420 R/U 101011ppp Low Flow Rate unsigned int 0 9999 150 General 1422 R/U 101012ppp High Flow Rate unsigned int 0 9999 600 General 1424 R/U 101013ppp Proving Low Flow Vol unsigned int 0 65535 50 General 1426 R/U 101014ppp Line Flush Vol unsigned int 0 65535 0 General 1428 R/U 101015ppp Line Flush Min Vol unsigned int 0 65535 0 General 1430 R/U 101016ppp Line Flush Comp# unsigned int 0 8 0 General 1432 R/U 101017ppp Take L.F. from Match disable/enable Enabled General 1434 R/U 101018ppp Take L.F. from First disable/enable Disabled General 1436 R/U 101019ppp Take L.F. from Last disable/enable Disabled General 1438 R/U 101020ppp Compute Blend Density disable/enable Disabled W&M 1440 R/U 101021ppp Alt. High Flow Rate unsigned int 0 9999 600 General 1442 R/U 101022ppp Stop Start Delay unsigned int 0 65535 0 General 1444 R/U 101023ppp Blnd Chk Start Vol unsigned int 0 65535 60 Conditional 1446 R/U 101024ppp Blnd Chk Restart Vol unsigned int 0 65535 10 Conditional 1448 R/U 101025ppp Blnd Chk Alarm % percent 0.10% 100.00% 5.00% Conditional 1450 R/U 101026ppp Blnd Chk Alarm Vol unsigned int 0 65535 25 Conditional 1452 R/U 101027ppp Blnd Chk Alarm Time unsigned int 0 65535 10 Conditional 1454 R/U 101028ppp Low Flow Start Percentage percent 0 100 0 General 1456 R/U 101029ppp Blnd On Lead Comp Blend_on_lead 0 3 NONE General 1458 R/U 101030ppp Blnd Adj Start Vol unsigned int 0 65535 60 General 1460 R/U 101031ppp Blnd Adj Restart Vol unsigned int 0 65535 10 General 1462 R/U 101032ppp Blnd Adj Dev % percent 0.00% 100.00% 1.00% General 1464 Chapter 7 – Register Operations 96 Modbus Description Min Max Default Register Data Type Value Value Value Protection Len=2 Prefix Register R/U 101033ppp Blnd Adj Dev Vol unsigned int 0 65535 5 General 1466 R/U 101034ppp Blnd Adj Time unsigned int 0 65535 5 General 1468 R/U 101035ppp Proving Low Flow Rate unsigned int 0 9999 600 General 1470 R/U 101036ppp Min Preset Value unsigned long int 0 999999 100 General 1472 R/U 101037ppp Default Preset Value unsigned long int 0 999999 0 General 1474 R/U 101038ppp Max Preset Value unsigned long int 0 999999 10000 General 1476 R/U 101039ppp Auto Batch Authorize disable/enable Disabled General 1478 R/U 101040ppp Deliver Type Delivery Type Gross W&M 1480 R/U 101041ppp Blk Valve Open Delay unsigned int 0 65535 0 General 1482 R/U 101042ppp B.V. Open Alrm Time unsigned int 2 65535 10 General 1484 R/U 101043ppp B.V. Close Alrm Time unsigned int 2 65535 10 General 1486 R/U 101044ppp Non-Proportional Blending disable/enable Disabled General 1488 R/U 101045ppp Open Loading disable/enable Disabled General 1490 R/U 101046ppp Output Pulse FCM# fcm address Disabled General 1492 R/U 101047ppp Output Pulse Factor unsigned div 1000 10.000 W&M 1494 R/U 101048ppp Output Pulse Type Delivery Type Gross W&M 1496 R/U 101049ppp Alt High Flow Start Delay unsigned int 0 999 0 General 1498 R/U 101050ppp Alt High Flow Stop Delay unsigned int 0 999 0 General 1500 R/U 101051ppp Permissive Alarm Time unsigned int 0 999 0 General 1502 R/U 101052ppp Excess Flow Alarm Time unsigned div 1000 0 65535 0 General 1504 R/U 101053ppp Unused General 1506 R/U 101054ppp BSW 1 Sensor FCM# Disabled General 1508 R/U 101055ppp Default BSW R/U 101056ppp R/U 0.001 50.000 fcm address analog input unsigned div 100 0 100.00 0 General 1510 Alarm Low BSW 1 signed div 100 -10.00 110.00 -10.00 General 1512 101057ppp Alarm High BSW 1 signed div 100 -10.00 110.00 110.00 General 1514 R/U 101058ppp BSW Alarm Time unsigned int 0 60 0 General 1516 R/U 101059ppp BSW 1 @ Low Value unsigned div 100 0 100.00 0 General 1518 R/U 101060ppp BSW 1 @ High Value unsigned div 100 0 100.00 100.00 General 1520 R/U 101061ppp BSW 1 Offset signed div 100 -3.00 3.00 0 General 1522 R/U 101062ppp Unused General 1524 R/U 101063ppp BSW 2 Sensor FCM# Disabled General 1526 R/U 101064ppp BSW Alarm Volume R/U 101065ppp R/U fcm address analog input unsigned int 0 9999999 0 General 1528 Alarm Low BSW 2 unsigned div 100 -10.00 110.00 -10.00 General 1530 101066ppp Alarm High BSW 2 unsigned div 100 -10.00 110.00 110.00 General 1532 R/U 101067ppp Unused General 1534 R/U 101068ppp BSW 2 @ Low Value unsigned div 100 0 100.00 0 General 1536 R/U 101069ppp BSW 2 @ High Value unsigned div 100 0 100.00 100.00 General 1538 Chapter 7 – Register Operations 97 Modbus Description Min Max Default Register Data Type Value Value Value Protection Len=2 signed div 10 -3.00 3.00 0 General 1540 Prefix Register R/U 101070ppp BSW 2 Offset R/U 101071ppp Oil Density unsigned div 10 0 99999 0 General 1542 R/U 101072ppp Water Density unsigned div 100 0 99999 0 General 1544 R/U 101073ppp Flow Rate Mode Flow Rate Mode Minute General 1546 R/U 101074ppp Number of Samplers 0 General 1548 R/U 101075ppp Unused - General 1550 R/U 101076ppp Unused General 1552 R/U 101077ppp Unused General 1554 R/U 101078ppp Unused General 1556 R/U 101079ppp Unused General 1558 R/U 101080ppp Diverter Valve FCM# Disabled General 1560 R/U 101081ppp Divert BSW Value signed div 100 -10.00 110.00 110.00 General 1562 R/U 101082ppp Divert Start Time unsigned int 0 60 30 General 1564 R/U 101083ppp Divert Restart Time unsigned int 0 60 15 General 1566 R/U 101084ppp BSW Divert Alarm Time unsigned int 0 60 10 General 1568 R/U 101085ppp BSW Stabilization Time unsigned int 0 60 5 General 1570 R/U 101086ppp Remote Clear FCM# fcm address Disabled General 1572 R/U 101087ppp Alt. H.F. Rate FCM# fcm address Disabled General 1574 R/U 101088ppp Close Blk Val FCM# fcm address Disabled General 1576 R/U 101089ppp Blk Val Status FCM# fcm address Disabled General 1578 R/U 101090ppp Open Blk Val FCM# fcm address Disabled General 1580 R/U 101091ppp Flow Active FCM# fcm address Disabled General 1582 R/U 101092ppp Batch Authorizd FCM# fcm address Disabled General 1584 R/U 101093ppp Remote Start FCM# fcm address Disabled General 1586 R/U 101094ppp Swing Arm FCM# fcm address Disabled General 1588 R/U 101095ppp Meter Stop FCM# fcm address Disabled General 1590 R/U 101096ppp Alarm Out FCM# fcm address Disabled General 1592 R/U 101097ppp Authorized FCM# fcm address Disabled General 1594 R/U 101098ppp Permiss FCM# fcm address Disabled General 1596 R/U 101099ppp Permiss Out FCM# fcm address Disabled General 1598 R/U 101100ppp Unused General N/A R/U 101101ppp Recipe Select Bit 0 FCM# fcm address Disabled General N/A R/U 101102ppp Recipe Select Bit 1 FCM# fcm address Disabled General N/A R/U 101103ppp Recipe Select Bit 2 FCM# fcm address Disabled General N/A R/U 101104ppp Recipe Select Bit 3 FCM# fcm address Disabled General N/A R/U 101105ppp Recipe Select Bit 4 FCM# fcm address Disabled General N/A R/U 101106ppp Unused General N/A unsigned int 0 20 - fcm address Chapter 7 – Register Operations 98 Modbus Prefix Register Description Data Type R/U 101107ppp Unused R/U 101108ppp Recipe Output Bit 0 FCM# fcm address R/U 101109ppp Recipe Output Bit 1 FCM# R/U 101110ppp R/U Min Max Default Value Value Value Register Protection Len=2 General N/A Disabled General N/A fcm address Disabled General N/A Recipe Output Bit 2 FCM# fcm address Disabled General N/A 101111ppp Recipe Output Bit 3 FCM# fcm address Disabled General N/A R/U 101112ppp Recipe Output Bit 4 FCM# fcm address Disabled General N/A R/U 101113ppp Unused General N/A R/U 101114ppp Unused General N/A R/U 101115ppp Unused General N/A Chapter 7 – Register Operations 7.1.5 99 102 – METER LEVEL CONFIGURATION REGISTERS Note: ppp = The specified zero-based preset or load arm number (000-011). mmm = The specified zero-based meter number (000-005). Modbus: The Modbus Preset Index Register sets the ppp index, Read/Write Register=996, Len=1, 16-Bit Integer The Modbus Meter Index Register sets the mmm index, Read/Write Register=998, Len=1, 16-Bit Integer Modbus Min Max Default Data Type Value Value Value R / U 102000pppmmm Flow Control Module# unsigned int 0 31 0 General 1600 R / U 102001pppmmm Side-Stream on Mtr# unsigned int 0 6 0 General 1602 Disabled General 1604 General 1606 0 W&M 1608 Volume Pulse W&M 1610 Prefix Register Description R / U 102002pppmmm Side Stream on Any Meter disable/enable R / U 102003pppmmm Unused R / U 102004pppmmm Meter Address R / U 102005pppmmm Meter Type unsigned int 0 255 meter type Register Protection Len=2 R / U 102006pppmmm Max Quad Errors unsigned int 0 65535 10 W&M 1612 R / U 102007pppmmm Reset Quad Errors unsigned int 1000 65535 10000 W&M 1614 R / U 102008pppmmm Low Flow Alarm Rate unsigned int 0 65535 10 General 1616 R / U 102009pppmmm Low Flow Alarm Time unsigned div1000 10.000 General 1618 R / U 102010pppmmm Excess Flw Alrm Rate unsigned int 0 9999 800 General 1620 R / U 102011pppmmm Minimum Flow Rate unsigned int 0 9999 50 General 1622 R / U 102012pppmmm Maximum Flow Rate unsigned int 0 9999 650 General 1624 R / U 102013pppmmm Low Flow DB Rate unsigned int 0 9999 40 General 1626 R / U 102014pppmmm High Flow DB Rate unsigned int 0 9999 40 General 1628 R / U 102015pppmmm 1st Stage DB Rate unsigned int 0 9999 40 General 1630 R / U 102016pppmmm 2nd Stage DB Rate unsigned int 0 9999 40 General 1632 10.000 General 1634 0.000 999.999 R / U 102017pppmmm Valve Cntl Alrm Time unsigned div1000 R / U 102018pppmmm Valve Fault Alrm Vol unsigned int 0 65535 30 General 1636 R / U 102019pppmmm Creep Reset Time unsigned int 0 65535 0 General 1638 R / U 102020pppmmm Ratio Adj P. Factor unsigned div100 0.00 655.35 10.00 General 1640 R / U 102021pppmmm Ratio Adj D. Factor unsigned div100 0.00 655.35 0.30 General 1642 unsigned int 0 65535 15 General 1644 R / U 102023pppmmm Flow Scan Time unsigned div1000 0.100 1.000 0.100 General 1646 R / U 102024pppmmm Valve Dwell Time unsigned div1000 0.010 65.535 1.000 General 1648 R / U 102022pppmmm Meter Creep Alrm Vol 0.000 65.535 R / U 102025pppmmm Valve Dwell StepRate unsigned int 0 9999 0 General 1650 R / U 102026pppmmm Valve Dwell StepTime unsigned div1000 0.000 5.000 0.000 General 1652 R / U 102027pppmmm Adaptive Valve Control disable/enable Disabled General 1654 R / U 102028pppmmm Analog Valve Control disable/enable Disabled General 1656 R / U 102029pppmmm 4-20mA Increase Step unsigned div 1000 0 4.000 0.080 General 1658 R / U 102030pppmmm 4-20mA Decrease Step unsigned div 1000 0 4.000 0.800 General 1660 10 0 Chapter 7 – Register Operations Modbus Min Max Default Data Type Value Value Value R / U 102031pppmmm Excess Flow Alarm Time unsigned div 1000 0 65535 0 General 1662 R / U 102032pppmmm Analog Valve No Flow mA unsigned div 1000 0.000 General 1664 General 1666 Prefix Register Description 0.000 20.000 R / U 102033pppmmm Unused Register Protection Len=2 R / U 102034pppmmm Analog Meter Flow Rate @ 4mA unsigned int 0 9999 0 W&M 1668 R / U 102035pppmmm Analog Meter Flow Rate @ 20mA unsigned int 0 9999 600 W&M 1670 R / U 102036pppmmm Analog Meter Flow Rate Offset signed div1000 -9.999 9.999 0 W&M 1672 R / U 102037pppmmm Analog Meter Flow Rate Cutoff unsigned int 0 9999 0 W&M 1674 R / U 102038pppmmm Unused General 1676 R / U 102039pppmmm Unused General 1678 W&M 1680 General 1682 R / U 102040pppmmm Density Sensor FCM# fcm address analog input Disabled R / U 102041pppmmm Unused R / U 102042pppmmm Default Density unsigned div10 0 9999.9 0 General 1684 R / U 102043pppmmm Alarm Low Density unsigned div10 0 9999.9 0 General 1686 R / U 102044pppmmm Alarm High Density unsigned div10 0 9999.9 12000 General 1688 R / U 102045pppmmm Density Alarm Time unsigned int 0 60 0 General 1690 R / U 102046pppmmm Density @ Low Value unsigned div10 0 4000.0 0 W&M 1692 R / U 102047pppmmm Density @ High value unsigned div10 0 4000.0 12000 W&M 1694 signed div10 -300 300 0 W&M 1696 R / U 102049pppmmm Unused General 1698 R / U 102050pppmmm Unused General 1700 W&M 1702 General 1704 R / U 102048pppmmm Density Offset R / U 102051pppmmm Pressure Sensor FCM# fcm address analog input Disabled R / U 102052pppmmm Unused R / U 102053pppmmm Default Pressure unsigned div100 0 9999.99 9999.99 W&M 1706 R / U 102054pppmmm Alarm Low Pressure unsigned div100 0 9999.99 100.00 General 1708 R / U 102055pppmmm Alarm High Pressure unsigned div100 0 9999.99 450.00 General 1710 R / U 102056pppmmm Pressure Alarm Time unsigned int 0 60 0 General 1712 R / U 102057pppmmm Pressure @ Low Value unsigned div100 0 4000.00 0 W&M 1714 R / U 102058pppmmm Pressure @ High Value unsigned div100 0 4000.00 650.00 W&M 1716 signed div100 -30.00 30.00 0.00 W&M 1718 General 1678 W&M 1680 General 1682 R / U 102059pppmmm Pressure Offset R / U 102060pppmmm Unused R / U 102061pppmmm Relative Density Sensor FCM# fcm address analog input Disabled R / U 102062pppmmm Unused R / U 102063pppmmm Default Relative Density unsigned div10000 0.0000 2.0000 0.0000 General 1684 R / U 102064pppmmm Alarm Low Relative Density unsigned div10000 0.0000 2.0000 0.0000 General 1686 R / U 102065pppmmm Alarm High Relative Density unsigned div10000 0.0000 2.0000 1.2000 General 1688 R / U 102066pppmmm Relative Density Alarm Time unsigned int 0.0000 General 1690 0.0000 W&M 1692 R / U 102067pppmmm Relative Density @ Low Value unsigned div10000 0 60 0.0000 4.0000 10 1 Chapter 7 – Register Operations Modbus Min Max Default Value Value Value unsigned div10000 0.0000 4.0000 1.2000 W&M 1694 signed div10000 -0.3000 0.3000 0.0000 W&M 1696 R / U 102070pppmmm 2% MF Limit Ref unsigned div10000 0.0000 6.5535 0.0000 W&M 1740 R / U 102071pppmmm Adjacent MF Dev Limt unsigned div10000 0.0000 0.1000 0.0000 W&M 1742 3.00 W&M 1744 Disabled General 1746 10.000 General 1748 General 1760 Prefix Register Description R / U 102068pppmmm Relative Density @ High Value R / U 102069pppmmm Relative Density Offset R / U 102072pppmmm Temp Offset Limit Data Type unsigned div100 R / U 102073pppmmm Output Pulse FCM# fcm address R / U 102074pppmmm Output Pulse Factor unsigned div 1000 0.00 5.00 1.000 50.000 R / U 102080pppmmm Unused Register Protection Len=2 R / U 102081pppmmm Alarm Out FCM# fcm address Disabled General 1762 R / U 102082pppmmm Authorized FCM# fcm address Disabled General 1764 R / U 102083pppmmm Permiss FCM# fcm address Disabled General 1766 R / U 102084pppmmm Permiss Out FCM# fcm address Disabled General 1768 R / U 102085pppmmm Meter K-Factor unsigned int 50 W&M 1770 Disabled W&M 1772 General 1774 R / U 102086pppmmm Quad Check Enable 1 65535 disable/enable R / U 102087pppmmm Unused R / U 102088pppmmm Temperature Offset R / U 102089pppmmm Temperature Alarm Time signed div100 -5.00 5.00 0.00 W&M 1776 unsigned int 0 60 0 General 1778 R / U 102090pppmmm Temp Sensor FCM# fcm address analog input Disabled W&M 1780 R / U 102091pppmmm Temperature Sensor disable/enable Enabled W&M 1782 R / U 102092pppmmm Default Temperature signed div10 -999.9 999.9 999.9 W&M 1784 R / U 102093pppmmm Alarm Low Temp signed div10 -999.9 999.9 -999.9 General 1786 R / U 102094pppmmm Alarm High Temp signed div10 -999.9 999.9 999.9 General 1788 R / U 102095pppmmm Temp Module Type unsigned int 0 19 0 W&M 1790 R / U 102096pppmmm Temperature @ Low Value signed div10 -999.9 999.9 -50.0 W&M 1792 R / U 102097pppmmm Temperature @ High Value signed div10 -999.9 999.9 350.0 W&M 1794 R / U 102098pppmmm Unused General 1796 R / U 102099pppmmm unused General 1798 R / U 102100pppmmm Unused General 1800 R / U 102101pppmmm Unused General 1802 R / U 102102pppmmm Unused General 1804 R / U 102103pppmmm Unused General 1806 R / U 102104pppmmm Unused General 1808 R / U 102105pppmmm Unused General 1810 R / U 102106pppmmm Unused General 1812 R / U 102107pppmmm Unused General 1814 W&M 1816 R / U 102108pppmmm API Gravity Sensor FCM# R / U 102109pppmmm Default API Gravity fcm address analog input unsigned div10 Disabled -1000 11000 0 Conditional 1818 10 2 Chapter 7 – Register Operations Modbus Min Max Default Data Type Value Value Value R / U 102110pppmmm Alarm Low API Gravity unsigned div10 -1000 11000 0 General 1820 R / U 102111pppmmm Alarm High API Gravity unsigned div10 -1000 11000 11000 General 1822 R / U 102112pppmmm API Gravity Alarm Time unsigned int 0 60 0 General 1824 R / U 102113pppmmm API Gravity @ Low Value unsigned div10 -1000 11000 0 W&M 1826 R / U 102114pppmmm API Gravity @ High Value unsigned div10 -1000 11000 11000 W&M 1828 R / U 102115pppmmm API Gravity Offset unsigned div10 -3000 3000 0 W&M 1830 Prefix Register Description Register Protection Len=2 10 3 Chapter 7 – Register Operations 7.1.6 103 – COMPONENT LEVEL CONFIGURATION REGISTERS Note: ppp = The specified zero-based preset or load arm number (000-011). ccc = The specified zero-based component number (000-007). Modbus: The Modbus Preset Index Register sets the ppp index, Read/Write Register=996, Len=1, 16-Bit Integer The Modbus Component Index Register sets the ccc index, Read/Write Register=997, Len=1, 16-Bit Integer Modbus Register Prefix Register Description Data Type Min Value Max Value Default Value Protection Len=2 R / U 103000pppccc Meter# unsigned int 1 6 1 General 1800 R / U 103001pppccc High Flow Rate unsigned int 0 9999 600 General 1802 R / U 103002pppccc 1st Stage Trip Vol unsigned int 0 65535 70 General 1804 R / U 103003pppccc 1st Stage Flow Rate unsigned int 0 9999 225 General 1806 R / U 103004pppccc 2nd Stage Trip Vol unsigned int 0 65535 20 General 1808 R / U 103005pppccc 2nd Stage Flow Rate unsigned int 0 9999 150 General 1810 R / U 103006pppccc Final Trip Vol unsigned div100 0.00 655.35 1.15 General 1812 R / U 103007pppccc Final Trip Max Time unsigned div1000 0.000 65.535 5.000 General 1814 R / U 103008pppccc Final Trip Vol Lock disable/enable Disabled General 1816 R / U 103009pppccc Unauth Flow Alrm Vol unsigned int 0 65535 10 General 1818 R / U 103010pppccc Tank Group unsigned int 0 9999999 0 General 1820 unsigned div 100 0.00 100.00 0.00 W&M 1822 General 1824 R / U 103011pppccc W&M Recipe Percentage R / U 103012pppccc Unused R / U 103013pppccc BlkValve Open Rate unsigned int 0 9999 0 General 1826 R / U 103014pppccc BlkValve Open Delay unsigned int 0 65535 0 General 1828 R / U 103015pppccc B.V. Open Alrm Time unsigned int 2 65535 10 General 1830 R / U 103016pppccc B.V. Close Alrm Time unsigned int 2 65535 10 General 1832 R / U 103017pppccc Pump Start Delay unsigned int 0 65535 3 General 1834 R / U 103018pppccc Pump Stop Delay unsigned int 0 65535 30 General 1836 R / U 103019pppccc Pump Start Alrm Time unsigned int 2 65535 2 General 1838 R / U 103020pppccc Flow Start Delay unsigned int 0 65535 5 General 1840 General 1842 General 1844 General 1846 R / U 103021pppccc Unused R / U 103022pppccc Unauth Reset Time unsigned int 0 65535 0 R / U 103023pppccc Unused R / U 103024pppccc Fallback Rate unsigned int 0 9999 350 General 1848 R / U 103025pppccc Fallback Time unsigned int 0 65535 0 General 1850 R / U 103026pppccc Fallback Retry Time unsigned int 0 65535 0 General 1852 R / U 103027pppccc Fallback Retry Vol unsigned int 0 65535 0 General 1854 unsigned div100 0 999999 0 General 1856 R / U 103029pppccc Fallback Minimum Rate unsigned int 0 9999 0 General 1858 R / U 103030pppccc Fallback Increase Rate unsigned int 0 9999 0 General 1860 R / U 103028pppccc Fallback Minimum Pressure 10 4 Chapter 7 – Register Operations Modbus Register Prefix Register Description R / U 103031pppccc Fallback Decrease Rate Data Type Min Value Max Value Default Value Protection Len=2 unsigned int 0 9999 0 General 1862 unsigned div100 0 999999 0 General 1864 Disabled General 1866 R / U 103034pppccc Unused General 1868 R / U 103035pppccc Unused General 1870 R / U 103036pppccc Unused General 1872 R / U 103037pppccc Unused General 1874 R / U 103038pppccc Unused General 1876 None W&M 1878 None W&M 1880 Disabled W&M 1882 R / U 103032pppccc Fallback Retry Min Pressure R / U 103033pppccc Fallback Vapor Pressure disable/enable R / U 103039pppccc API Table API table name R / U 103040pppccc API 54YG Product 54YG Products R / U 103041pppccc API Extrapolated Range disable/enable R / U 103042pppccc API BIO 0 20 PTB BIO Products 0 13 None W&M 1884 signed div10 -100.0 1100.0 0.0 W&M 1886 R / U 103044pppccc Relative Density unsigned div10000 0.0000 9.0000 0.0000 W&M 1888 R / U 103045pppccc Default Density unsigned div10 0 9999.9 0 W&M 1890 R / U 103046pppccc Expansion Coef. unsigned div10 0 2000.0 0 W&M 1892 R / U 103047pppccc Hydrometer Used disable/enable Disabled W&M 1894 R / U 103048pppccc Commodity Type commodity type 0 3 1 W&M 1896 expansion coef uom type 1 2 1 W&M 1898 density uom type 1 3 1 W&M 1900 pressure uom type 1 3 3 W&M 1902 unsigned int 0 9999 60 W&M 1904 Percent 0 100 0 General 1906 R / U 103054pppccc API Alarm Time unsigned int 0 120 0 W&M 1908 R / U 103055pppccc Compressibility Factor unsigned int 0 99999 0 W&M 1910 No Product W&M 1912 R / U 103057pppccc Unused General 1914 R / U 103058pppccc Unused General 1916 R / U 103059pppccc Unused General 1918 R / U 103060pppccc Unused General 1920 R / U 103061pppccc Unused General 1922 R / U 103062pppccc Unused General 1924 R / U 103063pppccc Unused General 1926 R / U 103064pppccc Unused General 1928 R / U 103065pppccc Unused General 1930 R / U 103066pppccc Unused General 1932 R / U 103067pppccc Unused General 1934 R / U 103043pppccc API Gravity R / U 103049pppccc Expansion Coef. UOM R / U 103050pppccc Density UOM R / U 103051pppccc Pressure UOM R / U 103052pppccc Reference Temperature R / U 103053pppccc Alcohol Percentage R / U 103056pppccc API ASTMD1555 Product API ASTM D1555 10 5 Chapter 7 – Register Operations Modbus Register Prefix Register Description Data Type Min Value Max Value Default Value Protection Len=2 R / U 103068pppccc Unused General 1936 R / U 103069pppccc Unused General 1938 R / U 103070pppccc Unused General 1940 Disabled General 1942 10.000 W&M 1944 Delivery Type Gross W&M 1946 R / U 103074pppccc Close Blk Val FCM# fcm address Disabled General 1948 R / U 103075pppccc Blk Val Status FCM fcm address Disabled General 1950 R / U 103076pppccc Open Blk Val FCM# fcm address Disabled General 1952 General 1954 R / U 103071pppccc Output Pulse FCM# fcm address R / U 103072pppccc Output Pulse Factor unsigned div 1000 R / U 103073pppccc Output Pulse Type 1.000 50.000 R / U 103077pppccc Unused R / U 103078pppccc Pump Run FCM# fcm address Disabled General 1956 R / U 103079pppccc Pump Kill FCM# fcm address Disabled General 1958 R / U 103080pppccc Pump Status FCM# fcm address Disabled General 1960 R / U 103081pppccc Alarm Out FCM# fcm address Disabled General 1962 R / U 103082pppccc Authorized FCM# fcm address Disabled General 1964 R / U 103083pppccc Permiss FCM# fcm address Disabled General 1966 R / U 103084pppccc Permiss Out FCM# fcm address Disabled General 1968 R / U 103085pppccc Meter Factor #1 unsigned div10000 0.8000 1.2000 1.0000 W&M 1970 unsigned int 0 9999 150 W&M 1972 unsigned div10000 0.8000 1.2000 1.0000 W&M 1974 unsigned int 0 9999 200 W&M 1976 unsigned div10000 0.8000 1.2000 1.0000 W&M 1978 unsigned int 0 9999 400 W&M 1980 unsigned div10000 0.8000 1.2000 1.0000 W&M 1982 R / U 103092pppccc Meter Factor #4 Rate unsigned int 0 9999 800 W&M 1984 R / U 103093pppccc # Meter Factors Used unsigned int 1 4 4 W&M 1986 General 1988 R / U 103086pppccc Meter Factor #1 Rate R / U 103087pppccc Meter Factor #2 R / U 103088pppccc Meter Factor #2 Rate R / U 103089pppccc Meter Factor #3 R / U 103090pppccc Meter Factor #3 Rate R / U 103091pppccc Meter Factor #4 R / U 103094pppccc Unused 10 6 Chapter 7 – Register Operations 7.1.7 104 – ADDITIVE LEVEL CONFIGURATION REGISTERS Note: ppp = The specified zero-based preset or load arm number (000-011). aaa = The specified zero-based additive number (000-0015). Modbus: The Modbus Preset Index Register sets the ppp index, Read/Write Register=996, Len=1, 16-Bit Integer The Modbus Additive Index Register sets the aaa index, Read/Write Register=999, Len=1, 16-Bit Integer Modbus Register Prefix Register Description Date Type Min Value Max Value Default Value Protection R/U 104000pppaaa Additive Enable Enabled General 2000 R/U 104001pppaaa Flow Control Module# unsigned int 0 31 0 General 2002 R/U 104002pppaaa FCM Port# unsigned int 0 3 0 General 2004 R/U 104003pppaaa W&M Controlled disable/enable Disabled W&M 2006 R/U 104004pppaaa Upstream Block Valve disable/enable Disabled General 2008 R/U 104005pppaaa Tank Group unsigned int 0 9999999 0 General 2010 R/U 104006pppaaa Additive Type disable/enable 0 4 0 General 2012 R/U 104007pppaaa unsigned div10000 0.0000 10.0000 0.1000 General 2014 R/U 104008pppaaa Additive I Time unsigned div10000 0.0000 0.6000 0.3000 General 2016 R/U 104009pppaaa Additive D Time unsigned div10000 0.0000 0.6000 0.0000 General 2018 R/U 104010pppaaa Additive No Flow mA unsigned div 1000 0.000 20.000 0.000 Conditional 2020 R/U 104011pppaaa Unused General 2022 R/U 104016pppaaa Additive Mode Additive Mode NONE Conditional 2032 R/U 104017pppaaa Start Volume unsigned int 0 65535 0 Conditional 2034 R/U 104018pppaaa Restart Volume unsigned int 0 65535 0 Conditional 2036 R/U 104019pppaaa Solenoid Shut Pulses unsigned int 0 255 0 General 2038 R/U 104020pppaaa Shutoff Vol From End unsigned int 0 65535 0 General 2040 R/U 104021pppaaa LastInj Vol From End unsigned int 0 65535 20 General 2042 R/U 104022pppaaa Line Flush Min Vol unsigned int 0 65535 0 General 2044 R/U 104023pppaaa Assigned Component unsigned int 0 8 0 General 2046 R/U 104024pppaaa W&M Recipe Percentage percent div 10000 0.0000% 6.5535% 0.0000% W&M 2048 R/U 104025pppaaa Add Check Start VOL unsigned int 0 65535 0 Conditional 2050 R/U 104026pppaaa Unused General 2052 R/U 104027pppaaa Additive Vol/Inject unsigned div10000 0.0000 6.5535 0.0200 Conditional 2054 R/U 104028pppaaa Vol/Inject Cal Factr unsigned div10000 0.0001 6.5535 1.0000 Conditional 2056 R/U 104029pppaaa Unused General 2058 R/U 104030pppaaa Additive Tol Percentage R/U Additive P Factor disable/enable Len=2 Percent 0 100.00 0 Conditional 2060 104031pppaaa Additive Mtr K-Factr unsigned int 0 65535 2600 Conditional 2062 R/U 104032pppaaa Additive Mtr Factor unsigned div10000 0.0001 6.5535 1.0000 Conditional 2064 R/U 104033pppaaa Max Pstn Missed Inj unsigned int 0 65535 0 Conditional 2066 R/U 104034pppaaa MaxSolenoid Inj Time unsigned div1000 0.100 10.000 4.000 Conditional 2068 R/U 104035pppaaa Under Add Alrm # Inj unsigned int 0 65535 3 Conditional 2070 10 7 Chapter 7 – Register Operations Modbus Register Prefix Register Description Date Type Min Value Max Value Default Value Protection Len=2 R/U 104036pppaaa Over Add Alrm # Inj unsigned int 0 65535 3 Conditional 2072 R/U 104037pppaaa Check Add Tol Time unsigned int 0 65535 10 Conditional 2074 R/U 104038pppaaa Unauth Flow Alrm Vol unsigned int 0 65535 100 General 2076 R/U 104039pppaaa Valve Fault Alrm Vol unsigned int 0 65535 300 General 2078 R/U 104040pppaaa Over Inject Vol unsigned int 0 65535 0 Conditional 2080 R/U 104041pppaaa Creep Reset Time unsigned int 0 65535 0 General 2082 R/U 104042pppaaa Unauth Reset Time unsigned int 0 65535 0 General 2084 R/U 104043pppaaa Max Pistn Throw Time unsigned div1000 0.100 10.000 1.800 General 2086 R/U 104044pppaaa Pump Start Alrm Time unsigned int 0 65535 2 General 2088 R/U 104045pppaaa Meter Creep Alrm Vol unsigned int 0 65535 150 General 2090 R/U 104046pppaaa Remote Calibration Enabled General 2092 R/U 104047pppaaa B.V. Open Alrm Time unsigned int 0 65535 10 General 2094 R/U 104048pppaaa B.V. Close Alrm Time unsigned int 0 65535 10 General 2096 R/U 104049pppaaa Pump Stop Delay unsigned int 0 65535 3 General 2098 R/U 104050pppaaa Flush Pump Run Time unsigned int 0 65535 30 General 2100 R/U 104051pppaaa Meter Flushed disable/enable Disabled General 2102 R/U 104052pppaaa Solenoid Flushed disable/enable Disabled General 2104 R/U 104053pppaaa Unused General 2106 R/U 104054pppaaa W&M Alarm Promo Count unsigned int 0 65535 0 W&M 2108 R/U 104055pppaaa W&M Alarm Reset Mode alarm count reset mode 0 10 0 W&M R/U 104085pppaaa Unused General 2170 R/U 104086pppaaa Unused General 2172 R/U 104087pppaaa Unused General 2174 R/U 104088pppaaa Flush Pump Run FCM# fcm address Disabled General 2176 R/U 104089pppaaa Close Blk Val FCM# fcm address Disabled General 2178 R/U 104090pppaaa Blk Val Status FCM# fcm address Disabled General 2180 R/U 104091pppaaa Open Blk Val FCM# fcm address Disabled General 2182 R/U 104092pppaaa Test Button FCM# fcm address Disabled General 2184 R/U 104093pppaaa Pump Run FCM# fcm address Disabled General 2186 R/U 104094pppaaa Pump Kill FCM# fcm address Disabled General 2188 R/U 104095pppaaa Pump Status FCM# fcm address Disabled General 2190 R/U 104096pppaaa Alarm Out FCM# fcm address Disabled General 2192 R/U 104097pppaaa Authorized FCM# fcm address Disabled General 2194 R/U 104098pppaaa Permiss FCM# fcm address Disabled General 2196 R/U 104099pppaaa Permiss Out FCM# fcm address Disabled General 2198 disable/enable 2110 10 8 Chapter 7 – Register Operations 7.1.8 108 –TRACE LEVEL CONFIGURATION REGISTERS “Modbus Trace Level” Select the trace level for outgoing Modbus communications Enum{// Enumerated Value Register Value MODBUS_TRACE_LEVEL_DISABLED 0 MODBUS_TRACE_LEVEL_BASIC 1 MODBUS_TRACE_LEVEL_ADVANCED 2 } Modbus Register Prefix Register Description R/U 108000 Unused R/U 108001 Trace Preset Number unsigned int 1 12 1 General R/U 108002 Trace Adtv Number unsigned int 1 16 1 General R/U 108003 Trace UAP Level unsigned int 1 6 4 General R/U 108004 Trace Recipe disable/enable Disabled General R/U 108005 FCM Trace disable/enable Disabled General R/U 108006 Trace FCM Number 32 General R/U 108007 Trace FCM Assignment disable/enable Disabled General R/U 108008 Trace Meter Flows disable/enable Disabled General R/U 108009 Trace Adtv Volume disable/enable Disabled General R/U 108010 Trace Tank Number disable/enable Disabled General R/U 108011 Trace Network SSL disable/enable Disabled General R/U 108012 Trace E-Mail disable/enable Disabled General R/U 108013 Trace FTP disable/enable Disabled General R/U 10814 Trace Modbus Modbus Trace Level Disabled General 7.1.9 Date Type Min Value Max Value Default Value Protection Len=2 General unsigned int 0 33 110 –NETWORK LEVEL CONFIGURATION REGISTERS Modbus Register Prefix Register Description Date Type Min Value Max Value Default Value Protection R/U 110000 Host Port(7734) disable/enable Enabled General R/U 110001 Host SSL Port (7735) disable/enable Disabled General R/U 110002 HTTP Port(80) disable/enable Enabled General R/U 110003 HTTPS Port(443) disable/enable Disabled General R/U 110004 Com0 Port(7000) disable/enable Enabled General R/U 110005 Com0 SSL Port (7010) disable/enable Disabled General R/U 110006 Com1 Port(7001) disable/enable Enabled General Len=2 10 9 Chapter 7 – Register Operations Modbus Register Prefix Register Description Date Type Min Value Max Value Default Value Protection R/U 110007 Com1 SSL Port (7011) disable/enable Disabled General R/U 110008 Com2 Port(7002) disable/enable Enabled General R/U 110009 Com2 SSL Port (7012) disable/enable Disabled General R/U 110010 Modbus TCP/IP Port(502) disable/enable Enabled General R/U 110011 Unused General R/U 110012 Unused General R/U 110013 Unused General R/U 110014 Unused General R/U 110015 Unused General R/U 110016 Unused General R/U 110017 Unused General R/U 110018 Unused General R/U 110019 Unused General R/U 110020 NTP Server 1 IP Addres char General R/U 110021 NTP Server 2 IP Addres char General R/U 110022 NTP Server 3 IP Addres char General R/U 110023 NTP Server 4 IP Addres char General R/U 110024 NTP GMT Time Zone char General R/U 110025 eMail Enable R/U 110026 eMail SMTP Server Address char General R/U 110027 eMail To Address char General R/U 110028 eMail From Address char General R/U 110029 eMail Authentication Enable R/U 110030 eMail Username char General R/U 110031 eMail Password char General disable/enable Disabled disable/enable Disabled Len=2 General General 7.1.10 111 –TANK LEVEL CONFIGURATION REGISTERS Note: ttt = The specified zero-based tank number (000-009). Modbus Register Prefix Register Description Date Type Min Value Max Value Default Value Protection R/U 111000ttt Tank Group unsigned int 0 9999999 0 General R/U 111001ttt Tank Number unsigned int 0 9999999 0 General R/U 111002ttt Active Tank Mode Tank Mode DEACTIVE General R/U 111003ttt Tank High High Level FCM# fcm address Disabled General R/U 111004ttt Tank High Level FCM# fcm address Disabled General R/U 111005ttt Tank Low Level FCM# fcm address Disabled General Len=2 11 0 Chapter 7 – Register Operations R/U 111006ttt Tank Low Low Level FCM# fcm address Disabled General R/U 111007ttt Tank Level Bypass FCM# fcm address Disabled General R/U 111008ttt Active Tank FCM# fcm address Disabled General R/U 111009ttt Alarm Out FCM# fcm address Disabled General R/U 111010ttt TankValve Open Delay unsigned int 0 65535 10 General R/U 111011ttt TankValve Open Alrm Time unsigned int 0 65535 10 General R/U 111012ttt TankValve Close Alrm Time unsigned int 0 65535 10 General R/U 111013ttt Close TankValve FCM# fcm address Disabled General R/U 111014ttt TankValve Status FCM# fcm address Disabled General R/U 111015ttt Open TankValve FCM# fcm address Disabled General R/U 111016ttt Tank Start Trigger Level FCM# fcm address Disabled General R/U 111017ttt Tank Stop Trigger Level FCM# fcm address Disabled General 7.1.11 115 –SAMPLER LEVEL CONFIGURATION REGISTERS Note: ppp = The specified zero-based preset or load arm number (000-011). sss = The specified zero-based sampler number (000-0015). Modbus Register Prefix Register Description Date Type Min Value Max Value Default Value Protection R/U 115000pppsss Sampler Enable R/U 115001pppsss Flow Control Module# unsigned int 0 31 R/U 115002pppsss FCM Port# unsigned int 0 31 R/U 115003pppsss Unused General R/U 115004pppsss Unused General R/U 115005pppsss Unused General R/U 115006pppsss Sampler Vol/Sample unsigned int 0 65535 200 General R/U 115007pppsss Vol/Sampler Cal Factr unsigned int 0 65535 10000 General R/U 115070pppsss Alarm Out FCM# fcm address Disabled General R/U 115071pppsss Authorized FCM# fcm address Disabled General R/U 115072pppsss Permiss FCM# fcm address Disabled General R/U 115073pppsss Permiss Out FCM# fcm address Disabled General disable/enable Enabled Len=2 General General 0 General 7.1.12 116 –SECURITY LEVEL CONFIGURATION REGISTERS Modbus Register Prefix Register Description Date Type Min Value Max Value Default Value Protection R/U 116000 Minimum Days unsigned int 0 65535 7 General R/U 116001 Expiration in Days unsigned int 0 65535 0 General R/U 116002 Expiration Notification Days unsigned int 0 65535 0 General R/U 116003 Expiration Email Notification unsigned int 0 65535 0 General Len=2 11 1 Chapter 7 – Register Operations R/U 116004 Minimum Password Length unsigned int 0 40 10 General R/U 116005 Max Retry Attempts unsigned int 0 65535 20 General R/U 116006 Lockout Duration in Minutes unsigned int 0 65535 5 General R/U 116007 Password History Storage unsigned int 0 14 6 General R/U 116008 Password Complexity NONE General R/U 116009 Unused General R/U 116010 Unused General security complexity 11 2 Chapter 7 – Register Operations 7.1.13 117 –REPORT LEVEL CONFIGURATION REGISTERS Note: rrr = The specified zero based report type (000= Transaction Report, 001= Sample Pot Report, Meter Report). 002= Modbus Register Prefix Register Description Date Type Min Value Max Value Default Value Protection R/U 117000rrr Daily Report s Enabled unsigned int 0 1 0 General R/U 117001rrr Daily Report s Time Trigger unsigned int 0 2359 0 General R/U 117002rrr Monthly Report s Enabled unsigned int 0 1 0 General R/U 117003rrr Monthly Report s Day Trigger unsigned int 1 28 1 General R/U 117004rrr Monthly Report s Time Trigger unsigned int 0 2359 10 General Len=2 11 3 Chapter 7 – Register Operations 7.1.14 105 – CUSTOM LOGIC DEFINITIONS REGISTERS Note: R105iiiii => 0?0105iiiiittttt… U105105iiiiittttt… => 0?0105 Where: iiiii = The specified zero-based custom logic index (0000-1023). For Modbus, the Modbus Custom Logic Index Register sets the iiii index. Modbus: Read/Write Register=296, Len=1, 16-Bit Integer (iiiii) ttttt = Custom Logic Type as: enum custom_logic_type { // misc types UNUSED FCM_INPUT_PORT FCM_OUTPUT_PORT // run time values RCU_RT BAY_RT PRESET_RT COMPONENT_RT METER_RT ADDITIVE_RT TANK_RT SAMPLER_RT // config read values RCU_READ_CFG BAY_ READ_CFG PRESET_ READ_CFG COMPONENT_ READ_CFG METER_ READ_CFG ADDITIVE_ READ_CFG TANK_READ_CFG SAMPLER_READ_CFG REPORTS_READ_CFG SD_CARD_READ_CFG // config write values RCU_WRITE_CFG BAY_WRITE_CFG PRESET_WRITE_CFG = 32, COMPONENT_WRITE_CFG METER_WRITE_CFG ADDITIVE_WRITE_CFG TANK_WRITE_CFG SAMPLER_WRITE_CFG REPORTS_WRITE_CFG = 0, = 1, = 2, = 10, = 11, = 12, = 13, = 14, = 15, = 16, = 17, = 20, = 21, = 22, = 23, = 24, = 25, = 26, = 27, = 28, = 29, = 30, = 31, = 33, = 34, = 35, = 36, = 37, = 38, 11 4 Chapter 7 – Register Operations SD_CARD_WRITE_CFG = 39, // run time totalizer values PRESET_TOTALIZER_RT = 40, COMPONENT_TOTALIZER_RT= 41, METER_TOTALIZER_RT = 42, ADDITIVE_TOTALIZER_RT = 43, SAMPLER_TOTALIZER_RT = 44, // run time resetable totalizer values PRESET_RTOTALIZER_RT = 50, COMPONENT_RTOTALIZER_RT=51, METER_RTOTALIZER_RT = 52, ADDITIVE_RTOTALIZER_RT = 53, SAMPLER_RTOTALIZER_RT = 54, // boolean operations and comparitors ALWAYS_FALSE = 100, ALWAYS_TRUE = 101, ASSIGN = 102, NOT = 103, AND = 104, NAND = 105, OR = 106, NOR = 107, EOR = 108, // analog operations ADD = 120, SUBTRACT = 121, MULTIPLY = 122, DIVIDE = 123, SET_VALUE = 124, // analog comparators EQUAL = 140, LESS_THAN = 141, GREATER_THAN = 142, LESS_THAN_OR_EQUAL = 143, GREATER_THAN_OR_EQUAL = 144, // delays/timers START_DELAY = 150, STOP_DELAY = 151 BEACON = 152, PULSE = 153, COUNTER = 154, FLIPFLOP = 155, // Analog values ANALOG_IN = 160, ANALOG_OUT = 161, 11 5 Chapter 7 – Register Operations ANALOG_OUT_MONITOR = 162, //RTD RTD = 170, //Alarm Output Levels BAY_RT_ALARM = 180, PRESET_RT_ALARM = 181, COMPONENT_RT_ALARM = 182, METER_RT_ALARM = 183, ADDITIVE_RT_ALARM = 184, TANK_RT_ALARM = 185, SAMPLER_RT_ALARM = 186, // Allow Inputs from FCM outputs or External Communication INTERNAL_INPUT = 190, EXTERNAL_INPUT = 191 // Scaling SCALE_0_to_10000 = 200, // Range checking RANGE_CHECK = 210, // messages EMAIL_MESSAGE = 220 } type; Modbus: Read/Write Register=297, Len=1, 16-Bit Integer (ttttt) … = Type Specific Commands If type -= UNUSED, (No Further Parameters) If type -= FCM_INPUT, fffffppppp Where: fffff – FCM Number (0-32) ppppp – FCM Port (0-7) Modbus: Read/Write Register=298, Len=1, 16-Bit Integer (fffff) Modbus: Read/Write Register=299, Len=1, 16-Bit Integer (ppppp) If type -= FCM_OUTPUT, fffffpppppxxxxx Where: fffff – FCM Number (0-32) ppppp – FCM Port (0-7) xxxxx = Custom logic index (0000-1023). Modbus: Read/Write Register=298, Len=1, 16-Bit Integer (fffff) Modbus: Read/Write Register=299, Len=1, 16-Bit Integer (ppppp) Modbus: Read/Write Register=300, Len=1, 16-Bit Integer (xxxxx) If type -= RCU_RT, rrrrr Where: Chapter 7 – Register Operations rrrrr –Rcu Real Time Parameter Type as custom_logic_rcu_real_time_prompt[] = { {"Proving Mode"}, // 00000 {"W&M Key"}, // 00001 {"Program Key"}, // 00002 {"Card Inserted"}, // 00003 {"Hour" }, //00004 {"Minute" }, //00005 {"Seconds" }, //00006 {"Year" }, //00007 {"Month" }, //00008 {"Day" }, //00009 {"Julian Date" }, //00010 {"Epoch Time" }, //00011 {"Prompt1" }, //00012 {"Prompt2" }, //00013 {"Prompt3" }, //00014 {"Prompt4" }, //00015 {"Prompt5" }, //00016 {"RCU State" }, //00017 {"Card 1 Number" }, //00018 {"Card 1 Facility" }, //00019 {"Card 2 Number" }, //00020 {"Card 2 Facility" }, //00021 {"Security Bypass"}, //00022 {"Config Changed"}, //00023 }; Modbus: Read/Write Register=298, Len=1, 16-Bit Integer (rrrrr) If type -= BAY_RT, rrrrrppppp Where: rrrrr –Bay Real Time Parameter Type as custom_logic_bay_real_time_prompt[] = { {"Clearing Errors"}, // 00000 {"Diag Mode"}, // 00001 {"All Stop"}, // 00002 {"Alarm Out"}, // 00003 {"Authorized"}, // 00004 {"Permissive Out"}, // 00005 {"Permissive 0"}, // 00006 {"Permissive 1"}, // 00007 {"Permissive 2"}, // 00008 {"Permissive 3"}, // 00009 11 6 11 7 Chapter 7 – Register Operations {"Permissive 4"}, {"Permissive 5"}, {"Permissive 6"}, {"Permissive 7"}, {"Deadman Input" }, {"Deadman Output" }, {"Deadman Bypass" }, {"Total Volume" }, {"Start Trans" }, {"Stop Trans" } // 00010 // 00011 // 00012 // 00013 // 00014 // 00015 // 00016 // 00017 // 00018 // 00019 }; ppppp – Zero-based preset number (00000-00011). Modbus: Read/Write Register=298, Len=1, 16-Bit Integer (rrrrr) Modbus: Read/Write Register=299, Len=1, 16-Bit Integer (ppppp) If type -= PRESET_RT, rrrrrppppp Where: rrrrr –Preset Real Time Parameter Type as custom_logic_preset_real_time_prompt[] = { {"Authorized"}, // 00000 {"Flow Active"}, // 00001 {"BatchAuthorized"}, // 00002 {"Load Complete"}, // 00003 {"Clearing Errors"}, // 00004 {"Clearing Load"}, // 00005 {"Open Blk Valve"}, // 00006 {"Blk Val Status"}, // 00007 {"Close Blk Valve"}, // 00008 {"Remote Start"}, // 00009 {"Swing Arm"}, // 00010 {"Meter Stop"}, // 00011 {"Alarm Out"}, // 00012 {"Permissive"}, // 00013 {"Permissive Out"}, // 00014 {"Preset State" }, // 00015 {"Gross Delivered"}, // 00016 {"Net Delivered" }, // 00017 {"Mass Delivered" }, // 00018 {"Delivered Pct" }, // 00019 {"Remaining Vol" }, // 00020 {"Gross Flow Rate"}, // 00021 {"Temperature" }, // 00022 {"Pressure" }, // 00023 {"Density" }, // 00024 11 8 Chapter 7 – Register Operations {"Relative Dens" }, {"API Gravity" }, {"BSW" } {"Alt. High Flow"} {"Preset Volume"} {"Flush Remain" } {"Auth Prod Idx" } {"Product Idx" } {"Lead Component" } {"Compartment" } {"Open Pre Vol" } {"Compart Pre Vol"} // 00025 // 00026 // 00027 // 00028 // 00029 // 00030 // 00031 // 00032 // 00033 // 00034 // 00035 // 00036 }; ppppp – Zero-based preset number (00000-00011). Modbus: Read/Write Register=298, Len=1, 16-Bit Integer (rrrrr) Modbus: Read/Write Register=299, Len=1, 16-Bit Integer (ppppp) If type -= COMPONENT_RT, rrrrrppppplllll Where: rrrrr – Component Real Time Parameter Type as custom_logic_component_real_time_prompt[] = { {"Clearing Errors"}, // 00000 {"Clear Batch"}, // 00001 {"Rem Start Buttn"}, // 00002 {"Pump Run"}, // 00003 {"Pump Kill"}, // 00004 {"Pump Status"}, // 00005 {"Open Blk Valve"}, // 00006 {"Blk Val Status"}, // 00007 {"Close Blk Valve"}, // 00008 {"Alarm Out"}, // 00009 {"Authorized"}, // 00010 {"Permissive"}, // 00011 {"Permissive Out"}, // 00012 {"Component State" }, // 00013 {"Gross Delivered"}, // 00014 {"Net Delivered" }, // 00015 {"Mass Delivered" }, // 00016 {"Temperature" }, // 00017 {"Pressure" }, // 00018 {"Density" }, // 00019 {"Relative Dens" }, // 00020 {"API Gravity" }, // 00021 {"VCF" } // 00022 11 9 Chapter 7 – Register Operations {"CTL" } {"CPL" } {"Fallback Ceil"} {"Avg Temperature"} {"Avg Pressure" } {"Avg Density" } {"Avg Relative" } {"Avg API Gravity"} {"Unauth Gross" } {"Unauth Net" } {"Unauth Mass" } {"Vapor Pressure" } {"Recipe Pct" } {"Recipe Volume" } {"Blnd Target Vol"} {"Blnd Target Pct"} {"Btch Recipe Pct"} {"Blnd Tg Vol Err"} {"Blnd Tg Pct Err"} {"Btch Rp Vol Err"} {"Btch Rp Pct Err"} {"Blnd Adj FlRate"} // 00023 // 00024 // 00025 // 00026 // 00027 // 00028 // 00029 // 00030 // 00031 // 00032 // 00033 // 00034 // 00035 // 00036 // 00037 // 00038 // 00039 // 00040 // 00041 // 00042 // 00043 // 00044 }; ppppp – Zero-based preset number (00000-00011). lllll = Zero based component number (00000-00007). Modbus: Read/Write Register=298, Len=1, 16-Bit Integer (rrrrr) Modbus: Read/Write Register=299, Len=1, 16-Bit Integer (ppppp) Modbus: Read/Write Register=300, Len=1, 16-Bit Integer (lllll) If type -= METER_RT, rrrrrppppplllll Where: rrrrr – Meter Real Time Parameter Type as custom_logic_meter_real_time_prompt[] = { {"Clearing Errors"}, // 00000 {"Clear Totals"}, // 00001 {"Alarm Out"}, // 00002 {"Authorized"}, // 00003 {"Permissive"}, // 00004 {"Permissive Out"}, // 00005 {"SidStrm On Mtr"}, // 00006 {"Meter State" }, // 00014 {"Gross Delivered"}, // 00015 {"Gross Flow Rate"}, // 00016 {"Temperature" }, // 00017 12 0 Chapter 7 – Register Operations {"Pressure" }, {"Density" }, {"Relative Dens" }, {"API Gravity" }, {"Gross Creep Del"}, {"Volume Preset"}, // 00018 // 00019 // 00020 // 00021 // 00022 // 00023 }; ppppp – Zero-based preset number (00000-00011). lllll = Zero based meter number (00000-00003). Modbus: Read/Write Register=298, Len=1, 16-Bit Integer (rrrrr) Modbus: Read/Write Register=299, Len=1, 16-Bit Integer (ppppp) Modbus: Read/Write Register=300, Len=1, 16-Bit Integer (lllll) If type -= ADDITIVE_RT, rrrrrppppplllll Where: rrrrr – Additive Real Time Parameter Type as custom_logic_additive_real_time_prompt[] { (“Clearing Errors”), // 00000 (“Clear Batch"}, // 00001 (“Test Button"}, // 00002 ("Pump Run"}, // 00003 {"Pump Kill"}, // 00004 {"Pump Status"}, // 00005 {"Open Blk Valve"}, // 00006 {"Blk Val Status"}, // 00007 {"Flush Pump Run"}, // 00008 {"Close Blk Valve"}, // 00009 {"Alarm Out"}, // 00010 {"Authorized"}, // 00011 {"Permissive"}, // 00012 {"Permissive Out"}, // 00013 {"Gross Delivered"}, // 00014 {"Additive Pct" } // 00015 {"Gross Curr Targ"}, // 00016 {"Gross Recipe" } // 00017 {"Flush Remain" } // 00018 {"Additive State" } // 00019 {"Missed Inj" } // 00020 {"Creep Gross" } // 00021 {"Unauth Gross" } // 00022 }; ppppp – Zero-based preset number (00000-00011). lllll = Zero based additive number (00000-00015). 12 1 Chapter 7 – Register Operations Modbus: Read/Write Register=298, Len=1, 16-Bit Integer (rrrrr) Modbus: Read/Write Register=299, Len=1, 16-Bit Integer (ppppp) Modbus: Read/Write Register=300, Len=1, 16-Bit Integer (lllll) If type -= SAMPLER_RT, rrrrrppppplllll Where: rrrrr – Sampler Real Time Parameter Type as custom_logic_sampler_real_time_prompt[] { (“Clearing Errors”), // 00000 (“Clear Batch"}, // 00001 (“Alarm Out"}, // 00002 ("Authorized"}, // 00003 {"Permissive"}, // 00004 {"Permissive Out"}, // 00005 {"Gross Delivered"}, // 00006 {"Pacing Rate"}, // 00007 {"Curr Target"}, // 00008 {"Sampler State"}, // 00009 }; ppppp – Zero-based preset number (00000-00011). lllll = Zero based sampler number (00000-00015). Modbus: Read/Write Register=298, Len=1, 16-Bit Integer (rrrrr) Modbus: Read/Write Register=299, Len=1, 16-Bit Integer (ppppp) Modbus: Read/Write Register=300, Len=1, 16-Bit Integer (lllll) If type -= TANK_RT, rrrrrppppplllll Where: rrrrr – Tank Real Time Parameter Type as custom_logic_tank_real_time_prompt[] { (“High High Level”), // 00000 (“High Level"}, // 00001 (“Low Level"}, // 00002 ("Low Low Level"} // 00003 {"Bypass Alarm"}, // 00004 {"Active"}, // 00005 {"Alarm Out"} , // 00006 {"Close Tk Valve"}, // 00007 {"Status Tk Valve"}, // 00008 {"Open Tk Valve"}, // 00009 {"Start Trigger Level"}, // 00010 {"Stop Trigger Level"}, // 00011 }; Chapter 7 – Register Operations ppppp – Zero-based preset number (00000-00011). lllll = Zero based sampler number (00000-00015). Modbus: Read/Write Register=298, Len=1, 16-Bit Integer (rrrrr) Modbus: Read/Write Register=299, Len=1, 16-Bit Integer (ppppp) Modbus: Read/Write Register=300, Len=1, 16-Bit Integer (lllll) If type -= BAY_RT_ALARM, rrrrrppppp Where: rrrrr –Bay Real Time Alarm Parameter Type as custom_logic_bay_real_time_alarm_prompt[] = { {"*BAY FCM" } // 00000 {"*BAY PERM0" }, // 00001 {"*BAY PERM1" }, // 00002 {"*BAY PERM2" } // 00003 {"*BAY PERM3" } // 00004 {"*BAY PERM4" } // 00005 {"*BAY PERM5" }, // 00006 {"*BAY PERM6" } // 00007 {"*BAY PERM7" } // 00008 {"*ALL STOP" }, // 00009 {"*BAY PCM" }, // 00010 {"*PRNTR ERR" } // 00011 {"*BALARM 12" }, // 00012 {"*BALARM13" }, // 00013 {"*DEADMAN" }, // 00014 {"*BALARM15" }, // 00015 {"*POWERFAIL" }, // 00016 }; ppppp – Zero-based preset number (00000-00011). Modbus: Read/Write Register=298, Len=1, 16-Bit Integer (rrrrr) Modbus: Read/Write Register=299, Len=1, 16-Bit Integer (ppppp) If type -= PRESET_RT_ALARM, rrrrrppppp Where: rrrrr –Preset Real Time Alarm Parameter Type as custom_logic_preset_real_time_alarm_prompt[] = { {"*PRE FCM" }, // 00000 {"*PRE PERM" }, // 00001 {"*SWING ARM" }, // 00002 {"*NO LNFLSH" }, // 00003 {"*BLK VALVE" }, // 00004 {"*BAY ALARM" }, // 00005 {"*COMP ALRM" }, // 00006 12 2 12 3 Chapter 7 – Register Operations {"*ADD ALARM" }, {"*MTR STOP" }, {"*OVERRUN" }, {"*EXCESS FL" }, {"*BSW" }, {"*TANKLEVEL"} {"*DIVERT"}, {"*SAMPELR" }, {"*INVCONFIG"} // 00007 // 00008 // 00009 // 00010 // 00011 // 00012 // 00013 // 00014 // 00015 }; ppppp – Zero-based preset number (00000-00011). Modbus: Read/Write Register=298, Len=1, 16-Bit Integer (rrrrr) Modbus: Read/Write Register=299, Len=1, 16-Bit Integer (ppppp) If type -= COMPONENT_RT_ALARM, rrrrrppppplllll Where: rrrrr – Component Real Time Alarm Parameter Type as custom_logic_component_real_time_alarm_prompt[] = { {"*COMP FCM" }, // 00000 {"*COMP PERM" }, // 00001 {"*BLK VALVE" }, // 00002 {"*UNAUTH FL" }, // 00003 {"*PUMP STAT" }, // 00004 {"*MTR ALARM" }, // 00005 {"*OVR BLEND" }, // 00006 {"*UND BLEND" }, // 00007 {"*API TABLE" }, // 00008 {"*FB PRESS" }, // 00009 }; ppppp – Zero-based preset number (00000-00011). lllll = Zero based component number (00000-00007). Modbus: Read/Write Register=298, Len=1, 16-Bit Integer (rrrrr) Modbus: Read/Write Register=299, Len=1, 16-Bit Integer (ppppp) Modbus: Read/Write Register=300, Len=1, 16-Bit Integer (lllll) If type -= METER_RT_ALARM, rrrrrppppplllll Where: rrrrr – Meter Real Time Alarm Parameter Type as custom_logic_meter_real_time_alarm_prompt[] = { {"*MTR FCM" }, // 00000 {"*MTR PERM" }, // 00001 12 4 Chapter 7 – Register Operations {"*FCM CONF" }, {"*FCM WDT" }, {"*FCM TMOUT" }, {"*VALVE FLT" }, {"*LOW FLOW" }, {"*EXCESS FL" }, {"*QUAD ENC" }, {"*DENSITY" }, {"*RTD ERROR" }, {"*VALVE CTL" }, {"*MTR CREEP" }, {"*PRES ALRM" }, {"*QUAD CH A" }, {"*QUAD CH B" }, {"*MTR COM" }, {"*GRAVITY" }, // 00002 // 00003 // 00004 // 00005 // 00006 // 00007 // 00008 // 00009 // 00010 // 00011 // 00012 // 00013 // 00014 // 00015 // 00016 // 00018 }; ppppp – Zero-based preset number (00000-00011). lllll = Zero based meter number (00000-00003). Modbus: Read/Write Register=298, Len=1, 16-Bit Integer (rrrrr) Modbus: Read/Write Register=299, Len=1, 16-Bit Integer (ppppp) Modbus: Read/Write Register=300, Len=1, 16-Bit Integer (lllll) If type -= ADDITIVE_RT_ALARM, rrrrrppppplllll Where: rrrrr – Additive Real Time Alarm Parameter Type as custom_logic_additive_real_time_alarm_prompt[] { {"*ADTV FCM" } // 00000 {"*ADTV PERM" }, // 00001 {"*UND ADTV" }, // 00002 {"*OVR ADTV" }, // 00003 {"*VALVE FLT" }, // 00004 {"*PUMP STAT" }, // 00005 {"*INJCT FLT" }, // 00006 {"*UNAUTH FL" }, // 00007 {"*NO LNFLSH" }, // 00008 {"*MTR CREEP" }, // 00009 {"*BLK VALVE" }, // 00010 }; ppppp – Zero-based preset number (00000-00011). lllll = Zero based additive number (00000-00015). Modbus: Read/Write Register=298, Len=1, 16-Bit Integer (rrrrr) Modbus: Read/Write Register=299, Len=1, 16-Bit Integer (ppppp) Modbus: Read/Write Register=300, Len=1, 16-Bit Integer (lllll) Chapter 7 – Register Operations If type -= ALWAYS_FALSE or ALWAYS_FALSE, (No Further Parameters) If type -= ASSIGN or NOT, xxxxx Where: xxxxx = Custom logic index (0000-1023). Modbus: Read/Write Register=298, Len=1, 16-Bit Integer (xxxxx) If type -= any other valid type, xxxxxyyyyy Where: xxxxx = Custom logic index (0000-1023). yyyyy = Custom logic index (0000-1023). Modbus: Read/Write Register=298, Len=1, 16-Bit Integer (xxxxx) Modbus: Read/Write Register=299, Len=1, 16-Bit Integer (yyyyy) If type -= SAMPLER_RT_ALARM, rrrrrppppplllll Where: rrrrr – Sampler Real Time Alarm Parameter Type as custom_logic_sampler_real_time_alarm_prompt[] { {"*SAMP FCM" } // 00000 {"*SAMP PERM" }, // 00001 }; ppppp – Zero-based preset number (00000-00011). lllll = Zero based sampler number (00000-00015). Modbus: Read/Write Register= 298, Len=1, 16-Bit Integer (rrrrr) Modbus: Read/Write Register= 299, Len=1, 16-Bit Integer (ppppp) Modbus: Read/Write Register= 300, Len=1, 16-Bit Integer (lllll) If type -= TANK_RT_ALARM, rrrrrppppplllll Where: rrrrr – Tank Real Time Alarm Parameter Type as custom_logic_tank_real_time_alarm_prompt[] { {"*TANK FCM" } // 00000 {"*HHLEVEL" }, // 00001 {"*HLEVEL" }, // 00002 {"*LLEVEL" }, // 00003 {"*LLLEVEL" }, // 00004 {"*TK VALVE" }, // 00005 }; ppppp – Zero-based preset number (00000-00011). lllll = Zero based sampler number (00000-00015). Modbus: Read/Write Register= 298, Len=1, 16-Bit Integer (rrrrr) Modbus: Read/Write Register= 299, Len=1, 16-Bit Integer (ppppp) 12 5 Chapter 7 – Register Operations Modbus: Read/Write Register= 300, Len=1, 16-Bit Integer (lllll) If type -= PRESET_TOTALIZER_RT, rrrrrppppp Where: rrrrr – Preset Totalizer Real Time Parameter Type as custom_logic_preset_totalizer_real_time_prompt[] { {"GrossTotalizer" } // 00001 {"NetTotalizer" } // 00002 {"MassTotalizer" } // 00003 {"AuthGrossTot" } // 00004 {"AuthNetTot" } // 00005 {"AuthMassTot" } // 00006 {"UnauthGrossTot" } // 00007 {"UnauthNetTot" } // 00008 {"UnauthMassTot" } // 00009 {"RGrossTotalizer"} // 00010 {"RNetTotalizer" } // 00011 {"RMassTotalizer" } // 00012 {"RAuthGrossTot" } // 00013 {"RAuthNetTot" } // 00014 {"RAuthMassTot" } // 00015 {"RUnauthGrossTot"} // 00016 {"RUnauthNetTot" } // 00017 {"RUnauthMassTot" } // 00018 }; ppppp – Zero-based preset number (00000-00011). Modbus: Read/Write Register=298, Len=1, 16-Bit Integer (rrrrr) Modbus: Read/Write Register=299, Len=1, 16-Bit Integer (ppppp) If type -= METER_TOTALIZER_RT, rrrrrppppplllll Where: rrrrr – Meter Totalizer Real Time Parameter Type as custom_logic_meter_totalizer_real_time_prompt[] { {"GrossTotalizer" } // 00000 {"AuthGrossTot" } // 00001 {"UnauthGrossTot" } // 00002 {"CreepGrossTot" } // 00003 {"BckflwGrossTot" } // 00004 {"RGrossTotalizer"} // 00005 {"RAuthGrossTot" } // 00006 {"RUnauthGrossTot"} // 00007 {"RCreepGrossTot" } // 00008 12 6 12 7 Chapter 7 – Register Operations {"RBckflwGrossTot"} // 00009 }; ppppp – Zero-based preset number (00000-00011). lllll = Zero based meter number (00000-0005). Modbus: Read/Write Register=298, Len=1, 16-Bit Integer (rrrrr) Modbus: Read/Write Register=299, Len=1, 16-Bit Integer (ppppp) Modbus: Read/Write Register= 300, Len=1, 16-Bit Integer (lllll) If type -= COMPONENT_TOTALIZER_RT, rrrrrppppplllll Where: rrrrr – Component Totalizer Real Time Parameter Type as custom_logic_component_totalizer_real_time_prompt[] { {"GrossTotalizer" } // 00001 {"NetTotalizer" } // 00002 {"MassTotalizer" } // 00003 {"AuthGrossTot" } // 00004 {"AuthNetTot" } // 00005 {"AuthMassTot" } // 00006 {"UnauthGrossTot" } // 00007 {"UnauthNetTot" } // 00008 {"UnauthMassTot" } // 00009 {"RGrossTotalizer"} // 00010 {"RNetTotalizer" } // 00011 {"RMassTotalizer" } // 00012 {"RAuthGrossTot" } // 00013 {"RAuthNetTot" } // 00014 {"RAuthMassTot" } // 00015 {"RUnauthGrossTot"} // 00016 {"RUnauthNetTot" } // 00017 {"RUnauthMassTot" } // 00018 }; ppppp – Zero-based preset number (00000-00011). lllll = Zero based component number (00000-00008). Modbus: Read/Write Register=298, Len=1, 16-Bit Integer (rrrrr) Modbus: Read/Write Register=299, Len=1, 16-Bit Integer (ppppp) Modbus: Read/Write Register= 300, Len=1, 16-Bit Integer (lllll) If type -= ADDITIVE_TOTALIZER_RT, rrrrrppppplllll Where: rrrrr – Additive Totalizer Real Time Parameter Type as custom_logic_additive_totalizer_real_time_prompt[] 12 8 Chapter 7 – Register Operations { {"GrossTotalizer" } {"AuthGrossTot" } {"UnauthGrossTot" } {"CreepGrossTot" } {"RGrossTotalizer"} {"RAuthGrossTot" } {"RUnauthGrossTot"} {"RCreepGrossTot" } // 00000 // 00001 // 00002 // 00003 // 00004 // 00005 // 00006 // 00007 }; ppppp – Zero-based preset number (00000-00011). lllll = Zero based additive number (00000-00015). Modbus: Read/Write Register=298, Len=1, 16-Bit Integer (rrrrr) Modbus: Read/Write Register=299, Len=1, 16-Bit Integer (ppppp) Modbus: Read/Write Register= 300, Len=1, 16-Bit Integer (lllll) If type -= SAMPLER_TOTALIZER_RT, rrrrrppppplllll Where: rrrrr – Sampler Totalizer Real Time Parameter Type as custom_logic_sampler_totalizer_real_time_prompt[] { {"GrossTotalizer" } // 00000 {"RGrossTotalizer"} // 00001 }; ppppp – Zero-based preset number (00000-00011). lllll = Zero based sampler number (00000-00003). Modbus: Read/Write Register=298, Len=1, 16-Bit Integer (rrrrr) Modbus: Read/Write Register=299, Len=1, 16-Bit Integer (ppppp) Modbus: Read/Write Register= 300, Len=1, 16-Bit Integer (lllll) 7.1.15 107 – CUSTOM LOGIC VALUE REGISTERS R107aaaaa => 0?0107aaaaavvvvvvvvv U107aaaaavvvvvvvvv => 0?0107aaaaa (ONLY if the custom logic line is an external input) Where: aaaaa = The specified zero-based custom logic index (0000-1023). vvvvvvvvv = The value read or to be written to the custom logic line. Modbus: Read/Write Register=12000 +(aaaaa*2), Len=2, 32-Bit Integer (vvvvvvvvv) This will return the value out of custom logic. 7.1.16 200 – STAND ALONE BOL DEFINITION REGISTERS R200 => 0?0200aabbccddeeff Chapter 7 – Register Operations U200aabbccddeeff => 0?0200 Where: aabb = BOL Line and Position Number for the BOL Number ccdd = BOL Line and Position Number for the Card Number eeff = BOL Line and Position Number for the Company Modbus: Read/Write Register=350, Len=1, 16-Bit Integer (aa) Read/Write Register=351, Len=1, 16-Bit Integer (bb) Read/Write Register=352, Len=1, 16-Bit Integer (cc) Read/Write Register=353, Len=1, 16-Bit Integer (dd) Read/Write Register=354, Len=1, 16-Bit Integer (ee) Read/Write Register=355, Len=1, 16-Bit Integer (ff) R201 => 0?0201aabbccddeeffgghh U201aabbccddeeffgghh => 0?0201 Where: aabb = BOL Line and Position Number for the Load Date ccdd = BOL Line and Position Number for the Load Start Time eeff = BOL Line and Position Number for the Load End Time gghh = BOL Line and Position Number for the Corrected To Modbus: Read/Write Register=356, Len=1, 16-Bit Integer (aa) Read/Write Register=357, Len=1, 16-Bit Integer (bb) Read/Write Register=358, Len=1, 16-Bit Integer (cc) Read/Write Register=359, Len=1, 16-Bit Integer (dd) Read/Write Register=360, Len=1, 16-Bit Integer (ee) Read/Write Register=361, Len=1, 16-Bit Integer (ff) Read/Write Register=362, Len=1, 16-Bit Integer (gg) Read/Write Register=363, Len=1, 16-Bit Integer (hh) R202 => 0?0202aabbccddeeff U202aabbccddeeff => 0?0202 Where: aabb = BOL Line and Position Number for the Hazard Message Modbus: Read/Write Register=364, Len=1, 16-Bit Integer (aa) Read/Write Register=365, Len=1, 16-Bit Integer (bb) R203 => 0?0203aabbccddeeffgghhiijjkk U203aabbccddeeffgghhiijjkk => 0?0203 Where: aa = BOL Line Number to Start Product Totals bb = BOL Position Number for the Product Code cc = BOL Position Number for the Product Description dd = BOL Position Number for the Product Gross Volume 12 9 Chapter 7 – Register Operations ee = BOL Position Number for the Product Net Volume ff = BOL Position Number for the Product Average Temp gg = BOL Position Number for the Product Preset Number hh = BOL Position Number for the Product Gravity/Density ii = BOL Position Number for the Product Pressure jj = BOL Position Number for the Product Alarm kk = BOL Position Number for the Compartment Number ll = BOL Position Number for the Exp Coeff mm = BOL Position Number for the Corrected Gravity nn = BOL Position Number for the Vcf Factor oo = BOL Position Number for the BSW pp = BOL Position Number for Batch Number qq =BOL Position Number for Product Mass Volume rr =BOL Position Number for Ctl ss =BOL Position Number for Cpl Modbus: Read/Write Register=366, Len=1, 16-Bit Integer (aa) Read/Write Register=367, Len=1, 16-Bit Integer (bb) Read/Write Register=368, Len=1, 16-Bit Integer (cc) Read/Write Register=369, Len=1, 16-Bit Integer (dd) Read/Write Register=370, Len=1, 16-Bit Integer (ee) Read/Write Register=371, Len=1, 16-Bit Integer (ff) Read/Write Register=372, Len=1, 16-Bit Integer (gg) Read/Write Register=373, Len=1, 16-Bit Integer (hh) Read/Write Register=374, Len=1, 16-Bit Integer (ii) Read/Write Register=375, Len=1, 16-Bit Integer (jj) Note: Exp Coeff, Corrected Gravity , Vcf Factor, BSW, Batch Number, Product Mass Volume, Ctl and Cpl not available for Modbus use. R204 => 0?0204aabbccdd U204aabbccddeeff => 0?0204 Where: aabb = BOL Line and Position Number for the Total Product Gross Volume ccdd = BOL Line and Position Number for the Total Product Net Volume eeff = BOL Line and Position Number for the Total Product Mass Volume Modbus: Read/Write Register=376, Len=1, 16-Bit Integer (aa) Read/Write Register=377, Len=1, 16-Bit Integer (bb) Read/Write Register=378, Len=1, 16-Bit Integer (cc) Read/Write Register=379, Len=1, 16-Bit Integer (dd) Read/Write Register=N/A, Len=1, 16-Bit Integer (ee) Read/Write Register=N/A, Len=1, 16-Bit Integer (ff) Note: 13 0 Chapter 7 – Register Operations Mass Positions are not available via Modbus protocol Note: R300iiill => 0?0300iiill… U300iiill… => 0?0300iiill Where: iii = BOL Literal Line Index (0-29) For Modbus, the Modbus Custom Logic Index Register sets the iii index. Modbus: Read/Write Register=417, Len=1, 16-Bit Integer (iii) ll = BOL Line Number … = Literal String (Max 80 Characters) Modbus: Read/Write Register=418, Len=1, 16-Bit Integer (ll) Read/Write Register=419, Len=80, Characters (…) Note: Last Register Used=498 R410iil => 0?0410iilaabbcc… U410iilaabbcc… => 0?0410iil Where: ii = Prompt Index (0-3) l = Language Index (0-8) aa = Input Length (0-19) bbcc = BOL Line and Position Number … = Prompt String (Max 20 Characters) Modbus: l = Language Index (0-1) Read/Write Register=550+23*(2*ii+l), Len=1, 16-Bit Integer (aa) Read/Write Register=551+23*(2*ii+l), Len=1, 16-Bit Integer (bb) Read/Write Register=552+23*(2*ii+l), Len=1, 16-Bit Integer (cc) Read/Write Register=553+23*(2*ii+l), Len=20, Characters (…) Read/Write Register=554+23*(2*ii+l), Len=20, Characters (…) Note: Last Prompt Register Used=733 Note: Prompt5 cannot be updated via Modbus R420iii => 0?0420iii… U420iii… => 0?0420iii Where: iii = Hazard Index (0-4) … = Hazard String (Max 40 Characters) Modbus: Read/Write Register=734+40*iii, Len=40, Characters (…) Note: Last Register Used=833 13 1 Chapter 7 – Register Operations 7.1.17 800 – TRANSACTION ARCHIVE REGISTERS R005 => 0?0BBBBB Where: BBBBB = BOL Transaction Number of Current or Last Transaction completed. Modbus: Read Only Register=48, Len=1, 16-Bit Integer Note: Note: R800BBBBII => 0?0800BBBBII… (or) R800BBBBIIII => 0?0800BBBBIIII… Where: BBBB = BOL Transaction Number For Modbus, the Modbus Transaction Number Index Register sets the BBBB index. Modbus: Read/Write Register=7800, Len=1, 16-Bit Integer (BBBB) II (or) IIII = BOL Detail Line Index For Modbus, the Modbus Transaction Detail Index Register sets the IIII index. Modbus: Read/Write Register=7801, Len=1, 16-Bit Integer (IIII) … = Type Specific Parameters if BOL Detail Line Index = 00, IIBBBBnnnn(10)oosssspppptttteeaaaa(25)bbbb(25)cccc(25)dddd(25)eeee(25) (or) IIIIBBBBnnnn(10)oosssspppptttteeaaaa(25)bbbb(25)cccc(25)dddd(25) eeee(25) II (or) IIII = BOL Detail Line Index BBBB = BOL Transaction Number nnnn = Card Number (10 Characters) oo = Company Number ssss = Load Start Time pppp = Load Stop Time tttt = Load Date ee = Number of Details in Transaction aaaa = Driver Prompt #1 Value (25 Characters) bbbb = Driver Prompt #2 Value (25 Characters) cccc = Driver Prompt #3 Value (25 Characters) dddd = Driver Prompt #4 Value (25 Characters) eeee = Driver Prompt #5 Value (25 Characters) Modbus: Read/Write Register=7810, Len=2, 32-Bit Integer (nnnn) Read/Write Register=7812, Len=1, 16-Bit Integer (oo) Read/Write Register=7813, Len=1, 16-Bit Integer (ssss) Read/Write Register=7814, Len=1, 16-Bit Integer (pppp) Read/Write Register=7815, Len=1, 16-Bit Integer (tttt) Read/Write Register=7816, Len=1, 16-Bit Integer (ee) Read/Write Register=7817, Len=25, Characters (aaaa) 13 2 Chapter 7 – Register Operations Read/Write Register=7842, Len=25, Characters (bbbb) Read/Write Register=7867, Len=25, Characters (cccc) Read/Write Register=7892, Len=25, Characters (dddd) Read/Write Register=N/A, Len=25, Characters (eeee) if BOL Detail Line Index > 00, IIBBBBppptthhhccccccgggggggggnnnnnnnnnttttddddmmrrrrssssssttttuuuuuuvvvvvww wxxxxxxxxzzzzzzzzzaaaaabbbbbbccccccddddd (or) IIIIBBBBppptthhhccccccgggggggggnnnnnnnnnttttddddmmrrrrssssssttttuuuuuuvvvvvww wxxxxxxxxxzzzzzzzzzaaaaabbbbbbccccccdddddeeeeee II (or) IIII = BOL Detail Line Index BBBB = BOL Transaction Number ppp = Preset Number tt = Detail Type, ‘1’ – Saleable Product, ‘2’ – Component, ‘3’ – Additive, ‘4’ – Meter, ‘5’ – Sampler, ‘6’ – Free, ‘7’ – Preset Totalizer, ‘8’ – Meter Totalizer, ‘9’ – Component Totalizer, ‘10’ – Additive Totalizer ‘11’ – Sampler Totalizer ‘12’ – Free Totalizer hhh = Legacy Header Index (not used) cccccc = Product Code ggggggggg = Gross Volume nnnnnnnnn = Net Volume Note: if the Use Hundredths W&M RCU parameter is enabled, the gross and net quantity value will have an implied two decimal places. tttt = Average Temp dddd = Gravity or Density (do not use for relative density) mm = Compartment rrrr = Average Pressure ssssss = api_expansion_coef_tenths ttttt = corrected_densitygravity uuuuuu = volume_correction_factor vvvvv = bsw_hund wwww = alibilog_alarm xxxxxxxxx = batch_number zzzzzzzzz = mass_del aaaaa = temperature in hunds bbbbbb = ctl cccccc = cpl 13 3 13 4 Chapter 7 – Register Operations ddddd = Gravity or Density or Relative Density eeeeee = average pressure in hundredths Modbus: Read/Write Register=7810, Len=1, 16-Bit Integer (ppp) Read/Write Register=7811, Len=1, 16-Bit Integer (tt) Read/Write Register=7812, Len=6, Characters (cccccc) Read/Write Register=7818, Len=2, 32-Bit Integer (ggggggggg) Read/Write Register=7820, Len=2, 32-Bit Integer (nnnnnnnnn) Read/Write Register=7822, Len=1, 16-Bit Integer (ttttt) Read/Write Register=7823, Len=1, 16-Bit Integer (dddd) Read/Write Register=7824, Len=1, 16-Bit Integer (mm) Read/Write Register=7825, Len=1, 16-Bit Integer (rrrr) Read/Write Register=7826, Len=1, 16-Bit Integer (sssss) Read/Write Register=7827, Len=1, 16-Bit Integer (tttt) Read/Write Register=7828, Len=1, 16-Bit Integer (uuuuu) Read/Write Register=7829, Len=1, 16-Bit Integer (vvvvv) Read/Write Register=7830, Len=1, 16-Bit Integer (wwww) Read/Write Register=7831, Len=1, 16-Bit Integer (xxxxxxx) Read/Write Register=7832, Len=1, 16-Bit Integer (zzzzzzzzz) Read/Write Register=7833, Len=1, 16-Bit Integer (aaaaa) Read/Write Register=7834, Len=1, 16-Bit Integer (bbbbb) 7.2 7.2.1 SPECIAL PURPOSE REGISTERS 000 – MULTILOAD FIRMWARE VERSION R000 => 0?0sssssssssssssssssss Where: sssssssssssssssssss = Firmware Identification 000MultiLoad II v3.31.xx Jan 000MultiLoad II v4.31.xx Jan 000MultiLoad 1Arm v3.31.xx Jan 000MultiLoad 1Arm v4.31.xx Jan 000MultiLoad Mobl v3.31.xx Jan 000MultiLoad Mobl v4.31.xx Jan 000MultiLoad SMP v3.31.xx Jan 000MultiLoad SMP v4.31.xx Jan xx xx xx xx xx xx xx xx 2011 2011 2011 (discontinued) 2011 (discontinued) 2011 2011 2011 2011 Modbus: Read Only Register=000, Len=35, Characters (sssssssssssssssssss) 7.2.2 001 – DATE AND TIME R001 => 0?0001YYMMDDHHMMSS U001YYMMDDHHMMSS => 0?0 Where: YY = Year (00-99). MM = Month (01-12) Chapter 7 – Register Operations DD = Day (01-32) HH = Hours (00-23) MM = Minutes (00-59) SS = Seconds (00-59) Note: Update will only occur if new time is different from current time by number of seconds specified by R014 (Min Time Change Secs). Modbus: Read/Write Register=035, Len=12, Characters (YYMMDDHHMMSS) 7.2.3 003 – FCM POLL RATE R003 => 0?0DD Where: DD = Average number of FCMs polled per second. Modbus: Read Only Register=047, Len=1, 16-Bit Integer 7.2.4 005 – CURRENT BOL/TICKET NUMBER R005 => 0?0DDDDD Where: DDDDD = Current BOL/Ticket Number. Modbus: Read Only Register=048, Len=1, 16-Bit Integer 7.2.5 070 – ETHERNET ENABLE R070 => 0?0070DDDDDDDDD U070DDDDDDDDD => 0?0 Where: DDDDDDDDD = (000000000 = Disabled), (000000001 = Enabled) Modbus: Read/Write Register=049, Len=1, 16-Bit Integer 7.2.6 071 – IP ADDRESS R071 => 0?0071DDD.DDD.DDD.DDD U071DDD.DDD.DDD.DDD => 0?0 Where: DDD.DDD.DDD.DDD = IP Address Modbus: Read/Write Register=050, Len=2, 32-Bit Integer (4 8-bit numbers) 7.2.7 072 – IP MASK R072 => 0?0072DDD.DDD.DDD.DDD U072DDD.DDD.DDD.DDD => 0?0 Where: DDD.DDD.DDD.DDD = IP Mask Modbus: Read/Write Register=052, Len=2, 32-Bit Integer (4 8-bit numbers) 7.2.8 073 – IP GATEWAY R073 => 0?0073DDD.DDD.DDD.DDD 13 5 Chapter 7 – Register Operations U073DDD.DDD.DDD.DDD => 0?0 Where: DDD.DDD.DDD.DDD = IP Gateway Modbus: Read/Write Register=054, Len=2, 32-Bit Integer (4 8-bit numbers) 7.2.9 074 – IP HOST R074 => 0?0074DDD.DDD.DDD.DDD U074DDD.DDD.DDD.DDD => 0?0 Where: DDD.DDD.DDD.DDD = IP Host Modbus: Read/Write Register=056, Len=2, 32-Bit Integer (4 8-bit numbers) 7.2.10 076 – ADMIN PASSWORD Use the Extended Service Register to change the value 7.2.11 077 – USER PASSWORD Use the Extended Service Register to change the value 7.2.12 085 – MODEM INITIALIZATION STRING R085 => 0?0085SSS... U085SSS… => 0?0 Where: SSS = ASCII Modem Initialization String (Default "AT&F0&B1&C1&D0S0=1") Modbus: Read/Write Register=058, Len=40, Characters (SSS…), Null Terminated 7.2.13 091..093 – COMMUNICATION PORT PARAMETERS R09p => 0?009pSDPTAC U09pSDPTAC => 0?0 Where: p = Communication Port (1-3) S = Communication Speed ‘0’ = 300 BAUD ‘1’ = 1200 BAUD ‘2’ = 2400 BAUD ‘3’ = 4800 BAUD ‘4’ = 9600 BAUD ‘5’ = 19.2K BAUD ‘6’ = 38.4K BAUD ‘7’ = 57.6K BAUD ‘8’ = 115K BAUD ‘9’ = 230K BAUD D = Data Bits ‘0’ = 7 Data Bits 13 6 Chapter 7 – Register Operations ‘1’ = 8 Data Bits P = Parity ‘0’ = None ‘1’ = Odd ‘2’ = Even T = Stop Bits ‘1’ = 1 Stop Bit ‘2’ = 2 Stop Bits A = Port Assignment ‘0’ = Not in Use ‘1’ = Host ‘2’ = FCMs ‘3’ = Printer ‘4’ = Event Log Printer ‘5’ = Ethernet Pass Thru ‘6’ = Alibi Log ‘7’ = MASS METER PORT ‘8’ = ALIBI LOG PTB PORT ‘9’ = GPS (MultiLoad Mobile Only) C = Connection Type ‘0’ = Single/Master ‘1’ = Multi-dropped Slave ‘2’ = 2-Wire RS485 Modbus: p=0, Read/Write Register=243, Len=6, Characters (SDPTAC) p=1, Read/Write Register=249, Len=6, Characters (SDPTAC) p=2, Read/Write Register=255, Len=6, Characters (SDPTAC) 7.2.14 094 – 095 NETWORK PRINTER NUMBER OF COPIES R09p => 0?009p########## U09p# => 0?0 Where: p = Printer #1: 4 and Printer #2: 5 # = Number of copies (When reading, the return value is padded to ensure 9 digits are returned) 7.2.15 112 - REAL-TIME PRESET TOTAL GROSS TOTALIZERS R112ppp => 0?0112pppPPPPPPPPPMMMMMMMMM…CCCCCCCCC…AAAAAAAAA Where: ppp = The specified zero-based preset or load arm number (000-011). PPPPPPPPP = Preset Total Gross Totalizer MMMMMMMMM… = Meter Total Gross Totalizers (at least 4 meters, 9 digits per totalizer.) CCCCCCCCC… = Component Total Gross Totalizers (8 components, 9 digits per totalizer.) 13 7 Chapter 7 – Register Operations Note: if the Use Hundredths W&M RCU parameter is enabled, the preset, meter and component gross quantity values will have an implied two decimal places. AAAAAAAAA… = Additive Total Gross Totalizers in Thousands, (16 additives, 9 digits per totalizer.) Modbus: Where: p = preset (0-11), m = meter (0-4), c = component (0-7), a=additive (0-15) Read Only Registers=3000+2*p, Len=2, 32-Bit Integer (PPPPPPPPP) Read Only Registers=3024+2*(5*p+m), Len=2, 32-Bit Integer (MMMMMMMMM) Read Only Registers=3144+2*(8*p+c), Len=2, 32-Bit Integer (CCCCCCCCC) Read Only Registers=3336+2*(16*p+a), Len=2, 32-Bit Integer (AAAAAAAAA) Note: Last Gross Totalizer register used=3719 7.2.16 113 - REAL-TIME PRESET TOTAL NET TOTALIZERS R113ppp => 0?0113pppPPPPPPPPPCCCCCCCCC… Where: ppp = The specified zero-based preset or load arm number (000-011). PPPPPPPPP = Preset Total Net Totalizer CCCCCCCCC… = Component Total Net Totalizers (8 components, 9 digits per totalizer.) Note: if the Use Hundredths W&M RCU parameter is enabled, the preset and component net quantity values will have an implied two decimal places. Modbus: Where: p = preset (0-11), c = component (0-7) Read Only Registers=3720+2*p, Len=2, 32-Bit Integer (PPPPPPPPP) Read Only Registers=3744+2*(8*p+c), Len=2, 32-Bit Integer (CCCCCCCCC) Note: Last Net Totalizer register used=3935 7.2.17 114 - REAL-TIME PRESET TOTAL MASS TOTALIZERS R114ppp => 0?0114pppPPPPPPPPPCCCCCCCCC… Where: ppp = The specified zero-based preset or load arm number (000-011). PPPPPPPPP = Preset Total Mass Totalizer CCCCCCCCC… = Component Total Mass Totalizers (8 components, 9 digits per totalizer.) Note: if the Use Hundredths W&M RCU parameter is enabled, the preset and component mass quantity values will have an implied two decimal places. Modbus: Where: p = preset (0-11), c = component (0-7) Read Only Registers=11720+2*p, Len=2, 32-Bit Integer (PPPPPPPPP) Read Only Registers=11744+2*(8*p+c), Len=2, 32-Bit Integer (CCCCCCCCC) Note: Last Mass Totalizer register used=11935 7.2.18 120 - REAL-TIME SAMPLER TOTAL GROSS TOTALIZERS R120ppp => 0?0112pppSSSSSSSSS Where: ppp = The specified zero-based preset or load arm number (000-011). SSSSSSSSS = Sampler Total Gross Totalizer Note: if the Use Hundredths W&M RCU parameter is enabled, the preset and component mass quantity values will have an implied two decimal places. 13 8 Chapter 7 – Register Operations Modbus: Not available 7.2.19 129 – FCM LOW LEVEL METER STATUS R129fff => 0?0129fff,pppppppp,kkkk,mmmm,wwww,hhhhhhhh Where: fff = FCM number (000-031). pppppppp = current number of meter pulses received (in hex) in the current active batch. kkkk = configured Meter K-Factor (in hex). mmmm = current Meter Factor (in hex, 4 implied decimal places) based on the current flow rate. wwww = current Weighted Meter Factor (in hex with 4 implied decimal places) in the current active batch. hhhhhhhh = current gross delivered volume in hundredths (in hex with 2 implied decimal places) in the current active batch. Modbus: Not available 7.2.20 133 – FCM IO ACCESS R133fffppp => 0?0133fffpppc… Where: fff = FCM number (000-031). ppp = FCM port number (0-35) c = FCM com, ‘0’ FCM COM ok, ‘1’ FCM COM error. … = Type Specific Replies if FCM port number is 0..7, d Where: d= State of Digital Port (‘0’ – Off, ‘1’ – On) if FCM port number is 8, fffff Where: ffff = Raw frequency/digital value from Opto 22 Analog Module if FCM port number is 9, sfffff Where: sttttt = Temp in Hundreds from Opto 22 RTD Analog Module (no offset added) if FCM port number is 10, sttttt Where: sttttt = Temp in Hundreds from Toptech RTD Module, FCM II or I/O Board (no offset added) Note: All Temps in C or F depending on Register R100003 ("Temps in F"). if FCM port number is 20..35, d (this is used to access I/O board ports and FCM II expander ports > 7) Where: d = State of Digital Port (s-20) (‘0’ – Off, ‘1’ – On) 13 9 Chapter 7 – Register Operations Modbus: Supported through Modbus Extended Services Registers. U133fffpppd => 0?0133fff Where: fff = FCM number (000-031). ppp = FCM port number (0-35) d = Set new state of digital port (‘0’ – Off, ‘1’ – On) Note: States commanded with R133 are OR’d with any other functionality already assigned to the port) 7.2.21 134 – DISCRETE PARAMETER SECURITY SETTINGS R134rrr => 0?0134rrrsssssssss Where: rrr = generic register numbered function sssssssss = Security level (zero leading 0-9 relating to 1-10 viewable level) Modbus: Not Supported U134rrrs => 0?0134rrr Where: rrr = generic or special purpose register numbered function s = Set security level (0-9) this can be formatted with up to 8 leading zeroes. See the tables throughout chapter 7.1 to identify the sub levels of each topic to read or write the security level: RCU 0-99 Bay 100 Preset 101 Meter 102 Component 103 Additive 104 Sampler 115 Tank 111 Password Security 116 Reports 117 7.2.22 135 – GROUP PARAMETER SECURITY SETTINGS R135rrr => 0?0135rrrsssssssss Where: rrr = generic register numbered function sssssssss = Security level (zero leading 0-9 relating to 1-10 viewable level) Modbus: 14 0 Chapter 7 – Register Operations Not Supported U135rrrs => 0?0135rrr Where: rrr = generic register numbered function s = Set security level (0-9) this can be formatted with up to 8 leading zeroes. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Communications Network Alarms Custom Logic Access ID Date Time Trace Alibi Labels Hazard Labels Prompts BOL SD Card Host Factory Defaults 7.2.23 136 – ACCESS PARAMETER SECURITY SETTINGS R136rrr => 0?0136rrrsssssssss Where: rrr = generic register numbered function sssssssss = Security level (zero leading 0-9 relating to 1-10 viewable level) Modbus: Not Supported U136rrrs => 0?0136rrr Where: rrr = generic register numbered function s = Set security level (0-9) this can be formatted with up to 8 leading zeroes. 0 1 2 3 4 5 6 Com0 Com1 Com2 Network Custom Logic Modbus RTU Modbus TCP Note: these elements can only be set by an ADMIN level. This can be set from the ML front panel by an admin or by an external access (this list) providing it is set to ADMIN level. 14 1 Chapter 7 – Register Operations 7.2.24 140 –CURRENT LATITUDE/LONGITUDE POSITION REGISTERS (MULTILOAD MOBILE ONLY) R140 => 0?0140+lllllllll+ooooooooo Where: +lllllllll = Current Latitude Position. +ooooooooo = Current Longitude Position. Note: Latitude format (S 90 to N 90) is: if Latitude >= 0 then "N" else "S" integer_degrees = abs(Latitude) / 60000 float_minutes = (abs(Latitude) % 60000) / 1000 Note: Longitude format (180 E to 180 W) is: if Longitude >= 0 then "E" else "W" integer_degrees = abs(Longitude) / 60000 float_minutes = (abs(Longitude) % 60000) / 1000 Note: Latitude & Longitude = 999999999 when no valid data available. Modbus: Read Only Registers=310, Len=2, 32-Bit Signed Integer (+lllllllll) Read Only Registers=312, Len=2, 32-Bit Signed Integer (+ooooooooo) 7.2.25 141 – CURRENT TRANSACTION LATITUDE/LONGITUDE/SITE INDEX REGISTERS (MULTILOAD MOBILE ONLY) R141 => 0?0141+lllllllll+ooooooooosssssssss Where: +lllllllll = Current Transaction Latitude Position. +ooooooooo = Current Transaction Longitude Position. sssssssss = Current Transaction Site Index (GPS Site Database). Note: Updated on transaction authorization (T<esc>A). Note: Latitude format (S 90 to N 90) is: if Latitude >= 0 then "N" else "S" integer_degrees = abs(Latitude) / 60000 float_minutes = (abs(Latitude) % 60000) / 1000 Note: Longitude format (180 E to 180 W) is: if Longitude >= 0 then "E" else "W" integer_degrees = abs(Longitude) / 60000 float_minutes = (abs(Longitude) % 60000) / 1000 Note: Site Index = +999999999 when no site match exists. Modbus: Read Only Registers=314, Len=2, 32-Bit Signed Integer (+lllllllll) Read Only Registers=316, Len=2, 32-Bit Signed Integer (+ooooooooo) Read Only Registers=318, Len=2, 32-Bit Unsigned Integer (sssssssss) 7.2.26 400 - PRESET DEFINITION REGISTERS R400ppp => 0?0400pppNNNNNNNNNNCCC…AAA…PPP…RRR… U400pppNNNNNNNNNNCCC…AAA…PPP… => 0?0 14 2 Chapter 7 – Register Operations Where: ppp = The specified zero-based preset or load arm number (000-011). NNNNNNNNNN = 10 Character Preset Name CCC… = Component Product Index (500 register) for each component (8 component indices, 3 digits per index.) AAA… = Additive Product Index (500 register) for each additive (16 additive indices, 3 digits per index.) RRR… = Standalone Authorized Product Index (500 register) (33 product indices, 3 digits per index.) Modbus: Where: p = preset (0-11), c = component (0-7), a = additive (0-15) Read/Write Registers=8000+67*p, Len=10, Characters (NNNNNNNNNN), Null Terminated Read/Write Registers=8010+67*p+c, Len=1, 16-Bit Integer (CCC…) Read/Write Registers=8018+67*p+a, Len=1, 16-Bit Integer (AAA…) Read/Write Registers=8034+67*p+r, Len=1, 16-Bit Integer (RRR…) Note: Last Preset Definition register used=8805 7.2.27 401 – EXTERNAL PRESET DISPLAY REGISTER R401ppp => 0?0401pppllllllllllPPPPPPPPPVVVVVVVVVssssssssss U401pppllllllllllPPPPPPPPPVVVVVVVVVssssssssss => 0?0 Where: ppp = external preset number, number must follow last multiload preset # defined. llllllllll = 10 character product string. PPPPPPPPP = 9 character preset volume (note only digits will be displayed). VVVVVVVVV = 9 character delivered volume (note only digits will be displayed). ssssssssss = 10 character status string. This interface will allow a host to display other preset volumes, separate from ML values on the load screen. These values will be maintained in a different color to clearly establish them as not legal relevant and that they should not be used for trade. A new bay parameter "Number External Presets" is used to specify how many external presets should be displayed. External Preset Load Screen Data will be updated when this command is received. When an external preset is selected, the state will go to a 'a'-'h' matching the preset number. MAMppp - can be sent by the host to return to the load screen when done driving the screen. Modbus: Supported through Modbus Extended Services Registers. 7.2.28 402 – TANK DEFINITION REGISTER R402ttt => 0?0402tttllllllllllPPP U402tttllllllllllPPP => 0?0 Where: ttt = tank number, number must follow last multiload tank # defined. llllllllll = 10 character product string. PPP = product idx This interface will update the tank name as also it will link the base component to the tank. 14 3 Chapter 7 – Register Operations 7.2.29 500 - PRODUCT DEFINITION REGISTERS Note: R500iii => 0?0500iiiHCCCCCCLLLLLLLLLLLLLLLLLLLLLLLLLDDDDDDDDDDCCCPPPPP…AAAPPPPP… U500iiiHCCCCCCLLLLLLLLLLLLLLLLLLLLLLLLLDDDDDDDDDDCCCPPPPP…AAAPPPPP… => 0?0 Where: iii = The specified zero based product index (000-099). For Modbus, the Modbus Product Definition Index Register sets the iii index. Modbus: Read/Write Register=2200, Len=1, 16-Bit Integer (iii) H = Hazard Index (standalone use only). CCCCCC = 6 Character Product Code. LLLLLLLLLLLLLLLLLLLLLLLLL = 25 Character Long Product Description. DDDDDDDDDD = 10 Character Product Description. CCCPPPPP = Component Product Definition Index (CCC) & Component Percent with an implied two decimal places (i.e. 01234 => 012.34%) (8 component CCCPPPPP pairs). AAAPPPPP = Additive Product Definition Index (AAA) & Additive Percent with an implied four decimal places (i.e. 12345 => 1.2345%) (up to 12 additive AAAPPPPP pairs). Note: Max Additive Percentage is 6.5535%. Modbus: Where: c = component (0-7), a = additive (0-11) Read/Write Register=2201, Len=1, 16-Bit Integer (H) Read/Write Register=2202, Len=6, Characters (CCCCCC) Read/Write Register=2208, Len=25, Characters (LLLLLLLLLLLLLLLLLLLLLLLLL) Read/Write Register=2233, Len=10, Characters (DDDDDDDDDD) Read/Write Register=2243+2*c, Len=1, 16-Bit Integer (CCC) Read/Write Register=2244+2*c, Len=1, 16-Bit Integer (PPPPP) Read/Write Register=2259+2*a, Len=1, 16-Bit Integer (AAA) Read/Write Register=2260+2*a, Len=1, 16-Bit Integer (PPPPP) Note: Last Product Definition register used=2271 (only 6 additives) 7.2.30 600 - STANDALONE DRIVER CARD DATABASE Note: R600iii => 0?0600iiiccccccccppppmmlbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaarrrr U600iiiccccccccppppmmlbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaarrrr => 0?0 Where: iii = Card database index (1 – 300) For Modbus, the Modbus Card Database Index Register sets the iii index. Modbus: Read/Write Register=2300, Len=1, 16-Bit Integer (iii) cccccccc = Card Number pppp = PIN Number mm = Company Id (unused) l = Language Index (0 or 1) bbbbbbbbbbbbbbbb = Preset lockouts as 16 bit binary number (For example 0000000000000011 = preset 1 & 2 locked out for driver) aaaaaaaaaaaaaaaa = Special Access as 16 bit binary number 14 4 Chapter 7 – Register Operations (For example 0000000000000001 = Sample Batch Access is enabled) rrrr = Driver Authorized Product Index (0 means All products, anything else is the index into the list of the 100 product recipes) Modbus: Read/Write Register=2301, Len=2, 32-Bit Integer (cccccccc) Read/Write Register=2303, Len=1, 16-Bit Integer (pppp) Read/Write Register=2304, Len=1, 16-Bit Integer (mm) Read/Write Register=2305, Len=1, 16-Bit Integer (l) Read/Write Register=2306, Len=1, 16-Bit Integer (bbbbbbbbbbbbbbbb) Union for Special Access Bits: union special_access_union { struct special_access_struct { unsigned short int batch_report:1; unsigned short int unused_1_15:15; }flags; }special_access; 7.2.31 605 MODBUS DEVICE DATABASE R600iii => 0?0605iiiaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbceeeeeeefggggg gghhhhhhhj U600iiiccccccccppppmmlbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaarrrr => 0?0 Where: iii = Device Number (0 – 9) aaaaaaaaaaaaaaaa = Device name (15 Characters) bbbbbbbbbbb.... = Ip address (40 Characters) c = Device Enabled (0 = Disabled, 1= Enabled) eeeeeee = Device ID f = Endianness (0 = Big Endian, 1 = Little Endian) ggggggg = Poll Time hhhhhhhh = Write Time j = Write on State Change (0 = Disabled, 1 = Enabled) Note: Not Available via Modbus 7.2.32 650 –GPS SITE DATABASE (MULTILOAD MOBILE ONLY) Note: R650iiiiiiiii => 0?0650iiiiiiiiinnnnnnnnnnnnnnn+lllllllll+ooooooooo U650iiiiiiiiinnnnnnnnnnnnnnn+lllllllll+ooooooooo => 0?00?0650iiiiiiiiinnnnnnnnnnnnnnn+lllllllll+ooooooooo Where: iiiiiiiii = Site Index (000000000-000003999) For Modbus, the Modbus GPS Site Database Index Register sets the iiiiiiiii index. Modbus: Read/Write Register=2350, Len=1, 16-Bit Integer (iiiiiiiii) 14 5 Chapter 7 – Register Operations nnnnnnnnnnnnnnn = Site Name (15 Characters Padded) +lllllllll = Site Latitude Position. +ooooooooo = Site Longitude Position. Note: An Update to index 0 will clear the entire list. Note: Latitude format (S 90 to N 90) is: if Latitude >= 0 then "N" else "S" integer_degrees = abs(Latitude) / 60000 float_minutes = (abs(Latitude) % 60000) / 1000 Note: Longitude format (180 E to 180 W) is: if Longitude >= 0 then "E" else "W" integer_degrees = abs(Longitude) / 60000 float_minutes = (abs(Longitude) % 60000) / 1000 Modbus: Read/Write Register=2351, Len=15, Characters (nnnnnnnnnnnnnnn) Read/Write Register=2366, Len=2, 32-Bit Signed Integer (+lllllllll) Read/Write Register=2368, Len=2, 32-Bit Signed Integer (+ooooooooo) 7.2.33 700 - CONFIGURABLE LANGUAGE PROMPTS Note: Note: R700iil => 0?0700iilsss… U700iilsss… => 0?0 Where: ii = Prompt Index with defaults as: 00 = "Insert driver card..." 01 = "For Access" 02 = "Invalid Driver..." 03 = "Remove Card..." 04 = "Please Wait..." 07 = "Press 'A' key to Begin..." 19 = "A=Next B=Prev C=Abort D=Pick" 20= "System Unavailable" 28 = "PRE PRODUCT SET DEL STATUS " 35 = "" // Alternate Load Screen Footer For Modbus, the Modbus Language Prompt Index Register sets the ii index. Modbus: Read/Write Register=2400, Len=1, 16-Bit Integer (ii) l = Language Index (0 or 1) For Modbus, the Modbus Language Prompt Language Index Register sets the l index. Modbus: Read/Write Register=2401, Len=1, 16-Bit Integer (l) sss… = Prompt string (40 ASCII characters or 20 UTF-8 characters, 3-bytes each) Note: if prompt string empty, null, built in prompt will be used based on language setting. Note: only the prompts listed above can be changed. Modbus: Read/Write Register=2402, Len=60, Characters (sss…) 14 6 14 7 Chapter 7 – Register Operations 7.2.34 710 - BAY ALARM MESSAGES R710iii => 0?0710iiilllllsssssssssssssssssssssssssssssscccccppppprrrrrttttt U710iiilllllssssssssssssssssssssssssssssss => 0?0 U710iiilllllsssssssssssssssssssssssssssssscccccppppprrrrr => 0?0 U710iiilllllsssssssssssssssssssssssssssssscccccppppprrrrrttttt => 0?0 U710iiilllllsssssssssssssssssssssssssssssscccccppppprrrrrtttttmmmmmmmmmnnnnn 0?0 Where: Note: iii = Alarm Index with defaults as: struct alarm_def factory_bay_alarm[31] = { {"*BAY FCM" , AUTO_CLEAR}, // 710000 {"*GROUND ", AUTO_CLEAR}, // 710001 {"*VRU ", AUTO_CLEAR}, // 710002 {"*OVERFILL ", AUTO_CLEAR}, // 710003 {"*ESD PERM ", AUTO_CLEAR}, // 710004 {"*BAY PERM4", AUTO_CLEAR}, // 710005 {"*BAY PERM5", AUTO_CLEAR}, // 710006 {"*BAY PERM6", AUTO_CLEAR}, // 710007 {"*BAY PERM7", AUTO_CLEAR}, // 710008 {"*ALL STOP" , AUTO_CLEAR}, // 710009 {"*BAY PCM ", AUTO_CLEAR}, // 710010 {"*PRNTR ERR", AUTO_CLEAR}, // 710011 {"*GPS ERROR", AUTO_CLEAR}, // 710012 {"*BALARM 13", DRIVER_CLEAR}, // 710013 {"*BALARM 14", DRIVER_CLEAR}, // 710014 {"*FCM TRACE", DRIVER_CLEAR}// 710015 }; For Modbus, the Modbus Bay Alarm Index Register sets the iii index. Modbus: Read/Write Register=2500, Len=1, 16-Bit Integer (iii) (MultiLoad Mobile Only) lll = Alarm Level as: enum { AUTO_CLEAR = 0, DRIVER_CLEAR = 1, REMOTE_CLEAR = 2, PROGRAM_CLEAR = 3, WM_CLEAR = 4 }alarm_level; ssssssssssssssssssssssssssssss = Alarm Message (prefix with an *) Note: Up to 30 UTF-8 bytes to represent a max of 10 characters. ccccc = Promotion Count (00000=no promotion) ppppp = Promoted Alarm Level as: => Chapter 7 – Register Operations enum { AUTO_CLEAR = 0, DRIVER_CLEAR = 1, REMOTE_CLEAR = 2, PROGRAM_CLEAR = 3, WM_CLEAR = 4 }promoted_alarm_level; rrrrr = Reset Mode as: enum { AUTH_TRANS = 0, CLEAR_PROMOTED = 1, TIME_2_MIN = 2, TIME_5_MIN = 3, TIME_15_MIN = 4, TIME_30_MIN = 5, TIME_60_MIN = 6, TIME_3_HOURS = 7, TIME_6_HOURS = 8, TIME_12_HOURS = 9, TIME_24_HOURS = 10, }alarm_count_reset_mode; ttttt = Alarm_to_host as enum { REMOTE = 0, LOCAL =1, }alarm_to_host_mode_type Note: only permissive names can be changed, iii=1..8 Mmmmmmmmm = Fcm Output Address Nnnnn = Batch Alarm Mask for Alibilog Enum{ DISABLED = 0, ENABLED =1} Modbus: Read/Write Register=2501, Len=1, 16-Bit Integer (lllll) Read/Write Register=2502, Len=15, Characters (sssssssssssssss) Note: Up to 15 UTF-8 bytes to represent a max of 10 characters. Read/Write Register=2517, Len=1, 16-Bit Integer (ccccc) Read/Write Register=2518, Len=1, 16-Bit Integer (ppppp) Read/Write Register=2519, Len=1, 16-Bit Integer (rrrrr) Read/Write Register=cannot be accessed, Len=1, 16-Bit Integer (ttttt) Read/Write Register=cannot be accessed, Len=1, 16-Bit Integer (mmmmmmmmm) Read/Write Register=cannot be accessed, Len=1, 16-Bit Integer (nnnnn) 14 8 Chapter 7 – Register Operations 7.2.35 711 - PRESET ALARM MESSAGES Note: R711iii => 0?0711iiilllllsssssssssssssssssssssssssssssscccccppppprrrrrttttt U711iiilllllssssssssssssssssssssssssssssss => 0?0 U711iiilllllsssssssssssssssssssssssssssssscccccppppprrrrr => 0?0 U711iiilllllsssssssssssssssssssssssssssssscccccppppprrrrrttttt => 0?0 U711iiilllllsssssssssssssssssssssssssssssscccccppppprrrrrtttttmmmmmmmmmnnnnn => 0?0 Where: iii = Alarm Index with defaults as: struct alarm_def factory_preset_alarm[31] = { {"*PRE FCM" , AUTO_CLEAR}, // 711000 {"*PRE PERM" , AUTO_CLEAR}, // 711001 {"*SWING ARM", AUTO_CLEAR}, // 711002 {"*NO LNFLSH", DRIVER_CLEAR}, // 711003 {"*PALARM 04", DRIVER_CLEAR}, // 711004 {"*BAY ALARM", AUTO_CLEAR}, // 711005 {"*COMP ALRM", AUTO_CLEAR}, // 711006 {"*ADD ALARM", AUTO_CLEAR}, // 711007 {"*MTR STOP" , AUTO_CLEAR}, // 711008 {"*OVERRUN" , REMOTE_CLEAR}, // 711009 {"*EXCESS FL", REMOTE_CLEAR}, // 711010 {"*BSW", DRIVER_CLEAR}, // 711011 {"*PALARM 12", DRIVER_CLEAR}, // 711012 {"*PALARM 13", DRIVER_CLEAR}, // 711013 {"*PALARM 14", DRIVER_CLEAR}, // 711014 {"*INVCONFIG", AUTO_CLEAR} // 711015 }; For Modbus, the Modbus Preset Alarm Index Register sets the iii index. Modbus: Read/Write Register=2520, Len=1, 16-Bit Integer (iii) lll = Alarm Level as: enum { AUTO_CLEAR = 0, DRIVER_CLEAR = 1, REMOTE_CLEAR = 2, PROGRAM_CLEAR = 3, WM_CLEAR = 4 }alarm_level; ssssssssssssssssssssssssssssss = Alarm Message (prefix with an *) Note: Up to 30 UTF-8 bytes to represent a max of 10 characters. ccccc = Promotion Count (00000=no promotion) ppppp = Promoted Alarm Level as: 14 9 Chapter 7 – Register Operations enum { AUTO_CLEAR = 0, DRIVER_CLEAR = 1, REMOTE_CLEAR = 2, PROGRAM_CLEAR = 3, WM_CLEAR = 4 }promoted_alarm_level; rrrrr = Reset Mode as: enum { AUTH_TRANS = 0, CLEAR_PROMOTED = 1, TIME_2_MIN = 2, TIME_5_MIN = 3, TIME_15_MIN = 4, TIME_30_MIN = 5, TIME_60_MIN = 6, TIME_3_HOURS = 7, TIME_6_HOURS = 8, TIME_12_HOURS = 9, TIME_24_HOURS = 10, }alarm_count_reset_mode; ttttt = Alarm_to_host as enum { REMOTE = 0, LOCAL =1, }alarm_to_host_mode_type Note: only permissive names can be changed, iii=1. Mmmmmmmmm = Fcm Output Address Nnnnn = Batch Alarm Mask for Alibilog Enum{ DISABLED = 0, ENABLED =1} Modbus: Read/Write Register=2521, Len=1, 16-Bit Integer (lllll) Read/Write Register=2522, Len=15, Characters (sssssssssssssss) Note: Up to 15 UTF-8 bytes to represent a max of 10 characters. Read/Write Register=2537, Len=1, 16-Bit Integer (ccccc) Read/Write Register=2538, Len=1, 16-Bit Integer (ppppp) Read/Write Register=2539, Len=1, 16-Bit Integer (rrrrr) Read/Write Register=cannot be accessed, Len=1, 16-Bit Integer (ttttt) Read/Write Register=cannot be accessed, Len=1, 16-Bit Integer (mmmmmmmmm) Read/Write Register=cannot be accessed, Len=1, 16-Bit Integer (nnnnn) 15 0 Chapter 7 – Register Operations 7.2.36 712 - METER ALARM MESSAGES Note: R712iii => 0?0712iiilllllsssssssssssssssssssssssssssssscccccppppprrrrrttttt U712iiilllllssssssssssssssssssssssssssssss => 0?0 U712iiilllllsssssssssssssssssssssssssssssscccccppppprrrrr => 0?0 U712iiilllllsssssssssssssssssssssssssssssscccccppppprrrrrttttt => 0?0 U712iiilllllsssssssssssssssssssssssssssssscccccppppprrrrrtttttmmmmmmmmmnnnnn => 0?0 Where: iii = Alarm Index with defaults as: struct alarm_def factory_meter_alarm[31] = { {"*MTR FCM" , AUTO_CLEAR}, // 712000 {"*MTR PERM" , AUTO_CLEAR}, // 712001 {"*FCM CONF" , REMOTE_CLEAR}, // 712002 {"*FCM WDT" , REMOTE_CLEAR}, // 712003 {"*FCM TMOUT", REMOTE_CLEAR}, // 712004 {"*VALVE FLT", PROGRAM_CLEAR}, // 712005 {"*LOW FLOW" , DRIVER_CLEAR}, // 712006 {"*EXCESS FL", REMOTE_CLEAR}, // 712007 {"*QUAD ENC" , REMOTE_CLEAR}, // 712008 {"*FCM PERM" , DRIVER_CLEAR}, // 712009 {"*RTD ERROR", REMOTE_CLEAR}, // 712010 {"*VALVE CTL", REMOTE_CLEAR}, // 712011 {"*MTR CREEP", REMOTE_CLEAR}, // 712012 {"*PRES ALRM", REMOTE_CLEAR}, // 712013 {"*QUAD CH A", REMOTE_CLEAR}, // 712014 {"*QUAD CH B", REMOTE_CLEAR}, // 712015 {"*MTR COM", REMOTE_CLEAR}, // 712016 {"*MALARM17", REMOTE_CLEAR} // 712017 {"*GRAVITY", REMOTE_CLEAR} // 712018 }; For Modbus, the Modbus Meter Alarm Index Register sets the iii index. Modbus: Read/Write Register=2540, Len=1, 16-Bit Integer (iii) lll = Alarm Level as: enum { AUTO_CLEAR = 0, DRIVER_CLEAR = 1, REMOTE_CLEAR = 2, PROGRAM_CLEAR = 3, WM_CLEAR = 4 }alarm_level; ssssssssssssssssssssssssssssss = Alarm Message (prefix with an *) 15 1 Chapter 7 – Register Operations Note: Up to 30 UTF-8 bytes to represent a max of 10 characters. ccccc = Promotion Count (00000=no promotion) ppppp = Promoted Alarm Level as: enum { AUTO_CLEAR = 0, DRIVER_CLEAR = 1, REMOTE_CLEAR = 2, PROGRAM_CLEAR = 3, WM_CLEAR = 4 }promoted_alarm_level; rrrrr = Reset Mode as: enum { AUTH_TRANS = 0, CLEAR_PROMOTED = 1, TIME_2_MIN = 2, TIME_5_MIN = 3, TIME_15_MIN = 4, TIME_30_MIN = 5, TIME_60_MIN = 6, TIME_3_HOURS = 7, TIME_6_HOURS = 8, TIME_12_HOURS = 9, TIME_24_HOURS = 10, }alarm_count_reset_mode; ttttt = Alarm_to_host as enum { REMOTE = 0, LOCAL =1, }alarm_to_host_mode_type Note: only permissive names can be changed, iii=1. Mmmmmmmmm = Fcm Output Address Nnnnn = Batch Alarm Mask for Alibilog Enum{ DISABLED = 0, ENABLED =1} Modbus: Read/Write Register=2541, Len=1, 16-Bit Integer (lllll) Read/Write Register=2542, Len=15, Characters (sssssssssssssss) Note: Up to 15 UTF-8 bytes to represent a max of 10 characters. Read/Write Register=2557, Len=1, 16-Bit Integer (ccccc) Read/Write Register=2558, Len=1, 16-Bit Integer (ppppp) Read/Write Register=2559, Len=1, 16-Bit Integer (rrrrr) 15 2 Chapter 7 – Register Operations Read/Write Register=cannot be accessed, Len=1, 16-Bit Integer (ttttt) Read/Write Register=cannot be accessed, Len=1, 16-Bit Integer (mmmmmmmmm) Read/Write Register=cannot be accessed, Len=1, 16-Bit Integer (nnnnn) 7.2.37 713 - COMPONENT ALARM MESSAGES Note: R713iii => 0?0713iiilllllsssssssssssssssssssssssssssssscccccppppprrrrrttttt U713iiilllllssssssssssssssssssssssssssssss => 0?0 U713iiilllllsssssssssssssssssssssssssssssscccccppppprrrrr => 0?0 U713iiilllllsssssssssssssssssssssssssssssscccccppppprrrrrttttt => 0?0 U713iiilllllsssssssssssssssssssssssssssssscccccppppprrrrrtttttmmmmmmmmmnnnnn => 0?0 Where: iii = Alarm Index with defaults as: struct alarm_def factory_component_alarm[31] = { {"*COMP FCM" , AUTO_CLEAR}, // 713000 {"*COMP PERM", AUTO_CLEAR}, // 713001 {"*BLK VALVE", AUTO_CLEAR}, // 713002 {"*UNAUTH FL", REMOTE_CLEAR}, // 713003 {"*PUMP STAT", DRIVER_CLEAR}, // 713004 {"*MTR ALARM", AUTO_CLEAR}, // 713005 {"*OVR BLEND", DRIVER_CLEAR}, // 713006 {"*UND BLEND", DRIVER_CLEAR}, // 713007 {"*API TABLE", DRIVER_CLEAR}, // 713008 {"*DENSITY ", REMOTE_CLEAR}, // 713009 {"*CALARM 10", DRIVER_CLEAR}, // 713010 {"*CALARM 11", DRIVER_CLEAR}, // 713011 {"*CALARM 12", DRIVER_CLEAR}, // 713012 {"*CALARM 13", DRIVER_CLEAR}, // 713013 {"*CALARM 14", DRIVER_CLEAR}, // 713014 {"*CALARM 15", DRIVER_CLEAR} // 713015 }; For Modbus, the Modbus Component Alarm Index Register sets the iii index. Modbus: Read/Write Register=2560, Len=1, 16-Bit Integer (iii) lll = Alarm Level as: enum { AUTO_CLEAR = 0, DRIVER_CLEAR = 1, REMOTE_CLEAR = 2, PROGRAM_CLEAR = 3, WM_CLEAR = 4 }alarm_level; ssssssssssssssssssssssssssssss = Alarm Message (prefix with an *) 15 3 Chapter 7 – Register Operations Note: Up to 30 UTF-8 bytes to represent a max of 10 characters. ccccc = Promotion Count (00000=no promotion) ppppp = Promoted Alarm Level as: enum { AUTO_CLEAR = 0, DRIVER_CLEAR = 1, REMOTE_CLEAR = 2, PROGRAM_CLEAR = 3, WM_CLEAR = 4 }promoted_alarm_level; rrrrr = Reset Mode as: enum { AUTH_TRANS = 0, CLEAR_PROMOTED = 1, TIME_2_MIN = 2, TIME_5_MIN = 3, TIME_15_MIN = 4, TIME_30_MIN = 5, TIME_60_MIN = 6, TIME_3_HOURS = 7, TIME_6_HOURS = 8, TIME_12_HOURS = 9, TIME_24_HOURS = 10, }alarm_count_reset_mode; ttttt = Alarm_to_host as enum { REMOTE = 0, LOCAL =1, }alarm_to_host_mode_type Note: only permissive names can be changed, iii=1. Mmmmmmmmm = Fcm Output Address Nnnnn = Batch Alarm Mask for Alibilog Enum{ DISABLED = 0, ENABLED =1} Modbus: Read/Write Register=2561, Len=1, 16-Bit Integer (lllll) Read/Write Register=2562, Len=15, Characters (sssssssssssssss) Note: Up to 15 UTF-8 bytes to represent a max of 10 characters. Read/Write Register=2577, Len=1, 16-Bit Integer (ccccc) Read/Write Register=2578, Len=1, 16-Bit Integer (ppppp) Read/Write Register=2579, Len=1, 16-Bit Integer (rrrrr) 15 4 Chapter 7 – Register Operations Read/Write Register=cannot be accessed, Len=1, 16-Bit Integer (ttttt) Read/Write Register=cannot be accessed, Len=1, 16-Bit Integer (mmmmmmmmm) Read/Write Register=cannot be accessed, Len=1, 16-Bit Integer (nnnnn) 7.2.38 714 - ADDITIVE ALARM MESSAGES R714iii => 0?0710iiilllllsssssssssssssssssssssssssssssscccccppppprrrrrttttt U714iiilllllssssssssssssssssssssssssssssss => 0?0 U714iiilllllsssssssssssssssssssssssssssssscccccppppprrrrr => 0?0 U714iiilllllsssssssssssssssssssssssssssssscccccppppprrrrrttttt => 0?0 U714iiilllllsssssssssssssssssssssssssssssscccccppppprrrrrtttttmmmmmmmmmnnnnn => 0?0 Where: Note: iii = Alarm Index with defaults as: struct alarm_def factory_additive_alarm[16] = { {"*ADTV FCM" , AUTO_CLEAR}, // 714000 {"*ADTV PREM", AUTO_CLEAR}, // 714001 {"*UND ADTV" , REMOTE_CLEAR}, // 714002 {"*OVR ADTV" , REMOTE_CLEAR}, // 714003 {"*VALVE FLT", PROGRAM_CLEAR}, // 714004 {"*PUMP STAT", DRIVER_CLEAR}, // 714005 {"*INJCT FLT", DRIVER_CLEAR}, // 714006 {"*UNAUTH FL", REMOTE_CLEAR}, // 714007 {"*NO LNFLSH", DRIVER_CLEAR}, // 714008 {"*MTR CREEP", REMOTE_CLEAR}, // 714009 {"*BLK VALVE", AUTO_CLEAR}, // 714010 {"*AALARM 11", DRIVER_CLEAR}, // 714011 {"*AALARM 12", DRIVER_CLEAR}, // 714012 {"*AALARM 13", DRIVER_CLEAR}, // 714013 {"*AALARM 14", DRIVER_CLEAR}, // 714014 {"*AALARM 15", DRIVER_CLEAR} // 714015 }; For Modbus, the Modbus Additive Alarm Index Register sets the iii index. Modbus: Read/Write Register=2580, Len=1, 16-Bit Integer (iii) lll = Alarm Level as: enum { AUTO_CLEAR = 0, DRIVER_CLEAR = 1, REMOTE_CLEAR = 2, PROGRAM_CLEAR = 3, WM_CLEAR = 4 }alarm_level; 15 5 Chapter 7 – Register Operations ssssssssssssssssssssssssssssss = Alarm Message (prefix with an *) Note: Up to 30 UTF-8 bytes to represent a max of 10 characters. ccccc = Promotion Count (00000=no promotion) ppppp = Promoted Alarm Level as: enum { AUTO_CLEAR = 0, DRIVER_CLEAR = 1, REMOTE_CLEAR = 2, PROGRAM_CLEAR = 3, WM_CLEAR = 4 }promoted_alarm_level; rrrrr = Reset Mode as: enum { AUTH_TRANS = 0, CLEAR_PROMOTED = 1, TIME_2_MIN = 2, TIME_5_MIN = 3, TIME_15_MIN = 4, TIME_30_MIN = 5, TIME_60_MIN = 6, TIME_3_HOURS = 7, TIME_6_HOURS = 8, TIME_12_HOURS = 9, TIME_24_HOURS = 10, }alarm_count_reset_mode; ttttt = Alarm_to_host as enum { REMOTE = 0, LOCAL =1, }alarm_to_host_mode_type Note: only permissive names can be changed, iii=1. Mmmmmmmmm = Fcm Output Address Nnnnn = Batch Alarm Mask for Alibilog Enum{ DISABLED = 0, ENABLED =1} Modbus: Read/Write Register=2581, Len=1, 16-Bit Integer (lllll) Read/Write Register=2582, Len=15, Characters (sssssssssssssss) Note: Up to 15 UTF-8 bytes to represent a max of 10 characters. Read/Write Register=2597, Len=1, 16-Bit Integer (ccccc) 15 6 Chapter 7 – Register Operations Read/Write Register=2598, Len=1, 16-Bit Integer (ppppp) Read/Write Register=2599, Len=1, 16-Bit Integer (rrrrr) Read/Write Register=cannot be accessed, Len=1, 16-Bit Integer (ttttt) Read/Write Register=cannot be accessed, Len=1, 16-Bit Integer (mmmmmmmmm) Read/Write Register=cannot be accessed, Len=1, 16-Bit Integer (nnnnn) 7.2.39 716 - SAMPLERALARM MESSAGES R716iii => 0?0716iiilllllsssssssssssssssssssssssssssssscccccppppprrrrrttttt U716iiilllllssssssssssssssssssssssssssssss => 0?0 U716iiilllllsssssssssssssssssssssssssssssscccccppppprrrrr => 0?0 U716iiilllllsssssssssssssssssssssssssssssscccccppppprrrrrttttt => 0?0 U716iiilllllsssssssssssssssssssssssssssssscccccppppprrrrrtttttmmmmmmmmmnnnnn => 0?0 Where: Note: iii = Alarm Index with defaults as: struct alarm_def factory_sampler_alarm[16] = { {"*SAMP FCM" , AUTO_CLEAR}, // 716000 {"*SAMP PERM", AUTO_CLEAR}, // 716001 }; For Modbus, not available. lll = Alarm Level as: enum { AUTO_CLEAR = 0, DRIVER_CLEAR = 1, REMOTE_CLEAR = 2, PROGRAM_CLEAR = 3, WM_CLEAR = 4 }alarm_level; ssssssssssssssssssssssssssssss = Alarm Message (prefix with an *) Note: Up to 30 UTF-8 bytes to represent a max of 10 characters. ccccc = Promotion Count (00000=no promotion) ppppp = Promoted Alarm Level as: enum { AUTO_CLEAR = 0, DRIVER_CLEAR = 1, REMOTE_CLEAR = 2, PROGRAM_CLEAR = 3, WM_CLEAR = 4 }promoted_alarm_level; rrrrr = Reset Mode as: 15 7 Chapter 7 – Register Operations enum { AUTH_TRANS = 0, CLEAR_PROMOTED = 1, TIME_2_MIN = 2, TIME_5_MIN = 3, TIME_15_MIN = 4, TIME_30_MIN = 5, TIME_60_MIN = 6, TIME_3_HOURS = 7, TIME_6_HOURS = 8, TIME_12_HOURS = 9, TIME_24_HOURS = 10, }alarm_count_reset_mode; ttttt = Alarm_to_host as enum { REMOTE = 0, LOCAL =1, }alarm_to_host_mode_type Note: only permissive names can be changed, iii=1. Mmmmmmmmm = Fcm Output Address Nnnnn = Batch Alarm Mask for Alibilog Enum{ DISABLED = 0, ENABLED =1} Modbus: Not available. 7.2.40 715 - TANKALARM MESSAGES R715iii => 0?0715iiilllllsssssssssssssssssssssssssssssscccccppppprrrrrttttt U715iiilllllssssssssssssssssssssssssssssss => 0?0 U715iiilllllsssssssssssssssssssssssssssssscccccppppprrrrr => 0?0 U715iiilllllsssssssssssssssssssssssssssssscccccppppprrrrrttttt => 0?0 U715iiilllllsssssssssssssssssssssssssssssscccccppppprrrrrtttttmmmmmmmmmnnnnn => 0?0 Where: iii = Alarm Index with defaults as: struct alarm_def factory_sampler_alarm[16] = { {"*TANK FCM" , AUTO_CLEAR}, // 715000 {"*HHLEVEL", AUTO_CLEAR}, // 715001 {"*HLEVEL", AUTO_CLEAR}, // 715002 15 8 15 9 Chapter 7 – Register Operations {"*LLEVEL", AUTO_CLEAR}, // 715003 {"*LLLEVEL", AUTO_CLEAR}, // 715004 {"*TK VALVE", AUTO_CLEAR}, // 715005 Note: }; For Modbus, not available. lll = Alarm Level as: enum { AUTO_CLEAR = 0, DRIVER_CLEAR = 1, REMOTE_CLEAR = 2, PROGRAM_CLEAR = 3, WM_CLEAR = 4 }alarm_level; ssssssssssssssssssssssssssssss = Alarm Message (prefix with an *) Note: Up to 30 UTF-8 bytes to represent a max of 10 characters. ccccc = Promotion Count (00000=no promotion) ppppp = Promoted Alarm Level as: enum { AUTO_CLEAR = 0, DRIVER_CLEAR = 1, REMOTE_CLEAR = 2, PROGRAM_CLEAR = 3, WM_CLEAR = 4 }promoted_alarm_level; rrrrr = Reset Mode as: enum { AUTH_TRANS = 0, CLEAR_PROMOTED = 1, TIME_2_MIN = 2, TIME_5_MIN = 3, TIME_15_MIN = 4, TIME_30_MIN = 5, TIME_60_MIN = 6, TIME_3_HOURS = 7, TIME_6_HOURS = 8, TIME_12_HOURS = 9, TIME_24_HOURS = 10, }alarm_count_reset_mode; ttttt = Alarm_to_host as enum { Chapter 7 – Register Operations REMOTE = 0, LOCAL =1, }alarm_to_host_mode_type Note: only permissive names can be changed, iii=1. Mmmmmmmmm = Fcm Output Address Nnnnn = Batch Alarm Mask for Alibilog Enum{ DISABLED = 0, ENABLED =1} Modbus: Not available. 7.2.41 910 – READ EVENT LOG MESSAGE QUEUE R910 => 0?0910 OR 0?0910ccyymmddhhmmss…. Where: (when a message is pending, see logmsg_queued bit on Q command) cc = Number of messages remaining in the queue (00-99) yymmdd = Year, Month, and Day of log message hhmmss = Hour, Minute, and Second of log message …. = Text of log message (max length 80 characters) Modbus: Read Only Register=2600, Len=2, 32-Bit Integer (cc) Read Only Register=2602, Len=2, 32-Bit Integer (yymmdd) Read Only Register=2604, Len=2, 32-Bit Integer (hhmmss) Read Only Register=2606, Len=80, Characters (ssssssssss) Note: Last Event Log Message Queue register used=2685 7.2.42 912 – READ W & M CHANGE LOG MESSAGE QUEUE R912 => 0?0912 OR 0?0912tttccccyymmddhhmm…. Where: (when a message is pending, see wm_logmsg_queued bit on Q command) ttt = TMS W&M change type (proprietary, do not use) 10 = Temp Offset Change 12 = Transmitter Resolution Change 0 = All Others Changes cccc = Number of messages remaining in the queue (0000-0999) yymmdd = Year, Month, and Day of log message hhmm = Hour and Minute of log message …. = Text of log message Modbus: Supported through Modbus Extended Services Registers. 7.2.43 913 – READ AUDIT LOG MESSAGE QUEUE R913 => 0?0913 OR 0?0913ccyymmddhhmmss…. Where: (when an audit message is pending, see auditlog_queued bit on Q command) cc = Number of messages remaining in the queue (00-99) 16 0 Chapter 7 – Register Operations yymmdd = Year, Month, and Day of log message hhmmss = Hour, Minute, and Second of log message …. = Text of log message (max length 80 characters) Modbus: Supported through Modbus Extended Services Registers 7.2.44 950 - CURRENT DRIVER CARD NUMBER In Remote Processing mode, to be populated by host and will be stored with transaction. In Stand Alone Processing mode, will be populated with user supplied data. R950 => 0?0950sss… U950sss… => 0?0 Where: sss… = Driver card number. Modbus: Read/Write Register=2700, Len=25, Characters (sss…) 7.2.45 951..955 - CURRENT DRIVER PROMPT INFORMATION (Stockholder, Customer, Account, Consignee) In Remote Processing mode, to be populated by host and will be stored with transaction. In Stand Alone Processing mode, will be populated with user supplied data. R951 => 0?0951sss… U951sss… => 0?0 Where: sss… = Driver Prompt Data for Stored BOL Modbus: Read/Write Register=2725, Len=25, Characters (951-sss…) Read/Write Register=2750, Len=25, Characters (952-sss…) Read/Write Register=2775, Len=25, Characters (953-sss…) Read/Write Register=2800, Len=25, Characters (954-sss…) Read/Write Register=2815, Len=25, Characters (955-sss…) 7.2.46 960 – INPUT DATA R960 => 0?0960sss… Where: sss… = Input data string from the Terminal Escape Code `E. Modbus: Read Only Register=2851, Len=25, Characters (sss…) 7.2.47 961 – INPUT DATA TERMINATING KEY R961 => 0?0961c Where: C = Terminating Key from the Terminal Escape Code `E ‘A’ = Next ‘B’ = Prev ‘C’ = Abort/Exit 16 1 Chapter 7 – Register Operations ‘D’ = Enter ‘E’ = CLR Modbus: Read Only Register=2850, Len=1, Character (c) 7.2.48 962 - CURRENT DRIVER CARD DATA R962 => 0?0962sss… Where: sss… = Driver card data string. For HID 26-bit Prox Cards, 0=yy=0000000=xxxxxxxx=01 – Card number that was read from the card. Where: yy is the facility number (00-99) xxxxxxxx is the card number (00000000-00065535). For HID 26-bit Corporate 1000 Formatted Prox Cards, 0=yyyy=00000=xxxxxxxx=01 – Card number that was read from the card. Where: yyyy is the company number (0000-4095) xxxxxxxx is the card number (00000000-01048575). For HID 37-bit H10320 formatted Prox cards, 0=yy=0000000=xxxxxxxx=01 – Card number that was read from the card. Where: yy is the facility number (Always 00). xxxxxxxx is the card number (00000000-99999999). For TWIC cards, 1111,2222,333333,4,5,6666666666788889 – TWIC Card FASC-N that was read from the card. Where, 1111 = Agency Code 2222 = System Code 333333 = Credential Number 4 = Credential Series 5 = Individual Credential Issue 6666666666 = Person Identifier (Used as Card Number in Access ID Database) 7 = Organizational Category 8888 = Organizational Identifier 9 = Person/Organization Association Modbus: Read Only Register=2900, Len=80, Characters (sss…) 16 2 Chapter 7 – Register Operations 7.2.49 998 – BITMAP GRAPHIC CACHE R998aaaaaaaa => 0?0998aaaaaaaad… Where: aaaaaaaa = 8 character hexadecimal cache offset start value. Cache size = 16MB, Cache offset values = 0x00000000 - 0x00ffffff Two pixels per cache byte. Note: Graphics Cache is in volatile memory. On power cycle, entire Graphics Cache will be populated with 0’s (spaces) for pixel data. Use R998 command to verify cache has not been cleared. Note: Graphics Cache memory is also used for temporary storage of uploaded firmware images before writing into flash memory. Do not use the R998, W998 or T<esc>h (Display Graphic Cache) commands while uploading or flashing new firmware. d… = 64 (characters) 0x20 + pixel color palette index values, See T<esc>e (Draw Display Graphic) command for more details on pixel data. W998aaaaaaaad… => 998 Where: aaaaaaaa = 8 character hexadecimal cache offset start value. See R998 command for more details on cache offset. d… = even number of (characters) 0x20 + pixel color palette index values, See T<esc>e (Draw Display Graphic) command for more details on pixel data. Modbus: Supported through Modbus Extended Services Registers. 16 3 Chapter 8 – Communication Trace Example CHAPTER 8 COMMUNICATION TRACE EXAMPLE The following is an example of a typical communication session with MultiLoad starting with host system startup, driver card in, transaction authorization, batch authorization, end of batch processing, and host system shutdown. Upon startup it is recommended that the host system verify as many parameters as practical to avoid problems during loading due to mis-configuration. If any parameters are different then expected the discrepancy should be logged and startup should be aborted. Recommended parameters to check are: Firmware Version Configured bit is set. Remote Processing is enabled. Number of configured presets. Number of meters, components and additives for all presets. 8.1 8.1.1 STARTUP OF HOST SOFTWARE UPDATE DATE & TIME Sent:(U001010515153200) Received: (000) Modbus: Fn=0x16, Write (YYMMDDHHMMSS) to Registers 35 … 46 8.1.2 UPDATE PRODUCT DEFINITIONS Start with a clear database and upload base product and additive definitions into indexes 020-099 Sent:(FCLEARPROD) Received: (000) Sent:(U5000200001100Regular Unlead RUL 02010000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000) Received: (000) Sent:(U5000210001300Premium Unlead PUL 02110000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000) Received: (000) Sent:(U5000220000600Chevron Additive CHEVADD 02210000000000000000000000000000000000000000000000000000000000000210000000000000000000000 00000000000000000000000) Received: (000) Sent:(U5000230000700Shell Additive SHEADD 02310000000000000000000000000000000000000000000000000000000000000220000000000000000000000 00000000000000000000000) Received: (000) Sent:(U5000240000800Generic Additive GENADD 02410000000000000000000000000000000000000000000000000000000000000230000000000000000000000 00000000000000000000000) Received: (000) Sent:(U5000250000300Base Kerosene KERO 02510000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000) Received: (000) Sent:(U5000260001400Base Low Sulfur Diesel BASLSD 02610000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000) Received: (000) 164 Chapter 8 – Communication Trace Example Sent:(U5000270000900Red Dye REDDYE 02710000000000000000000000000000000000000000000000000000000000000260000000000000000000000 00000000000000000000000) Received: (000) Sent:(U5000280000500Winter Additive WINADD 02810000000000000000000000000000000000000000000000000000000000000270000000000000000000000 00000000000000000000000) Received: (000) Modbus: For each recipe: Fn=0x06, Write Recipe Index to Register 2200 Fn=0x16, Write Recipe Data to Registers 2201 … 2267 (both writes can be done at the same time with one Fn=0x16 command) 8.1.3 UPDATE PRESET DEFINITIONS Sent:(U400000BLENDER 02002100000000000000000002202302400000000000000000000000000000000000000002002102202302400 0000000000000000000000000000000000000000000000000000000000000000000000000000000000) Received: (000) Sent:(U400001BLENDER 02002100000000000000000002202300000000000000000000000000000000000000000002002102202300000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000) Received: (000) Sent:(U400002LSD 02000000000000000000000002200000000000000000000000000000000000000000000002002200000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000) Received: (000) Sent:(U400003HSD 02500000000000000000000000000000000000000000000000000000000000000000000002500000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000) Received: (000) Sent:(U400004KEROSENE 02600000000000000000000002700000000000000000000000000000000000000000000002602702800000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000) Received: (000) Modbus: Fn=0x16, Write Preset Data to Registers 8000 … 8066 Fn=0x16, Write Preset Data to Registers 8067 … 8133 Fn=0x16, Write Preset Data to Registers 8134 … 8200 Fn=0x16, Write Preset Data to Registers 8201 … 8267 Fn=0x16, Write Preset Data to Registers 8268 … 8334 8.1.4 STATUS QUERY Periodically query the status of MultiLoad by issuing the following command. This command also provides indication to MultiLoad that the host is still up. Sent:(Q) Received: (0000038) From the Q response, when needed send the following commands: power_up bit is set Modbus: Fn=0x03, Read Register 7000 165 Chapter 8 – Communication Trace Example Sent:(FPOWERUP) Received:(000) logmsg_queued bit is set Modbus: Fn=0x06, Write 0 to Register 7012 Sent:(R910) Received: (00091000010515153200REGAINED COMMUNICATION WITH HOST.) host_up bit is clear Modbus: Fn=0x03, Read Registers 2600 ... 2685 Sent:(FHOSTUP) Received: (000) Modbus: Fn=0x06, Write 0 to Register 7013 8.2 8.2.1 TRANSACTION AUTHORIZATION PROCESS DRIVER CARD IN Reset terminal screen. Sent:(T_R) Received: (000) Modbus: Fn=0x06, Write 0 to Register 7017 Wait for card in by watching the CARD_STATUS character Sent:(Q) Received: (000C218) Sent:(Q) Received: (000C218) ...(some time later)... Sent:(Q) Received: (041C218) Modbus: Fn=0x03, Read Register 7001 -> 0 Fn=0x03, Read Register 7001 -> 0 ...(some time later)... Fn=0x03, Read Register 7001 -> 1 Get the card number Sent:(R962) Received: (0419620=01=0000000=00004504=01) Modbus: Fn=0x03, Read Registers 2900 … 2979 Prompt for Driver PIN Sent:(T_H_K_>Enter Pin: _!_L04_E) Received: (041) Modbus: Use Extended Services Register Wait for driver input_done bit to be set Sent:(Q) Received: (041C618) 166 Chapter 8 – Communication Trace Example ...(some time later)... Sent:(Q) Received: (041CA18) Modbus: Fn=0x03, Read Register 7002 -> (0xC61A) ...(some time later)... Fn=0x03, Read Register 7002 -> (0xCA1A) Get driver input and terminating key Sent:(R960) Received: (0419601111) Sent:(R961) Received: (041961D) Modbus: Fn=0x03, Read Registers 2850 ... 2875 8.2.2 AUTHORIZE A TRANSACTION ON MULTILOAD Authorize transaction on Multiload Sent:(T_A) Received: (0T1) Modbus: Fn=0x06, Write 0 to Register 7016 Enable available presets Sent:(MEM0002) Received: (0T1) Sent:(MEM0012) Received: (0T1) Sent:(MEM0022) Received: (0T1) Modbus: Fn=0x06, Write 2 to Register 7032 Fn=0x06, Write 2 to Register 7033 Fn=0x06, Write 2 to Register 7034 Upload the driver number and any other additional information to be included with stored BOL in Multiload Sent:(U95000004504) Received: (0T1) Sent:(U9510001234) Received: (0T1) Sent:(U952 ) Received: (0T1) Sent:(U953 ) Received: (0T1) Sent:(U954 ) Received: (0T1) Modbus: Fn=0x16, Write data to Registers 2700 … 2724 Fn=0x16, Write data to Registers 2725 … 2749 Fn=0x16, Write data to Registers 2750 … 2774 Fn=0x16, Write data to Registers 2775 … 2799 Fn=0x16, Write data to Registers 2800 … 2824 8.2.3 READING TOTALIZERS Sent:(R112000) Received: (0001120000000010000000010000000000000000000000000000000000010000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 167 Chapter 8 – Communication Trace Example 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000) Sent:(R112001) Received: (0001120010000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000) Sent:(R112002) Received: (0001120020000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000) Sent:(R112003) Received: (0001120030000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000) Sent:(R112004) Received: (0001120040000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000) Modbus: Fn=0x03, Read Registers 3000 … 3006 (Preset Gross Totalizers) Fn=0x03, Read Registers 3144 … 3191 (Component Gross Totalizers) Fn=0x03, Read Registers 3336 … 3432 (Additive Gross Totalizers) Etc… 8.3 8.3.1 BATCH AUTHORIZATION AUTHORIZE A BATCH ON MULTILOAD Checking status found a preset authorization request for a preset. Sent:(Q) Received: (0a1CA1A) Modbus: Fn=0x03, Read Register 7000 -> a Prompt driver for batch information. Display available product names Sent:(T_H_K_Y! 1. Regular Unlead_Y” 2. Premium Unlead) Received: (0a1) Modbus: Use Extended Services Register Prompt for product name Sent:(T_H_>Enter Preset #01 Product Code: _@ _L02_E) Received: (0a1) Modbus: Use Extended Services Register Wait for driver input done 168 Chapter 8 – Communication Trace Example Sent:(Q) Received: (0a1C61A) ...(some time later)... Sent:(Q) Received: (0a1CA1A) Modbus: Fn=0x03, Read Register 7002 -> (0xC61A) ...(some time later)... Fn=0x03, Read Register 7002 -> (0xCA1A) Get driver input and terminating key Sent:(R960) Received: (0a19601 ) Sent:(R961) Received: (0a1961D) Modbus: Fn=0x03, Read Registers 2850 ... 2875 Prompt for preset quantity Sent:(T_H_K_>Enter Preset #01 Qty: _@_L06_E) Received: (0a1) Modbus: Use Extended Services Register Wait for driver input done Sent:(Q) Received: (0a1C61A) ...(some time later)... Sent:(Q) Received: (0a1CA1A) Modbus: Fn=0x03, Read Register 7002 -> (0xC61A) ...(some time later)... Fn=0x03, Read Register 7002 -> (0xCA1A) Get driver input and terminating key Sent:(R960) Received: (0a19601000 ) Sent:(R961) Received: (0a1961D) Modbus: Fn=0x03, Read Registers 2850 ... 2875 Upload selected recipe definitions into index in range of 001-019 (recommend using preset number as index). Sent:(U5000010001100Regular Unlead RUL 02010000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000) Received: (0a1) Modbus: Fn=0x06, Write Index 1 to Register 2200 Fn=0x16, Write Recipe Data to Registers 2201 … 2267 Authorize preset for batch indicating volume and recipe definition index. Sent:(MAM000100100000100000) Received: (0T1) Modbus: Fn=0x16, Write Authorization Data (1, 0, 1000, 1, 1) to Registers 7500 … 7504 169 Chapter 8 – Communication Trace Example Status no longer request for remote authorization Sent:(Q) Received: (0T1CA3A) Modbus: Fn=0x03, Read Register 7000 -> T 8.3.2 MONITOR LOAD DURING DELIVERY Sent:(MRS000) Received: (0T1RS0000001001F0000000001000000000015+0022400113000000015+00224000000000+0000000000000 0+00000000000000+00000000000000+00000000000000+00000000000000+00000000000000+000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000) Sent:(MRS001) Received: (0T1RS001000000070000000000000000000000+0000000000000000000+00000000000000+0000000000000 0+00000000000000+00000000000000+00000000000000+00000000000000+00000000000000+000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000) Sent:(MRS002) Received: (0T1RS002000000070000000000000000000000+0000000000000000000+00000000000000+0000000000000 0+00000000000000+00000000000000+00000000000000+00000000000000+00000000000000+000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000) Sent:(MRS003) Received: (0T1RS003000900030000000000000000000000+0000000000000000000+00000000000000+0000000000000 0+00000000000000+00000000000000+00000000000000+00000000000000+00000000000000+000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000) Sent:(MRS004) Received: (0T1RS004000900030000000000000000000000+0000000000000000000+00000000000000+0000000000000 0+00000000000000+00000000000000+00000000000000+00000000000000+00000000000000+000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000) Modbus: Fn=0x03, Read Registers 4060 … 4067 (Preset Gross Volumes) Fn=0x03, Read Registers 4084 … 4091 (Preset Net Volumes) Etc… 8.4 8.4.1 END OF BATCH PROCESSING ENDING A BATCH ON MULTILOAD End Batch request can come from MultiLoad (Driver Clears Batch or Card Pull) or from the Host with a MBE command. Wait until preset state is PRESET_END_OF_BATCH and pick up totals (with MRS) and/or totalizers. Sent:(MRS000) Received: (0T1RS000001107970000000001000000001000+0022400000000001000+00224000000000+0000000000000 0+00000000000000+00000000000000+00000000000000+00000000000000+00000000000000+000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000) Modbus: Fn=0x03, Read Registers 4060 … 4067 (Preset Gross Volumes) 170 Chapter 8 – Communication Trace Example Fn=0x03, Read Registers 4084 … 4091 (Preset Net Volumes) Etc… Send end batch command to allow MultiLoad to clear batch totals. Sent:(MEB000) Received: (0T1) Modbus: Fn=0x06, Write Register 7069 When preset state returns to PRESET_IDLE, prompting for next batch can begin again. 8.5 8.5.1 END OF TRANSACTION PROCESSING ENDING A TRANSACTION ON MULTILOAD A transaction can be ended by MultiLoad (Driver pulls card) or from the Host with a MET command End of transaction processing started when RCU state changes to COMPLETING_LOAD. Sent:(Q) Received: (0C0C23B) Modbus: Fn=0x03, Read Register 7000 And uncleared batched will be set to end batch waiting for the host to acknowledge with a MEB command to clear totals. When all presets have been cleared, RCU status will go to TRANSACTION_DONE. Sent:(Q) Received: (0D0C238) Modbus: Fn=0x03, Read Register 7000 Reset display to reset RCU status back to idle. Sent:(T_R) Received: (000) Modbus: Fn=0x06, Write 0 to Register 7017 8.6 SHUTDOWN OF HOST SOFTWARE Sent:(FHOSTDOWN) Received: (000) Modbus: Fn=0x03, Write 0 to Register 7014 171 Chapter 9 – Data Communication Notes and Recommendations CHAPTER 9 DATA COMMUNICATION NOTES AND RECOMMENDATIONS This topic provides some basic communications concepts, as well as Toptech's recommendations for achieving optimum performance. 9.1 9.1.1 PROTOCOL SELECTION: RS-232 VS. RS-485 RS-232 RS-232 communications protocol was designed for point-to-point (i.e., computer to a single device) communications for short distances. The actual specification for RS-232 distance is limited to 50 feet. In practice, however, RS-232 communications can be successful at distances over 1000 feet. We generally try to limit distances to 500-600 feet. RS-232 requires a minimum of 3 wires: Transmit, Receive and Signal ground wires. More wires are required for hardware handshaking. RS-232 can work on straight, non-twisted-pair wiring. If existing wiring that is not twisted-pair must be used, then RS-232 protocol should be used. 9.1.2 RS-485 RS-485 communications protocol was designed for multi-point (i.e., computer to multiple devices, also called multi-dropped) communications and can support distances over 5,000 feet. RS-485 requires 4 wires (2 twistedpair) for normal full-duplex communications. With special hardware, 2-wire half-duplex RS-485 can be accomplished. RS-485 utilizes a transmit pair of wires (TDA and TDB) and a receive pair of wires (RDA and RDB). A ground wire is not recommended normally, although some devices may have a terminal block for an RS-485 ground. Most multi-dropped devices require RS-485 communications. When installing new wiring, RS485 twisted-pair wiring is preferred. 9.2 CABLE SELECTION The speed and distance of communications is mostly affected by the capacitance and resistance of the wiring. Copper wiring is generally low resistance, so this is not normally the limiting factor. Capacitance, however, can vary greatly from one type of wire to another. In general, the larger the wire, the higher the capacitance. Wiring size of 20 to 24 gauge is typically best for data communications. Capacitance of 16pf or less is preferred. With 16pf cable, 9600 baud communications can operate over 1000 feet for RS-232, and over 5000 feet for RS-485. Doubling the capacitance will generally halve the baud rate or the distance. Data communications cable should always be shielded. Individual wires or pairs do not need shielding, but an overall shield should always be used. Whenever possible, always run data communications cable in conduit and protected from moisture. Moisture can invade most cable coatings and disrupt data communications integrity. For exposed routing or direct burial, Teflon coatings are recommended. Armored cable is also available for running over-head without conduit. RS-232 communications will work over almost any type of wiring, although speed and distance may be limited by some wiring. Straight (individual) wires or twisted-pair wiring can be used. RS-485 communications requires twisted-pair wiring with an impedance of 100 ohms. For new installations, if you select wiring suitable for RS-485 wiring, it will always work for RS-232. This will provide the ability to change from one communications protocol to another without replacing the wiring. 9.3 LINE TERMINATION IN MULTI-DROPPED COMMUNICATIONS Toptech Systems has specialized hardware that will support multi-dropping of devices on a single RS-232 communication line. This is accomplished by tri-stating or disconnecting the transmitter of a device when it is not transmitting on the communications line. This is similar to the RS-485 multi-dropping method. Due to the tri-stating of the transmitters, the transmit circuit is 'floating' when no device is transmitting. This can sometimes cause problems for the computer's receiver circuit, usually framing errors or break conditions. 172 Chapter 9 – Data Communication Notes and Recommendations To keep these problems under control, multi-dropped lines need line termination resistors installed. This can be installed on the receiver of the line driver for the line. For RS-232 communications, a 500 to 1000 ohm resistor is placed between the receive (RD) and signal ground (SG) wires of the line driver for the line. For RS-485 communications, a 220 to 270 ohm resistor is placed between the receive pair (RDA and RDB) wires of the line driver for the line. Termination resistors actually weaken the driver's ability to transmit; therefore, when longer lines are used or many devices are multi-dropped, the higher resistor values must be used. Unfortunately, the proper value must sometimes be determined by experimentation. For RS-232, the resistor value must be large enough to allow the transmitter to drive the voltage levels to at least +3VDC and -3VDC. For RS-485, the resistor value must be large enough to allow the transmitter to produce a .25 VDC difference in the transmit pair, but not large enough to disrupt the balance of the line. Too low of a resistor value will typically cause a short on the data communications line and inhibit communications. Please note that in RS-485 communications specifications, you will find that 100 ohm termination resistors are recommended. This is a different type of line termination than what we are discussing here. The 100 ohm termination is specifically for line balancing and is typically not required for baud rates less than 38,000 baud. This is well above most PC data communications capabilities. 9.4 OPTICAL ISOLATION Due to the major power fluctuations that may occur in an industrial environment and the effect of lightning storms in an area with lots of piping, we recommend that any data communications line connecting devices powered from different AC circuits be protected with optical isolation devices. The RS-232 to RS-485 converters that Toptech supplies provide this isolation. We also provide an RS-232 optical isolation device for RS-232 lines. Similar devices are available from Black Box Corporation and Burr-Brown. One isolation device must be installed on each data communications line. This is different from line drivers or short-haul modems that require a device on each end. Please note that any line termination used must be installed on the field side of the optical isolator. Also, optical isolators are directional, which means that one side is for the computer (DCE) and the other side is for the field equipment (DTE). They will not transmit data if installed backwards! 9.5 SHIELD GROUNDING Due to all of the electrical noise generated by an industrial environment, all data communications cable must be properly shielded. If not properly shielded, communications may work for a while, but you will most probably experience intermittent communications errors and outages. Most data communications cable comes with good shielding built in, but if not properly installed, the shielding will be ineffective. Proper installation requires that the shield be attached to earth ground on ONE END ONLY, typically at the junction box on the computer end, and MUST BE CONTINUOUS through all junction boxes out to the field equipment. In addition, the shield should be taped back at each field device and should NEVER be connected to a field device. Unfortunately, several of the field device manufacturers have terminal blocks labeled for attachment of the shield, and many of their installation drawings indicate that the shield should be attached to the field devices. Under no circumstances should the shield ever be attached to a field device! When connecting through a junction box, care must be taken that the shields be treated just like any other wire. The shield must remain continuous across the junction box. Don't tie multiple shields together. Route each shield across the junction box, making sure that it does not short to the box or any other point. Inside of a junction box, wires are typically unshielded. If a junction box is installed in an electrically noisy area, near motors, etc., the junction box must be able to provide shielding. Also, AC wiring should not be run into a junction box that has unshielded data communications wiring. Especially, AC circuits with loads that are switching off and on or that have a high current flow must be avoided. These will introduce noise into the data communications lines inside of the junction box. 173 Chapter 9 – Data Communication Notes and Recommendations CHAPTER 10 PARAMETER ACCESS SECURITY This topic provides introduction and communication methods for utilizing Multiloads parameter security feature. 10.1 UNDERSTANDING NEW USER AND SECURITY FEATURES The discussion below describes new features of Multiload. It may be beneficial to have an active MultiLoad of version x.31.22 or later available. Security bypass switch There are two modes of use for the MultiLoad: full security or security bypass. The mode is controlled by the CPU board DIP switch #2. When switched on (moved towards the right of the MultiLoad with open cover) a user will only have 30 seconds following power up to access the menu. Users For general use and maintenance etc., the switch should be moved to the left as to allow security bypass. In Multiloads default condition the default user is available until a new user is created via Security Accounts. To create a new user: - Provide a user name or use the default name provided. Change Password – multiload has predefined password guidelines (use a 10 character password! ) Observe Security level o At least one of the user accounts must be an ADMINISTRATOR. o Security levels are 1-10 where 1 is VIEW and 10 is ADMIN. There will always be at least one ADMIN account which has all rights. When subsequent users are created (only by an ADMIN) they can be any security level desired. Security levels The Multiload can isolate what a user, based on their security level, can change regarding parameters as dictated by default supplied security levels or eventually ADMIN user modified levels. To repeat, each user is supplied a set level upon creation of that user. That level, at the point of attempting a parameter change, is judged against the parameters security level and if the user level is equal to or higher than the parameter security level, the change will be allowed. Otherwise the user will be alerted by a temporary screen message of the level required to make the change. Individual Parameter Security levels Parameters within Equipment Setup menu (and Reports menu) selection EACH have their own individual setting. When the “Display Help” setting is enabled, the user can see the Security level associated with that distinct parameter. Understanding parameters outside of the Equipment Setup utilize a Group level setting available through the Security Setup menu. The Settings cover: RCU, Bay, Preset, Meter, Component, Additive, Sampler, Tank, Password Security, Reports. Group Parameter Security levels Group level settings are a one level covers many concept. Consider all of the Multiloads Network settings: there is only one Security level that protects that group. There are fourteen such settings that cover what is not covered by the individual Equipment Setup settings. The Groups available are: 174 Chapter 9 – Data Communication Notes and Recommendations Comm, Network, Alarms, Custom Logic, Access ID’s, Date & Time, Trace, Alibi Labels, Hazard Labels, Prompts, BOL, SD Card, Host, Factory Defaults. Access Security levels Much like that of a user having an assigned security level with a potential rights limitation on what parameters they can change, there are other sources outside of a user that has ability to modify parameters. These sources are communications such as Network/Ethernet, serial communications, custom logic, and in further detail, Modbus communications. These Access points now have security levels assigned to each that, once again, like a user, when applying a change, would be judged against the parameters security level to be equal to or greater than it. These can be found in the menu under Security Setup. The Communications covered are: Com0, Com1, Com2, Network, Custom Logic, Modbus RTU, Modbus TCP Security level modification Regarding users: only and ADMIN can create a user and therefore only an ADMIN can set the security level of the user. In relation to that: only an ADMIN (User or Access entity) can modify a Parameters or Groups Security level. Consider the case where an ADMIN level user is loading an MLC configuration file: All parameters INCLUDING parameter security level changes will be allowed. In the case where the network access security level is ADMIN (by default): All parameters INCLUDING parameter security level changes will be allowed. If in either case the Security level is less than ADMIN, no security level will be altered and there is a potential to have some parameters that have an ADMIN level to be rejected as well. 175