Interface for Festo PLCnext controllers using the RSC (Remote Service Call) data access API. More...
Public Member Functions | |
| override void | OpenInterface () |
| Opens the interface: refreshes the signal manager, builds caches, then starts communication. | |
Public Member Functions inherited from realvirtual.FastInterfaceBase | |
| override void | CloseInterface () |
| Closes the interface and stops communication thread. | |
| virtual void | PreFixedUpdate () |
| Processes PLC outputs before FixedUpdate - applies data FROM PLC TO Unity objects IMPLEMENTS IPreFixedUpdate::PreFixedUpdate. | |
| virtual void | PostFixedUpdate () |
| Processes PLC inputs after FixedUpdate - reads data FROM Unity objects TO send to PLC IMPLEMENTS IPostFixedUpdate::PostFixedUpdate. | |
| void | SetManualPhysicsMode (bool enabled) |
| Enables or disables manual physics control mode. | |
| void | StepPhysics (float timestep=0f) |
| Steps physics simulation forward by a specified time duration. | |
| override void | PostAllScenesLoaded () |
| Override PostAllScenesLoaded to prevent base class from opening interface too early. | |
| void | OnInterfaceEnable () |
| Called by realvirtualController after all scenes are loaded to enable the interface. | |
Public Member Functions inherited from realvirtual.InterfaceBaseClass | |
| void | UpdateInterfaceSignals (ref int inputs, ref int outputs) |
| Creates a new List of InterfaceSignals based on the Components under this Interface GameObject. | |
| Signal | CreateSignalObject (string name, SIGNALTYPE type, SIGNALDIRECTION direction) |
| Create a signal object as sub gameobject. | |
| Signal | AddSignal (InterfaceSignal interfacesignal) |
| void | RemoveSignal (InterfaceSignal interfacesignal) |
| virtual GameObject | GetSignal (string name) |
| Gets a signal with a name. | |
| void | SetAllSignalStatus (bool connected) |
| void | DestroyAllSignals () |
| void | DeleteSignals () |
Public Member Functions inherited from realvirtual.realvirtualBehavior | |
| virtual void | OnOwnershipChanged (bool isOwner) |
| Called when network ownership changes. | |
| void | SetNetworkOwner (bool isOwner) |
| Sets IsNetworkOwner and triggers OnOwnershipChanged callback. | |
| void | PreStartSim () |
| Is called by the realvirtualController before the component is started. | |
| void | StartSim () |
| Is called by the realvirtualController to start or stop the component. | |
| void | StopSim () |
| Vector3 | DirectionToVector (DIRECTION direction) |
| Transfers the direction enumeration to a vector. | |
| DIRECTION | VectorToDirection (bool torotatoin, Vector3 vector) |
| Transfers a vector to the direction enumeration. | |
| float | GetLocalScale (Transform thetransform, DIRECTION direction) |
| List< BehaviorInterfaceConnection > | UpdateConnectionInfo () |
| List< Signal > | GetConnectedSignals () |
| void | SetVisibility (bool visibility) |
| Sets the visibility of this object including all subobjects. | |
| List< BehaviorInterfaceConnection > | GetConnections () |
| List< Signal > | GetSignals () |
| GameObject | GetChildByName (string name) |
| Gets a child by name. | |
| List< GameObject > | GetChildsByName (string name) |
| Gets all child by name. | |
| GameObject | GetChildByNameAlsoHidden (string name) |
| List< GameObject > | GetAllMeshesWithGroup (string group) |
| List< GameObject > | GetAllWithGroup (string group) |
| List< GameObject > | GetAllWithGroups (List< string > groups) |
| List< GameObject > | GetAllMeshesWithGroups (List< string > groups) |
| List< string > | GetMyGroups () |
| List< GameObject > | GetMeshesWithSameGroups () |
| List< GameObject > | GetAllWithSameGroups () |
| MeshRenderer | GetMeshRenderer () |
| Gets the mesh renderers in the childrens. | |
| void | SetCollider (bool enabled, bool includeTriggers=true) |
| sets the collider in all child objects | |
| void | ErrorMessage (string message) |
| Displays an error message. | |
| void | ChangeConnectionMode (bool isconnected) |
| void | Log (string message) |
| Logs a message. | |
| void | Log (string message, object obj) |
| Logs a message with a relation to an object. | |
| void | Warning (string message, object obj) |
| Logs a warning with a relation to an object. | |
| void | Error (string message, object obj) |
| Logs an error with a relation to an object. | |
| void | Error (string message) |
| Logs an error. | |
| GameObject | DebugPosition (string debugname, Vector3 position, Quaternion quaternation, float scale) |
| Displays a gizmo for debugging positions. | |
| void | SetFreezePosition (bool enabled) |
| Freezes all child components to the current poosition. | |
| void | SetRbConstraints (RigidbodyConstraints constraints) |
| virtual void | AwakeAlsoDeactivated () |
Public Attributes | |
| string | Host |
| IP address or hostname of the PLCnext controller. | |
| int | Port |
| RSC service port (default 41100) | |
| bool | UseTLS |
| Enable TLS encryption for the RSC connection. | |
| bool | ValidateCertificate |
| Validate TLS certificate (disable for self-signed certs) | |
| string | Username |
| RSC authentication username. | |
| string | Password |
| RSC authentication password. | |
| float | ConnectionTimeoutSeconds |
| Connection and read/write timeout in seconds. | |
| bool | UseSubscription |
| Use real-time subscription instead of polling for output signals. | |
| int | SubscriptionCycleMs |
| Subscription sample rate in milliseconds (default 100 ms) | |
Public Attributes inherited from realvirtual.FastInterfaceBase | |
| string | State |
| Current connection status with visual indicator. | |
| InterfaceState | state |
| Internal connection state enum. | |
| new string | ErrorMessage |
| Last error message if connection failed. | |
| int | ReconnectAttemptCount |
| Number of reconnection attempts made. | |
| bool | IsReconnecting |
| Whether interface is currently attempting to reconnect. | |
| int | InputSignals |
| Total number of input signals found. | |
| int | OutputSignals |
| Total number of output signals found. | |
| int | CommCycleMs |
| Actual communication cycle time in milliseconds. | |
| int | CycleCount |
| Total number of communication cycles completed. | |
| int | UpdateCycleMs |
| Communication thread update interval in milliseconds. | |
| bool | OnlyTransmitChangedInputs |
| Only send input signals that have changed since last transmission (performance optimization) | |
| bool | AutoReconnect |
| Automatically attempt to reconnect on connection loss. | |
| float | ReconnectIntervalSeconds |
| Time to wait between reconnection attempts. | |
| int | MaxReconnectAttempts |
| Maximum reconnection attempts (-1 = unlimited) | |
| bool | DebugMode |
Public Attributes inherited from realvirtual.InterfaceBaseClass | |
| bool | IsConnected |
| List< InterfaceSignal > | InterfaceSignals |
| Hashtable | SignalNamesOutputs |
| Hashtable | SignalNamesInputs |
Public Attributes inherited from realvirtual.realvirtualBehavior | |
| string | Name |
| The name of the component if it should be different from the GameObject name. | |
| ActiveOnly | Active |
| GameObject | FromTemplate |
| realvirtualController | realvirtualController |
| bool | HideNonG44Components |
| bool | SceneIsAdditive |
| bool | ForceStop |
| bool | IsNetworkOwner |
| True when this component owns its simulation (local authority). Set to false by MultiplayerWEB on remote clients. | |
Protected Member Functions | |
| override void | CopyPropertiesToThreadSafe () |
| Copies Unity-thread Inspector properties to thread-safe fields before communication starts. | |
| override void | PrepareForBackgroundThread () |
| Builds address caches on the main thread so the background communication thread can read them without touching Unity GameObjects. | |
| override void | CleanupAfterBackgroundThread () |
| Cleans up address caches when the background thread stops. | |
| override async Task | EstablishConnection (CancellationToken cancellationToken) |
| Establishes the RSC connection to the PLCnext controller on the background thread. | |
| override void | CloseConnection () |
| Closes the RSC connection and releases all protocol resources. | |
| override void | OnCommunicationStarted () |
| Called when background communication starts successfully. | |
| override async Task | CommunicationLoop (CancellationToken cancellationToken) |
| Cyclic communication: reads outputs from PLCnext, writes inputs to PLCnext. | |
Protected Member Functions inherited from realvirtual.FastInterfaceBase | |
| virtual void | OnCommunicationError (Exception exception) |
| Handles communication errors and manages reconnection logic. | |
| virtual void | OnCommunicationStopped () |
| Called when communication thread stops. | |
| void | Start () |
| Unity Start - block base class behavior. | |
| new void | OnEnable () |
| Unity OnEnable - opens interface when component is enabled. | |
| new void | OnDisable () |
| virtual void | OnApplicationPause (bool pauseStatus) |
| Handles application pause events. | |
| void | FixedUpdate () |
| Unity FixedUpdate for main thread operations (signal sync moved to PrePost FixedUpdate) | |
| Dictionary< string, object > | GetInputsForPLC () |
| Gets all input signal values to send to PLC from background threads. | |
| Dictionary< string, object > | GetChangedInputsForPLC () |
| Gets only changed input signal values to send to PLC from background threads. | |
| void | ResetInputChangeDetection () |
| Resets change detection forcing all inputs to be considered changed on next call. | |
| void | SetOutputsFromPLC (Dictionary< string, object > outputs) |
| Sets output signal values from PLC data in background threads. | |
| void | SetOutputFromPLC (string signalName, object value) |
| Sets single output signal value from PLC data in background threads. | |
| void | RebuildCachedSignalArrays () |
| Rebuilds the cached signal arrays used by SyncOutputsToUnity/SyncInputsFromUnity. | |
| Dictionary< string, object > | ReadInputsThreadSafe () |
| [DEPRECATED] Use GetInputsForPLC() instead for clearer data flow direction | |
| Dictionary< string, object > | ReadChangedInputsThreadSafe () |
| [DEPRECATED] Use GetChangedInputsForPLC() instead for clearer data flow direction | |
| void | WriteOutputsThreadSafe (Dictionary< string, object > outputs) |
| [DEPRECATED] Use SetOutputsFromPLC() instead for clearer data flow direction | |
| void | WriteOutputThreadSafe (string signalName, object value) |
| [DEPRECATED] Use SetOutputFromPLC() instead for clearer data flow direction | |
| virtual void | UpdateSignalCounts () |
| Updates input and output signal counts. | |
Protected Member Functions inherited from realvirtual.InterfaceBaseClass | |
| void | OnConnected () |
| void | OnDisconnected () |
| void | OnEnable () |
| void | OnDisable () |
Protected Member Functions inherited from realvirtual.realvirtualBehavior | |
| bool | hidename () |
| bool | hideactiveonly () |
| virtual void | OnStopSim () |
| virtual void | OnPreStartSim () |
| virtual void | OnStartSim () |
| MU | GetTopOfMu (GameObject obj) |
| Gets the top of an MU component (the first MU script going up in the hierarchy) | |
| void | InitGame4Automation () |
| Initialiates the components and gets the reference to the realvirtualController in the scene. | |
| virtual void | AfterAwake () |
| void | Awake () |
Additional Inherited Members | |
Public Types inherited from realvirtual.realvirtualBehavior | |
| enum | ActiveOnly { Always , Connected , Disconnected , Never , DontChange } |
Static Public Member Functions inherited from realvirtual.FastInterfaceBase | |
| static bool | IsManualPhysicsMode () |
| Gets whether manual physics mode is currently enabled globally. | |
Static Public Member Functions inherited from realvirtual.realvirtualBehavior | |
| static bool | DirectionIsLinear (DIRECTION direction) |
| Gets back if the direction is linear or a rotation. | |
Protected Attributes inherited from realvirtual.FastInterfaceBase | |
| string | threadSafeErrorMessage |
| int | privateCycleCount |
| int | privateCommCycleMs |
| bool | threadSafeDebugMode |
| int | threadSafeUpdateCycleMs |
Properties inherited from realvirtual.FastInterfaceBase | |
| new bool | IsConnected [get] |
| override bool | ShowIsConnectedField [get] |
| Used by [ShowIf] to hide IsConnected field for FastInterface classes - always returns false. | |
| bool | IsInterfaceReady [get] |
| Returns true if the interface has been initialized via OnInterfaceEnable. | |
Properties inherited from realvirtual.InterfaceBaseClass | |
| virtual string | InterfaceDisplayName [get] |
| Display name for interface in UI lists (removes "Interface" suffix by default, can be overridden for custom names) | |
| virtual bool | ShowIsConnectedField [get] |
Properties inherited from realvirtual.IOnInterfaceEnable | |
Detailed Description
Interface for Festo PLCnext controllers using the RSC (Remote Service Call) data access API.
Connects realvirtual signals to Festo PLCnext variables via the RSC library (TCP port 41100). Both polling and subscription modes are supported. In subscription mode the PLCnext controller pushes real-time values at a configurable sample rate; in polling mode every communication cycle performs a batched read of all output-signal variables.
Signal direction convention follows the standard realvirtual PLC convention:
- PLC Output signals (PLCnext→Unity) map to PLCnext variables that the PLC writes.
- PLC Input signals (Unity→PLC) map to PLCnext variables that Unity writes to the PLC.
Key Features:
- Subscription mode for low-latency, push-based data exchange
- Polling mode as fallback or for PLCnext firmware that does not support subscriptions
- Batched write for all changed input signals each cycle
- Signal metadata key "Address" stores the full PLCnext variable path, e.g. "Arp.Plc.Eclr/MainInstance.Motor1_Running"
- Editor button to import variables from the PLC and create signals automatically
- Automatic reconnection via the FastInterfaceBase reconnect cycle
Variable path format: "ComponentName/ProgramName.VariableName" Arrays: "Component/Program.Array[0]" or "Component/Program.Array[0:9]" Structs: "Component/Program.Struct.Element.Leaf"
For detailed documentation see: https://doc.realvirtual.io/components-and-scripts/interfaces/festo-plcnext
Member Function Documentation
◆ CleanupAfterBackgroundThread()
|
protectedvirtual |
Cleans up address caches when the background thread stops.
IMPLEMENTS FastInterfaceBase::CleanupAfterBackgroundThread
Reimplemented from realvirtual.FastInterfaceBase.
◆ CloseConnection()
|
protectedvirtual |
Closes the RSC connection and releases all protocol resources.
IMPLEMENTS FastInterfaceBase::CloseConnection
Reimplemented from realvirtual.FastInterfaceBase.
◆ CommunicationLoop()
|
protectedvirtual |
Cyclic communication: reads outputs from PLCnext, writes inputs to PLCnext.
IMPLEMENTS FastInterfaceBase::CommunicationLoop
Reimplemented from realvirtual.FastInterfaceBase.
◆ CopyPropertiesToThreadSafe()
|
protectedvirtual |
Copies Unity-thread Inspector properties to thread-safe fields before communication starts.
IMPLEMENTS FastInterfaceBase::CopyPropertiesToThreadSafe
Reimplemented from realvirtual.FastInterfaceBase.
◆ EstablishConnection()
|
protectedvirtual |
Establishes the RSC connection to the PLCnext controller on the background thread.
Throws on failure so FastInterfaceBase can trigger the auto-reconnect cycle. IMPLEMENTS FastInterfaceBase::EstablishConnection
Reimplemented from realvirtual.FastInterfaceBase.
◆ OnCommunicationStarted()
|
protectedvirtual |
Called when background communication starts successfully.
IMPLEMENTS FastInterfaceBase::OnCommunicationStarted
Reimplemented from realvirtual.FastInterfaceBase.
◆ OpenInterface()
|
virtual |
Opens the interface: refreshes the signal manager, builds caches, then starts communication.
IMPLEMENTS FastInterfaceBase::OpenInterface
Reimplemented from realvirtual.FastInterfaceBase.
◆ PrepareForBackgroundThread()
|
protectedvirtual |
Builds address caches on the main thread so the background communication thread can read them without touching Unity GameObjects.
IMPLEMENTS FastInterfaceBase::PrepareForBackgroundThread
Reimplemented from realvirtual.FastInterfaceBase.
Member Data Documentation
◆ ConnectionTimeoutSeconds
| float realvirtual.FestoInterface.ConnectionTimeoutSeconds |
Connection and read/write timeout in seconds.
◆ Host
| string realvirtual.FestoInterface.Host |
IP address or hostname of the PLCnext controller.
◆ Password
| string realvirtual.FestoInterface.Password |
RSC authentication password.
◆ Port
| int realvirtual.FestoInterface.Port |
RSC service port (default 41100)
◆ SubscriptionCycleMs
| int realvirtual.FestoInterface.SubscriptionCycleMs |
Subscription sample rate in milliseconds (default 100 ms)
◆ Username
| string realvirtual.FestoInterface.Username |
RSC authentication username.
◆ UseSubscription
| bool realvirtual.FestoInterface.UseSubscription |
Use real-time subscription instead of polling for output signals.
◆ UseTLS
| bool realvirtual.FestoInterface.UseTLS |
Enable TLS encryption for the RSC connection.
◆ ValidateCertificate
| bool realvirtual.FestoInterface.ValidateCertificate |
Validate TLS certificate (disable for self-signed certs)
Public Member Functions inherited from