Showing results 1 to 6 of 6

Thread: OnlineVariable -> Ausführung auf jedem Client?

  1. #1
    Join Date
    27.03.2019
    Posts
    5

    Default OnlineVariable -> Ausführung auf jedem Client?

    Hallo,

    ich verwende eine OnlineVariable als Trigger für die Alarm/Revisions-Umschaltung. Das funktioniert prinzipiell.

    Es scheint allerdings so, dass dieses Event anscheinend immer auf jedem unserer 10 Clients ausgeführt wird (Variablen-Umschaltung-Einträge in der CEL für jeden Client extra), und nicht auf dem aktuellen Server.
    Ist dieses Verhalten so angedacht?

    MfG,
    Günter Weiss

  2. #2
    Join Date
    01.07.2008
    Location
    Salzburg, AT
    Posts
    863

    Default Re: OnlineVariable -> Ausführung auf jedem Client?

    dann ist wohl die Variable von INTERN Treiber mit Eigenschaft 'Berechnung' = "lokal".

  3. #3
    Join Date
    27.03.2019
    Posts
    5

    Default Re: OnlineVariable -> Ausführung auf jedem Client?

    Nein, sowohl die OnlineVariable als auch die umgeschalteten Revisionsvariablen sind alle vom IEC-104-Treibertyp und nicht INTERN.

  4. #4
    Join Date
    03.11.2015
    Posts
    48

    Default Re: OnlineVariable -> Ausführung auf jedem Client?

    Hallo,

    Die Clients erhalten vom Server ebenfalls den Wert des Triggers und feuern das Event (der Variablenwert wird von der Runtime verteilt).
    Wenn der Trigger nur an einer Stelle oder einem bestimmten Client ausgeführt werden soll, muss entweder eine Interne Variable mit Berechnung "Lokal" verwendet werden, oder im Trigger zusätzlich der PC-Name o.Ä überprüft werden.

  5. #5
    Join Date
    27.03.2019
    Posts
    5

    Default Re: OnlineVariable -> Ausführung auf jedem Client?

    Für mein Verständnis wäre es sinnvoll, wenn das Event ausschließlich am prozessführenden Server gefeuert werden würde. Die Clients bekommen die Status-Änderungsinformation ja dann vom Server, oder?
    Sobald ich die Zusatzbedingung: this.NetType == tpProjectNetTypes.tpServer hinzufüge, wird die Revisionsumschaltung aber gar nicht mehr ausgeführt...

    Code-snippet:

    //Eventhandler will be executed at changing the trigger variable for Alarmanlage        
            private void Container_VariableChangeAlarmanlage(zenOn.IVariabl e obVar)
            {
                IVariable iVar = null; 

                //execute only when the trigger-variables from Alarmanlage have changed            
                if ( obVar.Name == sAlarmtriggerR || obVar.Name == sAlarmtriggerH &&
    re"> //this doesn't work
    re"> this.NetType == tpProjectNetTypes.tpServer ) 
                {                
                    revision = Check_Revision(obVar);
                    
                        //Loop through all variables in this project, set revision depending on the trigger variable
                        for (int x = 0; x < this.Project.Variables().Count; x++)
                        {
                            iVar = this.Project.Variables().Item(x);

                            if (iVar.DataType.ToString() == "IEC_BOOL" &&
                                iVar.IsRemaActiv() &&
                                iVar.Name.StartsWith(obVar.Name.Substring(0, 17)) &&
                                iVar.Name != obVar.Name)
                            {
                                this.Project.Variables().Item(x).StatusString = "REVISION=" + revision.ToString();
                            }
                        }
                    
                }
            }

            private short Check_Revision(IVariable iVarChange)
            {           
                
                char cDomain = (iVarChange.Name == sAlarmtriggerR ? 'R' : 'H');
                short rev = -1;           
               
                 //if extern scharf == 0 or invalid-> disable Alarming (set Revision to 1)
                 if (iVarChange.get_Value(0).ToString() == "0" || iVarChange.StatusString == "INVALID")
                 {                    
                     rev = 1;
                     this.Project.Cel().WriteCelString("Alarmanlage " + cDomain + " in Revision");
                 }
                 //extern scharf = 1 => activate Alarming (set Revision to 0)
                 else
                 {                    
                     rev = 0;
                     this.Project.Cel().WriteCelString("Alarmanlage " + cDomain + " Alarmierung aktiv");
                 } 
                return rev;
            }

  6. #6
    Join Date
    03.11.2015
    Posts
    48

    Default Re: OnlineVariable -> Ausführung auf jedem Client?

    Quote Originally Posted by Guenter_Weiss View Post
    Für mein Verständnis wäre es sinnvoll, wenn das Event ausschließlich am prozessführenden Server gefeuert werden würde. Die Clients bekommen die Status-Änderungsinformation ja dann vom Server, oder?
    Ich gehe davon aus, dass noch bevor die Statusinfo überhaupt geändert wird (sprich der Eventhandler aufgerufen wurde), ist der Wert schon an andere Clients verteilt wird und diese darauf reagieren.



    Quote Originally Posted by Guenter_Weiss View Post
    Sobald ich die Zusatzbedingung: this.NetType == tpProjectNetTypes.tpServer hinzufüge, wird die Revisionsumschaltung aber gar nicht mehr ausgeführt...

    Was gibt denn this.NetType zurück im Debugging am Server?

Similar Threads

  1. Replies: 4
    Last Post: 23rd July 2014, 11:41
  2. unerwartete Funktions-Ausführung
    By michab in forum zenon Supervisor
    Replies: 2
    Last Post: 21st March 2013, 15:48
  3. OnlineVariable.SetMemCfg & WriteBack
    By glomb in forum VSTA
    Replies: 2
    Last Post: 14th November 2012, 19:18
  4. Replies: 1
    Last Post: 5th October 2011, 15:49
  5. Replies: 5
    Last Post: 16th July 2009, 14:39

Posting Rules

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •