Sample data EasyParse format
In EasyParse format (calbin00), dataset-1 contains only sample data, comprising sample sets recorded in chronological order. The format of an individual sample set is also quite different from that of Standard format. Every sample set includes a timestamp, and values are already converted to the physical values of the required parameters according to the logger's calibration, with correction or compensation already applied as necessary. They are also stored in a different numeric format, with error codes still accommodated when required. Refer to the following sections for more details.
The logger can also store derived channels such as depth or salinity, which have no corresponding 'raw' value in the Standard data format.
These characteristics make the data easier for host software to interpret:
All stored items are sample sets, with the size fixed for a given logger deployment; 8 bytes for a timestamp, plus 4 bytes for each channel stored.
Host software does not need to do any calculation or need to know the logger's calibration data; final values are stored directly by the logger.
Derived channels are already included.
Sample timing
Sample sets are individually time-stamped; while this consumes memory, it does also mean that timing information is always available for snippets of downloaded data.
Each timestamp is a 64-bit (8-byte) unsigned integer, representing the number of milliseconds elapsed since 1970-Jan-01 00:00:00. This is a format commonly used by Unix-based computer systems, in which leap years are correctly accounted for, but each day is assumed to contain exactly 86400 seconds; there is no allowance for leap seconds or other obscure adjustments. The logger takes no account of time zones or daylight savings adjustments.
If a sample set is the result of an average or a bin, the timestamp reflects the timestamp of the first measurement of the average or bin.
Normal reading values
Each individual reading of the sample data is stored as a 32-bit (4-byte) floating point number in IEEE-754 single precision format. Both measured and derived channels are included in the sample set, with channels ordered as expected according to the results of the channel command. The values are the final computed output for each channel, including all necessary corrections and cross compensations. If an error occurs on an individual channel in a sample set, that channel will be reported as an IEEE-754 'NaN' (Not a Number): see below for more details.
Error Codes
Under some conditions an error may occur on one channel while data from the other channels is perfectly acceptable. Rather than generating a time-stamped event if this happens, the individual reading is replaced by an error code.
In EasyParse format, an error code is stored as an IEEE-754 'NaN' (Not a Number), which is compatible with the floating point format of the sample readings, without being a valid value. An error code indicates a problem with that particular reading from the channel in question; other readings in the same sample set may be fine, as may other readings from the same channel in different sample sets.
IEEE-754 provides for multiple NaN values, and this feature is used to encode the nature of the error, although it is acknowledged that host software taking advantage of the simplicity of the EasyParse format will probably not delve into this level of diagnostic detail. The general format is (0xFF800000 + <EC>), where 0xFF800000 is the base value of an IEEE-754 NaN, and <EC> is the error code. The values of <EC> correspond, where possible and appropriate, to the error numbers also used in Standard data storage format.
Error # | Hex Code | Description |
---|---|---|
- | 0xFF800001 | internal computation failure (eg. divide-by-zero) |
- | 0xFF800002 | unable to compute value, channel not calibrated |
0 | 0xFF810000 | generic, unknown or unexpected error |
1 | 0xFF810001 | EOC bit unexpectedly set in ADC output |
2 | 0xFF810002 | DMY bit unexpectedly set in ADC output |
3 | 0xFF810003 | internal addressing error |
4 | 0xFF810004 | too much data for internal transfer |
5 | 0xFF810005 | access to internal bus denied |
6 | 0xFF810006 | timeout sending internal command |
7 | 0xFF810007 | timeout receiving internal response |
8 | 0xFF810008 | generic failure to interpret response |
9 | 0xFF810009 | no sample was started |
10 | 0xFF81000A | sample acquisition still in progress |
11 | 0xFF81000B | sample process failed |
12 | 0xFF81000C | no valid samples to average |
13 | 0xFF81000D | internal response unexpectedly short |
14 | 0xFF81000E | supporting channel value not valid, or unknown equation |
15 | 0xFF81000F | (reserved) |
16 | 0xFF810010 | channel value is outside reasonable range |
17 | 0xFF810011 | channel value is below minimum measurable limit |
18 | 0xFF810012 | channel value is above maximum measurable limit |
19 | 0xFF810013 | sensor output not received within timeout |
20 | 0xFF810014 | unable to parse sensor output |
21 | 0xFF810015 | channel is not correctly calibrated |
22 | 0xFF810016 | floating point value is badly formed |
23 | 0xFF810017 | channel not logged |