I have a deployment with a gateway running on a server, and two thick clients running Vision, all of which are communicating over an ethernet switch. I have a memory tag for each client functioning as a heartbeat between the client and the gateway.
The gateway is running a 15 second timer script that iterates through every client’s memory tag… if the memory tag has a value of 1, this is considered ‘good’ and the gateway timer script will write a 0 to this tag. Meanwhile, a client tag change event script tied to the same memory tag will execute as result of the gateway writing a 0 to this tag. The client tag change event script will write a 1 back into the tag. Then, at the next 15 second interval, the gateway once again reads the tag, sees a 1, and writes a 0.
In the case in which the gateway timer script reads the tag and does NOT see a 1, it treats this as a comm issue between the GW and the client (e.g. the client script never executed and reset the heartbeat tag within that 15 second period). In this case it will relinquish any ‘control’ that said client had over equipment in the field, requiring an operator to manually take control again which is a nuisance for them and ultimately the reason for this post.
I am trying to understand why this comm issue is occurring. One observation is that I see this in the log every time this occurs:
INFO | jvm 1 | 2026/01/28 08:49:22 | I [c.i.i.g.s.g.f.Projects$ProjectChangeMonitor] [13:49:21]: Starting up client project monitor. project=GGS-21140 scope=4 request-origin=10.50.162.6, session-user=Operator, session-project=GGS-21140, session-id=76D049DA
Other notes:
The heartbeat tends to fix itself by the next 15 second interval; but by then the ‘control’ has already been relinquished, e.g. the damage is done.
There is a different 15 second client event timer script that is used to track inactivity and force logout of privileged users, but this script has nothing to do with the ‘control’ of the field equipment and the correspond memory tags I described above. I only mention this because in my research I have seen that timer scripts can sometimes cause issues like what I am describing.