Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 8 von 8

Thema: Int-Werte speichern lesen und vergleichen

  1. #1
    Registriert seit
    07.09.2015
    Ort
    Thüringen
    Beiträge
    8
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    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ß
    Geändert von Retler91 (16.10.2015 um 12:46 Uhr)
    Zitieren Zitieren Int-Werte speichern lesen und vergleichen  

  2. #2
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard

    Bisheriger Code?
    Weisst Du, wie sollen wir denn wissen wo Dein Fehler ist?

  3. #3
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.189
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    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
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  4. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    Retler91 (16.10.2015)

  5. #4
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard

    Hier:
    https://support.industry.siemens.com...dti=0&lc=de-DE

    gibt es übrigens einen Zufallszahlengenerator.

  6. Folgender Benutzer sagt Danke zu borromeus für den nützlichen Beitrag:

    Retler91 (16.10.2015)

  7. #5
    Retler91 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.09.2015
    Ort
    Thüringen
    Beiträge
    8
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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ß

  8. #6
    Retler91 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.09.2015
    Ort
    Thüringen
    Beiträge
    8
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Soo habe was zusammengeschustert und es klappt auch soweit. Falls noch wer Verbesserungsvorschläge hat gerne her damit

    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ß
    Geändert von Retler91 (16.10.2015 um 15:11 Uhr)

  9. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.189
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    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
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  10. #8
    Retler91 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.09.2015
    Ort
    Thüringen
    Beiträge
    8
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wurde Überarbeitet. Sieht wirklich besser aus

    - 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ß

Ähnliche Themen

  1. Werte in DB vergleichen und wegspeichern
    Von anne im Forum Simatic
    Antworten: 28
    Letzter Beitrag: 02.07.2012, 11:18
  2. INT Werte Speichern
    Von chefren_new im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 05.05.2011, 12:51
  3. Werte in einem DB suchen und vergleichen
    Von Kodan im Forum Simatic
    Antworten: 48
    Letzter Beitrag: 25.02.2009, 18:06
  4. INT und REAL vergleichen
    Von PG710 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 22.11.2008, 08:34
  5. INT Werte speichern bzw. verschieben
    Von steppenwolf im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 09.03.2008, 18:35

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •