Adding/Editing Logix Conditionals

The Edit Conditional window is where logical expressions are set up and where actions are specified. The Edit Conditional window is displayed when a Conditional is created, or when the Edit button of a Conditional is pressed in the Edit Logix window. The Edit Conditional window displays the system name and user name of the Conditional at the top. The system name is automatically set by the program and cannot be changed. The user name may be edited by entering/modifying the text in the User Name field. The user name may not be the same as the user name of another Conditional in this Logix, but may be the same as the user name of a Conditional in a different Logix.

Next are two sections--one for the setup of a logical expression and one for set up of actions. Conditionals are statements of the form:

if (logical expression) then (action).
A Conditional has two distinct parts: its "logical expression" and its "action". The window has separate sections for the set up of each.

The logical expression section contains a table of state variables, with two buttons below. The first column in the state variable table displays the row number of the state variable. This is only of importance when the Logic Operator choice is set to 'Mixed'. The second column contains an automatic AND when the Logic Operator choice is set to 'AND' or an automatic OR when the choice is 'OR'. When the choice is 'Mixed' the user may select AND or OR as needed. The third column contains a choice box that allows the user to select the NOT operator as needed. The fourth column is a description of the state variable type and the condition for which it is to be tested. Next is a column displaying the current state for the test description. The state displayed includes the effect of the NOT operator, if NOT is selected.

The Triggers Calculation column contains checkboxes that normally are checked, so that a change in the state variable will trigger a calculation of the Logix. For those rare cases where a change in a specific entity (sensor, turnout, etc.) should not trigger a calculation result, you should uncheck the checkbox by clicking on it. Unchecking the checkbox tells the program to monitor that entity for state changes and calculate the state of the Conditional, but take no action on the result of the calculation.

The last two columns of the table (Edit and Delete buttons) are used to edit or delete that row in the state variable table. delete a state variable if you decide it is no longer needed. The State column of the table shows the state (true or false) of each state variable when it is evaluated.

For the logical expression, and therefore the Conditional, to calculate true, all state variables must evaluate to true.

At any time during the entry of state variable data, Check State Variables may be clicked to check entered data and evaluate state variables. When this button is pressed, checking and evaluation proceeds until the check completes successfully, or an error is detected. If an error is detected, checking stops for you to correct the error and click Check State Variables again. Please remember after editing name and data items to click a different cell in the table before clicking Check State Variables (or Update Conditional at the bottom of the window) so that the program is notified that you have finished your entry. Otherwise your entry may not take effect, and an error may be reported unnecessarily.

The default Logic Operator is 'AND'. In this case the Conditional will test if all variable tests are true, after taking the "NOT" negations into account. Using the Logic Operator box below the list of variables, you can change that to "OR" or "Mixed". "OR" means the conditional will be true if any one of the variable tests are true, after accounting for the negations. Selecting "Mixed" will let you enter a logical expression in a new text box using AND's, 'OR's and NOT's and the row numbers. In this expression, each variable is referred to by number, e.g. R1, R2, R3 for the 1st three variables, you can use the operators "and", "or" and "not" in addition to parentheses. Some examples:

   R1 and R2
   R1 or (R2 and R3)
   (R2 and R3) or (R3 and R1)

Adding a New State Variable

Press the Add State Variable to add a state variable (a row in the state variable table). This brings up a window with a choice box for the user to select a state variable type. Available state variables are documented below. When a type is choosen the Edit Variable window displays a text field for the name of the entity to be used for the state variable. When a name (either system name or user name) is entered, it must correspond to an existing entity (sensor, turnout, light, etc.). It is useful to open the Sensor Table when entering sensor names, or the Turnout Table to show available turnouts, etc.

Caution: If you use user names to specify state variables be careful when editing your user names or you may break your state variable definitions. The user name specified must match, character for character, including blanks, the actual user name of the sensor, turnout, etc., for your state variables to work. If you want to be able to freely edit your user names, use system names to define your state variables.

At any time during the entry of state variable data, the Check State Variables button may be clicked to check the entered data and evaluate the state variables. When this button is pressed, the checking and evaluation proceeds until the check completes successfully, or an error is detected. If an error is detected, the checking stops for the user to correct the error and click Check State Variables again. Please remember after editing the system name and data items to click a different cell in the table before clicking Check State Variables (or Update Conditional at the bottom of the window) so that the program is notified that you have finished your entry. Otherwise your entry may not take effect, and an error may be reported unnecessarily.

Adding a New Action

The action section of the Edit Conditional window provides for specifying the actions to be taken when a Conditional is calculated.

To add a new action, press the "Add Action" button. A new "Edit Action" window will appear. Select an action type in the type box, and data items needed to completely specify the action will appear to the right of the type box. If you don't know what needs to be entered in a data field, hover your cursor over it, and a hint message will appear. When a name must be entered, the name must correspond to the system name or the user name of an existing entity (sensor, turnout, signal head, etc.) of the proper type. Opening the Sensor Table when entering sensor names, or the Turnout Table to see available turnouts, etc., may be useful. Available action types are described in detail below.

For each action, three options are available for when to trigger the action: 1) On Change to True, 2) On Change to False, and 3) On Change. These refer to the calculated state of the Conditional, which is equal to the value of the logical expression as specified in the state variable table. One of these options must be selected. When done, click either "Update" to install your changes, "Cancel" to close the window without any changes or "Delete" to remove the action entirely.

Actions are evaluated in the order listed. To change that order, click the "Reorder" button on the "Edit Conditional" window. The right-most buttons by the actions will then let you select the first one, next one, etc.

When the logical expression and actions have been specified, click Update Conditional at the bottom of the window. This initiates a check of the logical expression (the same as done by Check State Variables) and a check of entered data for actions. If the user name has been edited, it is also checked. If an error is found, a message box opens announcing the error, and the update is stopped to allow you to correct the error and click Update Conditional again. If no error is found, the action is updated with the entered data, the Edit Conditional window is closed, and the user is returned to the Edit Logix window.

Two other buttons are available at the bottom of the Edit Conditional window. Clicking Cancel will close the Edit Conditional window without updating the Conditional. Clicking Cancel results in loss of any data that has been entered. The other button, Delete Conditional, provides an easy way to delete an unneeded Conditional. Click Delete Conditional to delete the Conditional being edited and return to the Edit Logix window.

Available state variables and actions are listed below. For more information, consult the Logix documentation on the JMRI web page http://jmri.org/ .

Available State Variables

State variables that are currently available for use in Conditionals are listed below, along with information on each. State variables must always evaluate to either true or false. The condition resulting in true is given for each. If the condition is not met, the state variable evaluates to false. When a Logix is active, the states of entities (sensor, turnout, light, etc.) specified in state variables in its Conditionals are monitored, unless the Triggers Calculation checkbox of the state variable is unchecked. A calculation of all Conditionals in the Logix is triggered when any monitored state changes as noted below (if not obvious).

  • Sensor Active: Evaluates to true if the state of the specified sensor is active.
  • Sensor Inactive: Evaluates to true if the state of the specified sensor is inactive.
  • Turnout Thrown: Evaluates to true if the known state of the specified turnout is thrown.
  • Turnout Closed: Evaluates to true if the known state of the specified turnout is closed.
  • Conditional True: Evaluates to true if the state of the specified conditional is true.
  • Conditional False: Evaluates to true if the state of the specified conditional is false.
  • Light On: Evaluates to true if the specified light is on.
  • Light Off: Evaluates to true if the specified light is off.
  • Memory Equals: Evaluates to true if the value saved in the specified memory is the same as the value specified in the state variable. Calculation is triggered when the monitored memory value changes to or from the specified value.
  • Fast Clock Range: Evaluates to true if the current fast clock time is between the begin time and end time specified for the range. Times must be specified in hh:mm format, where hh is hours and mm is minutes, relative to a 24-hour clock. Calculation is triggered when the fast clock time enters the range and when the fast clock time exits the range.
  • Signal Red: Evaluates to true if the appearance of the specified signal head is red. Calculation is triggered when the appearance change to or from red.
  • Signal Yellow: Evaluates to true if the appearance of the specified signal head is yellow. Calculation is triggered when the appearance change to or from yellow.
  • Signal Green: Evaluates to true if the appearance of the specified signal head is green. Calculation is triggered when the appearance change to or from green.
  • Signal Dark: Evaluates to true if the appearance of the specified signal head is dark. Calculation is triggered when the appearance change to or from dark.
  • Signal Flashing Red: Evaluates to true if the appearance of the specified signal head is flashing red. Calculation is triggered when the appearance change to or from flashing red.
  • Signal Flashing Yellow: Evaluates to true if the appearance of the specified signal head is flashing yellow. Calculation is triggered when the appearance change to or from flashing yellow.
  • Signal Flashing Green: Evaluates to true if the appearance of the specified signal head is flashing green. Calculation is triggered when the appearance change to or from flashing green.
  • Signal Lit: Evaluates to true if the specified signal head is lit.
  • Signal Held: Evaluates to true if the specified signal head is being held.

Available Actions

Actions that are currently available for use in Conditionals are listed below along with information on each:

  • Set Turnout: Sets the specified turnout to the chosen state. Specify the turnout to set by entering its name. Specify the state to set by choosing Closed or Thrown in the popup menu.
  • Set Signal Appearance: Sets the specified signal head to the chosen appearance. Specify the signal head to set by entering its name. Specify the appearance to set by choosing from the popup menu.
  • Set Signal Held: Sets the specified signal head to hold. Specify the signal head to hold by entering its name.
  • Clear Signal Held: Clears the hold on the specified signal head. Specify the signal head by entering its name.
  • Set Signal Dark: Sets the specified signal head to not lit. Specify the signal head by entering its name.
  • Set Signal Lit: Sets the specified signal head to lit. Specify the signal head by entering its name.
  • Trigger Route: Triggers the specified route. Specify the route by entering its name.
  • Set Sensor: Sets the specified sensor to the chosen state. Specify the sensor to set by entering its name. Specify the state to set by choosing Active or Inactive in the popup menu.
  • Delayed Set Sensor: Sets the specified sensor to the chosen state after waiting for a specified number of seconds. Specify the sensor to set by entering its name. Specify the state to set by choosing Active or Inactive in the popup menu. Specify the number of seconds to delay before setting the sensor by entering a number in the right-most field. If this Conditional is already waiting to set this sensor, this action is ignored, and the previous action continues as originally scheduled.(see also Reset Delayed Set Sensor below.)
  • Set Light: Sets the specified light to the chosen state. Specify the light to set by entering its name. Specify the state to set by choosing On or Off in the popup menu.
  • Set Memory: Sets the specified memory to the entered value. Specify the memory to set by entering its name. Specify the value to set in the memory by entering it in the right-most field.
  • Enable Logix: Enables the specified logix. Specify the logix to enable by entering its name.
  • Disable Logix: Disables the specified logix. Specify the logix to disable by entering its name.
  • Play Sound File: Plays the specified sound file. Specify the sound file to play by entering its name in the field provided. Click Set to bring up a file selection dialog to aid in finding the file. Navigate to your sound file, then click your sound file's name in the dialog to copy it (including its path) to the field.
  • Run Script: Starts the specified script. Specify the script to start by entering its name in the field provided. Click Set to bring up a file selection dialog for finding the file. Navigate to your script file, then click your script file's name in the dialog to copy it (including its path) to the field.
  • Delayed Set Turnout: Sets the specified turnout to the chosen state after waiting for a specified number of seconds. Specify the turnout to set by entering its name. Specify the state to set by choosing Closed or Thrown in the popup menu. Specify the number of seconds to delay before setting the turnout by entering a number in the right-most field. If this Conditional is already waiting to set this turnout, this action is ignored, and the previous action continues as originally scheduled.(see also Reset Delayed Set Turnout below.)
  • Turnout Lock: Locks or unlocks a turnout. Enter the name for the turnout, and choose the operation from the popup menu. Note, to control the type of turnout lock go to the Turnout Table and select the Lock Mode.
  • Reset Delayed Set Sensor: Sets the specified sensor to the chosen state after waiting for a specified number of seconds. Specify the sensor to set by entering its name. Specify the state to set by choosing Active or Inactive in the popup menu. Specify the number of seconds to delay before setting the sensor by entering a number in the right-most field. This action is the same as Delayed Set Sensor, except if this Conditional is already actively waiting to set the specified sensor, the previous wait is cancelled, and a new wait period is started. In effect, the wait time is restarted. The sensor is not set until the most recent wait period expires.
  • Cancel Sensor Timers: Cancels all timers waiting to set the specified sensor in all Conditionals in all Logixs. Specify the sensor by entering its name. The sensor is not set; all active delayed actions for setting the specified sensor are cancelled without setting the sensor.
  • Reset Delayed Set Turnout: Sets the specified turnout to the chosen state after waiting for a specified number of seconds. Specify the turnout to set by entering its name. Specify the state to set by choosing Closed or Thrown in the popup menu. Specify the number of seconds to delay before setting the turnout by entering a number in the right-most field. This action is the same as Delayed Set Turnout, except if this Conditional is already actively waiting to set the specified turnout, the previous wait is cancelled, and a new wait period is started. In effect, the wait time is restarted. The turnout is not set until the most recent wait period expires.
  • Cancel Turnout Timers: Cancels all timers waiting to set the specified turnouts in all Conditionals in all Logixs. Specify the turnout by entering its name. The turnout is not set; all active delayed actions for setting the specified turnout are cancelled without setting the turnout.
  • Set Fast Clock Time: Sets the time on the fast clock to the entered time. The time is entered as hh:mm where hh is hours and mm is minutes on a 24-hour clock. This action sets the fast clock to the specified time regardless of whether the fast clock is running or stopped.
  • Start Fast Clock: Starts the JMRI fast clock running. If the fast clock is already running, this action has no effect.
  • Stop Fast Clock: Pauses the JMRI fast clock. If the fast clock is not running, this action has no effect.
  • Copy Memory To Memory: Copies the value of a memory variable to another memory variable. Specify the memory to be copied from by entering its name in the leftmost field. Specify the memory to receive the copied value by entering its name in the rightmost field.
  • Set Light Intensity: Sets the intensity of a specified variable intensity light to the entered intensity value. Specify the light to set by entering its name. Specify the intensity by entering the percent intensity as an integer in the range 0 to 100. If the specified light is not a variable light, or if the intensity value entered is not an integer in the required range, an error message is displayed.
  • Set Light Transition Time: Sets the transition time of a specified variable intensity light to the entered time. Specify the light to set by entering its name. Specify the transition time by entering the number of fast clock minutes needed to move from 0% intensity to 100% intensity. If the specified light is not a variable light, or if a positive integer is not entered for the number of fast clock minutes, an error message results.