Ladwig
Member
- Beiträge
- 9
- Punkte Reaktionen
- 1
-> Hier kostenlos registrieren
Hallo Zusammen,
ich habe einen FC selbst erstellt ohne Globaldaten zu verwenden um in Bibliothek-Fähig zu halten.
Hier der FC:
Mein Problem ist nun folgendes.
Wenn ich diesen FC aus einem anderen FC aus unterschiedlichen Netzwerken mehrfach aufrufe wird er mehrfach durchlaufen obwohl das Enable-Bit nur in einemNetzwerk für einen Zyklus True ist.
Es werden somit alle Out-Variablen aller aufrufe geändert (Doppelbelegungen liegen nicht vor). Die In-/Outvariablen sowie das Enable-Bit liegen einem DB.Zudem wird wenn das Enable-Bit auf False steht an der OutvariableErg_Zeit_BCD_sec ein Wert von H7861 ausgegeben, wo auch immer dieser Fabelwert herkommt. Darauf kann ich mir keinen Reim machen. Den wenn das Enable-Bit nicht aktiv ist wird ja nur ans Ende des FC‘s gesprungen und die oben genannte Out-Variablen eigentlich gar nicht verändert.
Ich habe das Problem zwar schon gelöst indem ich aus den Out-Variablen einfach IN-/Out-Variablen gemacht habe. Warum es nun allerdings mit dem Enable-Bitfunktioniert versteh ich nicht wirklich.
Dies hat doch nicht mit Outvariablen bzw. In-/Outvariablen zu tun.
Kann mich dazu zufälligerweise jemand aufklären?
ich habe einen FC selbst erstellt ohne Globaldaten zu verwenden um in Bibliothek-Fähig zu halten.
Hier der FC:
Code:
[COLOR=#222222][FONT=Verdana]FUNCTION"FC42_Korrektur_Zeit2" : VOID
TITLE =Ändern einer Zeit im Sekundenraster
//Über diesen Baustein kann eine Zeit die im Sekundenraster vorliegt im
//Sekundenraster nach oben und unten korriegiert werden.
//Wertebereich 0-999sek - 999sek = 16m39s
{ S7_language := '9(1) Englisch (USA) 21.12.2007 10:50:25' }
AUTHOR : Ludwig
VERSION : 1.0[/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]
VAR_INPUT
Enable : BOOL ; //Start des Bausteins
Grundzeit_sec : INT ; //Grundzeit in Sekunden
Zeitkorrektur_sec : INT ; //Zeiteingabe Zeitkorrektur in Sekunden
END_VAR
VAR_OUTPUT
Erg_Zeit_BCD_sec : WORD ; //Umgerechnete Zeit +/- Korrektur in Sekunden mitZeitbasis
Erg_Zeit_DEC_sec : INT ; //Umgerechnete Zeit +/- Korrektur in Sekunden ohneZeitbasis
END_VAR
VAR_TEMP
tmp_Korrektur : INT ;
tmp_Ergebnis : INT ;
END_VAR
BEGIN
NETWORK
TITLE =Kontrolle ob Zeiteinbgabe Positiv oder Negativ[/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]UN #Enable;
SPB end; [/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]U( ;
L #Grundzeit_sec;
L #Zeitkorrektur_sec;
<I ;
) ;
O( ;
L #Grundzeit_sec;
L #Zeitkorrektur_sec;
OW ;
L 0;
==I ;
) ;
SPB e001; [/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]U( ;
L #Zeitkorrektur_sec;
L 0;
<I ;
) ;
SPB c001; [/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]NETWORK
TITLE =Umrechnung der Zeit bei Toleranz Positiv[/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]L #Grundzeit_sec;
L #Zeitkorrektur_sec;
+I ;
T #tmp_Ergebnis; [/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]SPA d001; [/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]NETWORK
TITLE =Umrechnung der Zeit bei Toleranz Negativ[/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]c001: NOP 0; [/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]L #Zeitkorrektur_sec;
L -1;
*I ;
T #tmp_Korrektur; [/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]L #Grundzeit_sec;
L #tmp_Korrektur;
-I ;
T #tmp_Ergebnis; [/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]NETWORK
TITLE =Auswertung ob Zeit 0-999sek, wenn OK und Wert nach Ausgabe[/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]d001: NOP 0; [/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]U( ;
L #tmp_Ergebnis;
L 0;
<I ;
) ;
O ;
U( ;
L #tmp_Ergebnis;
L 999;
>I ;
) ;
SPB e001; [/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]L #tmp_Ergebnis;
T #Erg_Zeit_DEC_sec; [/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]L #tmp_Ergebnis;
ITB ;
L W#16#2000;
OW ;
T #Erg_Zeit_BCD_sec; [/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]SPA end;
NETWORK
TITLE =Rückgabewert auf 0 bei nichtausführung oder Fehler[/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]e001: NOP 0;
SET ;
L 0;
T #Erg_Zeit_BCD_sec;
T #Erg_Zeit_DEC_sec;
NETWORK
TITLE =[/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]end: NOP 0; [/FONT][/COLOR]
[COLOR=#222222][FONT=Verdana]END_FUNCTION[/FONT][/COLOR]
Mein Problem ist nun folgendes.
Wenn ich diesen FC aus einem anderen FC aus unterschiedlichen Netzwerken mehrfach aufrufe wird er mehrfach durchlaufen obwohl das Enable-Bit nur in einemNetzwerk für einen Zyklus True ist.
Es werden somit alle Out-Variablen aller aufrufe geändert (Doppelbelegungen liegen nicht vor). Die In-/Outvariablen sowie das Enable-Bit liegen einem DB.Zudem wird wenn das Enable-Bit auf False steht an der OutvariableErg_Zeit_BCD_sec ein Wert von H7861 ausgegeben, wo auch immer dieser Fabelwert herkommt. Darauf kann ich mir keinen Reim machen. Den wenn das Enable-Bit nicht aktiv ist wird ja nur ans Ende des FC‘s gesprungen und die oben genannte Out-Variablen eigentlich gar nicht verändert.
Ich habe das Problem zwar schon gelöst indem ich aus den Out-Variablen einfach IN-/Out-Variablen gemacht habe. Warum es nun allerdings mit dem Enable-Bitfunktioniert versteh ich nicht wirklich.
Dies hat doch nicht mit Outvariablen bzw. In-/Outvariablen zu tun.
Kann mich dazu zufälligerweise jemand aufklären?