- Beiträge
- 21.965
- Reaktionspunkte
- 6.836
-> Hier kostenlos registrieren
Woher stammt denn diese "Erkenntnis"? Komisch, daß mein Step7 das nicht weiß.Geht nicht, da eine Statische Variable eine DB variable ist, und auf DB gehen keine direkten Out Zugriffe.
Bei mir funktionieren Zuweisungen von FC.OUT auf STAT oder DB.DBX schon immer prima.
Ist es zuviel verlangt, daß Du mal genau erklärst, was bedeutet: "funktioniert richtig" und "funktioniert nicht richtig"?also noch mal:
FC1:
U E1.0
= #sensor (ist eine out variable)
im FB1:
Call FC1
sensor:=#stat_sensorzustand (ist eine statische variable)
...
Call FC2
invariable:=#stat_sensorzustand
...
so funktioniert aber Anlage richtig:
Call FC2
invariable:="-42B6"
...
Genau Dein Beispiel funktioniert bei mir auf Anhieb "richtig". Hier mal als AWL-Quelle:
Code:
FUNCTION "FC1" : VOID
TITLE =
VERSION : 0.1
VAR_OUTPUT
sensor : BOOL ;
END_VAR
BEGIN
NETWORK
U E 1.0;
= #sensor;
END_FUNCTION
FUNCTION "FC2" : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
invariable : BOOL ;
END_VAR
BEGIN
NETWORK
U #invariable;
= M 102.0;
END_FUNCTION
FUNCTION_BLOCK "FB1"
TITLE =
VERSION : 0.1
VAR
stat_sensorzustand : BOOL ;
END_VAR
BEGIN
NETWORK
// Zum Testen M101.0 nach E1.0 übertragen
U M 101.0; // Test-Steuervariable
= E 1.0;
// FC1 überträgt E1.0 nach #stat_sensorzustand
CALL "FC1" (
sensor := #stat_sensorzustand);
// FC2 überträgt #stat_sensorzustand nach M102.0
CALL "FC2" (
invariable := #stat_sensorzustand);
// M102.0 muß nun den selben Zustand wie M101.0 haben
U M 102.0;
U M 101.0;
= M 103.0;
END_FUNCTION_BLOCK
DATA_BLOCK "DB1"
TITLE =
VERSION : 0.0
"FB1"
BEGIN
stat_sensorzustand := FALSE;
END_DATA_BLOCK
ORGANIZATION_BLOCK "OB1"
TITLE = "Main Program Sweep (Cycle)"
VERSION : 0.1
// VAR_TEMP
// ...
// END_VAR
BEGIN
NETWORK
CALL "FB1" , "DB1" ;
END_ORGANIZATION_BLOCK
Ist Dein FB1-Instanz-DB aktuell? (ggf. löschen und neu erstellen lassen)
Werden bei Dir irgendwo die AR1- und AR2-Register verändert?
Hast Du irgendwo im Programm indirekte Schreibzugriffe, die eventuell nicht sauber sind?
Gruß
Harald