@sixclear/ni-daqmx-co-pulse-generation
NI DAQmx CO Pulse Generation v1.1.0

New to Version 1.1

This version fixes a bug which prevented single pulse generations from indicating their completion status.

Overview

The NI DAQmx Counter Output Pulse Generation plugin allows for generating the two kinds of pulses supported by DAQmx: Single Pulse (specifying high and low time) and Pulse Train (specifying frequency, duty cycle, and number of pulses). It provides a user interface for manually issuing the pulses, configuration for automatically generating one or more pulses when the plugin runs, and also provides a messaging interface for generating pulses. It also supports edge triggering (including the retriggerable feature) to trigger pulse generation. Generated pulses are also optionally logged to user-specified format, where the default is a CSV-like file format (with extra line breaks between rows) that records all of the relevant parameters used to generate the pulse. All of the following are available variables in a VAR container for logging:

  • @VAR{timestamp} - the current timestamp in the format specified in the logger configuration
  • @VAR{status} - either Initiated or Complete
  • @VAR{name} - the name given to the pulse
  • @VAR{type} - the type of pulse, either Single Pulse or Pulse Train
  • @VAR{counter} - the counter asset used (ex. PXI1Slot4/ctr0)
  • @VAR{outputTerminal} - the output terminal / pin to which the pulse was generated (ex. /PXI1Slot4/PFI0)
  • @VAR{initialDelay} - the time in seconds to delay before generating the pulse
  • @VAR{idleState} - the state to drive the output terminal, either Low or High
  • @VAR{singlePulse.highTime} - the high time in seconds for a single pulse (empty string otherwise)
  • @VAR{singlePulse.lowTime} - the low time in seconds for a single pulse (empty string otherwise)
  • @VAR{pulseTrain.frequency} - the configured frequency for a pulse train (empty string otherwise)
  • @VAR{pulseTrain.dutyCycle} - the configured duty cycle for pulse train (empty string otherwise)
  • @VAR{pulseTrain.frequencyActual} - the actual freuqency achieved for a pulse train pulse (empty string otherwise)
  • @VAR{pulseTrain.dutyCycleActual} - the actual duty cycle achieved for a pulse train (empty string otherwise)
  • @VAR{pulseTrain.numberOfPulses} - the number of pulses to generate for a pulse train (empty string otherwise)
  • @VAR{triggering.enable} - whether to enable triggering, either true or false
  • @VAR{triggering.source} - the trigger source pin
  • @VAR{triggering.edge} - the edge on which to trigger, either Rising or Falling
  • @VAR{triggering.retriggerable} - whether to make the task retriggerable, meaning after a trigger generates a pulse, should the task wait for another trigger

User Interface

The NI DAQmx Counter Output Pulse Generation user interface allows sending manual pulses and also displays a log of all generated pulses during the life of the plugin instance. Counter and output terminal controls define the counter asset and which pin the pulse will be generated on, respectively. The tab control in the center of the interface allows defining either a single pulse or a pulse train. Edge triggering is also supported, including the retriggerable ability. The generate pulse operation of course generates the currently configured pulse (whichever of the two pulse types is visible in the tab control).

Control Messages

As noted above, this plugin accepts messages to generate pulses. Also as noted above, the two kinds of pulse types supported by this plugin are a single pulse and a pulse train. Below are message examples for both cases.

Generate Single Pulse

The following message will generate a single pulse:

{
    "operation": "Generate Single Pulse",
    "data": {
        "name": "My Single Pulse",
        "counter": "PXI1Slot4/ctr1",
        "outputTerminal": "/PXI1Slot4/PFI1",
        "completionCheckPeriod": 250,
        "singlePulse": {
            "highTime": 0.1,
            "lowTime": 0.1,
            "initialDelay": 0,
            "idleState": "Low"
        },
        "triggering": {
            "enable": false,
            "source": "/PXI1Slot4/PFI2",
            "edge": "Rising",
            "retriggerable": false
        }
    }
}

Generate Pulse Train

The following message will generate a pulse train:

{
    "operation": "Generate Pulse Train",
    "data": {
        "name": "My Pulse Train",
        "counter": "PXI1Slot4/ctr1",
        "outputTerminal": "/PXI1Slot4/PFI1",
        "completionCheckPeriod": 250,
        "pulseTrain": {
            "frequency": 0.1,
            "dutyCycle": 0.5,
            "numberOfPulses": 10,
            "initialDelay": 0,
            "idleState": "Low"
        },
        "triggering": {
            "enable": false,
            "source": "/PXI1Slot4/PFI2",
            "edge": "Rising",
            "retriggerable": false
        }
    }
}

Publishing

This plugin publishes information about all pulses it generates, and for each pulse it publishes an update at 3 pulse life cycle status: Initiated, Started, and Complete. The following is an example of a publish message payload for a plugin instance named Pulse Generator which has generated pulses named My Single Pulse and My Pulse Train which have both completed:

{
    "instanceName": "Pulse Generator",
    "pulses": {
        <span style="color:yellow">"My Single Pulse"</span>: {
            <span style="color:yellow">"status": "Complete"</span>,
            "name": "My Single Pulse",
            "counter": "PXI1Slot4/ctr1",
            "outputTerminal": "/PXI1Slot4/PFI1",
            "completionCheckPeriod": 250,
            "singlePulse": {
                "highTime": 0.1,
                "lowTime": 0.1,
                "initialDelay": 0,
                "idleState": "Low"
            },
            "triggering": {
                "enable": false,
                "source": "/PXI1Slot4/PFI3",
                "edge": "Rising",
                "retriggerable": false
            }
        },
        <span style="color:yellow">"My Pulse Train"</span>: {
            <span style="color:yellow">"status": "Complete"</span>,
            "name": "My Pulse Train",
            "counter": "PXI1Slot4/ctr2",
            "outputTerminal": "/PXI1Slot4/PFI2",
            "completionCheckPeriod": 250,
            "pulseTrain": {
                "frequency": 0.1,
                "dutyCycle": 0.5,
                "numberOfPulses": 10,
                "initialDelay": 0,
                "idleState": "Low"
            },
            "triggering": {
                "enable": false,
                "source": "/PXI1Slot4/PFI3",
                "edge": "Rising",
                "retriggerable": false
            }
        }
    }

}

Notice that information about each pulse is placed under pulses object, and each pulse is housed under a key equal to the pulse’s name. Also notable is that the Started status will be sent right after the task is started, which means it will be sent potentially before the pulse is generated if 1. an initial delay is configured for the pulse, or 2. the pulse is configured to wait for a trigger.


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)
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.autoGenerate object
Defines the standard logger for this plugin. Note that a LOG variable space is provided here, as well as the VAR variable space. Available variables are: @LOG{LOGGERNAME}, @LOG{TIMESTAMP}, @LOG{LOGMESSAGE}, @LOG{ERRORMESSAGE}, and @VAR{instanceName} are available variables. note: @LOG{LOGGERNAME} is equal to the @VAR{instanceName} here.
Required: true
Default: (not specified; see any element defaults within)
options.autoGenerate.enable boolean
Whether to auto-generate defined pulses when the plugin is launched.
Required: true
Default: false
options.autoGenerate.pulses array
An array of initialization commands to send to the chiller. For commands with multiple parameters, use an array as the parameter value. These commands are sent before the UI is even initialized and before any user interaction is processed.
Required: true
Default:
[]
options.autoGenerate.pulses[n] object
An initialization command to send.
Required: false
Default: (not specified; see any element defaults within)
options.autoGenerate.pulses[n]::{Single Pulse} object
An object defining a single pulse generation.
Required: false
Default: (not specified; see any element defaults within)
options.autoGenerate.pulses[n]::{Single Pulse}.type enum (string)
The single pulse generation type.
Required: true
Default: "Single Pulse"
Enum Items: "Single Pulse"
options.autoGenerate.pulses[n]::{Single Pulse}.name string
A name for this pulse definition.
Required: true
Default: "My Single Pulse"
options.autoGenerate.pulses[n]::{Single Pulse}.counter string
The counter to use for pulse generation.
Required: true
Default: "PXI1Slot4/ctr0"
options.autoGenerate.pulses[n]::{Single Pulse}.outputTerminal string
The line on which to generate the pulse.
Required: true
Default: "/PXI1Slot4/PFI0"
options.autoGenerate.pulses[n]::{Single Pulse}.singlePulse object
Definition for a single pulse generation type.
Required: true
Default: (not specified; see any element defaults within)
options.autoGenerate.pulses[n]::{Single Pulse}.singlePulse.highTime number
The amount of time in seconds the pulse is at logic high voltage.
Required: true
Default: 1
options.autoGenerate.pulses[n]::{Single Pulse}.singlePulse.lowTime number
The amount of time in seconds the pulse is at logic low voltage.
Required: true
Default: 1
options.autoGenerate.pulses[n]::{Single Pulse}.singlePulse.initialDelay number
The amount of time in seconds to delay before generating the pulse.
Required: true
Default: 1
options.autoGenerate.pulses[n]::{Single Pulse}.singlePulse.idleState enum (string)
The state to drive the output line to while idle and after the pulse is complete (i.e. the resting state of the output line).
Required: true
Default: "Low"
Enum Items: "Low" | "High"
options.autoGenerate.pulses[n]::{Single Pulse}.completionCheckPeriod integer
The period in milliseconds to wait between checking whether the pulse generation is complete.
Required: true
Default: 250
options.autoGenerate.pulses[n]::{Single Pulse}.triggering object
An object containing triggering options.
Required: true
Default: (not specified; see any element defaults within)
options.autoGenerate.pulses[n]::{Single Pulse}.triggering.enable boolean
Whether to wait for a trigger before generating the pulse.
Required: true
Default: false
options.autoGenerate.pulses[n]::{Single Pulse}.triggering.source string
The input / pin to which the trigger signal is connected.
Required: true
Default: "/PXI1Slot4/PFI1"
options.autoGenerate.pulses[n]::{Single Pulse}.triggering.edge enum (string)
The digital edge on which to trigger the acquisition.
Required: true
Default: "Rising"
Enum Items: "Rising" | "Falling"
options.autoGenerate.pulses[n]::{Single Pulse}.triggering.retriggerable boolean
Whether to wait loop back and wait for subsequent triggers to generate additional pulses.
Required: true
Default: false
options.autoGenerate.pulses[n]::{Pulse Train} object
An object defining a pulse train generation.
Required: false
Default: (not specified; see any element defaults within)
options.autoGenerate.pulses[n]::{Pulse Train}.type enum (string)
The pulse train generation type.
Required: true
Default: "Pulse Train"
Enum Items: "Pulse Train"
options.autoGenerate.pulses[n]::{Pulse Train}.name string
A name for this pulse definition.
Required: true
Default: "My Pulse Train"
options.autoGenerate.pulses[n]::{Pulse Train}.counter string
The counter to use for pulse generation.
Required: true
Default: "PXI1Slot4/ctr0"
options.autoGenerate.pulses[n]::{Pulse Train}.outputTerminal string
The line on which to generate the pulse.
Required: true
Default: "/PXI1Slot4/PFI0"
options.autoGenerate.pulses[n]::{Pulse Train}.pulseTrain object
Definition for a pulse train generation type.
Required: true
Default: (not specified; see any element defaults within)
options.autoGenerate.pulses[n]::{Pulse Train}.pulseTrain.frequency number
The frequency of the pulse train.
Required: true
Default: 1
options.autoGenerate.pulses[n]::{Pulse Train}.pulseTrain.dutyCycle number
The duty cycle of the pulse train.
Required: true
Default: 0.5
options.autoGenerate.pulses[n]::{Pulse Train}.pulseTrain.numberOfPulses number
The number of pulses to generate.
Required: true
Default: 10
options.autoGenerate.pulses[n]::{Pulse Train}.pulseTrain.initialDelay number
The amount of time to delay before generating the pulse.
Required: true
Default: 1
options.autoGenerate.pulses[n]::{Pulse Train}.pulseTrain.idleState enum (string)
The state to drive the output line to while idle and after the pulse is complete (i.e. the resting state of the output line).
Required: true
Default: "Low"
Enum Items: "Low" | "High"
options.autoGenerate.pulses[n]::{Pulse Train}.completionCheckPeriod integer
The period in milliseconds to wait between checking whether the pulse generation is complete.
Required: true
Default: 250
options.autoGenerate.pulses[n]::{Pulse Train}.triggering object
An object containing triggering options.
Required: true
Default: (not specified; see any element defaults within)
options.autoGenerate.pulses[n]::{Pulse Train}.triggering.enable boolean
Whether to wait for a trigger before generating the pulse.
Required: true
Default: false
options.autoGenerate.pulses[n]::{Pulse Train}.triggering.source string
The input / pin to which the trigger signal is connected.
Required: true
Default: "/PXI1Slot4/PFI1"
options.autoGenerate.pulses[n]::{Pulse Train}.triggering.edge enum (string)
The digital edge on which to trigger the acquisition.
Required: true
Default: "Rising"
Enum Items: "Rising" | "Falling"
options.autoGenerate.pulses[n]::{Pulse Train}.triggering.retriggerable boolean
Whether to wait loop back and wait for subsequent triggers to generate additional pulses.
Required: true
Default: false
options.autoGenerate.pulses[n]::{PWM Sequence} object
An object defining a PWM sequence (pulse width modulation) generation.
Required: false
Default: (not specified; see any element defaults within)
options.autoGenerate.pulses[n]::{PWM Sequence}.type enum (string)
The PWM sequence generation type.
Required: true
Default: "PWM Sequence"
Enum Items: "PWM Sequence"
options.autoGenerate.pulses[n]::{PWM Sequence}.name string
A name for this pulse definition.
Required: true
Default: "My PWM Sequence"
options.autoGenerate.pulses[n]::{PWM Sequence}.counter string
The counter to use for pulse generation.
Required: true
Default: "PXI1Slot4/ctr0"
options.autoGenerate.pulses[n]::{PWM Sequence}.outputTerminal string
The line on which to generate the pulse.
Required: true
Default: "/PXI1Slot4/PFI0"
options.autoGenerate.pulses[n]::{PWM Sequence}.pwmSequence object
Definition for a PWM sequence generation type.
Required: true
Default: (not specified; see any element defaults within)
options.autoGenerate.pulses[n]::{PWM Sequence}.pwmSequence.sequence array
The array of PWM signals to send; each elem
Required: true
Default:
[]
options.autoGenerate.pulses[n]::{PWM Sequence}.pwmSequence.sequence[n] object
The array of PWM signals - little waveforms with specified frequency and duty cycle. Each little waveform in the sequence is generated for one period as determined by the generation / rate configuration here.
Required: false
Default: (not specified; see any element defaults within)
options.autoGenerate.pulses[n]::{PWM Sequence}.pwmSequence.sequence[n].frequency number
The frequency of the pulse train.
Required: true
Default: 1
options.autoGenerate.pulses[n]::{PWM Sequence}.pwmSequence.sequence[n].dutyCycle number
The duty cycle of the pulse train.
Required: true
Default: 0.5
options.autoGenerate.pulses[n]::{PWM Sequence}.pwmSequence.generation object
An object defining generatioun for the PWM sequence. Elements of the PWM sequence are generated on each rising clock edge and last until the next rising edge (at which point the next element in the PWM sequence takes over).
Required: false
Default: (not specified; see any element defaults within)
options.autoGenerate.pulses[n]::{PWM Sequence}.pwmSequence.generation.mode enum (string)
Finite samples means only finitely many samples are acquired.
Required: true
Default: "Finite Samples"
Enum Items: "Finite Samples" | "Continuous Samples"
options.autoGenerate.pulses[n]::{PWM Sequence}.pwmSequence.generation.rate number
The sampling rate to use specified in samples/second (Hz).
Required: true
Default: 1000
options.autoGenerate.pulses[n]::{PWM Sequence}.pwmSequence.generation.source string
The source of the sample clock. You may specify an externally available source pin (ex. /Dev1/ai/StartTrigger or Dev1/PFI0), or simply use the value OnboardClock (no spaces) to use the onboard clock.
Required: true
Default: "OnboardClock"
options.autoGenerate.pulses[n]::{PWM Sequence}.pwmSequence.generation.activeEdge enum (string)
Determines which edge of the clock signal is used to acquire samples.
Required: true
Default: "Rising"
Enum Items: "Rising" | "Falling"
options.autoGenerate.pulses[n]::{PWM Sequence}.pwmSequence.initialDelay number
The amount of time to delay before generating the pulse.
Required: true
Default: 1
options.autoGenerate.pulses[n]::{PWM Sequence}.pwmSequence.idleState enum (string)
The state to drive the output line to while idle and after the pulse is complete (i.e. the resting state of the output line).
Required: true
Default: "Low"
Enum Items: "Low" | "High"
options.autoGenerate.pulses[n]::{PWM Sequence}.completionCheckPeriod integer
The period in milliseconds to wait between checking whether the pulse generation is complete.
Required: true
Default: 250
options.autoGenerate.pulses[n]::{PWM Sequence}.triggering object
An object containing triggering options.
Required: true
Default: (not specified; see any element defaults within)
options.autoGenerate.pulses[n]::{PWM Sequence}.triggering.enable boolean
Whether to wait for a trigger before generating the pulse.
Required: true
Default: false
options.autoGenerate.pulses[n]::{PWM Sequence}.triggering.source string
The input / pin to which the trigger signal is connected.
Required: true
Default: "/PXI1Slot4/PFI1"
options.autoGenerate.pulses[n]::{PWM Sequence}.triggering.edge enum (string)
The digital edge on which to trigger the acquisition.
Required: true
Default: "Rising"
Enum Items: "Rising" | "Falling"
options.autoGenerate.pulses[n]::{PWM Sequence}.triggering.retriggerable boolean
Whether to wait loop back and wait for subsequent triggers to generate additional pulses.
Required: true
Default: false
options.userInterfaceDefaults object
An object containing pulse generation defaults for the two types of supported pulses.
Required: true
Default: (not specified; see any element defaults within)
options.userInterfaceDefaults.counter string
The counter to use for pulse generation.
Required: false
Default: "PXI1Slot4/ctr0"
options.userInterfaceDefaults.outputTerminal string
The line on which to generate the pulse.
Required: false
Default: "/PXI1Slot4/PFI0"
options.userInterfaceDefaults.triggering object
An object containing triggering options.
Required: false
Default: (not specified; see any element defaults within)
options.userInterfaceDefaults.triggering.enable boolean
Whether to wait for a trigger before generating the pulse.
Required: true
Default: false
options.userInterfaceDefaults.triggering.source string
The input / pin to which the trigger signal is connected.
Required: true
Default: "/PXI1Slot4/PFI1"
options.userInterfaceDefaults.triggering.edge enum (string)
The digital edge on which to trigger the acquisition.
Required: true
Default: "Rising"
Enum Items: "Rising" | "Falling"
options.userInterfaceDefaults.triggering.retriggerable boolean
Whether to wait loop back and wait for subsequent triggers to generate additional pulses.
Required: true
Default: false
options.userInterfaceDefaults.singlePulse object
An object defining a single pulse generation.
Required: true
Default: (not specified; see any element defaults within)
options.userInterfaceDefaults.singlePulse.name string
A name for this pulse definition.
Required: true
Default: "My Single Pulse"
options.userInterfaceDefaults.singlePulse.highTime number
The amount of time the pulse is at logic high voltage.
Required: true
Default: 1
options.userInterfaceDefaults.singlePulse.lowTime number
The amount of time the pulse is at logic low voltage.
Required: true
Default: 1
options.userInterfaceDefaults.singlePulse.initialDelay number
The amount of time to delay before generating the pulse.
Required: true
Default: 1
options.userInterfaceDefaults.singlePulse.idleState enum (string)
The state to drive the output line to while idle and after the pulse is complete (i.e. the resting state of the output line).
Required: true
Default: "Low"
Enum Items: "Low" | "High"
options.userInterfaceDefaults.singlePulse.completionCheckPeriod integer
The period in milliseconds to wait between checking whether the pulse generation is complete.
Required: true
Default: 250
options.userInterfaceDefaults.pulseTrain object
An object defining a pulse train generation.
Required: true
Default: (not specified; see any element defaults within)
options.userInterfaceDefaults.pulseTrain.name string
A name for this pulse definition.
Required: true
Default: "My Single Pulse"
options.userInterfaceDefaults.pulseTrain.frequency number
The frequency of the pulse train.
Required: true
Default: 1
options.userInterfaceDefaults.pulseTrain.dutyCycle number
The duty cycle of the pulse train.
Required: true
Default: 0.5
options.userInterfaceDefaults.pulseTrain.numberOfPulses number
The number of pulses to generate.
Required: true
Default: 10
options.userInterfaceDefaults.pulseTrain.initialDelay number
The amount of time to delay before generating the pulse train.
Required: true
Default: 1
options.userInterfaceDefaults.pulseTrain.idleState enum (string)
The state to drive the output line to while idle and after the pulse train is complete (i.e. the resting state of the output line).
Required: true
Default: "Low"
Enum Items: "Low" | "High"
options.userInterfaceDefaults.pulseTrain.completionCheckPeriod integer
The period in milliseconds to wait between checking whether the pulse generation is complete.
Required: true
Default: 250
options.userInterfaceDefaults.pwmSequence object
An object defining a PWM sequence generation.
Required: false
Default: (not specified; see any element defaults within)
options.userInterfaceDefaults.pwmSequence.name string
A name for this pulse definition.
Required: true
Default: "My Single Pulse"
options.userInterfaceDefaults.pwmSequence.sequence array
The array of PWM signals to send; each elem
Required: true
Default:
[]
options.userInterfaceDefaults.pwmSequence.sequence[n] object
The array of PWM signals - little waveforms with specified frequency and duty cycle. Each little waveform in the sequence is generated for one period as determined by the generation / rate configuration here.
Required: false
Default: (not specified; see any element defaults within)
options.userInterfaceDefaults.pwmSequence.sequence[n].frequency number
The frequency for this element of the PWM sequence.
Required: true
Default: 1
options.userInterfaceDefaults.pwmSequence.sequence[n].dutyCycle number
The duty cycle for this element of the PWM sequence.
Required: true
Default: 0.5
options.userInterfaceDefaults.pwmSequence.generation object
An object defining generatioun for the PWM sequence. Elements of the PWM sequence are generated on each rising clock edge and last until the next rising edge (at which point the next element in the PWM sequence takes over).
Required: true
Default: (not specified; see any element defaults within)
options.userInterfaceDefaults.pwmSequence.generation.mode enum (string)
Finite samples means only finitely many samples are acquired.
Required: true
Default: "Finite Samples"
Enum Items: "Finite Samples" | "Continuous Samples"
options.userInterfaceDefaults.pwmSequence.generation.rate number
The sampling rate to use specified in samples/second (Hz).
Required: true
Default: 1000
options.userInterfaceDefaults.pwmSequence.generation.source string
The source of the sample clock. You may specify an externally available source pin (ex. /Dev1/ai/StartTrigger or Dev1/PFI0), or simply use the value OnboardClock (no spaces) to use the onboard clock.
Required: true
Default: "OnboardClock"
options.userInterfaceDefaults.pwmSequence.generation.activeEdge enum (string)
Determines which edge of the clock signal is used to acquire samples.
Required: true
Default: "Rising"
Enum Items: "Rising" | "Falling"
options.userInterfaceDefaults.pwmSequence.initialDelay number
The amount of time to delay before generating the pulse train.
Required: true
Default: 1
options.userInterfaceDefaults.pwmSequence.idleState enum (string)
The state to drive the output line to while idle and after the pulse train is complete (i.e. the resting state of the output line).
Required: true
Default: "Low"
Enum Items: "Low" | "High"
options.userInterfaceDefaults.pwmSequence.completionCheckPeriod integer
The period in milliseconds to wait between checking whether the pulse generation is complete.
Required: true
Default: 250
options.logger object
Defines the standard logger for this plugin. Note that a LOG variable space is provided here, as well as the VAR variable space. Available variables are: @LOG{LOGGERNAME}, @LOG{TIMESTAMP}, @LOG{LOGMESSAGE}, @LOG{ERRORMESSAGE}, and @VAR{instanceName} are available variables. note: @LOG{LOGGERNAME} is equal to the @VAR{instanceName} here.
Required: true
Default: (not specified; see any element defaults within)
options.logger.Enable boolean
Whether to enable the logger.
Required: true
Default: true
options.logger.LogFolder string
The folder in which to write log files.
Required: true
Default: "\\JADE_LOGS\\@VAR{instanceName}"
options.logger.FileNameFormat string
The filename to use when creating log files. Note: if the filesize limit is reached new files will be created with enumerated suffixes such as: MyLogFile-1.txt, MyLogFile-2.txt, etc.
Required: true
Default: "@VAR{instanceName}-@LOG{TIMESTAMP}.csv"
options.logger.ErrorsOnly boolean
Whether to log only errors.
Required: true
Default: true
options.logger.DiskThrashPeriod integer
The period in milliseconds with which to flush the file buffer to ensure it's committed to the hard drive. Note: This is a performance consideration to prevent writing to disk too frequently.
Required: true
Default: 1000
options.logger.FileSizeLimit integer
The file size at which to create new files.
Required: true
Default: 1000000
options.logger.StartLogFormat string
The initial string to put into the log file when opened for the first time.
Required: true
Default: "Timestamp,Status,Name,Type,Counter,Output Terminal,Initial Delay,Idle State,High Time (Single Pulse),Low Time (Single Pulse),Frequency (Pulse Train),Duty Cycle (Pulse Train),Actual Frequency (Pulse Train),Actual Duty Cycle (Pulse Train),Number Of Pulses (Pulse Train),Trigger Enabled,Trigger Source,Trigger Edge,Retriggerable"
options.logger.LogMessageFormat string
The message format used to construct non-error log entries. This is what gets assigned as the @LOG{LOGMESSAGE}. Note: this is an extension of the core logger configuration. Also note that leading vertical whitespace, such as a line feed character, is allowed (ex. to jump the line for tab-delimited file structure) but any subsequence vertical whitespace - and surrounding horizontal whitespace - you may choose to include will be replaced with a single space character. You will almost certainly not inject any downstream vertical whitespace into this message format, in which means you can ignore this message. The reason we remove downstream vertical whitespace is to format any object or array variables (such as produced by the PWM Sequence generation type) appropriately for tab-delimited files (vertical whitespace would break that file format). Similarly, we recommend tab-delimited and not comma-delimited files here because those same object and array variables will naturally have commmas in them.
Required: true
Default: "\n@VAR{timestamp},@VAR{status},@VAR{name},@VAR{type},@VAR{counter},@VAR{outputTerminal},@VAR{initialDelay},@VAR{idleState},@VAR{singlePulse.highTime},@VAR{singlePulse.lowTime},@VAR{pulseTrain.frequency},@VAR{pulseTrain.dutyCycle},@VAR{pulseTrain.frequencyActual},@VAR{pulseTrain.dutyCycleActual},@VAR{pulseTrain.numberOfPulses},@VAR{triggering.enable},@VAR{triggering.source},@VAR{triggering.edge},@VAR{triggering.retriggerable}"
options.logger.LogEntryFormat string
The format to use when writing log entries when errors are not present.
Required: true
Default: "@LOG{LOGMESSAGE}"
options.logger.ErrorLogEntryFormat string
The message format used to construct error log entries.
Required: true
Default: "\n\n@LOG{ERRORMESSAGE}"
options.logger.EndLogFormat string
The final string to put in the log file when closed.
Required: true
Default: ""
options.logger.TimestampFormat string
The format used by the @LOG{TIMESTAMP} variable.
Required: true
Default: "%Y-%m-%d %H-%M-%S%3u"
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.showMenuBar boolean
Whether the menu bar is visible.
Required: true
Default: false
panel.showToolBar boolean
Whether the toolbar is visible.
Required: true
Default: false
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