java.lang.Object
org.djutils.event.LocalEventProducer
org.opentrafficsim.trafficcontrol.AbstractTrafficController
org.opentrafficsim.trafficcontrol.trafcod.TrafCod
All Implemented Interfaces:
Serializable, Remote, EventListener, org.djutils.base.Identifiable, org.djutils.event.EventListener, org.djutils.event.EventProducer, org.opentrafficsim.core.animation.Drawable, org.opentrafficsim.core.object.NonLocatedObject, ActuatedTrafficController, TrafficController

public class TrafCod extends AbstractTrafficController implements ActuatedTrafficController, org.djutils.event.EventListener
TrafCOD evaluator. TrafCOD is a language for writing traffic control programs. A TrafCOD program consists of a set of rules that must be evaluated repeatedly (until no more changes occurr) every time step. The time step size is 0.1 seconds.

Copyright (c) 2013-2024 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved.
BSD-style license. See OpenTrafficSim License.

Author:
Wouter Schakel
See Also:
  • Field Details

    • TrafCod_VERSION

      static final int TrafCod_VERSION
      Version of the supported TrafCOD files.
      See Also:
    • EVALUATION_INTERVAL

      static final org.djunits.value.vdouble.scalar.Duration EVALUATION_INTERVAL
      The evaluation interval of TrafCOD.
    • COMMENT_PREFIX

      static final String COMMENT_PREFIX
      Comment starter in TrafCOD.
      See Also:
  • Constructor Details

    • TrafCod

      public TrafCod(String controllerName, URL trafCodURL, org.opentrafficsim.core.dsol.OtsSimulatorInterface simulator, Container display, BufferedImage displayBackground, List<String> displayObjectLocations) throws TrafficControlException, nl.tudelft.simulation.dsol.SimRuntimeException, IOException
      Construct a new TrafCOD traffic light controller.
      Parameters:
      controllerName - String; name of this TrafCOD traffic light controller
      trafCodURL - URL; the URL of the TrafCOD rules
      simulator - OtsSimulatorInterface; the simulation engine
      display - Container; if non-null, a controller display is constructed and shown in the supplied container
      displayBackground - BufferedImage; background for controller display image
      displayObjectLocations - List<String>; list of sensors and traffic lights and their locations on the displayBackGround
      Throws:
      TrafficControlException - when a rule cannot be parsed
      nl.tudelft.simulation.dsol.SimRuntimeException - when scheduling the first evaluation event fails
      IOException - when loading the TrafCOD rules from the URL fails
    • TrafCod

      public TrafCod(String controllerName, List<String> trafCODRules, org.opentrafficsim.core.dsol.OtsSimulatorInterface simulator, BufferedImage displayBackground, List<String> displayObjectLocations) throws TrafficControlException, nl.tudelft.simulation.dsol.SimRuntimeException
      Construct a new TrafCOD traffic light controller.
      Parameters:
      controllerName - String; name of this TrafCOD traffic light controller
      trafCODRules - List<String>; the TrafCOD rules
      simulator - OtsSimulatorInterface; the simulation engine
      displayBackground - BufferedImage; background for controller display image
      displayObjectLocations - List<String>; list of sensors and traffic lights and their locations on the displayBackGround
      Throws:
      TrafficControlException - when a rule cannot be parsed
      nl.tudelft.simulation.dsol.SimRuntimeException - when scheduling the first evaluation event fails
  • Method Details

    • loadTextFromURL

      public static List<String> loadTextFromURL(URL url) throws IOException
      Read a text from a URL and convert it to a list of strings.
      Parameters:
      url - URL; the URL to open and read
      Returns:
      List<String>; the lines read from the URL (trimmed).
      Throws:
      IOException - when opening or reading the URL failed.
    • checkConsistency

      public void checkConsistency() throws nl.tudelft.simulation.dsol.SimRuntimeException, TrafficControlException
      Check the consistency of the traffic control program and perform initializations that require a completely built network.
      Throws:
      nl.tudelft.simulation.dsol.SimRuntimeException - when the simulation model is not an OtsModelInterface
      TrafficControlException - when a required traffic light or sensor is not present in the network
    • printRule

      static String printRule(Object[] tokens, boolean printValues) throws TrafficControlException
      Print a tokenized rule.
      Parameters:
      tokens - Object[]; the tokens
      printValues - boolean; if true; print the values of all encountered variable; if false; do not print the values of all encountered variable
      Returns:
      String; a textual approximation of the original rule
      Throws:
      TrafficControlException - when tokens does not match the expected grammar
    • getSimulator

      public org.opentrafficsim.core.dsol.OtsSimulatorInterface getSimulator()
      Retrieve the simulator.
      Returns:
      SimulatorInterface<Time, Duration, SimTimeDoubleUnit>
    • getStructureNumber

      public int getStructureNumber()
      Retrieve the structure number.
      Returns:
      int; the structureNumber
    • updateDetector

      public void updateDetector(String detectorId, boolean detectingGTU)
      Tell the traffic controller that the state of a detector has changed.
      Specified by:
      updateDetector in interface ActuatedTrafficController
      Parameters:
      detectorId - String; id of the detector
      detectingGTU - boolean;
    • traceVariablesOfStream

      public void traceVariablesOfStream(int stream, boolean trace)
      Switch tracing of all variables of a particular traffic stream, or all variables that do not have an associated traffic stream on or off.
      Parameters:
      stream - int; the traffic stream number, or TrafCOD.NO_STREAM to affect all variables that do not have an associated traffic stream
      trace - boolean; if true; switch on tracing; if false; switch off tracing
    • traceVariable

      public void traceVariable(String variableName, int stream, boolean trace)
      Switch tracing of one variable on or off.
      Parameters:
      variableName - String; name of the variable
      stream - int; traffic stream of the variable, or TrafCOD.NO_STREAM to select a variable that does not have an associated traffic stream
      trace - boolean; if true; switch on tracing; if false; switch off tracing
    • notify

      public void notify(org.djutils.event.Event event) throws RemoteException
      Specified by:
      notify in interface org.djutils.event.EventListener
      Throws:
      RemoteException
    • fireTrafCODEvent

      void fireTrafCODEvent(org.djutils.event.EventType eventType, Object[] payload)
      Fire an event on behalf of this TrafCOD engine (used for tracing variable changes).
      Parameters:
      eventType - EventType; the type of the event
      payload - Object[]; the payload of the event
    • getFullId

      public String getFullId()
      Specified by:
      getFullId in interface org.opentrafficsim.core.object.NonLocatedObject
    • getDisplayContainer

      public Container getDisplayContainer()
      Retrieve the Swing (for now) container in which the controller displays its current state.
      Specified by:
      getDisplayContainer in interface ActuatedTrafficController
      Returns:
      Container; the display of the current state; may return null!
    • toString

      public String toString()
      Overrides:
      toString in class Object