Zeitoperation LC aus AWL für SCL

lindnerlars

Level-1
Beiträge
39
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

ich habe einen FB mit folgendem Inhalt:

Code:
FUNCTION_BLOCK FB0

VAR_INPUT
    myTimer0 : TIMER;
END_VAR

VAR_TEMP
    TimeIn : S5TIME;
    TimeInS AT TimeIn : WORD;
END_VAR

    // Timer0
    TimeInS := INT_TO_BCD(REAL_TO_INT((0.01)*1000)) AND W#16#FFF OR W#16#2000;
    "currTime" :=  S_ODT (T_NO := myTimer0 , S := "Start_Timer0" , TV := TimeIn , Q := "Timeout_Timer0");

    // "T0M" ist WORD
    //"T0M" := myTimer0;
    
END_FUNCTION_BLOCK
Nun möchte ich einer WORD-Variable den Parametertypen myTimer0 als BCD-Zahl übergeben, weil diese bei uns extern manipuliert wird.

In AWL gibt es dafür den Befehl "LC", kann ich sowas auch in SCL machen?

vielen Dank und viele Grüße aus Dresden :)

Lars
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo vierlagig,

danke erst mal für deine rasche Antwort, bei mir öffnet sich deine Siemens-Seite auf deutsch...

1. Gibt es doch in SCL eine Umwandlung von BCD nach INT, nennt sich:
BCD_TO_INT(x) oder?

2. Ist die Variable, die ich umwandeln will ein Parametertyp vom Typ TIMER (!) und keine BCD-Zahl...

nochmal viele Grüße :)
 
TIMER? nicht TIME? wollte damit nur den ersten anstoß geben ... TIME speichert ja den wert in ms, so dass du dann entsprechend mit zeitbasis (0,1;1;10s ...irgendeine gab es noch) die S5T in dem AWL baustein zusammen basteln müßtest ... wobei du die BCD-wandlung auch anders implementieren könntest.

war aber auch nur der erste schnellschuß .. das englisch nervt ... geh mal einer auf die start-seite vom support, suche er irgendwas und klicke dann in die ergebnisliste ... nicht unbedingt forum ;) ... zum ausrasten

und mit timer biste dir wirklich sicher? also wenn du time in s5t wandeln willst da gibt es das: test_s5t:=TIM_S5TI(test_t);

http://support.automation.siemens.com/WW/view/de/16528756 <-von hand en durch de ersetzt!!!
 
Zuletzt bearbeitet:
ei du hast Recht, wenn ich im Siemens Support was suche, bekomme ich eine deutsche Ergebnisliste, klicke ich was an, lande ich aber auf der englischen Seite...???

Und wegen TIMER, da bin ich mir ziemlich sicher, das ist ein Parametertyp (z.B. T0 oder T1 -> kuck mal SIMATIC Programmieren mit STEP7 Seite 570) und den muss ich irgendwie als BCD-Zahl in WORD rausbekommen...wie weiß ich nicht :(

wie gesagt, in AWL ganz easy:

Code:
LC T0
T MW0

aber in SCL ????
 
In einem FB einen S5Timer zu verwenden ist eh misst, egal ob in SCL, AWL, KOP, FUP oder was auch immer.

Nimm doch einen TON oder TOF und vergiss den S5Rotz.
 
naja, wenn alles nichts hilft, dann werd ich die Timer in AWL auslagern und das dort behandeln....Sch*** Siemens Zeug, das die das nie mal bissl einfacher machen können...

Dank euch trotzdem :)
 
In AWL liefert die Ladefunktion LC T den aktuellen Zeitwert einer Zeitfunktion als BCD-Wert:

Code:
      LC    T    100

In SCL liefert der Funktionswert (ZEITWERT_BCD) einer Zeitfunktion (S_ODT) den aktuellen Zeitwert als BCD-Wert:

Code:
FUNCTION_BLOCK FB100
 
NAME    : ZEITFKT
FAMILY  : SPSFORUM
AUTHOR  : KAI
VERSION : '1.0'
 
VAR_INPUT
    ZEITOPERAND      : TIMER;
    ZEIT_STARTEN     : BOOL;
    ZEITWERT         : S5TIME;
    ZEIT_RUECKSETZEN : BOOL;
END_VAR
 
VAR_OUTPUT
    ZEITWERT_BCD  : S5TIME;
    ZEITSTATUS    : BOOL;
    ZEITWERT_DUAL : WORD;
END_VAR
 
BEGIN
 
// Zeitfunktion Einschaltverzoegerung
 
ZEITWERT_BCD := S_ODT (T_NO := ZEITOPERAND,
                       S    := ZEIT_STARTEN,
                       TV   := ZEITWERT,
                       R    := ZEIT_RUECKSETZEN,
                       Q    := ZEITSTATUS,
                       BI   := ZEITWERT_DUAL);
 
END_FUNCTION_BLOCK

Gruß Kai
 

Anhänge

  • OB1.pdf
    6,2 KB · Aufrufe: 8
  • FB100.pdf
    5,2 KB · Aufrufe: 10
  • Symbole.pdf
    4,7 KB · Aufrufe: 6
  • VAT.jpg
    VAT.jpg
    233,8 KB · Aufrufe: 12
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Kai,

vielen Dank schon einmal, ich glaub du hast Recht, so müsste es funktionieren :)

Habe gerade im AWL-Handbuch gelesen, dass der Befehl LC den Zeitwert des Timers als S5TIME im BCD-Format lädt.
(Und ich dachte, dass LC den Timer mit dem Parametertyp TIMER lädt und deswegen was anderes rauskommt...)

Ok, bis hierhin ganz gut, nun manipuliere ich diesen Zeitwert (sprich Setze ihn DANN auf einen kleinen Wert, wenn ich weiß, DASS der Timer gleich ablaufen wird, da die Timer-Zeiten in S7-PLCSIM, dank Ausrichtung an der tollen Windows-Zeit, nicht stimmen!) und möchte ihn wieder zurück in den Timer schreiben, so dass der Timer mit dem neuen Zeitwert weiterläuft!
Frage, müsste das mit folgenden Code funktionieren?

Code:
FUNCTION_BLOCK FB0

    // Timer0
    "currTime" :=  S_ODT (T_NO := T0, S := "Start_Timer0" , TV := "T0M", Q := "Timeout_Timer0");

    // "T0M" ist WORD
    // und wird am Ende des SPS-Zyklus von einem externen Programm manipuliert
    "T0M" := "currTime";
    
END_FUNCTION_BLOCK

ORGANIZATION_BLOCK OB1

    FB0.DB0();

END_ORGANIZATION_BLOCK


ORGANIZATION_BLOCK OB100

VAR_TEMP
    TimeIn : S5TIME;
    TimeInS AT TimeIn : WORD;
END_VAR

BEGIN

    // Initialisierung von "T0M"
    TimeInS := INT_TO_BCD(REAL_TO_INT((0.01)*1000)) AND W#16#FFF OR W#16#2000;
    "T0M" := TimeIn;

END_ORGANIZATION_BLOCK
vielen vielen Dank noch mal und noch mal viele Grüße aus dem einzigen Bundesland, das heute frei hat ;)


PS: und ich Depp tu zu Hause arbeiten :rolleyes:
 
Zurück
Oben