TIA Int-Werte speichern lesen und vergleichen

Retler91

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Community,
anbei Stand meines Projekts und darunter die Problemstellung

Stand(16.10.15), verwendet wird:
-WINCC Professional
-TIA V13
-HMI KTP 700 Basic
-CPU 1217C

Programm: (SCL)

Es wird eine Zufallszahl durch die Funktion erstellt:

#"X-Wert":= 4*"Zeit_auslesen".Time_Local_Read.SECOND MOD (#Obergrenze - #Untergrenze)+#Untergrenze;

Gleiches nochmal für eine Y-Variable:

#"Y-Wert" :=3* "Zeit_auslesen".Time_Local_Read.SECOND MOD (#Obergrenze - #Untergrenze)+#Untergrenze;

Die zwei Werte werden durch einen Start-Signal generiert.
Problem hierbei ist nun, dass die Werte gespeichert werden sollen. Hierfür habe ich einen DB erstellt mit "Array[0..10] of Int" . Einmal für den X-Wert und einmal für den Y-Wert.
Hier sollen nun also 11Werte gespeichert werden. Jedoch bekomme ich die Schleife nicht hin:| . Bei mir wird jedes mal der erste X-Wert[0] im Array überschrieben. Versuche es gerade durch verschiedene "Schiebe-Anweisungen" komme jedoch nicht weiter.

Hoffe ihr könnt mir helfen

Gruß
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Eine "Schleife" ist eher nicht geeignet, weil dann meistens alle 11 Zufallszahlen gleich wären (wegen Auswertung nur der Sekunde). (Höchstens wenn die Formel die vorherige Zufallszahl irgendwie mit verknüpft). Statt Uhrzeit wäre die Auswertung des TIMETICK besser geeignet.

Ob in Schleife oder mehrmals nur eine Zufallszahl ermitteln: das Programm muß sich merken, auf welchen Index das letzte Mal ins Array geschrieben wurde und den Index bei jedem Schreiben erhöhen (Index:=(Index + 1) MOD <maxArrayIndex+1>)


PS: "Array[0..10]" enthält 11 Elemente - ist das so gewollt?

Harald
 
PS: "Array[0..10]" enthält 11 Elemente - ist das so gewollt?
Kleiner Anfängerfehler, wollte nur 10 Elemente.

Na das Programm soll immer dann eine Zufallszahl generieren wenn man auf Start drückt.
Dann soll diese Zahl abgespeichert werden.
Gleichzeitig soll die Zahl mit allen vorher abgespeicherten Zahlen verglichen werden. Da die neue Zahl niemals im Bereich -5/+5 der alten Zahlen sein darf.

Versuche nun aber erstmal durch den Index-Tipp, 10 unterschiedliche Zahlen abzuspeichern.:)
Danke

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Soo habe was zusammengeschustert und es klappt auch soweit. Falls noch wer Verbesserungsvorschläge hat gerne her damit :cool:

Code:
DB:

fm_trigger    Bool
schreib_index    Int
X-Wert    Array[0..19] of Int

Funktion:SCL

Input    
Obergrenze    Int
Untergrenze    Int

Temp    
X    Int

IF "Bohrung_Punkte" AND NOT "DB_Zufallszahl_X".fm_trigger THEN
    #X := "DB_Zufallszahl_X".schreib_index;
    "DB_Zufallszahl_X"."X-Wert"[#X] := 4*"Zeit_auslesen".Time_Local_Read.SECOND MOD (#Obergrenze - #Untergrenze)+#Untergrenze;
    IF #X = 20 THEN
        "DB_Zufallszahl_X".schreib_index := 0;
    ELSE
        "DB_Zufallszahl_X".schreib_index := #X + 1;
    END_IF;
END_IF;
"DB_Zufallszahl_X".fm_trigger := "Bohrung_Punkte";

Gruß
 
Zuletzt bearbeitet:
Mit [CODE]-Tags (#-Button im Beitragseditor) sieht das ganze besser lesbar aus:
Code:
IF "Bohrung_Punkte" AND NOT "DB_Zufallszahl_X".fm_trigger THEN
    #X := "DB_Zufallszahl_X".schreib_index;
    "DB_Zufallszahl_X"."X-Wert"[#X] := 4*"Zeit_auslesen".Time_Local_Read.SECOND MOD (#Obergrenze - #Untergrenze)+#Untergrenze;
    IF #X = 20 THEN
        "DB_Zufallszahl_X".schreib_index := 0;
    ELSE
        "DB_Zufallszahl_X".schreib_index := #X + 1;
    END_IF;
END_IF;
"DB_Zufallszahl_X".fm_trigger := "Bohrung_Punkte";

- man muß den Wert in schreib_index VOR der Verwendung als Index prüfen
- man prüft sicherheitshalber auf > maxIndex und < 0 statt auf =maxIndex+1
- wenn der Index bei 0 beginnt, dann prüft und korrigiert man den Index am besten mit MOD (wie ich oben in #3 gezeigt habe)

Harald
 
Wurde Überarbeitet. Sieht wirklich besser aus :D

- man muß den Wert in schreib_index VOR der Verwendung als Index prüfen
- man prüft sicherheitshalber auf > maxIndex und < 0 statt auf =maxIndex+1
- wenn der Index bei 0 beginnt, dann prüft und korrigiert man den Index am besten mit MOD (wie ich oben in #3 gezeigt habe)

Gut werd das noch Ändern und mich dann an das Vergleichen der Werte setzen.

Danke
Gruß
 
Zurück
Oben