TIA INT in Array of Bool

tababa

Level-2
Beiträge
62
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Forumsgemeinde,
ich wandle die Millisekunden der Tod in Minuten um, so dass ich die aktuelle Minute des Tages habe. nun möchte ich diese Minute (INT) in ein Array of Bool schreiben, so dass immer nur dieses eine Bit eine 1 hat. z.B. 10 Uhr = 600 Minute, also in bool Array Bit 600 eine 1
S7 300 CPU 319
Gruß
Tababa
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Forumsgemeinde,
ich wandle die Millisekunden der Tod in Minuten um, so dass ich die aktuelle Minute des Tages habe. nun möchte ich diese Minute (INT) in ein Array of Bool schreiben, so dass immer nur dieses eine Bit eine 1 hat. z.B. 10 Uhr = 600 Minute, also in bool Array Bit 600 eine 1
S7 300 CPU 319
Gruß
Tababa
Wozu will man sowas machen?
(Über-)designte Anzeige?
Forderung eines Schnittstellenpartners?
 
Spricht etwas gegen SCL?
MyArray[Minuten]:= true;

Vorher ggf. immer das ganze Array initialisieren oder eben den alten/vorherigen Eintrag ablöschen.
Kann auch sein, dass ich es nicht verstanden habe.
Den Sinn dahinter verstehe ich auch nicht.
 
Also z.B.

Code:
i : INT;
deinArray : Array[0..1440] OF BOOL;

FOR i : 0 TO 1440 DO
    deinArray[i] := FALSE;
END_FOR;

deinArray[deineMinutenVariable] := TRUE;

Damit nicht zyklisch das Array abgelöscht wird, könntest du auch noch eine Wertänderung deiner Minutenvariable feststellen und nur bei Änderung den Code ausführen. Und ggf. noch überlegen, was mit der Sommer- Winterzeitumschaltung so passieren kann/soll...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit Erkennung eines Wertwechsels ggf. so:

Code:
i : INT;
deinArray : Array[0..1440] OF BOOL;
altWertMinutenzaehler : INT;


IF (deineMinutenVariable <> altWertMinutenzaehler) OR AnlaufmerkerCPU THEN
    FOR i : 0 TO 1440 DO
        deinArray[i] := FALSE;
    END_FOR;

    deinArray[deineMinutenVariable] := TRUE;
END_IF;

altWertMinutenzaehler := deineMinutenVariable;
 
Mit Erkennung eines Wertwechsels ggf. so:

Code:
i : INT;
deinArray : Array[0..1440] OF BOOL;
altWertMinutenzaehler : INT;


IF (deineMinutenVariable <> altWertMinutenzaehler) OR AnlaufmerkerCPU THEN
    FOR i : 0 TO 1440 DO
        deinArray[i] := FALSE;
    END_FOR;

    deinArray[deineMinutenVariable] := TRUE;
END_IF;

altWertMinutenzaehler := deineMinutenVariable;
Hallo DeltaMikeAir,
könntest Du mir das in eine FC packen, habe mitte der 80'er mal awl erlernt, seitdem keinen Kontakt mehr.
Danke
 
Im Quellen-Ordner eine SCL-Quelle anlegen, öffnen und folgenden Quelltext hineinkopieren:
Code:
FUNCTION Deco1440 : VOID
VAR_INPUT
    Minute : INT; //0..1439
END_VAR

VAR_OUTPUT
   MinutenArray : ARRAY [0..1439] OF BOOL;
END_VAR

VAR_TEMP
    tmpDw : DWORD;
    tmpI : INT;
END_VAR

    tmpDw := 0;
    tmpI := FILL(BVAL := tmpDw, BLK := MinutenArray); //Array löschen/initialisieren

    MinutenArray[Minute] := TRUE;
END_FUNCTION
In der Symboltabelle ein Symbol "Deco1440" : FC... anlegen. Dann die SCL-Quelle übersetzen.

Harald
 
Wozu will man sowas machen? ..
So etwas wird gerne als einfache Schaltuhr für wiederkehrende Abläufe verwendet, z.Bsp. für die "Attraktionen" bei Schwimmbadsteuerungen. Häufig wird mit einem DWORD ein Stundenzyklus im 2-Minuten-Raster realisiert. Sehr einfach und sehr übersichtlich darzustellen. Das würden sogar die die Rettungsschwimmer von Malibu begreifen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... und für AWL-Freunde ;)
Code:
//Array löschen/initialisieren
      L     0
      T     #tempDW

      CALL  "FILL"                      //SFC21
       BVAL   :=#tempDW
       RET_VAL:=#tmpInt
       BLK    :="MyDB".MinutenArray

//"MyDB".MinutenArray[Minute] := TRUE;
      L     #Minute                     //0..1439
      L     P#2.0                       //<--- Anfangsadresse des Array "MinutenArray" im DB hier eintragen
      +D   
      LAR1 
      SET   
      R     "MyDB".MinutenArray[0]      //AUF DB und für Querverweise und Kontrolle der Adresse "MinutenArray"
      S     DBX [AR1,P#0.0]

Harald
 
So etwas wird gerne als einfache Schaltuhr für wiederkehrende Abläufe verwendet, z.Bsp. für die "Attraktionen" bei Schwimmbadsteuerungen. Häufig wird mit einem DWORD ein Stundenzyklus im 2-Minuten-Raster realisiert. Sehr einfach und sehr übersichtlich darzustellen. Das würden sogar die die Rettungsschwimmer von Malibu begreifen.
Hallo Harald,
vielen vielen Dank,
 
Zurück
Oben