Hallo liebe Leute!
Ich bin hier fast am verzweifeln. Seit über einer Stunde sitz ich hier
und komme auf keinen grünen Zweig.
Zum Programm:
Ich speichere in einer Array die Werte einer ausgelesenen INI-Datei. In
der INI-Datei gibt es die Gruppe "Min_Value" und "Max_Value". Min_Value
beschreibt den Minimalwert, den die Sensor(0).caption nicht
UNTERschreiten soll, Max_Value beschreibt den Maximalwert, den die
Sensor(0).Caption nicht ÜBERschreiten darf.
Mit einer For-Schleife überprüfe ich dies mit einer if-Anweisung (Wenn
Sensor(0).Caption < Min_Value ODER Sensor(0).Caption > Max_Value) DANN
soll er die jeweilige Array-Index in die Array "Fehler" speichern. Da
die Messwerte alle konstant sind, kann ich von der Array-Index ableiten,
welcher Messwert einen Fehler verursacht hat.
Beispiel: Programm meldet Fehler-3, so weiß ich, dass die Ursache hinter
dem 3. Messwert der INI-Datei liegt.
Leider bringt er aber nicht das gezielte Ergebnis, sprich, ich weiß
nicht warum das Programm falsch entscheidet, ob die Sensor.Caption einen
Wert unter- oder überschritten hat.
Könnt ihr mir helfen?
(Sorry für die C-Formatierung)
Ohne es getestet zu haben würde ich folgendes mal versuchen:
Dim Sollminwert(16) as double
Dim SollMaxwert(16) as double
und
If Cdbl(Sensor(iZaehl).Caption) < Sollminwert(iZaehl) Or
Cdbl(Sensor(iZaehl).Caption) > SollMaxwert(iZaehl) Then
Gruß
Thomas
Joh! wrote:
> Leider bringt er aber nicht das gezielte Ergebnis, sprich, ich weiß> nicht warum das Programm falsch entscheidet, ob die Sensor.Caption einen> Wert unter- oder überschritten hat.
Tja, da würde ich mir doch mal alle Sensor.Caption Werte ausgeben
lassen, zusammen mit den eingestellten Min und Max Werten für diesen
Sensor.
Oft sucht man ein algorithmisches Problem und hinterher stellt sich
heraus, dass die Eingangsdaten schon Schrott sind. Also heißt es erst
mal sicherstellen, dass die Werte stimmen.
> Debug.Print Fehler(y)
Das ist zum Debuggen zwar schon mal ein Anfang. Aber im Grunde ist es
auch nicht besser als die Fehlermeldung mit der Microsoft Legionen von
Programmiereren zur Verzweiflung getrieben hat:
Eine DLL konnte nicht geladen werden
Schön, aber WELCHE und WARUM NICHT!
Du hast doch eine schöne Programmier-Umgebung mit Debug-Tools:
Setz doch einen Break-Point vor der ersten Zeile die du oben gepsostet
hast und geh mit "F8" Schritt für Schritt durch - dann kannst du ja
nachdem die Zuweisungen abgearbeitet wurden genau sehen, welche Werte
die beiden Arrays "sollminwert" und "SollMaxwert" haben.
Am besten mal ne "Überwachung" für die beiden Arrays einschalten und
dann die Feld-Werte durchsehen.
Du hast den obigen Code ja gekürzt oder für die Fehlersuche geändert.
Wo/wie weist du den Captions im vollständigen Code die Messwerte zu?
Wenn du das da machst, wo du deinen "Simulierten Fehler" eingefügt hast,
kann es nicht klappen. Aber wenn es schon bei dem "Simulierten Fehler"
nicht klappt, ist wohl wirklich mit dem Abholen der Daten aus der INI
was faul.
Mit dem Datentyp "Variant" zu arbeiten ist übrigens eine Unsitte. Den
sollte man nur ganz geziehlt für bestimmte Operationen verwenden, denn
eine Zuweisung zu "Variant" frisst alles - egal wie die Daten aussehen.
Wenn man einen spezifischen Typ hernimmt, und die Zuweisung ohne Fehler
vom Compiler funktiniert, hat man schonmal eine grundlegende Sicherheit
vor ankommendem Datenschrott.
Zusammen mit einer vernünftigen Deklaration der Variablen und Umwandlung
der Strings in Doubles (wie Thomas das oben ja gezeigt hat), solltest du
schnell rausfinden können, ob die Daten wirklich sauber aus der Datei
gelesen werden.
PS:
Noch ein kleiner Hinweis zur Dimensionierung von Arrays:
Bei VB6 gibt man bei dem Befehl "Dim Sollminwert(XX)" für XX NICHT die
Länge des Arrays an (also nicht die Anzahl der Feldelemente), sondern
die Zahl bezeichnet den höchsten Index des Arrays. (das ist in C halt
anders als in VB6)
D.h. mit "Dim Sollminwert(16)" hast du nicht 16, sondern 17 Feld-Plätze!
Der Index läuft dann von 0 bis 16.
Bei dir bleibt also der letzte Array-Platz ungenutzt.
Das hat nichts mit dem Fehler zu tun, aber es ist auf jeden Fall gut zu
wissen.
Markus H. schrieb:
> Noch ein kleiner Hinweis zur Dimensionierung von Arrays:> Bei VB6 gibt man bei dem Befehl "Dim Sollminwert(XX)" für XX NICHT die> Länge des Arrays an (also nicht die Anzahl der Feldelemente), sondern> die Zahl bezeichnet den höchsten Index des Arrays. (das ist in C halt> anders als in VB6)> D.h. mit "Dim Sollminwert(16)" hast du nicht 16, sondern 17 Feld-Plätze!> Der Index läuft dann von 0 bis 16.
Wenn dir das nicht passt, gabs ganz früher mal 'Option Base 1', damit
konnte man den Feldindex mit 1 beginnen.
Und dann sollte man bei Bedarf noch an 'Redim PRESERVE' denken.