scarince
Lifetime Supporting Member
I have a couple of HMI applications (Panelview, FTME v.9) in which I use the PLC to call a small on-top display for things like telling a user that they are trying to do something they cannot, like trying to start a machine when they can't. Since the situation is detected in the logic, it made sense to have the PLC trigger the display.
I used an on-top display just because I don't like using a lot of animation and having all these dialog boxes littering my display when I'm trying to edit, but I do realize that I could use a simple animated polygon with an "OK" button on it and just have it be visible when things go wrong.
I'm having a problem with my logic to call the displays, and I want to know if my problem is weak logic or an entirely flawed approach to this.
In my logic, when I detect that the user must be shouted at like this, I write the display number into the global variable that is defined in the HMI to tell the HMI to open that display.
In the configuration for the on-top display, I have a display-open macro in the HMI that writes a number back to a DINT that is defined as my "Open On-Top Display" tracker. You have to do this on the panelview because the global tag for Active Display only works on replace displays, not on on-top displays.
Finally, when I see in the logic that the on-top display is open, I write a zero back to the remote display request tag to end the remote request.
The problem I have is that this works MOST of the time, but sometimes the requested display does not open, so the macro doesn't run, so I don't clear the value in the remote request, so now the user is stuck and the HMI will not respond to local navigation buttons until the remote request is ended by getting a laptop and putting a zero into the remote display request tag.
I don't know why the on-top display fails to open sometimes. Maybe there happens to be another navigation button-press at the same time.....I just don't know. But in any case it seems like my logic should be robust enough to allow some kind of recovery from this situation.
Does anyone have any ideas / methods / suggestions on how they handle stuff like this?
Thanks!
B.
I used an on-top display just because I don't like using a lot of animation and having all these dialog boxes littering my display when I'm trying to edit, but I do realize that I could use a simple animated polygon with an "OK" button on it and just have it be visible when things go wrong.
I'm having a problem with my logic to call the displays, and I want to know if my problem is weak logic or an entirely flawed approach to this.
In my logic, when I detect that the user must be shouted at like this, I write the display number into the global variable that is defined in the HMI to tell the HMI to open that display.
In the configuration for the on-top display, I have a display-open macro in the HMI that writes a number back to a DINT that is defined as my "Open On-Top Display" tracker. You have to do this on the panelview because the global tag for Active Display only works on replace displays, not on on-top displays.
Finally, when I see in the logic that the on-top display is open, I write a zero back to the remote display request tag to end the remote request.
The problem I have is that this works MOST of the time, but sometimes the requested display does not open, so the macro doesn't run, so I don't clear the value in the remote request, so now the user is stuck and the HMI will not respond to local navigation buttons until the remote request is ended by getting a laptop and putting a zero into the remote display request tag.
I don't know why the on-top display fails to open sometimes. Maybe there happens to be another navigation button-press at the same time.....I just don't know. But in any case it seems like my logic should be robust enough to allow some kind of recovery from this situation.
Does anyone have any ideas / methods / suggestions on how they handle stuff like this?
Thanks!
B.