# HW Ausgang lesen



## Stogi (27 Juli 2022)

Hallo,

ich versuche ein Projekt einer S7-1500 (TIA V14) für eine S7-317F-2 PN/DP in Simatic Manager V5.6 + SP2 umzuschreiben.

Dabei habe ich folgendes Problem:
Im Originalprojekt wird der HW Ausgangsbereich mittels PEEK_WORD ausgelesen:










Wie kann ich das an einer S7-300 umsetzten?
Weiterhin bin ich parallel schon am testen des Bausteins. Wie kann ich bei einem FB (SCL) die temporären Variablen beobachten?

LG Stogi


----------



## PN/DP (27 Juli 2022)

Einfach die A-Adressen ins Prozessabbild legen, ggf. die Größe des PAA vergrößern. Dann kann das Ausgangsword einfach gelesen werden: %EW(#DICmdModuleAddr). Siehe TIA Hilfe "Indirektes Adressieren von Variablen, S7-300"
Übrigens kann man den Wert von Hardware-Ausgängen nicht lesen, auch nicht bei S7-1500. Nur das Prozessabbild PAA kann man lesen.

Wofür macht das eigentlich Sinn, Ausgänge zu lesen? Das SPS-Programm sollte doch wissen, welche Werte gerade an die Ausgänge zugewiesen sind. Oder sind die Zuweisungen KnowHow-Protected?

PS:


Stogi schrieb:


> Wie kann ich bei einem FB (SCL) die temporären Variablen beobachten?


Temporäre Variablen kann man nicht beobachten. Nur die Programm-Zugriffe auf die temporären Variablen kann man beobachten. Notfalls kann man eigenen Testcode ins Programm einfügen, der die Werte der temporären Variablen in globale Variablen kopiert.

Harald


----------



## Stogi (27 Juli 2022)

Danke für die Antwort.

Für mich macht der Teil des Originalprogramms ehrlich gesagt auch wenig Sinn. 
Ich beschreibe den Ausgang aktuell einfach von Steuerungsseite und kann das Gerät (handelt sich um einen Objekterkennungssensor von IFM - O2D510) damit eigentlich genauso steuern wie ich will.

Das komische an dem Ganzen ist, dass ich eine temporäre Variable im FB habe, die sich mit der Bewegung der Anlage ändert.
Scheint irgendwie mit der Bewegung eines bestimmten Anlagenteils zusammenzuhängen.
Die Variable wird im FB (wegen meiner bisherigen Änderungen zum Originalprogramm) aber nicht mehr geschrieben.
Nachdem die Zeile mit PEEK_WORD meine einzige funktionelle Änderung ist, war mein Gedanke, dass das etwas beeinflusst, was ich nicht verstehe...

Vielleicht anders gefragt. Kann ich eine temporäre Variable eines FBs (SCL) von außerhalb des FBs beeinflussen?
Und wenn ja, wie finde ich die Verknüpfung von der ich nichts weiß....


----------



## PN/DP (27 Juli 2022)

Stogi schrieb:


> Kann ich eine temporäre Variable eines FBs (SCL) von außerhalb des FBs beeinflussen?


Das geht nur, indem der FB einen Baustein (FB, FC) aufruft, der indirekt auf die Vorgänger-Lokaldaten zugreift - also auf die Lokaldaten des aufrufenden FB.

Harald


----------



## LargoD (28 Juli 2022)

Stogi schrieb:


> Das komische an dem Ganzen ist, dass ich eine temporäre Variable im FB habe, die sich mit der Bewegung der Anlage ändert.
> Scheint irgendwie mit der Bewegung eines bestimmten Anlagenteils zusammenzuhängen.
> Die Variable wird im FB (wegen meiner bisherigen Änderungen zum Originalprogramm) aber nicht mehr geschrieben.


Wenn die Temp-Variable im FB nicht geschrieben wird, enthält sie einen Wert, der in einem anderen FB oder FC außerhalb Deines FB geschrieben wurde. Speicher von Temp-Variablen wird beim Verlassen eines FB oder FC frei gegeben und im nächsten FB oder FC wieder verwendet.
Gruß
Erich


----------



## Stogi (28 Juli 2022)

LargoD schrieb:


> Wenn die Temp-Variable im FB nicht geschrieben wird, enthält sie einen Wert, der in einem anderen FB oder FC außerhalb Deines FB geschrieben wurde. Speicher von Temp-Variablen wird beim Verlassen eines FB oder FC frei gegeben und im nächsten FB oder FC wieder verwendet.
> Gruß
> Erich



Wow das wars.... vielen Dank!
Hab die Temporäre Variable am Anfang des Bausteins beschrieben und das Problem ist verschwunden.
Anscheinend hat die Bewegungsüberwachung des Anlagenteils die Variable beschrieben....
LG Stogi


----------



## PN/DP (28 Juli 2022)

Generell: Wenn eine Temp-Variable vor der lesenden Verwendung nicht initialisiert wird (ein kontrollierter Wert hineingeschrieben wird), dann ist das ein Programmierfehler. Wenn eine Temp-Variable nicht verwendet wird, dann ist egal welcher Wert drin steht.

Harald


----------



## Stogi (29 Juli 2022)

Hab mich direkt auf Temp-Variablenleichensuche gemacht.
Danke euch beiden nochmal!


----------

