High-performance EtherNet/IP interface for communication with Allen-Bradley/Rockwell Automation PLCs. More...
Public Member Functions | |
| void | ImportSignals () |
| Discovers available tags from the connected PLC. | |
| void | ReadSignalFile () |
| Imports signals from a CSV file. | |
| void | TestConnection () |
| Tests connection to the PLC. | |
Public Member Functions inherited from realvirtual.FastInterfaceBase | |
| override void | OpenInterface () |
| Opens the interface and starts communication thread. | |
| 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 | Gateway |
| IP address of the Allen-Bradley PLC gateway. | |
| string | Path |
| Path to the PLC processor in the rack. | |
| PlcType | PLCType |
| Type of Allen-Bradley PLC (ControlLogix, CompactLogix, etc.) | |
| Protocol | Protocol |
| Communication protocol (typically ab_eip for EtherNet/IP) | |
| int | Timeout |
| Communication timeout in milliseconds. | |
| DebugLevel | LibPlcTagDebugLevel |
| Debug level for libplctag library output. | |
| string | PLCSignalTable |
| Path to CSV file containing PLC signal definitions. | |
| ulong | UpdateCycle |
| Number of update cycles completed. | |
| int | ActiveTags |
| Number of active tags in communication. | |
| int | FailedTags |
| Number of tags with communication errors. | |
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 MonoBehaviour properties to thread-safe variables for background thread access. | |
| override async Task | EstablishConnection (CancellationToken cancellationToken) |
| Establishes connection to the Allen-Bradley PLC. | |
| override async Task | CommunicationLoop (CancellationToken cancellationToken) |
| Main communication loop for cyclic data exchange with PLC using FastSignalManager and metadata. | |
| override void | CloseConnection () |
| Closes connection and cleans up resources. | |
| new void | Awake () |
| Called when the component is first initialized. | |
| new void | FixedUpdate () |
| Updates statistics display in the Unity Editor. | |
| void | OnDestroy () |
| Cleanup when component is destroyed. | |
Protected Member Functions inherited from realvirtual.FastInterfaceBase | |
| virtual void | OnCommunicationError (Exception exception) |
| Handles communication errors and manages reconnection logic. | |
| virtual void | OnCommunicationStarted () |
| Called when communication thread starts successfully. | |
| 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 | PrepareForBackgroundThread () |
| Called on main thread to prepare any Unity GameObject data before background thread starts Override this to cache signal names, GameObject references, or other Unity-specific data that the background thread will need to access. | |
| virtual void | CleanupAfterBackgroundThread () |
| Called on main thread after background thread stops to clean up Unity-specific resources Override this to clean up cached data, reset Unity components, or perform other main-thread cleanup. | |
| 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
High-performance EtherNet/IP interface for communication with Allen-Bradley/Rockwell Automation PLCs.
This interface provides robust, thread-safe communication with ControlLogix, CompactLogix, MicroLogix, and other EtherNet/IP compatible controllers. It supports tag-based data access for seamless integration with RSLogix/Studio 5000 projects and Factory Talk applications.
Key Features:
- Thread-safe background communication using FastInterface architecture
- Support for REAL, BOOL, SINT, INT, DINT data types
- Automatic reconnection on network failuresye
- CSV-based signal table import for bulk signal configuration
- Tag discovery from connected PLC
- Metadata-based tag mapping for flexible signal routing
Common Applications:
- Virtual commissioning with Rockwell Automation systems
- Integration with Factory Talk applications
- Real-time data exchange with Allen-Bradley PLCs
- Industrial simulation with actual PLC hardware
Integration Points:
- Works with realvirtual signal system (PLCInputBool, PLCOutputFloat, etc.)
- Compatible with FastSignalManager for high-performance signal access
- Integrates with Unity's component lifecycle for proper resource management
Performance Considerations:
- Uses async/await patterns for non-blocking communication
- Batch operations for efficient tag reading/writing
- OnlyTransmitChangedInputs option for bandwidth optimization
- Configurable update cycle for balancing responsiveness and CPU usage
For detailed documentation see: https://doc.realvirtual.io/components-and-scripts/interfaces/ethernetip
Member Function Documentation
◆ Awake()
|
protected |
Called when the component is first initialized.
◆ CloseConnection()
|
protectedvirtual |
Closes connection and cleans up resources.
Reimplemented from realvirtual.FastInterfaceBase.
◆ CommunicationLoop()
|
protectedvirtual |
Main communication loop for cyclic data exchange with PLC using FastSignalManager and metadata.
Reimplemented from realvirtual.FastInterfaceBase.
◆ CopyPropertiesToThreadSafe()
|
protectedvirtual |
Copies MonoBehaviour properties to thread-safe variables for background thread access.
Reimplemented from realvirtual.FastInterfaceBase.
◆ EstablishConnection()
|
protectedvirtual |
Establishes connection to the Allen-Bradley PLC.
Reimplemented from realvirtual.FastInterfaceBase.
◆ FixedUpdate()
|
protected |
Updates statistics display in the Unity Editor.
◆ ImportSignals()
| void realvirtual.EthernetIPInterface.ImportSignals | ( | ) |
Discovers available tags from the connected PLC.
◆ OnDestroy()
|
protected |
Cleanup when component is destroyed.
◆ ReadSignalFile()
| void realvirtual.EthernetIPInterface.ReadSignalFile | ( | ) |
Imports signals from a CSV file.
◆ TestConnection()
| void realvirtual.EthernetIPInterface.TestConnection | ( | ) |
Tests connection to the PLC.
Member Data Documentation
◆ ActiveTags
| int realvirtual.EthernetIPInterface.ActiveTags |
Number of active tags in communication.
◆ FailedTags
| int realvirtual.EthernetIPInterface.FailedTags |
Number of tags with communication errors.
◆ Gateway
| string realvirtual.EthernetIPInterface.Gateway |
IP address of the Allen-Bradley PLC gateway.
◆ LibPlcTagDebugLevel
| DebugLevel realvirtual.EthernetIPInterface.LibPlcTagDebugLevel |
Debug level for libplctag library output.
◆ Path
| string realvirtual.EthernetIPInterface.Path |
Path to the PLC processor in the rack.
◆ PLCSignalTable
| string realvirtual.EthernetIPInterface.PLCSignalTable |
Path to CSV file containing PLC signal definitions.
◆ PLCType
| PlcType realvirtual.EthernetIPInterface.PLCType |
Type of Allen-Bradley PLC (ControlLogix, CompactLogix, etc.)
◆ Protocol
| Protocol realvirtual.EthernetIPInterface.Protocol |
Communication protocol (typically ab_eip for EtherNet/IP)
◆ Timeout
| int realvirtual.EthernetIPInterface.Timeout |
Communication timeout in milliseconds.
◆ UpdateCycle
| ulong realvirtual.EthernetIPInterface.UpdateCycle |
Number of update cycles completed.
Public Member Functions inherited from