Systemzeit auslesen und umwandeln in S7-SCL

Angelo

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen!
Ich bin gerade an meiner Diplomarbeit dran und muss unter anderem mit einer SPS einen Linearantrieb ansteuern. Ich arbeite zum ersten mal überhaupt mit einer SPS. Bitte verzeiht daher, dass die folgende Frage etwas blamabel ist, da es eigentlich schon duzende Einträge darüber gibt aber ich werde nicht schlau daraus.
Ich muss die Zeit in Minuten haben, die seit 00:00 vergangen ist. Ich habe es mit folgendem Code versucht:
Code:
ORGANIZATION_BLOCK OB1

VAR_TEMP
   info : ARRAY[0..19] OF BYTE;

   fehler : INT;
   zeit : DT;
END_VAR

BEGIN
  read_clk(RET_VAL := fehler, CDT := zeit);

END_ORGANIZATION_BLOCK
Der Fehler lautet dann ungültiger oder fehlend Funktionstyp.

Die Funktion hab ich in der Symboltabelle als SFC 1 deklariert.
Zum einen schaff ich es nun nicht einmal die Zeit auszulesen, zum andern hab ich noch keinen Blassen, wie ich dann die Minuten aus diesem DT- Format in einen einfachen INT von Minuten oder so bringe.
Wäre wirklich sehr froh um Unterstützung, bin wirklich Anfänger und hab mit dem schon so viel Zeit verloren.

Freundliche Grüsse Angelo
 
... ich würde das nicht im OB1 programmieren, sondern in einer Function ...
Ansonsten wäre es so richtiger :
Code:
 fehler := read_clk (CDT := zeit) ;
wenn du den DT dann zerlegen willst, dann ginge das so :
Code:
VAR_TEMP
   fehler : INT;
   zeit : DT;
   a_zeit AT zeit : array [0..7] of byte ;
   Stunde : int ;
   Minute : int ;
   Sekunde : int ;
END_VAR
 
und dann im Code :
 
  Stunde  := BCD_TO_INT (a_zeit [3]) ;
  Minute  := BCD_TO_INT (a_zeit [4]) ;
  Sekunde := BCD_TO_INT (a_zeit [5]) ;
... das sollte dich nun schon einmal weiterbringen ...
 
Zuletzt bearbeitet:
Und hier noch mal ein kurzes Programmbeispiel:

Code:
FUNCTION FC100 : VOID
 
NAME    : TOD
FAMILY  : SPSFORUM
AUTHOR  : KAI
VERSION : '1.0'
 
VAR_OUTPUT
    SPS_TOD : DINT;
END_VAR
 
VAR_TEMP
    SPS_DT : DT;
    RETVAL : INT; 
END_VAR
 
BEGIN
 
// Systemzeit
 
RETVAL := SFC1 (CDT := SPS_DT);
 
// Minuten seit Tagesbeginn (00:00 Uhr)
 
SPS_TOD := TOD_TO_DINT (FC8 (IN := SPS_DT)) / 60000; 
 
END_FUNCTION

Gruß Kai
 

Anhänge

  • OB1.pdf
    5,6 KB · Aufrufe: 100
  • FC100.pdf
    4,7 KB · Aufrufe: 116
  • Tod.zip
    31,3 KB · Aufrufe: 55
Mir ist gerade noch aufgefallen, dass Larry Lafffer und ich die Aufgabenstellung scheinbar unterschiedlich verstanden haben:

Larry Laffer ermittelt die Anzahl der Minuten seit Beginn der aktuellen Stunde (00:00 Uhr, 01:00 Uhr, 02:00 Uhr bis 23:00 Uhr).

Ich ermittele die Anzahl der Minuten seit Tagesbeginn (00:00 Uhr).

Gruß Kai
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mir ist gerade noch aufgefallen, dass Larry Lafffer und ich die Aufgabenstellung scheinbar unterschiedlich verstanden haben:

Larry Laffer ermittelt die Anzahl der Minuten seit Beginn der aktuellen Stunde (00:00 Uhr, 01:00 Uhr, 02:00 Uhr bis 23:00 Uhr).

Ich ermittele die Anzahl der Minuten seit Tagesbeginn (00:00 Uhr).

Gruß Kai

Nö ... das hatte ich schon bewusst so gemacht.
Angelo wollte ja die Systemzeit in SCL auslesen und wandeln. Dafür war das Beispiel. Aus Stunden und Minuten (jeweils als INT-Werte) nur noch Minuten zu machen sollte nicht so problematisch sein (Minuten_von_Tag := Stunden * 60 + Minuten ;)

Gruß
LL
 
Hei wow, da wird einem geholfen. Hat alles super hingehauen! Habe gerade wieder viel gelernt. Danke euch beiden viel mals!
Gruss Angelo
 
Zurück
Oben