FS 8700 74 VeederRoot
FS 8700 74 VeederRoot
1 Description
The Veeder-Root Serial Driver allows the FieldServer to transfer data to and from devices over either
RS-232 or RS-485 ports using Veeder-Root protocol as defined in Veeder-Root Document 576013-635
Revision J. The Veeder-Root Driver supports TLS350 as per Veeder-Root Document 576013-635
Revision Y, and TLS450 as per Veeder-Root Document 577013-950 Revision G. Since the data protocol
is the same for the TLS350+ as for TLS350, it is assumed that the driver will support the TLS350+ but this
has not been tested. Refer to Section 3 for hardware connections.
The FieldServer emulates a Client.
The Veeder-Root Serial Driver is a poll response driver. Only one query or command can be processed at
a time.
A limited set of the queries and commands defined in the protocol specification have been implemented.
The reason for the limitation is two-fold. Firstly, not all commands/queries will have any meaning to a Server
device as they are principally defined to configure the Veeder-Root Device. Secondly some commands
return very complex data sets which cannot be processed in a method suitable for loading into the
FieldServer’s Data Arrays.
The driver is capable of exposing its communications statistics which allows them to be monitored using a
Server device. This ensures data is valid by generating alarms if communication problems arise.
3 Hardware Connections
The FieldServer is connected to the Veeder-Root Panel as shown below.
FieldServer
8917-07
TLS-350
Tx Rx GND
Connecting
TLS-3XX
OR
TLS-4XX
to the FieldServer
FS-8917-03
TLS-450
NOTE: For connecting to the TLS-350, Veeder Root part # 329362-001 comm board must be
installed which has the RS-232 serial port, general purpose interface.
NOTE: For specific TLS programing details, go here and refer to 577013-623.
3.1.2 TSL-4XX
To configure the serial port on a TLS-4XX console, navigate to Setup->Communications->Serial Port
screen and set up the port as shown below:
Example
// Data Arrays
Data_Arrays
Data_Array_Name , Data_Array_Format , Data_Array_Length
DA_AI_01 , Uint16 , 200
DA_AO_01 , Uint16 , 200
DA_DI_01 , Bit , 200
DA_DO_01 , Bit , 200
Example
// Client Side Connections
Connections
Port , Baud , Parity , Protocol , Poll_Delay
P1 , 9600 , None , Vroot , 0.100s
1
Not all ports shown may be supported by the hardware. Consult the appropriate Instruction manual for details of the hardware.
2
Not all ports shown may be supported by the hardware. Consult the appropriate Instruction manual for details of the hardware.
3
In the future, additional categories may be added. The category number can be used as the value for the Veed_Alarm_Category.
4
See Section 8.1 for Data Type, Address and Length Limitations.
Example comments:
• Scan_Interval – Only the Map Descriptor used to generate the poll requires a scan interval.
• Address – The address must correspond to the tank/sensor/input/device number. One Map Descriptor
required for each tank/sensor/input/device.
• Data_Array_Name – Data is stored in the Data Arrays at the offset tabulated in Section 8.2.
• Function – Passive Map Descriptors do not generate messages. They are used to store data returned
by the system status poll.
• Length – The length parameter tells the driver how much array space must be reserved for storing
alarms for a given tank/sensor/input/device.
When an alarm occurs for tank 1, the driver stores the alarm type by setting the array position
corresponding to the alarm type to a non-zero value as well as setting the first element of the reserved
space non-zero as a summary. Refer to Section 8.2 for alarm type numbers and descriptions.
Index Contents
0 Product Code (Example Array value = 49 indicates product code = ASCII ‘1’)
Tank Status (Bit 1 - (LSB) Delivery in Progress, Bit 2 - Leak Test in Progress, Bit 3 - Invalid
1
Fuel Height Alarm (MAG Probes Only))
2 Volume
3 TC Volume
4 Ullage
5 Height
6 Water
7 Temperature
8 Water Volume
Example comments:
• Function – Reading the inventory requires an active Map Descriptor.
• Address – Set the address to the tank number. One Map Descriptor per tank.
• Length – This is the minimum number of Data Array elements required to store inventory data. Tanks
1’s data will be stored in the array DA_INVENTORY starting at the zero element (offset=0) and 10
elements of the array are reserved for this data.
• Data_Type – Setting the data type generates the correct poll. Ensure that the spelling and punctuation
are exactly the same as shown in this example.
Index Contents
0 Product Code
1 Number of Deliveries
2 Start Time
3 Stop Time
4 Starting Volume
5 Starting TC Volume
6 Starting Water
7 Starting Temp
8 Ending Volume
9 Ending TC Volume
10 Ending Water
11 Ending Temp
12 Starting Height
13 Ending Height
6 Useful Features
Map_Descriptor_Name , Data_Array_Name , DA_Byte_Name , DA_Float_Name , Data_Array_Offset , Scan_interval , Function , Node_Name , Address , Length , Data_Type
Config_poll_1 , DA_MODULES , DA_POWER , DA_CURRENT , 0 , 10.0s , Rdbc , Node_A ,1 , 30 , Configuration
Example comments:
• DA_Byte_Name – Power-On-Reset and Current values are also stored if the DA_Byte_Name and the
DA_Float_Name parameters are defined. The data format must be set to UINT32 or FLOAT.
The following string will be returned and can be interpreted as described below.
YYMMDDHHmmSOFTWARE# nnnnnn-vvv-rrrCREATED - YY.MM.DD.HH.mm&&CCCC<ETX>
YYMMDDHHmm - Current Date and Time
nnnnnn-vvv - Software version number (ASCII text string)
rrr - Software revision level (ASCII text string)
YY.MM.DD.HH.mm - Date and time of software creation
&& - Data Termination Flag
CCCC - Message Checksum
The following string will be returned and can be interpreted as described below.
i90500YYMMDDHHmmSOFTWARE# 346abb-Tvv-rrrCREATED -
YY.MM.DD.HH.mmnnAABBCCDDEEFFGGHHIIJJS-MODULE# nnnnnn-vvv-r
YYMMDDHHmm Current Date and Time
346 Software Base number (fixed)
Platform (0 = Standard CPU, PLLD only 1 = Enhanced CPU 2 = (Unused) 3 =
a Enhanced CPU 16 Tank 4 = Standard CPU without PLLD & WPLLD 5 = Standard
CPU, WPLLD only)
bb Version level (eg version "15")
T Software Type (1 = "Real" 2 = "Demo" 3 = "IFSF")
vv Language
rrr Revision level (e.g. revision "AX1")
YY.MM.DD.HH.mm Date and time of software creation
nn number of 2 byte values to follow (Hex)
AA PERIODIC IN TANK TESTS (00 = DISABLE, 01 = ENABLE)
BB ANNUAL IN TANK TESTS (00 = DISABLE, 01 = ENABLE)
CC CSLD (00 = DISABLE, 01 = ENABLE)
DD BIR (00 = DISABLE, 01 = ENABLE)
EE FUEL MANAGER (00 = DISABLE, 01 = ENABLE)
FF PRECISION PLLD (00 = DISABLE, 01 = ENABLE)
GG TANKER LOAD (00 = DISABLE, 01 = ENABLE)
HH 0.2 GPH PLLD (00 = DISABLE, 01 = ENABLE)
II PRECISION PLLD ON DEMAND (00 = DISABLE, 01 = ENABLE)
JJ SPECIAL 3 TANK/LINE CONSOLE (00 = DISABLE, 01 = ENABLE)
SEM Info 3 parts, if none "NO SOFTWARE MODULE
nnnnnn SEM number (ASCII text string)
vvv SEM Software version number (ASCII text string)
r SEM Software Revision number (ASCII text string)
Map_Descriptors
Map_Descriptor_Name , Data_Array_Name , DA_Byte_Name , Data_Array_Offset , Function , Node_Name , Address , Length , Veed_Alarm_Category
Sys_alms01 , DA_S1 , DA_S1_CLEAR ,0 , passive , Node_A ,1 , 30 , System
Tank_Alms1 , DA_T1 , DA_T1_CLEAR ,0 , passive , Node_A ,1 , 30 , Tank
Example comments:
• DA_Byte_Name – The cleared alarm information is stored in the secondary array specified with the
DA_Byte_Name.
• Data_Type – Active alarms are stored in the primary array.
If RS-232 security is enabled, then the Route parameter must be specified for the node. Set the route
parameter equal to the security code. Use a period to separate each digit of the code.
Example: Security Code=234419
Route = 2.3.4.4.1.9
Alphabetic characters cannot be directly specified in the route field. They need to be specified as ASCII
values.
Example: Security Code = 123abc
Route = 1.2.3.97.98.99
If the security feature has been disabled on the panel set the route to dash (-).
7 Troubleshooting
1. The number of messages received should equal the number of messages sent.
2. The number of errors should represent a small percentage of the total number of messages sent
(< 5%).
3. Several errors in consecutive messages may cause the FieldServer kernel to place the node offline in
which case polling is slowed significantly until good communications are re-established.
4. If the number of messages received is zero and the number of timeouts is equal to the number of
messages sent then:
a. The connection is bad. Check the cables
b. The security configuration is invalid
c. The port settings are incorrect. Check the baud rate
5. If the number of messages received and sent are roughly equal and the number of errors is small but
the Data Arrays do not update then:
a. If polling for System Status – Check the 1st element of the Data Array associated with the poll Map
Descriptor. The driver sets or clears the element as a summary alarm state for the Veeder Root
device.
b. Check that the data age is less than the scan interval.
6. If the number of messages ignored is non-zero then this indicates that some data cannot be stored and
is being discarded. Generally, this arises when the driver cannot find an appropriate Map Descriptor to
store data received in response to a poll (for composite data such as system status). For example: A
system alarm occurs but Map Descriptors have not been defined to store system alarms.
7. Monitor the error log to see if the driver has reported any errors or important information. These
messages arise in two ways.
a. Configuration errors and warnings arise from the way that the CSV file has been configured. These
should be eliminated during set-up.
b. Errors may arise from some run-time condition. Many of these errors are produced in the error log
once and then suppressed so that the log does not overflow or hide other meaningful information.
These messages are preceded by an *.
8 Reference
Unknown-Category
The Unknown-Category is used to store the most current alarm of a device type that has not been specified
in the config. The device address, alarm category, and alarm type will be stored in the offsets of the specified
data array as follows:
Point Data_Array_Offset
Unknown Device Address 0
Unknown Alarm Category 1
Unknown Alarm Type 2
Example
Map_Descriptors
Map_Descriptor_Name , Data_Array_Name , Data_Array_Offset , Length , Function
CMD_CAT_Unknown , DA_UNKCAT , 000 ,3 , Passive_client
5
Download the CSV file, make the relevant changes, then upload the file and cycle power to the FieldServer.
6
Download the CSV file, make the relevant changes, then upload the file and cycle power to the FieldServer.
Data_Arrays
Data_Array_Name , Data_Format , Data_Array_Length
VROOT_STATS , UINT32 , 1000
Map_Descriptors
Map_Descriptor_Name , Data_Array_Name , Node_Name , Length , Function , Data_Type
VRoot-stats , VROOT_STATS , Null_Node , 1000 , Rdbc , Stats
The driver uses the Data Array VROOT _STATS (in this example) to store driver specific statistics. Only
one of these Map Descriptors may be specified per FieldServer.
The driver stores the following data:
1 VEED_MASTER_SENDS_MSG
2 VEED_MASTER_SENDS_BYTES
3 VEED_MASTER_TIMEOUT
4 VEED_MASTER_STREAMING
5 VEED_MASTER_RCVS_NAK
6 VEED_MASTER_RCVS_CHECKSUM
7 VEED_MASTER_RCVS_PROTOCOL
8 VEED_MASTER_COMPLETE_ERR
9 VEED_MASTER_RCVS_MSG
10 VEED_MASTER_RCVS_BYTES
11 VEED_MASTER_IC_TIMEOUT
12 VEED_MASTER_SEND_BAD_MSG
13 VEED_STAT_MSG_IGNORED
14 VEED_MASTER_RCV_BAD_FUNC_RESPONSE