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;
}