Add ROC Connection - How To
You can add an Emerson Operations Controller (ROC) connection through the Kelvin UI, Kelvin SDK and Kelvin API.
Connections can be deployed to both x86_64 and ARM64 devices.
Deploy
To start click on the Connections menu option from the left side bar menu.
click on the Create Connection button.
Step 1
Select Import Data and Control Setpoints and click Next.
Step 2
Here you will see a list of Import Connection Applications available in the App Registry.
Select the ROC option, select a Version and click Next.
Step 3
In Step 3 you have a range of options available.
Information
Type in a memorable name in the Display Name text input. You can use any letters, numbers and special characters.
The Connection Name text input will be automatically converted and filled in as you type in the Display Name section. The conversion ensures the Connection Name only contains lowercase alphanumeric characters and ., _ or - characters.
Configuration
Configure the ROC connection to the asset. There are a number of optional and mandatory parameters to fill in.
For the optional parameters, if you do not fill in any values, the default values will be used.
| Parameter | Options | Description | Default | Mandatory |
|---|---|---|---|---|
| ROC Plus Protocol | Boolean (True/False) | Indicates whether the ROC Plus protocol is used for communication. | False | No |
| Host Unit | Numeric value | Identifies the unit number of the host in the ROC network. | Yes | |
| Host Group | Numeric value | Specifies the group number the host belongs to in the ROC network. | Yes | |
| Dead Poll | Boolean (True/False) | Enables or disables the detection of non-responsive polls, marking a poll as 'dead' if not answered. | False | Yes |
| Optimize Read Requests | Boolean (True/False) | Enables or disables optimization of read requests to reduce network traffic. | False | Yes |
| Optimize Write Requests | Boolean (True/False) | Enables or disables optimization of write requests to reduce network traffic. | False | Yes |
| Number of Socket Connections | Numeric value | Defines the number of socket connections to be maintained with the ROC device. | 1 | No |
| Socket Connections Timeout (In Seconds) | Numeric value | The maximum duration to wait for a response on a socket connection before timing out. | 2 | No |
| Connection | Serial, Ethernet | Specifies the type of connection used to communicate with the ROC device. | Yes | |
| IP (Visible with Ethernet connection only) | String (IP address format) | The IP address used for Ethernet communication with the ROC device. | Yes | |
| Port (Visible with Ethernet connection only) | Numeric value (port number) | The network port number used for Ethernet communication with the ROC device. | Yes | |
| Device (Visible with Serial connection only) | String value | Identifies the specific ROC device for Serial Connections. | Yes | |
| Baud Rate (Visible with Serial connection only) | Numeric value (in baud) | The communication speed for Serial connections, measured in baud (e.g., 9600, 19200). | 9600 | Yes |
System
Here you will be able to tune all the system variables that are present in the app.yaml file of the Application.
You can choose to edit it using a UI or directly on the YAML or JSON.
Note
Using YAML or JSON is very useful for fast application of settings if you have preset configurations and want to copy/paste them into here.
Env Vars
Here will be shown the list of default Environment Variables and the default values that were set in the app.yaml file of the Application during development.
You can edit these and change both the environment name or value. You can also add addition Environment variables.
Resources
Apply resources available for the Workload.
See Set CPU/Memory Limits for detailed documentation on this section.
Ports
Open ports to your Workload.
Volumes
Mount volumes to your Workload.
Advanced
Choose if you would like to add Privileged mode to the Workload
Optionally choose a health check service for your Workload. These are Kubernetes liveness probes and detailed information can be found on the Kubernetes Website.
Warning
If you use a Health check option, make sure you add code to respond to the liveness probe requests.
IO Mapping
Select an Asset, Data Stream and fill in the connection and other optional values.
Full descriptions of each column is giving below.
Success
If you have many connection IO to fill in, you can save time with the download/upload csv file option in the top right hand corner of the popup.
Use Microsoft Excel or Google Sheets to fill in all the Connection IO details.
You can only upload one file. Multiple file uploads is not allowed and only the latest selected file will be used.
Option Descriptions
| Header | Description | Example | Mandatory |
|---|---|---|---|
| Asset | The Kelvin Asset name (must be lowercase alphanumeric with no spaces) | well-01 | Yes |
| DataStream | The Kelvin Data Stream name (must be lowercase alphanumeric with no spaces) | water-flow | Yes |
| Storage | Location of the storage; "none", "node", "node-and-cloud" | node-and-cloud | No |
| Polling Rate (in seconds) | How often to pull the data from the asset | 30 | Yes |
| TLP | A three-component address system used to identify specific data points (Type, Logical, Parameters) in the ROC800’s database | Yes | |
| Protocol Type | Supports various protocols including ROC Plus protocol and Modbus master and slave protocol | Yes | |
| Device Series | Specific series or version of the ROC800 controller | Yes | |
| ROC Unit | Identifier for the specific ROC800 unit in use | Yes | |
| ROC Group | Defines the group setting or configuration within the ROC network | Yes | |
| Operator ID | User identifier for system access and operations | Yes | |
| Password | Security feature for accessing and operating the ROC800 system | Yes | |
| Access Level | Defines the level of access or permissions granted to a user or operator ID | Yes | |
| Control Writable | Read/Write (RW) or Read Only (RO) | RO | Yes |
Cluster
Then select which Cluster to deploy the new Connector to.
Optionally you can also select the Node in the Cluster. If you do not then the system will automatically assign the Node.
It is important that the asset is reachable from the selected Cluster and Node.
Deployment
For a standard Workload deployment, choose the Standard option.
Note
Stage Only and Instant Apply are covered in a different documentation section.
When you are ready and you have a green check
on all options, you will see the Create button turn blue.
You can then see the status of the Connection in the Connections list going from Pending, Deploying to Running. It will start automatically, connect to the asset and start collecting data.
You can even create and deploy the Connection if the Cluster is offline. It will be placed in a queue with a status of Pending and will be automatically deployed when the Cluster comes back online.
| API cURL Example | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | |
The response will look something like this;
json title="API cURL Example Response" linenums="1"
{
"name": "docs-roc-connection",
"title": "Docs ROC Connection",
"app_name": "kelvin-bridge-roc-client",
"app_version": "3.0.2",
"app_type": "importer",
"cluster_name": "sales-01-cluster",
"runtime": {
"datastreams": [
{
"name": "casing_pressure",
"title": "Casing Pressure",
"data_type_name": "number",
"unit_name": "pound_per_square_inch"
}
],
"resources": [
{
"resource": "krn:asset:doc-motor-01",
"datastreams": {
"casing_pressure": {
"way": "output",
"storage": "node-and-cloud",
"remote": false,
"configuration": {
"access_level": 5,
"device_series": "floboss407",
"polling_rate": 30,
"protocol_type": "FLOAT",
"tlp": "0"
}
}
},
"properties": {
"casing_depth": 14076,
"county": "Reeves",
"field": "Permian",
"latitude": 31.984,
"longitude": -102.744,
"motor_configuration": "7:9",
"plc_manufacturer": "Schneider",
"vsd_type": "GE",
"well_depth": 14927,
"well_run": 3
}
}
],
"configuration": {
"connection": {
"ethernet": {
"ip": "10.5.0.1",
"port": 5122
},
"type": "ethernet"
},
"dead_poll_enabled": false,
"host_group": 32,
"host_unit": 1,
"optimize_read_requests": false,
"optimize_write_requests": false,
"roc_plus_protocol": false,
"socket_poll": 1,
"socket_timeout": 2
}
},
"system": {
"privileged": false,
"environment_vars": [
{
"name": "KELVIN_ACP_NAME",
"value": "sales-01-cluster"
},
{
"name": "KELVIN_CLUSTER_NAME",
"value": "sales-01-cluster"
},
{
"name": "KELVIN_WORKLOAD_NAME",
"value": "docs-roc-connection"
}
]
},
"node_name": null,
"status": {
"state": "pending_deploy",
"message": "Pending for deploy",
"last_seen": "2025-04-04T12:19:09.181059286Z",
"warnings": null
},
"download_status": "pending",
"download_error": null,
"staged": null,
"created_at": "2025-04-04T12:19:09.181059Z",
"created_by": "krn:user:demo@kelvin.ai",
"updated_at": "2025-04-04T12:19:09.181059Z",
"updated_by": "krn:user:demo@kelvin.ai"
}
Then in Kelvin UI under Connections you will see your Connection deployed and running.
If you have any issues in the deployment and the /bridges/deploy fails to run, then you can check its logs.
| API Client (Python) Example | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | |
app.yaml
All the information for the Connection is stored in the app.yaml file which is deployed with the Connection Application.
This includes the core information that comes with the Application and all options that are filled in the Kelvin UI or added as the data in the API.
Most of the app.yaml is copied from the default Application app.yaml file. There are options to customize it when deploying. Full information on these parts can be found in the developer tools section here.
There are a number of unique elements of the app.yaml which is deployed with the Connection.
| Key | Sub Key | Descriptions | Other Related Keys |
|---|---|---|---|
| runtime | A list of all the Connection specific information | ||
| datastreams | The Data Streams used in the Resources | name, title, data_type_name, unit_name |
|
| resources | A list of all Asset / Data Stream connections | Each object in the list is defined in the resource key |
|
| resource | The KRN of the Asset name and the list of Data Streams | datastreams, way, storage, remote, configuration |
|
| configuration | The global Connection configurations to connect to the physical asset | configuration, connection, ethernet and associated keys, serial and associated keys, type, dead_poll_enabled, host_group, host_unit, optimize_read_requests, optimize_write_requests, roc_plus_protocol, socket_poll, socket_timeout |
|
| system | System related information | ||
| resources | Resource allocation for the Connection | requests, cpu, memory |
In the deployed app.yaml you will have the following options;
Note
If the Modbus uses serial, then swap the ethernet configuration key below with this key set;
| Serial Example | |
|---|---|
1 2 3 4 5 6 7 | |
| app.yaml Example | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | |















