A signal represents a succession of varying physical quantities over time as used in signal processing and control. It has certain properties, such as a value and a timestamp, indicating the exact time corresponding to the value of the represented physical quantity. This is usually when the value was captured or generated.
Each element of a signal is characterized by a value, a high precision timestamp, a name and additional properties, depending on the type of signal, which will provide semantic information. Some examples are dimension (e.g. length, mass, current, etc.), SI-unit (e.g. m, m/s, kg, Nm, A, etc.), reference coordinate system or activation state (enabled/disabled). Other properties could include information about the quality of the signal like noise or quantification which could be used for Kalman filtering.
It's important to note that a signal can carry a single value as well as a vector or matrix of values. For this purpose the field value is declared as of type T. Signals are used to connect different blocks in the control system and share information between the control system, the sequencer and the safety system.
Supported types for signals are
- Arithmetic (int, double …)
- Logic (bool)
- Vector (Vector2, Vector3, Vector4)
Each signal can be assigned a name and a unit. All dimensions of a signal share the same name and unit.
As an example we look at a block which does summation. Two signals, each of dimension 3, will be added together.
Sum<2,Vector3> sum; sum.setName("adds feedback"); sum.getOut().getSignal().setName("control signal");
This is shown in the following diagram:
The functions getIn() and getOut() return an input or output. To access the signals on those in- or outputs, use getSignal().
Every signal carries a timestamp. The timestamp of a signal is usually set in input blocks. Block which read from an external source and deliver this value on a output signal will set its timestamp to the time of the acquisition of the value.
Most blocks will not alter this timestamp. However, blocks which depend on the sampling time such as integrators or differentiators will change the timestamp according to their inner algorithm.
Reading from Unconnected Inputs
If you try to read from an input, which is not connected to an output, a NotConnectedFault is thrown. Please make sure that such faults are handled correctly. For an example refer to Control System with One Time Domain.