Configuration file
Overview
Section titled “Overview”Almost everything you need day to day is reachable from the viewer: interfaces, signals, profiles, recording. This page is for the rest — the settings that only exist in the configuration file, and the exact field names and defaults behind the dialogs.
CONNECT reads two files:
| File | Location | Holds |
|---|---|---|
connect-config.json | %PROGRAMDATA%\realvirtual\CONNECT\ | Everything about your plant: interfaces, signals, bridges, profiles, recording, update preference |
appsettings.json | next to the executable | How the process itself is hosted: port binding, API key, allowed origins, log level |
The split matters when you move an installation: connect-config.json is the one worth backing up and carrying over. appsettings.json belongs to the machine it runs on.
When a change takes effect
Section titled “When a change takes effect”Not everything needs a restart, and knowing which is which saves a lot of unnecessary downtime.
| Change | Takes effect |
|---|---|
| Interface, signal, bridge and profile changes | Immediately — the affected worker restarts on its own |
InfluxDb settings | Immediately |
McpAllowWrite, McpClientRemoteAllowed | Immediately — both are read per tool call |
McpEnabled | At the next gateway start — it decides whether the endpoints are served at all |
WebSocket port | At the next gateway start |
Anything in appsettings.json | At the next gateway start |
Global settings
Section titled “Global settings”These sit at the top level of connect-config.json.
| Field | Default | What it does |
|---|---|---|
WebSocket.Port | 5100 | Port for the REST API, the WebSocket and the MCP endpoint. Change it if 5100 is taken. |
WebSocket.PublishIntervalMs | 10 | How often changed signals are pushed to connected viewers. Raising it lowers network load at the cost of a less smooth picture. |
McpEnabled | true | Serves the MCP and WebViewer bridge endpoints, which is what lets realvirtual WEB and AI clients talk to the gateway. |
McpAllowWrite | true | Lets those clients change signals rather than only read them. |
McpClientRemoteAllowed | false | Allows non-loopback clients on the MCP endpoint. Leave it off unless you deliberately want remote tool access — see Remote access. |
ActiveProfile | (empty) | Name of the profile the current live configuration came from. |
SchemaVersion | (set by CONNECT) | Tells CONNECT which config generation this file is. Do not set it by hand. |
Update.Enabled | true | Whether this installation offers updates at all. When off, the update endpoints refuse — it is a real switch, not a hidden button. |
Update.Channel | (empty) | stable or beta. Empty means the channel this build came from, which is what keeps an installed beta from being compared against stable forever. |
Recording lives under InfluxDb and is documented with its own table in Data recording.
Interfaces
Section titled “Interfaces”Every entry in Interfaces describes one connection to a controller. These fields apply to all protocols:
| Field | Default | What it does |
|---|---|---|
Id | — | Your name for the interface. Bridges and mappings refer to it, so keep it stable. |
Type | — | Protocol, for example OpcUa, S7, MQTT, TwinCat, Modbus. |
Enabled | true | Set to false to keep a configured interface without connecting it. |
UpdateCycleMs | 50 | How often the interface polls. The floor for how fresh values are. |
ReconnectDelaySec | 10 | Wait between reconnect attempts after a connection drops. |
AllowWebToPlc | false | Security gate. While off, values written from the browser are accepted and discarded instead of reaching the controller. Turn it on deliberately, per interface, and only where the browser is meant to command the machine. |
Connection fields depend on the protocol: Endpoint for OPC UA, IpAddress plus Rack and Slot for S7, BrokerUrl for MQTT. Protocols with more settings carry their own block, listed below.
OPC UA
Section titled “OPC UA”Set on the interface itself rather than in a nested block:
| Field | Default | What it does |
|---|---|---|
SubscriptionPublishingIntervall | 20 | Publishing interval in milliseconds — the floor for push latency on subscribed nodes. |
MaxNotificationsPerPublish | 50 | Cap of notifications per response. 0 uses the server default. |
MaxNumberOfNodesPerSubscription | 0 | Nodes bundled into one subscription; further subscriptions are created beyond it. 0 means one subscription for everything. |
TwinCAT ADS
Section titled “TwinCAT ADS”Block TwinCat:
| Field | Default | What it does |
|---|---|---|
NetId | — | AMS Net ID of the target system. |
AdsPort | 851 | ADS port. 851 is the first PLC runtime. |
Mode | SumCommand | Read strategy. Sum commands batch many symbols into one request. |
MaxSubCommands | 1000 | Symbols per sum command. |
RouteHostIp | (empty) | IP used for the ADS route when it cannot be derived. |
UseEmbeddedRouter | true | Uses the built-in router, so no TwinCAT installation is required on the gateway machine. |
RouterLocalNetId | (empty) | Local Net ID of the embedded router. |
WriteAllInputsOnStart | false | Writes all inputs once at startup. |
ReadAllOutputsOnStart | false | Reads all outputs once at startup. |
RegExImportSignals | (empty) | Regular expressions selecting which symbols to import. |
RegExSkipSignals | (empty) | Regular expressions excluding symbols. |
RegExSymbolIsInput | (empty) | Regular expressions marking symbols as inputs when the direction cannot be derived. |
Modbus TCP
Section titled “Modbus TCP”Block Modbus:
| Field | Default | What it does |
|---|---|---|
Host | — | Address of the Modbus device. |
Port | 502 | TCP port. |
UnitId | 1 | Slave or unit identifier. |
IsServer | false | Run as server instead of client, so a PLC can connect to CONNECT. |
WordOrder | ABCD | Byte order for multi-register values. Wrong order is the usual cause of nonsensical numbers. |
Transport | Tcp | Transport variant. |
EtherNet/IP
Section titled “EtherNet/IP”Block EthernetIp:
| Field | Default | What it does |
|---|---|---|
Gateway | — | Address of the PLC. |
Path | 1,0 | CIP routing path to the CPU. |
PlcType | ControlLogix | PLC family. |
TimeoutMs | 5000 | Request timeout. |
Bosch Rexroth ctrlX
Section titled “Bosch Rexroth ctrlX”The native Data Layer connection uses block CtrlXDataLayer:
| Field | Default | What it does |
|---|---|---|
Address | — | Address of the ctrlX CORE. |
Port | 443 | HTTPS port. |
Username, Password | (empty) | Credentials for the device. |
AllowUntrustedCertificate | false | Accepts a self-signed certificate. Convenient on a test bench, unwise in production. |
PublishIntervalMs | 100 | Push interval for subscribed nodes. |
SamplingIntervalUs | 0 | Sampling interval in microseconds. 0 uses the device default. |
KeepaliveIntervalMs | 60000 | Keepalive interval. |
ErrorIntervalMs | 10000 | Wait before retrying after an error. |
QueueSize | 100 | Node queue depth. |
QueueBehaviour | DiscardOldest | What happens when the queue is full. |
ValueChange | StatusValue | Which changes count as a change worth publishing. |
UseStatelessSubscription | false | Stateless subscription mode. |
MaxSubscriptionNodes | 500 | Nodes per subscription. |
BrowseRootPaths | (empty) | Restricts browsing to these subtrees, which keeps import manageable on a large device. |
StableConnectionSec | 30 | How long a connection must hold before it counts as stable. |
TokenTtlMinutes | 10 | Lifetime of the acquired access token. |
The bridge tunnel variant uses block CtrlX with Address, UseSsl (true), Username, Password, BridgePath (/ctrlx-rv-bridge/ws), DirectPort (8080) and TokenTtlMinutes (10).
Block Keba:
| Field | Default | What it does |
|---|---|---|
Host | — | Address of the controller. |
HttpPort | 80 | HTTP port. |
WsPort | 8080 | WebSocket port. |
Username, Password | (empty) | Credentials. |
ImportRootPaths | SYS | Subtrees offered for import. |
CycleTimeMs | 100 | Polling cycle. |
UseOnChange | true | Transmits on change instead of every cycle. |
Festo AX / PLCnext
Section titled “Festo AX / PLCnext”Block Festo:
| Field | Default | What it does |
|---|---|---|
Host | — | Address of the controller. |
Port | 41100 | Port. |
UseTls | false | Encrypts the connection. |
Username, Password | (empty) | Credentials. |
UseSubscription | true | Subscribes instead of polling. |
SubscriptionCycleMs | 100 | Subscription cycle. |
Bridges between interfaces
Section titled “Bridges between interfaces”Two mechanisms move values from one interface to another. Both are configured in the viewer; the fields are listed here for completeness.
Mirrors copies all signals of a source interface into an output sink — MQTT or shared memory. Names stay identical.
| Field | Default | What it does |
|---|---|---|
Enabled | true | Switches the rule off without deleting it. |
SourceInterfaceId | — | Interface whose signals are mirrored. |
TargetInterfaceId | — | Sink interface. Must be MQTT or shared memory. |
SignalPattern | * | Glob filter on signal names, so you can mirror a subset. |
TopicPrefix | (empty) | MQTT only: prefix in front of the signal name to form the topic. |
Mappings connects one signal to one other signal, across any two interfaces.
| Field | Default | What it does |
|---|---|---|
Enabled | true | Switches the mapping off. |
SourceSignal | — | Signal that is read. |
DestSignal | — | Signal that is written. |
Coercion | Strict | Strict requires the same value kind. Coerce allows the safe widenings (bool↔int, int→float) and still rejects the ambiguous ones. |
Feedback loops are suppressed: a value written by a mapping is tagged, so mapping A→B and B→A does not oscillate. A mapping that targets a real controller still obeys that interface’s AllowWebToPlc.
Profiles
Section titled “Profiles”A profile is a named snapshot of interfaces, mirrors and mappings. Switching profiles writes the current set back into the previously active profile first, so switching never loses configuration.
| Field | What it does |
|---|---|
Name | Name of the profile. |
Model | Optional GLB model name. When a model of that name becomes active, this profile is activated with it — so a model always runs with the configuration it belongs to. The models/ prefix and the .glb ending are ignored when matching. |
Interfaces, Mirrors, Mappings | The snapshot itself. |
Host settings
Section titled “Host settings”appsettings.json sits next to the executable and controls the process rather than the plant.
| Field | Default | What it does |
|---|---|---|
Urls | http://0.0.0.0:5100 | Address the gateway binds to. 0.0.0.0 accepts connections from the network; 127.0.0.1 restricts it to the local machine. |
ApiKey | (empty) | Key required by every route except /health. The access rule is loopback client or valid key, so a local viewer keeps working while remote access needs the key. |
Dev.ApiKey | (empty) | Second key, for remote development only. Leave empty unless you develop realvirtual WEB across two machines — it also needs the tray switch Allow remote access (dev), and it grants more than ApiKey does, including running the test command on this PC. |
AllowedOrigins | ["*"] | Browser origins allowed to call the API. Narrow this when the gateway is reachable beyond the local machine. |
Logging.LogLevel.Default | Information | Raise to Debug while chasing a problem, lower to Warning for quiet operation. |
See also
Section titled “See also”- Interfaces and signals — the everyday way to configure all of this
- Protocols — what each protocol can do
- Data recording — the
InfluxDbblock - Remote access — API key, origins and reaching the gateway from another machine
- Troubleshooting — when a connection will not come up