Die folgenden Unterschiede betreffen nur Funktionen, nicht Funktionsbausteine.
In einer S7 wird bei einer Zuweisung an einen Out- oder In-Out-Parameter, dessen Aktualparameter nicht ein weiterer Parameter des aufrufenden Bausteins, sondern ein direkter Operand (Ein-/Ausgang, Merker, Datenwort) ist, der Aktualparameter im Moment der Zuweisung verändert. Genauso wird beim Zugriff auf einen In-Parameter, an den ein direkter Operand angeschlossen ist, der tatsächliche Zustand dieses Operanden erkannt, auch wenn sich dieser seit Aufruf des Bausteins geändert hat.
In TrySim erfolgt die Aktualisierung der an Out- und In-Out-Parameter angeschlossenen Aktualparameter erst bei der Rückkehr zum aufrufenden Baustein. Die In- und In‑Out-Parameter werden einmal beim Aufruf des Bausteins aktualisiert, danach werden die Aktual-Parameter nicht mehr gelesen.
Die dadurch bedingten Unterschiede treten aber nur zu Tage, wenn Sie auf einen Operanden sowohl direkt als auch über Parameter zugreifen.
Betrachten Sie dieses Programmbeispiel:
S7 TrySim
OB 1 |
OB 1 |
||||
Status |
Status |
||||
SET |
1 |
SET |
1 |
||
= M 1.2 |
1 |
= M 1.2 |
1 |
||
CALL FC 2 |
CALL FC 2 |
||||
Par1: M 1.2 |
Par1: M 1.2 |
||||
U M 1.2 |
0 |
U M 1.2 |
0 |
FC 2 |
FC 2 |
||||
OUT |
Par1 |
BOOL |
OUT |
Par1 |
BOOL |
Status |
Status |
||||
U #Par1 |
1 |
U #Par1 |
1 |
||
U M 1.2 |
1 |
U M 1.2 |
1 |
||
CLR |
0 |
CLR |
0 |
||
= #Par1 |
0 |
= #Par1 |
0 |
||
U #Par1 |
0 |
U #Par1 |
0 |
||
U M 1.2 |
0 |
U M 1.2 |
1 |
Vermeiden Sie daher solche gemischten Zugriffe, die im Übrigen zu schwer zu lokalisierenden Programmfehlern führen können. Im obrigen Beispiel hat sich auf der linken Seite der Zustand des Merkers M 1.2 während der Programmbearbeitung von 1 nach 0 geändert, ohne dass dies durch eine explizite Zuweisung zu erkennen wäre.
Abweichend implementierte Eigenschaften
S7-300 und S7-400 sind eingetragene Warenzeichen der Siemens AG.