Werte in DB vergleichen und wegspeichern

Zuviel Werbung?
-> Hier kostenlos registrieren
... und der Index um 1 erhöht. Das bewirkt dann, dass die nächste gefundene 33-Position im nächsten Speicherort abgelegt wird.

Gruß
Larry

Lieben Dank für deine ausführliche Beschreibund, LL.

Leider hakt's bei mir aber noch immer:

1) Wird beispielsweise in Zeile 20 ein Eintrag 33 gefunden, so wird die 20 doch auf "i" übertragen; d.h, im Ziel-DB steht dann in Zeile 20 eine 20. Wird der nächste Eintrag in Zeile 40 gefunden, so steht im Ziel-DB an entsprechender Stelle die 40. Warum muss dann der Index von i immer um 1 erhöht werden?

2) Wie kann der Ziel-Speicher gelöscht werden; muss da die FC erneut aufgerufen werden?

3) Wird die Schleife eigentlich nur einmal durchlaufen und bedarf dann wieder eines neuen Anstoßes?
 
Zuletzt bearbeitet:
Liebe Anne,

vielleicht liest du dir meine Beschreibung zu dem von mir gegebenen Code noch einmal durch. Sie beinhaltet nämlich deine Fragen 1 und 2.
Zu Frage 3 : Da du keine Flanke in dem FC hast wird das Ganze immer und immer wieder wiederholt. Soll es nur einmal durchlaufen und dann erstmal nicht mehr oder ggf. nur auf Anforderung dann mußt du dir da noch eine Freigabe mit Flanke drum-herum bauen - also vielleicht so :
Code:
if Auswerten an Not Auswerten_OK then

// den bisherigen Code

End_If ;
Auswerten_OK := Auswerten ;

// Auswerten wäre eine BOOL-IN-Variable
// Auswerten_OK wäre eine BOOL IN_OUT-Variable
Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Gut LL,

schaue mir das nochmals in Ruhe an - momentan funktioniert es leider noch immer nicht... ich bekomme immer nur einen Eintrag 7 in DB1.DBB0 egal wo die 33 im DB12 steht.

Melde mich also nochmals, wenn ich es besser blicke... hoffe das passiert noch! :p


Also erst mal besten Dank!
 
... Wenn ich über die Variablentabelle z.B. in DB12.DBB0 die 33 einschreibe, so steht unter Statuswert auch die 33. Im DB12 steht als Aktualwert aber 8481 - woher kommt das?

Hallo Anne,
so langsam blicke ich dahinter.
Dein DB12 ist als ARRAY[1..50] of INT (!!! INTEGER !!!) deklariert. Wenn du also da die Speicherstellen vollschreiben willst dann solltest du beachten, das du auch DBW's (!!!) schreiben mußt. Solltest du das mit den restlichen Speicherstellen auch so gemacht haben dann verstehe ich, wieso der FC nicht funktioniert.

Würdest du vielleicht bitte noch einmal dein ganze Baustein-Sammelsurium (im aktuellen Stand) hier veröffentlichen ?

Gruß
Larry
 
Hallo Anne,
so langsam blicke ich dahinter.
Dein DB12 ist als ARRAY[1..50] of INT (!!! INTEGER !!!) deklariert. Wenn du also da die Speicherstellen vollschreiben willst dann solltest du beachten, das du auch DBW's (!!!) schreiben mußt.

Gruß
Larry

Hi Larry,

lieben Dank für deine hilfreiche Unterstützung! So, der Baustein funktioniert jetzt erst einmal...

1) Ja stimmt, du hast Recht - ich hatte keine DBW's geschrieben sondern DBB's. Hm, somit habe ich vermutlich immer nur das linke Byte beschrieben - warum da dann aber 8448 drin steht, wenn ich die 33 einschreibe; keine Ahnung! :confused:

2) Könnte man das Ganze beispielsweise auch so programmieren, dass der Zahleneintrag im DB_Suchergebnisse immer genau in der Zeile vorgenommen wird, in der im DB_Messwerte die Zahl 33 gerade gefunden wurde?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
zu 2) ja, kann man.
Code:
// Initialisieren 
#i := 0; 
FOR #count := 1 TO 50 BY 1 DO
    "DB_Suchergebnisse".Speicherort[#count] := 0; 
END_FOR;  

// Suche nach Wert 
FOR #count := 1 TO 50 BY 1 DO   
  IF "DB_Messwerte".MW[#count] = 33  THEN 
    "DB_Suchergebnisse".Speicherort[#count] := #count;
// dafür nicht benötigter quellcode
//      "DB_Suchergebnisse".Speicherort[#i] := #count;
    #i := #i + 1; // i zählt jetzt die anzahl der einträge; habe auch die initialisierung geändert
  END_IF;
END_FOR;
 
Lieben Dank testuser,

Programm klappt prima. Denke habe das Prinzip dank eurer Hilfe jetzt soweit verstanden - lang genug hat's ja gedauert... :-(


Vermutlich kann ich mir den Eintrag von #i (Anzahl der Einträge) im DB nicht anzeigen lassen, oder - denn dann wären ja die Bausteinlängen beider DB's unterschiedlich?
 
warum müssen die beiden DBs gleich lang sein?!?

meines erachtens sind sie eh schon unterscheidlich lang, DB_Messwerte ist ein array of udt und DB_Sucheregebnisse ist ein array of int. unter umständen könnten die jetzt auch gleich lang sein, aber in deinem ersten beitrag stand was von einem struct mit 12 messwerten.

ich würde einfach noch ein int im DB_Suchergebnisse anlegen und #i nach dem ende der for-schleife zuweisen.
 
Zurück
Oben