Please ensure Javascript is enabled for purposes of website accessibility
Powered by Zoomin Software. For more details please contactZoomin

AVEVA™ Plant SCADA

Delay Client Tag Subscription Switching for Cicode Devices

Delay Client Tag Subscription Switching for Cicode Devices

  • Last UpdatedFeb 24, 2025
  • 4 minute read

When the primary I/O server is starting up, it loads and initializes all of its connected I/O devices. For large projects, this process can have a heavy impact on system performance especially for Cicode devices.

During this phase, the client tag subscriptions would normally switch from standby devices to primary devices as soon as the client was connected to the primary server. This behaviour would add even more load to the server, which could cause the display client to show invalid data on graphics pages during this period of time.

To reduce the impact to the data displayed while the primary server is starting, a change has been introduced that delays the primary server from switching to an 'online' state. During this delay, the client remains connected to the standby server which means there is no need to switch to the primary server before it ready to serve data.

In addition to the delay switch, when the I/O server starts it will prepopulate all calculated variables so that any associated Cicode can be executed. This means projects such as Example_SA will pre-create the user maps as the server is starting up. This will reduce the load when the server needs to serve the client subscriptions, making runtime more stable.

To set up the delay switch:

Two INI parameters need to be configured on the target I/O server machines.

  • [PubSub]CicodeDeviceDelayOnlineTime

    This parameter determines the amount of time (in seconds) to delay the switching of Cicode devices to an online state. This parameter is set on target I/O server computer. During the startup phase, the I/O server will initialize each Cicode device and wait until this time has elapsed before it is set to an online state.

  • [PubSub]CicodeDeviceDelayOnlineInterval

    This parameter specifies the amount of time (in seconds) to delay the switching for each primary device. The I/O server will set its Cicode devices to an 'online' state one at a time using the specified time interval, thereby reducing the peak load and allowing for performance tuning. This will occur after the time specified in CicodeDeviceDelayOnlineTime has expired.

To tune the delay parameters:

Different project configurations require different settings for these delay parameters. You should initially start the primary I/O server with smaller delay and interval times. If the I/O server start up issues still impact the correct data being display on a client, then try to increase the delay time and/or interval time until the impact is reduced to a minimum.

To monitor the delay switch:

There are three ways to determine the delay switch status:

  1. The delay switch activities on the I/O server have logged messages which can be found in the I/O server's syslog file. Example messages follow:

    -------------------------

    2024-07-23 17:51:12.286 +10:00 [TRACE] [CORE ] [0x3edc] [IOServer ] [(GLOBAL) ] [IODevice::LogChars() ] [IODevice.cpp ] [2795] PubSub:(Device PLC01_Cicode) Cicode device has delay online time set to 180 seconds, interval set to 3 seconds

    2024-07-23 17:51:12.286 +10:00 [TRACE] [CORE ] [0x3edc] [IOServer ] [(GLOBAL) ] [IODevice::LogChars() ] [IODevice.cpp ] [2795] PubSub:(Device PLC01_Cicode) Cicode device stays offline until all tag values are populated and delay online time is over

    2024-07-23 17:51:12.286 +10:00 [TRACE] [CORE ] [0x3edc] [IOServer ] [(GLOBAL) ] [IODevice::LogChars() ] [IODevice.cpp ] [2795] PubSub:(Device PLC02_Cicode) Cicode device stays offline until all tag values are populated and delay online time is over

    ...

    ...

    2024-07-23 17:52:01.461 +10:00 [TRACE] [CORE ] [0x3edc] [IOServer ] [(GLOBAL) ] [IODevice::LogChars() ] [IODevice.cpp ] [2795] PubSub:(Device PLC01_Cicode) Cicode device has populated all tag values

    2024-07-23 17:52:02.466 +10:00 [TRACE] [CORE ] [0x3edc] [IOServer ] [(GLOBAL) ] [IODevice::LogChars() ] [IODevice.cpp ] [2795] PubSub:(Device PLC02_Cicode) Cicode device has populated all tag values

    ...

    ...

    2024-07-23 17:54:00.468 +10:00 [TRACE] [CORE ] [0x3edc] [IOServer ] [(GLOBAL) ] [IODevice::LogChars() ] [IODevice.cpp ] [2795] PubSub:(Device PLC01_Cicode) Delay online timeout, change to online

    2024-07-23 17:54:03.467 +10:00 [TRACE] [CORE ] [0x3edc] [IOServer ] [(GLOBAL) ] [IODevice::LogChars() ] [IODevice.cpp ] [2795] PubSub:(Device PLC02_Cicode) Delay online timeout, change to online

    -------------------------

    Once the I/O server has set all of its Cicode devices to 'online', it is up to the clients to make the switch to the primary device.

  2. When a Cicode I/O device is in delay switch state, the Kernel window 'IO Devices' for 'Unit Cicode' page will show 'STARTING' rather than 'RUNNING' on the 'Unit Status' column.

    Use a Client Tag Subscription Delay

  3. Call the Cicode function IODeviceInfo with type 17 on the client. For example, create a text object on graphics page and call:

    IODeviceInfo(<Cicode device number>, 17)

    This will show the actual I/O server name that hosts the device and serves the data for the tag subscription.

Note: The I/O server only updates the status of I/O devices every ‘HeartTime’. If you want clients to have more frequent updates, set the INI parameter [IOServer]HeartTime to a shorter value. The default value of this parameter is 60000 ms.

TitleResults for “How to create a CRG?”Also Available in