im Vorab noch ein Auszug aus dem Prerelease des SDV, um die metadaten der Systemvariablen auf ihre Konsistenz hin prüfen zu können.
hierbei wird überprüft, ob bei entsprechendem Typ der Systemvariablen die entsprechenden MataTags vorhanden sind oder sich ungültige oder besser inkonsistente Metatags dort befinden. In der Vergangenheit wurde erstmals von Badenpower auf diesen möglichen Effekt hingewiesen.
Selber überprüfen kann man es (wenn man weiss wie oder oder eins der entsprechenden Tools hat), welche Metatags sich bei einer neuangelegten Syxstemvariable befinden müssen und welche nicht da befinden sollten).
Eine mögliche Problemstelle bei Inkonsistenzen kann dann sein, das Middlewares oder Apps (Iobroker z.B.) beim Import z.b. der SystemvariablenListe vertun, weil dort auch die Metatags ausgewertet werden.
Problematisch ist immer, wenn im nachgang nach dem Anlegen einer Systemvariablen deren Typ verändert wird. (oder mit Scripten an falscher Stelle rumgemacht wurde).
Bei Programmen habe ich ja schon aufgezeigt, das inkonsistente Typen verhindern können, das ein programm ordnungsgemäß getriggert wird.
Jeniges kleines Tetsprogramm, welches ein extrakt aus dem kommenden SDV ist, prüft nur die Logig zwischen ValueType/ValueSubType und den vorhandenden metatags und gibt eine entsprechende Meldung aus. Strukturverändernd macht das Programm hier nix.
Mich interessiert erstmal nur, wieweit solche möglichen Inkonsistenzen verbreitet sind. eine kurze Rückmeldung wäre Super
Code: Alles auswählen
string sID;
object oID;
WriteLine ("Konsistenzcheck Systemvariablen")
WriteLine ("Metadaten Konsistenzcheck");
WriteLine ("Auszug aus PreRelease SDV 3.07.10");
WriteLine ("Black in 2019");
WriteLine ("---------------------------------");
integer n=0;
string m; string vtype;
boolean bv0; boolean bv1; boolean min; boolean max; boolean unit; boolean vlist;
integer failvar=0;
integer failsum=0;
boolean fail;
foreach (sID,dom.GetObject (ID_SYSTEM_VARIABLES).EnumIDs () ) {
oID= dom.GetObject (sID);
if (oID) {
m= oID.EnumMetaData ();
bv0=m.Contains ("BV0");
bv1=m.Contains ("BV1");
min=m.Contains ("MIN");
max=m.Contains ("MAX");
unit=m.Contains ("UNIT");
vlist=m.Contains ("VALUE_LIST");
fail=false;
vtype= "[ID]: " # oID.ID () # " - (" # oID.Name () # ") Type qqqq - MetaData : ";
if (((oID.ValueType()==2) && (oID.ValueSubType()==2)) || ((oID.ValueType()==2) && (oID.ValueSubType()==6)) ) {
!- Bool oder Alarm
if (oID.ValueSubType ()==6) {vtype= vtype.Replace ("qqqq","Alarm");} else {vtype= vtype.Replace ("qqqq","Logigwert");}
if (!bv0) {WriteLine (vtype # "BV0 fehlt");failsum=failsum+1;fail=true;}
if (!bv1) {WriteLine (vtype # "BV1 fehlt");failsum=failsum+1; fail=true;}
if (!unit) {WriteLine (vtype # "UNIT fehlt");failsum=failsum+1;fail=true;}
if (min) {WriteLine (vtype # "MIN nicht zulässig");failsum=failsum+1;fail=true;}
if (max) {WriteLine (vtype # "MAX nicht zulässig"); failsum=failsum+1;fail=true;}
if (vlist) {WriteLine (vtype # "VALUE_LIST nicht zulässig"); failsum=failsum+1;fail=true;}
}
elseif (((oID.ValueType()==4) && (oID.ValueSubType()==0)) || ((oID.ValueType()==16) && (oID.ValueSubType()==0)) ) {
!- Zahl oder Zahl (Integer)
if (oID.ValueType ()==4) {vtype= vtype.Replace ("qqqq","Zahl");} else {vtype= vtype.Replace ("qqqq","Integer");}
if (bv0) {WriteLine (vtype # "BV0 nicht zulässig");failsum=failsum+1;fail=true;}
if (bv1) {WriteLine (vtype # "BV1 nicht zulässig");failsum=failsum+1; fail=true;}
if ((!unit) && (oID.ValueType()==4)) {WriteLine (vtype # "UNIT fehlt");failsum=failsum+1;fail=true;}
if (!min) {WriteLine (vtype # "MIN fehlt");failsum=failsum+1;fail=true;}
if (!max) {WriteLine (vtype # "MAX fehlt");failsum=failsum+1;fail=true; }
if (vlist) {WriteLine (vtype # "VALUE_LIST nicht zulässig");failsum=failsum+1;fail=true;}
}
elseif ((oID.ValueType()==20) && (oID.ValueSubType()==11) ) {
!- Zeichenkette
vtype= vtype.Replace ("qqqq","Zeichenkette");
if (bv0) {WriteLine (vtype # "BV0 nicht zulässig");failsum=failsum+1;fail=true;}
if (bv1) {WriteLine (vtype # "BV1 nicht zulässig");failsum=failsum+1;fail=true; }
if (!unit) {WriteLine (vtype # "UNIT fehlt");failsum=failsum+1;fail=true;}
if (min) {WriteLine (vtype # "MIN nicht zulässig");failsum=failsum+1;fail=true;}
if (max) {WriteLine (vtype # "MAX nicht zulässig");failsum=failsum+1;fail=true; }
if (vlist) {WriteLine (vtype # "VALUE_LIST nicht zulässig");failsum=failsum+1;fail=true;}
}
elseif ((oID.ValueType()==16) && (oID.ValueSubType()==29) ) {
!- WerteListe
vtype= vtype.Replace ("qqqq","WerteListe");
if (bv0) {WriteLine (vtype # "BV0 nicht zulässig");failsum=failsum+1;fail=true;}
if (bv1) {WriteLine (vtype # "BV1 nicht zulässig");failsum=failsum+1;fail=true; }
if (!unit) {WriteLine (vtype # "UNIT fehlt");failsum=failsum+1;fail=true;}
if (min) {WriteLine (vtype # "MIN nicht zulässig");failsum=failsum+1;fail=true;}
if (max) {WriteLine (vtype # "MAX nicht zulässig");failsum=failsum+1;fail=true; }
if (!vlist) {WriteLine (vtype # "VALUE_LIST fehlt");failsum=failsum+1;fail=true;}
}
else {
WriteLine ("[ID]: " # oID.ID () # " - (" # oID.Name () # ") Unbekannter SysVarType: " # oID.ValueType() # "-" # oID.ValueSubType () );
fail=true;
}
}
if (fail) {failvar=failvar+1; }
}
WriteLine ("---------------------------------");
WriteLine ("Geprüft: " # dom.GetObject (ID_SYSTEM_VARIABLES).Count () # " Systemvariablen");
WriteLine ("Davon " # failvar # " Systemvariablen auffällig mit " # failsum # " möglichen Inkonsistenzen");
Mein Testsystem zeige nach diversen Spielereien und Rumprobierereiren der letzten Monate auch folgendes Bild:
Code: Alles auswählen
Konsistenzcheck Systemvariablen
Metadaten Konsistenzcheck
Auszug aus PreRelease SDV 3.07.10
Black in 2019
---------------------------------
[ID]: 4079 - (EN_HeizAnbau) Type Logigwert - MetaData : MIN nicht zulässig
[ID]: 7072 - (ExtMuellHeute) Type Zeichenkette - MetaData : MIN nicht zulässig
[ID]: 7072 - (ExtMuellHeute) Type Zeichenkette - MetaData : MAX nicht zulässig
[ID]: 7073 - (ExtMuellMorgen) Type Zeichenkette - MetaData : MIN nicht zulässig
[ID]: 7073 - (ExtMuellMorgen) Type Zeichenkette - MetaData : MAX nicht zulässig
[ID]: 2654 - (S1) Type Zeichenkette - MetaData : VALUE_LIST nicht zulässig
[ID]: 1714 - (SV_AstroTag) Type Logigwert - MetaData : MIN nicht zulässig
[ID]: 1714 - (SV_AstroTag) Type Logigwert - MetaData : MAX nicht zulässig
[ID]: 1491 - (SYS_SafeStatus) Type Zeichenkette - MetaData : MIN nicht zulässig
[ID]: 1491 - (SYS_SafeStatus) Type Zeichenkette - MetaData : MAX nicht zulässig
[ID]: 2651 - (TEST) Type Zahl - MetaData : BV0 nicht zulässig
[ID]: 2651 - (TEST) Type Zahl - MetaData : BV1 nicht zulässig
[ID]: 2012 - (USV.ShutDown) Type Logigwert - MetaData : MIN nicht zulässig
[ID]: 2012 - (USV.ShutDown) Type Logigwert - MetaData : MAX nicht zulässig
[ID]: 1929 - (USV.System) Type Zahl - MetaData : BV0 nicht zulässig
[ID]: 1929 - (USV.System) Type Zahl - MetaData : BV1 nicht zulässig
[ID]: 1929 - (USV.System) Type Zahl - MetaData : VALUE_LIST nicht zulässig
[ID]: 8291 - (zzz) Type Logigwert - MetaData : MIN nicht zulässig
[ID]: 8291 - (zzz) Type Logigwert - MetaData : MAX nicht zulässig
---------------------------------
Geprüft: 67 Systemvariablen
Davon 10 Systemvariablen auffällig mit 19 möglichen Inkonsistenzen