scl bytes in temp_var

volker

Supermoderator
Teammitglied
Beiträge
5.805
Reaktionspunkte
1.027
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo

von scl hab ich viel zu wenig ahnung. :(

wenn ich nun z.b. in scl ein variable vom typ date_and_time definiere, wie komme ich dann z.b. an den tag dran?

in awl ist das kein problem, da wäre es einfach das LB2.
 
hallo volker
am einfachsten ueber dir Bibliothek
aus IEC FC 7 DT_DAY
in scl aufrufen wird der Tag als INT angegeben

mfG
hg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
jaja. das mit der fc weiss ich. ausserdem gibt die fc7 den wochentag zurück und nicht die tageszahl
aber darum geht es mir nicht.
 
hallo

von scl hab ich viel zu wenig ahnung. :(

wenn ich nun z.b. in scl ein variable vom typ date_and_time definiere, wie komme ich dann z.b. an den tag dran?

in awl ist das kein problem, da wäre es einfach das LB2.

Ich verstehe die Frage nicht. Das liegt aber wohl daran das ich mich mit Siemens und auch mit AWL zu wenig auskenne.
Also Du hast ein date_and_time wert vorliegen und willst an den Tag ran kommen. In Welchem Format möchtest Du den Tag haben?

Als String? z.B.
Code:
PROGRAM PLC_PRG
VAR
    strDate    :STRING(23);
    strDay    :STRING(11);
END_VAR

Code:
strDate :=DT_TO_STRING(DT#1970-01-15-05:05:05);
strDay    :=MID(strDate, 10, 4);
 
es geht mir hier eigentlich grundsätzlich darum wie ich an ein bestimmtes byte drankomme wenn ich dieses aber nicht einzeln definiert habe.

ein beispiel in awl
Code:
      CALL  SFC    1
       RET_VAL:=#retval
       CDT    :=#datumzeit              //temp_var typ:date_and_time ab LB0 8byte
      L     LB     2                    //das ist die tageszahl bcd-codiert
wie käme ich jetzt in scl an lb2 dran ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Volker,

mit dem AT-Befehl sollte das gehen. Suche nach "AT-Befehl" oder auch nach "Sichten".

habe sogar ein Beispiel gefunden:
Code:
(************************************************************************************************************************)
FUNCTION "JAHRESZAHL_VIERSTELLIG" : VOID
TITLE = 'Datum mit vierstelliger Jahreszahl aus Systemdatum ermitteln'
(************************************************************************************************************************)
KNOW_HOW_PROTECT
VERSION : '1.0'
AUTHOR : Onkel
NAME : DATE
FAMILY : 
(************************************************************************************************************************)
VAR_OUTPUT
  TAG, MONAT, JAHR : INT;
END_VAR
 
VAR
  TEMP_DT : DT; 
  CDT AT TEMP_DT : ARRAY[0..7] OF BYTE;
  TEMP_INT : INT;
END_VAR
 
//______________________________________________________________________________
// Datum mit vierstelliger Jahreszahl aus Systemdatum ermitteln
//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
BEGIN
  TEMP_INT := READ_CLK(CDT:=TEMP_DT);
  TAG := WORD_TO_INT(BYTE_TO_WORD(CDT[2])); 
  MONAT := WORD_TO_INT(BYTE_TO_WORD(CDT[1])); 
  TEMP_INT := WORD_TO_INT(BYTE_TO_WORD(CDT[0]));
  IF TEMP_INT >= 90
    THEN JAHR := TEMP_INT + 1900;
    ELSE JAHR := TEMP_INT + 2000;
  END_IF;
END_FUNCTION;



Gruß, Onkel
 
Zuletzt bearbeitet:
Also so was wie DATE_TO_BYTE?
Code:
byt :=DT_TO_BYTE(DT#1970-01-15-05:05:05);

Ergebnis ist dann 129.

Sorry, ich steh auf dem Schlauch.
 
das was der onkel schreibt meine ich ungefähr.
TAG := WORD_TO_INT(BYTE_TO_WORD(CDT[2]));

also habe ich scheinbar gar keinen direkten zugriff auf die lokaldaten un muss dafür noch extra das array definieren. :(

so gehts natürlich nicht, aber das würde ich gerne haben.
TAG := BYTE[2](datumzeit);
 
Zurück
Oben