New to Version 1.2
This version updates the way the CSV file and TDMS files are configured and stored, and adds TDMS file path columns to the CSV file (one for each test). Furthermore, it now allows configuring a timestamp format.
As before, a new CSV file is generated each time the plugin is launched, and each test run during the life of the plugin is recorded with a row in that CSV file. However, when tests are complete, this plugin now copies the TDMS data files from their original generation location into a new, specified location and those file paths are captured in the CSV file accordingly for each test run.
Below is a sample configuration snippet showing the new configuration options (where notably, the logFolder
has been replaced by the csvFilePath
which allows more flexibility in naming the CSV file):
"timestampFormat": "%Y-%m-%d %H.%M.%S%.3u",
"csvFilePath": "\\JADE_LOGS\\@VAR{instanceName}\\csv\\Test-Results-@VAR{timestamp}.csv",
"tdmsFileHandling": {
"signal1": {
"copyFromPath": "\\JADE_LOGS\\Signal 1 Acquisition\\Signal-1.tdms",
"copyToPath": "\\JADE_LOGS\\@VAR{instanceName}\\tdms\\Signal-1-@VAR{serialNumber}-@VAR{operator}-@VAR{timestamp}.tdms"
},
"signal2": {
"copyFromPath": "\\JADE_LOGS\\Signal 2 Acquisition\\Signal-2.tdms",
"copyToPath": "\\JADE_LOGS\\@VAR{instanceName}\\tdms\\Signal-2-@VAR{serialNumber}-@VAR{operator}-@VAR{timestamp}.tdms"
},
"signal3": {
"copyFromPath": "\\JADE_LOGS\\Signal 3 Acquisition\\Signal-3.tdms",
"copyToPath": "\\JADE_LOGS\\@VAR{instanceName}\\tdms\\Signal-3-@VAR{serialNumber}-@VAR{operator}-@VAR{timestamp}.tdms"
}
}
Notice the timestampFormat
is now configurable. Also notice the csvFilePath
is configurable and may use the @VAR{instanceName}
and @VAR{timestamp}
variables, where the timestamp here is taken when the CSV file is created. Finally, observe that the tdmsFileHandling
configuration holds the copyFromPath
and copyToPath
information for each signal / test. The copyToPath
entires can include variables: @VAR{instanceName}
, @VAR{serialNumber}
, @VAR{operator}
, and @VAR{timestamp}
where the timestamp here is taken when the operator initiates a given test run (more specifically, if the operator selects to Run All Tests
then the timestamp will be the same for all 3 TDMS files for that test run; think of it as the test run start time).
The columns in the CSV file are now:
- Timestamp
- Operator
- Serial Number
- R1
- R2
- R3
- R4
- R5
- R6
- Test 1 Result
- Test 2 Result
- Test 3 Result
- Test 1 TDMS File Path
- Test 2 TDMS File Path
- Test 3 TDMS File Path
Overview
This is a custom plugin which captures the test interface for the Sandia Load Box Test. It is intended to be straightforward and provide steps for the operator to follow when executing steps. In step 1, the operator must select or enter their name and a serial number before proceeding. The operator may optionally enter values for resistors here as well. In step 2, they may then choose to run any of the 3 defined tests, or all of the tests (which will then run in sequence). In step 3, after tests are complete, the operator can then indicate the test result as a pass or fail for each test. Finally, in step 4, the operator must click the Reinitialize
button before beginning a new test. Data from the test or tests just run will remain visible until the Reinitialize
button is pressed. The user will then be back at step 1 and will need to enter a serial number again, at the very least, before proceeding.
User Interface
The following shows the user interface and the 4 steps described above.
Configuration Example
Configuration Details
ROOT object
This top level object holds all configuration information for this plugin.
Required: true
Default: (not specified; see any element defaults within)
subscribesTo array
An array of plugin instance names corresponding to plugin instances which will be subscribed to by this plugin instance.
Required: true
subscribesTo[n] string
A plugin instance name (corresponding to a plugin you wish to subscribe to) or a topic published by the worker (ex. __PLUGIN_INFO__).
Required: false
Default: ""
options object
Configuration options specific to this plugin. Note that variables and expressions are generally allowed in this section.
Required: true
Default: (not specified; see any element defaults within)
options.csvFilePath string
The path to the CSV file to generate when the plugin launches. Variables available here are @VAR{instanceName} and @VAR{timestamp}
Required: true
Default: "\\JADE_LOGS\\@VAR{instanceName}\\csv\\Test-Results-@VAR{timestamp}.csv"
options.tdmsFileHandling object
An object containing copyFromPath and copyToPath values for the signal TDMS files. The strategy here is to copy (and rename) the signal TDMS files generated by the NI DAQmx AI instances to a desired folder.
Required: true
Default: (not specified; see any element defaults within)
options.tdmsFileHandling.signal1 object
An object containing copyFromPath and copyToPath values for the Signal 1 TDMS file. The strategy here is to copy (and rename) the Signal 1 TDMS file generated by an NI DAQmx AI instance to a desired folder.
Required: true
Default: (not specified; see any element defaults within)
options.tdmsFileHandling.signal1.copyFromPath string
The path to copy the Signal 1 TDMS file to generated by an NI DAQmx TDMS plugin instance.
Required: true
Default: "\\JADE_LOGS\\Signal 1 Acquisition\\Signal-1.tdms"
options.tdmsFileHandling.signal1.copyToPath string
The path to the Signal 1 TDMS file to. This path can contain variables: @VAR{instanceName}, @VAR{serialNumber}, @VAR{operator}, and @VAR{timestamp}.
Required: true
Default: "\\JADE_LOGS\\@VAR{instanceName}\\tdms\\Signal-1-@VAR{serialNumber}-@VAR{operator}-@VAR{timestamp}.tdms"
options.tdmsFileHandling.signal2 object
An object containing copyFromPath and copyToPath values for the Signal 2 TDMS file. The strategy here is to copy (and rename) the Signal 2 TDMS file generated by an NI DAQmx AI instance to a desired folder.
Required: true
Default: (not specified; see any element defaults within)
options.tdmsFileHandling.signal2.copyFromPath string
The path to copy the Signal 2 TDMS file to generated by an NI DAQmx TDMS plugin instance.
Required: true
Default: "\\JADE_LOGS\\Signal 2 Acquisition\\Signal-2.tdms"
options.tdmsFileHandling.signal2.copyToPath string
The path to the Signal 2 TDMS file to. This path can contain variables: @VAR{instanceName}, @VAR{serialNumber}, @VAR{operator}, and @VAR{timestamp}.
Required: true
Default: "\\JADE_LOGS\\@VAR{instanceName}\\tdms\\Signal-2-@VAR{serialNumber}-@VAR{operator}-@VAR{timestamp}.tdms"
options.tdmsFileHandling.signal3 object
An object containing copyFromPath and copyToPath values for the Signal 2 TDMS file. The strategy here is to copy (and rename) the Signal 2 TDMS file generated by an NI DAQmx AI instance to a desired folder.
Required: true
Default: (not specified; see any element defaults within)
options.tdmsFileHandling.signal3.copyFromPath string
The path to copy the Signal 3 TDMS file to generated by an NI DAQmx TDMS plugin instance.
Required: true
Default: "\\JADE_LOGS\\Signal 3 Acquisition\\Signal-3.tdms"
options.tdmsFileHandling.signal3.copyToPath string
The path to the Signal 3 TDMS file to. This path can contain variables: @VAR{instanceName}, @VAR{serialNumber}, @VAR{operator}, and @VAR{timestamp}.
Required: true
Default: "\\JADE_LOGS\\@VAR{instanceName}\\tdms\\Signal-3-@VAR{serialNumber}-@VAR{operator}-@VAR{timestamp}.tdms"
options.operators array
The list of selectable operators. A new operator can be entered in the UI; this is just predefined list for convenience for regular operators.
Required: true
options.operators[n] string
The name of an opertor.
Required: false
Default: ""
panel object
Required: true
Default: (not specified; see any element defaults within)
panel.open boolean
Whether to open the front panel immediately when run.
Required: true
Default: true
panel.state enum (string)
The state in which the window will open.
Required: true
Default: "Standard"
Enum Items: "Standard" | "Hidden" | "Closed" | "Minimized" | "Maximized"
panel.transparency integer
The transparency of the window. 0 = opaque, 100 = invisible.
Required: true
Default: 0
panel.title string
The title of the plugin window when it runs. Note that the variable 'instanceName' is provided here in a VAR variable container.
Required: true
Default: "@VAR{instanceName}"
panel.titleBarVisible boolean
Whether the window title bar is visible.
Required: true
Default: true
panel.makeActive boolean
Whether the window becomes active when opened.
Required: true
Default: false
panel.bringToFront boolean
Whether the window is brought to the front / top of other windows when opened.
Required: true
Default: false
panel.minimizable boolean
Whether the window is minimizable.
Required: true
Default: true
panel.resizable boolean
Whether the window is resizable.
Required: true
Default: true
panel.closeable boolean
Whether the window is closeable.
Required: true
Default: true
panel.closeWhenDone boolean
Whether to close the window when complete.
Required: true
Default: true
panel.center boolean
Whether to center the window when opened. Note: this property overrides the 'position' property.
Required: true
Default: false
panel.position object
The position of the window when opened the first time.
Required: true
Default: (not specified; see any element defaults within)
panel.position.top integer
The vertical position of the window in pixels from the top edge of the viewport. Note: this property is overriden by the 'center' property.
Required: true
Default: 100
panel.position.left integer
The horizontal position of the window in pixels from the left edge of the viewport. Note: this property is overriden by the 'center' property.
Required: true
Default: 100
panel.size object
The size of the window when opened the first time.
Required: false
Default: (not specified; see any element defaults within)
panel.size.width integer
The width of the window in pixels. -1 means use the default width for the panel. Note that depending on panel features exposed, there may be a limit to how small a panel can become.
Required: true
Default: -1
panel.size.height integer
The height of the window in pixels. -1 means use the default height for the panel. Note that depending on panel features exposed, there may be a limit to how small a panel can become.
Required: true
Default: -1
channel object
The communication channel definition used by this plugin. Note: this section rarely needs modifications. In many cases, the underlying plugin implementation depends on at least some of these settings having the values below. Consult with a JADE expert before making changes to this section if you are unfamiliar with the implications of changes to this section.
Required: true
Default: (not specified; see any element defaults within)
channel.SendBreakTimeout integer
The timeout duration in milliseconds to wait for sending messages.
Required: true
Default: 1000
channel.WaitOnBreakTimeout integer
The timeout duration in milliseconds to wait for receiving messages. Note: -1 means wait indefinitely or until shutdown is signalled.
Required: true
Default: -1
channel.WaitOnShutdownTimeout integer
The timeout duration in milliseconds to wait for shutdown acknowledgment.
Required: true
Default: 2000
channel.ThrowTimeoutErrors boolean
Whether to throw timeout errors vs simply returning a boolean indicating whether a timeout occurred.
Required: true
Default: false
channel.ThrowShutdownUnacknowledgedErrors boolean
Whether to throw 'shutdown unacknowledged' errors.
Required: true
Default: true
channel.QueueSize integer
The size of the underlying communication queue in bytes. Note: -1 means unbounded (i.e. grow as needed with available memory).
Required: true
Default: -1
channel.SendBreakEnqueueType enum (string)
The enqueue strategy employed on the underlying queue for standard messages.
Required: true
Default: "Enqueue"
Enum Items: "Enqueue" | "EnqueueAtFront" | "LossyEnqueue" | "LossyEnqueueAtFront"
channel.SendErrorEnqueueType enum (string)
The enqueue strategy employed on the underlying queue for error messages.
Required: true
Default: "Enqueue"
Enum Items: "Enqueue" | "EnqueueAtFront" | "LossyEnqueue" | "LossyEnqueueAtFront"
channel.SendShutdownEnqueueType enum (string)
The enqueue strategy employed on the underlying queue for the shutdown message.
Required: true
Default: "LossyEnqueueAtFront"
Enum Items: "Enqueue" | "EnqueueAtFront" | "LossyEnqueue" | "LossyEnqueueAtFront"
channel.FlushQueueBeforeWaitingOnBreak boolean
Whether to flush the queue upon waiting for new messages (i.e. whether to clear the queue and wait for the next 'new' message; this has the effect of removing old messages and waiting for the next message.
Required: true
Default: false
channel.FlushQueueAfterBreaking boolean
Whether to flush the queue after receiving a new message (i.e. whether to handle the next message coming in the queue and then flush; this has the effect of handling the oldest message (if it exsits) or the next message before flushing the queue.
Required: true
Default: false