Step 7 scl sfc1 parameter

Iwan_74

Level-1
Beiträge
21
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen! Ich möchte mir in scl mit sfc1,fc6/7/8 die Uhrzeit auf eine bcd- Anzeige legen. Die Daten liegen im db1 (oder geht auch var_temp?). irgendwas klappt da aber nicht mit cdt & ret_val. Fehler liegt in der Parameterzuweisung. Hat jemand bitte ein Beispiel für mich, seit Wochen ist da nämlich ein knoten in meinem knopf. Dankeschööön!
 
SCL-Hilfsfunktion zum Einfügen von Bausteinaufrufen:
Einfügen > Bausteinaufruf... > Einstieg:Bibliothek / Name:Standard Library > System Function Blocks > Blocks > SFC1

Beispiel SFC1 Uhrzeit in DATE_AND_TIME-Variable einlesen und auf Einzelkomponenten zugreifen:
Code:
VAR_TEMP
  iResult : INT;
  tmp_Byte : BYTE;
  tmp_CDT : DT;
  sCDT AT tmp_CDT : STRUCT
    Year : BYTE;
    Month : BYTE;
    Day : BYTE;
    Hour : BYTE;
    Minute : BYTE;
    Second : BYTE;
    MS1 : BYTE;
    MS2WeekDay : BYTE;
  END_STRUCT;
END_VAR

iResult := READ_CLK(CDT := tmp_CDT);

tmp_Byte := sCDT.Hour;
tmp_Byte := sCDT.Minute;
tmp_Byte := sCDT.Second;

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Harald! Danke für Deine Hilfe, 0Fehler, 0 Warnungen! Nur noch ein paar Verständnisfragen: Wofür steht MS1&MS2 und warum in den letzten Zeilen tmp_byte := sCDT.hour/minute/second aufführen? Gruß Iwan
 
MS1+MS2WeekDay sind die Bytes mit den Millisekunden und dem Wochentag (die brauchst Du für Deine Uhrzeitausgabe vermutlich nicht).
Schau Dir das Format des Datentyps DATE_AND_TIME an, z.B. in der Step7 Hilfe auf "Index > DATE_AND_TIME > Format des Datentyps DATE_AND_TIME"

tmp_byte:=sCDT.hour/minute/second: Das ist als Beispiel gedacht, wie Du die für Deine Uhrzeitausgabe relevanten Komponenten Stunde/Minute/Sekunde aus dem mit READ_CLK gelesenen DATE_AND_TIME auslesen kannst. Statt in das (Dummie-)tmp_Byte mußt Du natürlich an Deine BCD-Anzeige ausgeben. Für den komfortablen Zugriff auf die Komponenten habe ich der DATE_AND_TIME-Variable eine Struktur überlagert (siehe SCL Hilfe zu "AT").

Harald
 
Zuletzt bearbeitet:
wochentag

Hi Harald!wieso wird bei der bcd Ausgabe für den wochentag an erster stelle die letzte ziffer von millisekunden übernommen, selbst wenn ich eine wortgröße frei lasse?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du mußt die Bits der Millisekunden "weg"maskieren, so daß nur die Bits des Wochentags übrig bleiben.
Laut Beschreibung des Datentyps DATE_AND_TIME in der Step7/SCL-Hilfe sind nur die unteren 4 Bits (4 LSB) der Wochentag 1..7
Code:
Weekday := sCDT.MS2WeekDay AND 2#0000_1111;  // 2#0000_1111 = 16#0F = 15

Ich maskiere aber lieber nur die unteren 3 Bits, damit garantiere ich, daß das Ergebnis nur 0..7 sein kann:
Code:
Weekday := sCDT.MS2WeekDay AND 2#0000_0111;  // 2#0000_0111 = 16#07 = 7

//oder kürzer:
Weekday := sCDT.MS2WeekDay AND 7;

Harald
 
Hallo!

Ich mache ungerne ein neues Thema deswegen auf, aber ich habe den Code von PN/DP wirklich 1:1 direkt eingefügt, und bekomme nach wie vor immer wieder gleichen Fehler mit der SFC1 Funktion:

Code:
F: Z 000094 S 00020: Funktion nicht definiert.
Ergebnis: 1 Fehler, 1 Warnung(en)

Wenn ich die Funktion über Einfügen->Bausteinaufruf selbst einfüge und parametriere bekomme ich exakt den gleichen Fehler.

Hat jemand eine Idee, wieso diese Funktion "nicht definiert" ist ?

Gruß
 
Hallo ist der Sfc 1 in deinem S7 Programm vorhanden ( also in deinem Basteincontsiner) hat er auch in der Syboltabelle genau die angegebene Bezeichnung? Gruß Tia
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, Ja. Die ganzen SFC's und SFB's sind alle vorhanden. Der SFC1 ist in der Symboltabelle mit Symbol "READ_CLK" unter der Adresse SFC 1 und Datentyp SFC 1 gespeichert.

Ich sollte vielleicht noch erwähnen, dass ich über den OB1 ganz Problemlos drauf zugreifen kann mit einem AWL-Code und auch die Zeiten auslesen kann.

Code:
      CALL  "READ_CLK"
       RET_VAL:=#Error_CLK
       OUT0   :=#DateTime

      LAR1  P##DateTime
      L     W [AR1,P#6.0]
      SRW   4

Das gibt mir die Millisekunden heraus. Ich bräuchte das ganze aber in SCL mit dem Funktionsaufruf. Die ganzen Werte hin- und her zu transferieren macht keinen Sinn, wenn es auch im SCL so einfach geht.
 
Vielleicht ist der SFC1 ja gar nicht dein Problem.
Was steht den in Zeile 94 Spalte 20 deines SCL-Scriptes ganz genau ? (Manchmal ist es hilfreich, doch den Code, auch wenn 1:1 kopiert, mit zu posten ...)

Gruß
Larry
 
Zurück
Oben