Webvisu client connection monitoring

lota
2020-04-30
2024-09-10
<< < 1 2 3 > >> (Page 2 of 3)
  • Chris.O - 2020-06-02

    You can Count it on your own.
    https://forge.codesys.com/forge/talk/Deutsch/thread/f14041c158/?limit=25#9c5f
    Within this post I shared my Program (not the Code-Sniped, but the Project to download)
    Here I Iterate all clients and read out some information. You can also geht som Usier-Info (Current logged In user for the different Clients)

    So try e.g. If Current logged in user <> '' Then count+1

    Or you use the code-sniped and use "pClient^.GlobalData.CurrentUserName" Inside the Iteration
    e.g.

    code
    
    If pClient^.GlobalData.CurrentUserName <> '' THEN
        iCountUser:=iCountUser+1;
    ELSE
        iCountUser:=iCountUser-1; //avoid to get a negativ value
    END_IF
    
    
    
     

    Last edit: Chris.O 2020-06-02
  • dgirard - 2020-06-02

    Great, I will try and get this all put together before the end of the week and share my results in case anyone else has the same needs.

    Thank you

     
  • dkugler - 2020-06-02

    in this post https://forge.codesys.com/forge/talk/Deutsch/thread/91a22bbea1/#8506
    you can find a project to login from IEC code. After creating two user groups in the usermanagement, maybe this is a other simple way to allow or disable user inputs on specific clients and visu objects. I can't use the currentvisuvariable in my project, so I login or out the right user during the iteration for synchronisation or check if the right user is logged in, as Chris.O described.

     
  • lota - 2020-06-02

    For those who suggest using hardwired buttons, it is not possible in my application. There are many "manual" buttons and our HMI should be mobile. You have to Walk around the site in order to operate different sections. It is not possible to put multiple panels around, because then we will need tens of them...
    One of the reasons we have chosen Codesys for our application is the versatility and high end technology it introduce. I think that asking a button to stop operating in case of connection loss is mandatory. We achieve this with much much simpler HMIs easily.
    In era where car drives themselves and robots are working next to humans, you can ask to operate a system with a touch screen button without being afraid it will get stuck...

     
  • Chris.O - 2020-06-03

    May that will be a topic for the CoDeSys development to give a general solution without workaround like discussed here... May you should create a support-Ticket.

     
  • eschwellinger

    eschwellinger - 2020-06-03

    I have requested the improvement in our tracking database which already exists for the 3.5SP17 version.

     
  • dkugler - 2020-06-04

    because of little bit confusing discussions in this thread, if hints needed for the workarounds, let me know.

     
  • dgirard - 2020-06-04

    Has anyone been able to detect if web browser focus from a specific client has been lost?

     
  • dgirard - 2020-06-10

    Hi everyone

    We are currently trying to figure out how to detect if a webvisu is in focus or not on specific clients. Has anyone been able to make ground with this?

    Any direction is appreciated.

    Thank you

     
  • dkugler - 2020-06-10

    I've searched for this too and wasn't able to find a usable value or bit. The only thing i can imagine is, that 3S has to enhance the webserver with such a function, because there are possibilities in HMTL and java to detect if the browser application with webvisu is in focus or not.

     
    • dgirard - 2020-06-10

      Yes we've come across the html/java methods as well. Do you know if it would be possible to run a html/java script internally or externally of the PLC that could detect the focus? Then we could make one of the variables accessible by a script inside the Codesys program?

       
      • dkugler - 2020-06-10

        sorry, I'm not familiar with html and java!

         
  • lota - 2020-06-10

    I really hope 3S will take care of this issue, as it seems to be a drawback for many users.

    Meanwhile, my solution is a bit complicated but its the only one I could come up with:
    I'm building an Android app with a webpage inside that runs the webvisu, and has a modbus server running, that keeps updating the PLC when the activity is in focus. Once the activity loses focus, the modbus stops shooting, and release every tap button that was pressed.
    It is still in development, so I can't share it, but it's an idea for those who crave for solution...

     
  • Chris.O - 2020-06-15

    I'm not sure if i understood your problem correctly... you want to know if a client opened a specific page?
    For that I created a function which I called inside the Visualization inside a invisible dummy element.
    Here you can e.g. call a function (e.g. for chage color...no matter) which is changing a bit of a global variable to TRUE.
    Inside your code you can use this variable and set it back to FALSE. So every time when your visu is opended... your function inside this visu will set your bit to TRUE

    Sure... for big projects you need a lot of variables => one for each page...but may you don't need it for every page

    BR

    Chris

     
  • dgirard - 2020-06-15

    @Chris.O: how did you call a function from within the visualization without pressing a button?

    I can't seem to get ST to execute without actually having a button pressed...

     
  • dgirard - 2020-06-15

    My idea would be to have a BLINK signal generated by the web server and have a button or element replicate this heart beat signal, which would tell me that at least one instance of this visualization is active and in focus...

     
  • Chris.O - 2020-06-15

    You can call it like that (see attachment)
    Inside this function you can do what ever you want...
    (In this case the Function is of type BOOL)

    BR

     

    Last edit: Chris.O 2020-06-15
  • dgirard - 2020-06-15

    Alright so I can call a function from the text variable field? Interesting...now what if I wanted a function to work as a heart beat to know if the visu is active and in focus?

    My initial idea was to use a Blink signal to activate a button that would run some ST code. Once the visualization is no longer active, the ST code would stop running...

    Is there anyway to force a click or tap of a button through ST code?

     
  • Chris.O - 2020-06-15

    Why so complicated...
    Inside your function you can run any code you want...
    For example create a Global Variable for your Page and create a "BLINK" inside this function which turns on and off your global variable...
    Then you can use this global Variable on any place of your Program...

     
  • dgirard - 2020-06-15

    Yes I understand, but this is the behaviour that I've seen in the past:

    When I am on Visu1 with Button 1, and Button1_State = true, once I switch to another app of my android tablet, button remains true (Button1_State = true, not Button1_State = false)

    Assuming my observation are correct, if Button1_State remains true, then my BLINK function won't stop running even though the user has navigated to another app on the tablet. My thought is by having an element on the screen that reflects the blink, then as soon as that visualization is no longer responding with a blink signal, I will know the user has navigated to another app.

    This is a safety issue for us as all processes must stop if the user navigates away from the webvisu. So i am looking for a way to detect if we've navigated away from the visualization and onto another program.

    Please correct me if I'm wrong or if you have a better way of achieving this.

     

    Last edit: dgirard 2020-06-15
  • Chris.O - 2020-06-15

    But I think you can reset your Button1_State to false inside your Program right? So if you implement it in that way:

    code
    
    FUNCTION FUNPageActive : BOOL
    VAR_INPUT
    END_VAR
    VAR
    END_VAR
    
    //ProgramPart
    GVL.xVisuPageActive:=TRUE;
    
    
    
    PROGRAM Test
    VAR
    xButtonState:BOOL;
    END_VAR
    
    
    //ProgramPart
    IF NOT GVL.xVisuPageActive THEN
        xButtonState:=FALSE;
    END_IF
    
     

    Last edit: Chris.O 2020-06-15
  • dgirard - 2020-06-15

    Will GVL.xVisuPageActive reset to false if the user navigates to another app on the tablet?

     
  • Chris.O - 2020-06-15

    I don't know what exactly you do with your app...or if CoDeSys disconnect a Client...Try it!

    You can also reset your button after a defined time... but if everything is fine you have to press again...

    Sorry no other idea at the moment

    BR Chris

     
  • docker - 2024-08-26

    Hi, i am interested in this thread and have tried a couple of the above examples in to determine remote webvisu access.

    I am having trouble getting the lastusage variable to refresh during runtime? It seems to only log the last usage at initialisation and that is it? how do i gain ongoing access to the time variable as the code is running?

    Thankyou.

     
    • dkugler - 2024-08-26

      this thread is 4 years old. Without more information about your current Codesys Version, code snippets etc., it's not possible to help

       
<< < 1 2 3 > >> (Page 2 of 3)

Log in to post a comment.