Hallo liebe Gemeinde! 8-)
Ich bin gerade dabei ein recht Umfangreiches S7/300 Pgm zu migrieren auf TIA14SP1.
Nun das meiste habe ich geschafft. Leider hänge ich jetzt an dem S_ODT fest!
In Step7 V5.5 SCL übersetzt er nachfolgendes Programm ohne Probleme.
In TIA 14 meckert er an der Parameterversorgung des zweiten S_ODT er möchte mit Parameter S: versorgt werden und dann noch mit TV:
Wo liegen hier die Unterschiede? :confused:
Danke im voraus
Ich bin gerade dabei ein recht Umfangreiches S7/300 Pgm zu migrieren auf TIA14SP1.
Nun das meiste habe ich geschafft. Leider hänge ich jetzt an dem S_ODT fest!
In Step7 V5.5 SCL übersetzt er nachfolgendes Programm ohne Probleme.
In TIA 14 meckert er an der Parameterversorgung des zweiten S_ODT er möchte mit Parameter S: versorgt werden und dann noch mit TV:
Wo liegen hier die Unterschiede? :confused:
Code:
FUNCTION Taktzeitmessung : DINT
TITLE = 'Taktzeitmessung'
//
// Der Baustein bestimmt die Taktzeit einer Maschine und berechnet
// die Takte pro Minute bzw pro Stunde
//
VERSION : '1.0'
AUTHOR : Ht
NAME : name
FAMILY : SCL
// Bausteinparameter
VAR_INPUT
Trigger_fuer_Messung : BOOL; // Wechsel von 0 nach 1 bestimmt Anfang
// und Ende der Messung
Start: BOOL; // Bestimmt optional den Anfang der Messung
_Timer : TIMER; // Timer für Messung
Zeit_0_bis_10_s : BOOL; // Zu messende Zeit liegt zwischen 0 und 9,99 s
Zeit_0_bis_100_s : BOOL; // Zu messende Zeit liegt zwischen 0 und 99,9 s
Zeit_0_bis_1000_s : BOOL; // Zu messende Zeit liegt zwischen 0 und 999 s
END_VAR
VAR_IN_OUT
Taktzeit : DINT; // Taktzeit in ms
Takte_pro_Minute : INT; // Takte pro Minute * 10
Takte_pro_Stunde : DINT; // Takte pro Stunde * 10
Trigger_fuer_Messung_alt : BOOL; // Speicher für Trigger
Start_alt : BOOL; // Speicher für Startsignal
END_VAR
VAR_TEMP
Maxzeit : S5TIME; // Zeitwert für Timer
Abgelaufene_Zeit : S5TIME; // Timerwert bei Ende Messung
Flanke_Trigger : BOOL; // Flanke des Triggersignals
Flanke_Start : BOOL; // Flanke des Startsignals
END_VAR
// Flankebildung
Flanke_Trigger := Trigger_fuer_Messung AND NOT Trigger_fuer_Messung_alt;
Flanke_Start := Start AND NOT Start_alt;
// Speicher für Flanken
Trigger_fuer_Messung_alt := Trigger_fuer_Messung;
Start_alt := Start;
// Maximale Zeitdauer setzen
IF Zeit_0_bis_10_s THEN
Maxzeit := T#9s990ms;
ELSIF Zeit_0_bis_100_s THEN
Maxzeit := T#99s900ms;
ELSIF Zeit_0_bis_1000_s THEN
Maxzeit := T#999s;
END_IF;
// Timer als Einschaltverzögerung Starten
Abgelaufene_Zeit :=S_ODT(T_NO:=_Timer,
S:= NOT Flanke_Trigger AND NOT Flanke_Start,
TV:=Maxzeit);
// Bei Flanke Messung durchführen
IF Flanke_Trigger THEN
Abgelaufene_Zeit := S_ODT(T_NO:=_Timer); // ************ Ab hier happert´s **********************
Taktzeit := TIME_TO_DINT (S5TI_TIM(IN := Maxzeit))
- TIME_TO_DINT (S5TI_TIM(IN := Abgelaufene_Zeit));
Takte_pro_Minute := REAL_TO_INT(600000 / Taktzeit);
Takte_pro_Stunde := REAL_TO_DINT(36000000.0 / DINT_TO_REAL(Taktzeit));
END_IF;
// Rückgabewert
Taktzeitmessung := Taktzeit;
Taktzeit := Taktzeit;
END_FUNCTION
Danke im voraus