LabRAD data is stored together with a Type Tag describing its format. LabRAD supports several different Basic Data Types that can be combined into Composite Types and annotated by Type Modifiers.
For a formal description, refer to the EBNF LabRAD Grammar.
| Tag | Name | Description | Example Data | |||||
|---|---|---|---|---|---|---|---|---|
| b | Boolean | Flag | True | |||||
| i | Integer | Signed whole number | -1,500,000,000 | |||||
| w | Word | Unsigned whole number | 3,750,000,000 | |||||
| s | String | Text | "Hello World" | |||||
| v | Value | Real number | -1.637e23 | |||||
| c | Complex | Complex number | 3.2 + 1.6i | |||||
| t | TimeStamp | Time and date | 1/15/2006 12:53pm | |||||
| ? | Any | Placeholder for any type | N/A | |||||
| __ _ __ | Empty | Unspecified array type | N/A |
| Tag | Name | Description | Example Type Tag and Data | |||||
|---|---|---|---|---|---|---|---|---|
| ? or __n?__ | Array | List of data with n dimensions | *s: "Karl", "Peter", "Tom" | |||||
| (...) | Cluster | Collection of data | (sw): "Karl", 27 | |||||
| E or E? | Error | Error message | E: 15: "Can't divide by 0!" |
| Tag | Name | Description | Example Type Tag | |||||
|---|---|---|---|---|---|---|---|---|
| [...] | Units | Units of a Value or Complex | v[GHz] | |||||
| {...} | Comment | Type tag annotation | s{Name} | |||||
| :... | End | Marks the end of the type tag | b: Turn instrument on(T)/off(F) |
| Type Tag | Example Data | |||
|---|---|---|---|---|
| s | "Hello World" | |||
| b {Trigger} | False | |||
| v[m/s^2]: Acceleration | 6.2 | |||
| c[ ]: Units of 1 | 2.8 - 6.3i | |||
| v: No units given | -12.3e7 | |||
| (t, v[mV]) {timestamped data} | (5/17/2002 3:02:18pm, 150.1) | |||
| *(s{name}, w{age}): members | ("Karl", 27), ("Peter", 25) | |||
| *3w {3D array of numbers} | [[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]] | |||
| *2_ {2D empty array of unknown type} | [[ ]] | |||
| *2w {2D empty array of known type} | [[ ]] | |||
| E | 12, "Device unknown" | |||
| Es | 10, "Port in use", "COM3" |
| Type Tag | Description | |||
|---|---|---|---|---|
| g | Unknown tag | |||
| (ws | Missing ) | |||
| w{age | Missing } | |||
| s{no "}" here} | First } ends comment, following " is not a known tag | |||
| w[GHz] | Only v and c can have units | |||
| v[2] | See Units section for valid unit string | |||
| w{frq}[GHz] | Units must follow type tag immediately; use w[GHz]{frq} | |||
| _ | Only for arrays; empty data has an empty type tag | |||
| ( ) or (_) | Clusters cannot be empty | |||
| * | No array type specified; use __*_ __ instead | |||
| **w | Use *2w for rectangular or *(*w) for jagged instead | |||
| *w5 | Dimensionality must immediately follow * | |||
| *{test}5w | Dimensionality must immediately follow * | |||
| *:w | : marks the end of the tag | |||
| sE | E or E? must be the only tag | |||
| Esw | Only E(sw) is allowed |
~ Markus Ansmann, Dec 12th, 2007
Wiki: Grammar
Wiki: Protocol
Wiki: QuickStartExplorer
Wiki: Units