TIA Prozessabbild oder Peripheriebereich

TimeOUT

Level-1
Beiträge
125
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich versuche zur Zeit im TIA Portal V13 in SCL und angeschlossener CPU 414 3 PN/DP einen Funktionsbaustein zu schreiben.

Dabei habe ich einen PROFINET-Teilnehmer angeschlossen und mit diversen Kommunikationsmodulen versehen. Eines dieser Module ist ein Ergebniszähler, dessen E-Adresse für 268...269 definiert ist.

Diesen Zählerwert möchte ich gerne in einer STAT-Variable in meinem FB zwischenspeichern.

Woher weiß ich bzw. schau ich nach ob diese Adresse im Prozessabbild oder im Peripheriebereich der CPU liegt?

In AWL hatte ich es damals so gelöst, dass ich mir ne temp_variable vom Typ DInt erzeugt habe und den Adresswert um 3 Bit nach links verschoben habe. Anschließend konnte ich mit dieser Variable die Peripherie adressieren:

Code:
 L     #IO_Module_Address.ResultCounter (bspw. 512...513)
 SLD   3
 T     #dAddress_ResultCounter (tmp_variable DInt)

 L     PEW [#dAddress_ResultCounter]

Genau das möchte ich nun für die 400er CPU in TIA mit SCL umsetzen.
Was ich bis jetzt gefunden habe war folgendes, allerdings ist (:P) wohl nur für 1500er/1200er CPUS vorgesehen?!

Code:
#dAddress_ResultCounter := SHL(IN := #IO_Module_Address.ResultCounter, N := 3);
#Zwischenspeicher := %EW(#dAddress_ResultCounter):P;

Ist das so korrekt oder wie würdet Ihr das lösen?

Viele Grüße
timeout

//Edit: Ich bins nochmal.
Wie es scheint funktioniert es doch mit der ":P" Anweisung. Allerdings muss hier nichts geschoben werden.
Also ganz schlicht:
Code:
#dAddress_ResultCounter := #IO_Module_Address.ResultCounter;
#Zwischenspeicher := %EW(#dAddress_ResultCounter):P;

Das mit dem Peripheriebereich und dem Prozessabbild einsehen oder verändern habe ich in TIA allerdings immer noch nicht entdeckt :s
 
Zuletzt bearbeitet:
Hallo,
das mit dem "Schieben" habe ich nicht verstanden.
das EW128 (z.B.) entspricht exakt dem PEW128 mit dem einzigen Unterschied, dass wenn du L PEW128 programmierst du den Inhalt der Adresse zum Abfrage-Zeitpunkt erhältst und nicht den, den du hattest wo das Prozess-Abbild aktualisiert worden ist (das kann schon ein ganz schöner Unterschied sein).
Liest du die Perepherie direkt ein so brauchen die zugehörigen Karten nicht mehr im Prozess-Abbild liegen (z.B. Zählerkarten, Analog-Eingänge, FU's und/oder Servo's etc.).

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

das mit dem Schieben war zum Erzeugen des Zeigers.
Oder was meinst du?

Code:
L #adr_in // [COLOR=Red]Ziel einlesen als INT (z.Bsp. 256)[/COLOR]
SLD 3 // [COLOR=Red]Daraus einen Zeiger (Pointer) machen (256.0)[/COLOR]
T #zeiger // Zeiger im temp/stat speichern
L PED [#zeiger] // L PED256



Aber wo kann ich nachschauen ab wo das Prozessabbild genau endet und ich nur noch über die Peripherie zugreifen kann?
 
Hallo,

tut mir leid, dass ich den Thread nochmal ausgrabe, aber ich bin noch auf ein Problem gestoßen, zu dessen Lösung ich nichts in der Siemens-Hilfe oder Google finden konnte.

Um auf den Peripheriebereich in TIA V13 mit ner 400er Steuerung zuzugreifen konnte ich die ganze Zeit folgendes verwenden:

Code:
#WValue := %EW(#E_Adresse):P;

Verwende ich den gleichen Code mit einer 1500er Steuerung kreidet mir das der Compiler rot an.

Wie schaut denn das Pendant dazu für die 1500er Steuerung aus?
Würde das ganze vllt. auch gerne über die HW-Kennung der einzelnen Submodule lösen um bei einer händischen Änderung der E/A-Adressen weiterhin konsitent zu bleiben.
Muss ich dann zwingend den SFC14/15 (oä. SFC's) benutzten?

Gruß
Timeout
 
Zurück
Oben