Time-critical software with Wire member

The “Wire” member is a unique feature of Robot Raconteur that is designed to transmit a constantly changing value. This is intended to emulate a physical wire carrying an analog value, but is capable of carrying any valid Robot Raconteur data type. The “wire” is full-duplex meaning that it can send data in both directions, (unless using readonly or writeonly modifiers) and it only provides the latest value. When the OutValue of one WireConnection is changed, a packet is generated that contains the data and a timestamp of type TimeSpec. This packet is transmitted through the channel and received by the other WireConnection in the pair. If the timestamp is newer, the InValue is updated. The timestamps can also be read through LastValueReceivedTime and LastValueSentTime.

The Wire member is non-blocking, meaning that the OutValue is set, the new value will be placed in the send queue and control will return immediately to the caller. If the an older value exists it will be discarded and replaced with the new value.

The LastValueReceivedTime property can be used to detect how old the InValue data is. The TimeSpec returned is in the remote node’s clock. This means that it cannot be compared directly to the local node clock. Clock synchronization is not directly supported by Robot Raconteur. Different transports may provide this functionality.

Using the wire InValueLifespan property is recommended to prevent stale data from being used.

Robot Raconteur will in the future add real-time “sideband” transports for Wire connections. This will be implemented using the QUIC transport.