Search Results for

    Show / Hide Table of Contents

    Subscribing to Signal

    Follow these steps to subscribe to Signals.

    Use this procedure to create a Sink:

    1. Get the Sink object.

    2. Get the I/O Signal from collection of Signals.

    3. Add the signal to Sink object.

    Solution

    1. Get the Sink object.

      Station stn = Project.ActiveProject as Station;
      
    2. Get the I/O Signal from collection of signals.

      DataRecorderSink signalSink = (DataRecorderSink)Simulator.DataRecorder.Sinks["SignalSink"];
      BuiltInControllerSourceSignals signals = stn.BuiltInDataRecorderSignals.ControllerSignals;
      
    3. Add the signal to signal object.

      RsIrc5ControllerCollection controllerlist = stn.Irc5Controllers;
      foreach (RsIrc5Controller irc5Controller in controllerlist)
      {
          if (irc5Controller != null
              && irc5Controller.SystemState != SystemState.Stopped)
          {
              DataRecorderSignal jc = signals.GetIOSignal(irc5Controller.SystemId, "MOTLMP");
              if (jc != null && !signalSink.Signals.Contains(jc))
              {
                  signalSink.Signals.Add(jc);
              }
          }
      }
      

    Example

    This example provides information on how to implement a Sink.

    private void SubScribeSignals()
    {           
        Station stn = Project.ActiveProject as Station;
    
        DataRecorderSink signalSink = (DataRecorderSink)Simulator.DataRecorder.Sinks["SignalSink"];
        BuiltInControllerSourceSignals signals = stn.BuiltInDataRecorderSignals.ControllerSignals;
    
        RsIrc5ControllerCollection controllerlist = stn.Irc5Controllers;
        foreach (RsIrc5Controller irc5Controller in controllerlist)
        {
            if (irc5Controller != null
                && irc5Controller.SystemState != SystemState.Stopped)
            {
                DataRecorderSignal jc = signals.GetIOSignal(irc5Controller.SystemId, "MOTLMP");
                if (jc != null && !signalSink.Signals.Contains(jc))
                {
                    signalSink.Signals.Add(jc);
                }
            }
        }
    }
    
    /// <summary>
    /// DataReccorderSink
    /// </summary>
    public class DataRecorderSink : DataRecorderSinkBase
    {
        /// <summary>
        /// Default Constructor
        /// </summary>
        /// <param name="sinkId"></param>
        public DataRecorderSink(string sinkId)
            : base(sinkId)
        { }
    
        protected override void OnData(double time, DataRecorderSignal signal, object value)
        {
            string[] signalId = signal.Id.ToString().Split('\\');
            
            if (signalId[signalId.Length - 1].ToString() == "MOTLMP")
            {
                Logger.AddMessage(new LogMessage(value.ToString()));
            }
        }
    }
    

    Required Namespaces

    ABB.Robotics.RobotStudio.Environment

    ABB.Robotics.RobotStudio.Stations

    Project

    ActiveProject

    ActiveTask

    DefaultTask

    See Also

    • Creating a Sink
    • Setting/Resetting Virtual Signals
    In this article
    Back to top Copyright © 2026 ABB Robotics