# OPAL-RT Asynchronous Process {#opal} The communication between OPAL-RT models and VILLASnode is established by using asynchronous programs. Asynchronous programs are are a feature of RT-LAB. They are used to exchange data between Simulink models and custom C programs. There are two ways to exchange sample values with an OPAL-RT simulator: 1. Use our adapted version of OPAL-RT's AsyncIP example for asynchronous processes (see `clients/opal/` directory) In this mode, OPAL will send sample data via UDP to VILLASnode. VILLASnode has to use the `socket` node-type. 2. Run VILLASnode as an asynchronous process itself. This is a highly experimental feature and implemented in the node-type `opal`. It requires a 32-bit version of the `villas-node`. Data exchange is then handled using OPAL-RT's libOpalAsyncApi. The following description applies only to the `opal` node-type: ## Configuration Every `opal` node supports the following special settings: #### `send_id` *(integer)* #### `recv_id` *(integer)* #### `reply` *(boolean)* ### Example nodes = { opal_node = { # The server can be started as an Asynchronous process type = "opal", # from within an OPAL-RT model. ### The following settings are specific to the opal node-type!! ### send_id = 1, # It's possible to have multiple send / recv Icons per model recv_id = 1, # Specify the ID here. reply = true } } ## Arguments for OPAL-RT block RT-LAB already provides a block to establish simple TCP/IP communication: ??? This block is based on a more generic block used for aynchronous programs: ??? @todo Insert name of RT-LAB blocks. | Param | Description | Example Value | | :------------- | :------------ |:-------------- | | FloatParam[0] | Protocol | | | FloatParam[1] | RemotePort | 10200 | | FloatParam[2] | LocalPort | 10201 | | StringParam[0] | RemoteAddr | 192.168.0.10 | | StringParam[1] | LocalAddr | 192.168.0.11 | | StringParam[2] | InterfaceName | eth2 | @todo Complete documentation for the OPAL-RT Simulink module.