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 © 2025 ABB