Frontend/Backend server issues

Dual server setup

'Front End Server' Vision 8.1.11 Ignition Gateway, hosts Vision clients, contains the Vision Client tags, connected to Back End Server for remote tag provider via Gateway Network incoming connection.

'Back End Server' Vision 8.1.11 Ignition Gateway, hosts OPC connections to devices, hosts SQL server, contains SCADA_TAG_PROVIDER tag provider for system use, contains gateway scripts, transaction groups. Connected to front end server via gateway network Outgoing Connection.

Unplugging/disconnecting CP01LS PLC and opening a Vision Client session from our front end server causes the Vision client to hang on a writeBlocking script contained in a number of check box objects in a footer on the launch page. The writeBlocking script is writing to simple memory client tags, not OPC tags. The client opens and loads default objects/values but does not populate OPC values. An error message eventually populates with 'java.util.concurrent.TimeoutException'.

Reconnecting CP01LS during this hang-up eventually alleviates the issue and OPC values populate.

This can be replicated with CP01LS device connection only. Performing the following steps with other devices in the system does not result in the same behavior. The screenshot attached shows CP20 disconnected with no negative side effects. Comparing their device connections are identical in settings, however.

Noted in the logs of the front end server: during the issue, an error is logged stating 'Tag provider 'client' was not found'.

Any help would be greatly appreciated.

Screenshots & Error log etc attached below

client_error_log.txt (8.2 KB)

More attachments since I'm a new user and can't attach more
MCI9_ARSC_Front_thread_dump20230907-184149.json (735.5 KB)
MCI9_ARSC_Front_thread_dump20230907-184124.json (704.5 KB)

I have no idea what's going on here, but there's something you should fix in your script:
Property change scripts trigger for ALL properties of the component it's configured on. So you need to filter by property name, unless you want your script to trigger every time ANYTHING changes.
It's a common source of unexpected behavior.

if event.propertyName == 'your property name' and event.source.selected in [0, 1]:
    system.tag.writeBlocking(["[client]Layout/Show_Encoders"], [event.source.selected])

If event.source.selected can only ever be 0 or 1, you can get rid of the second condition.

1 Like

Let me emphasize this. That propertyChange script, by itself, could lock up your Vision client, since it is trying perform a task no matter what component property changed.

Meanwhile, the "stuck writes" issue rings a bell--I think that is a bug that has been fixed in newer versions.

So I did edit the script (see below) and the issue is still reoccuring, the moment I unplug the network connection to CP01LS plc the vision client stops responding after a few minutes if already open & if you try to open a new client right after unplugging the plc the client won't open with the same timeout error as mentioned above.

Yeah, I think what's happening here is that an offline PLC is exposing some poorly written Vision project code that does a blocking read or write on the UI thread.

Upgrading to fix the write timeout issue should probably happen, but only after the problem in their Vision project is tracked down.

Unfortunately the automatic thread dump on blocked EDT feature was introduced in 8.1.12... so they may have to do it manually, probably with the help of support.

1 Like