TIA Zugriff über Variable auf Peripheriebytes

Flo_Ju

Level-2
Beiträge
36
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen

Ich hab folgendes Problem:
Da bei der 1200er AWL nicht unterstützt wird, muss ich folgenden Programmcode in SCL/FUP/KOP übersetzen.

Soweit ich diesen Programmcode verstehe, wurde über eine IN-Variable die Eingangs- und Ausgangsbytes für eine Vakuumpumpe deklariert und somit Daten über diesen FB eingelesen oder geschrieben.

Ich steht mit diesem Codeteil etwas auf dem Schlauch.
ich habe die Anweisungen "PEEK" und "POKE" gefunden, mit diesen kann ich aber laut TIA-Hilfe bei einer 1200er nicht auf die Peripherie zugreifen.
Gibt es bei der 1200er überhaupt einen Weg so auf die Peripheriebytes zuzugreifen?


Ich verwende Tia V16 und eine 1215C-CPU.

Code:
Input:
#PEB_Startadresse: Word,
#PAB_Startadresse: Word,
Static:
#StatusByte_Bit_8_15: Byte,
#StatusByte_Bit_0_7: Byte,
#SpeedIst_HB: Byte,
#SpeedIst_LB: Byte,
#SpeedSoll_HB: Byte,
#SpeedSoll_LB: Byte,


//    Eingangsbytes einlesen 
//    (2 Byte Statuswort, 2 Byte Istdrehzahl)
      L     P#P0.0               // Aktuellen Pointer definieren
      RRD   3
      L     #PEB_Startadresse    // Anfangsadresse Modul 1
      +I
      RLD   3
      LAR1
      L PIB [ AR1 , P#8.0 ]
      T     #StatusByte_Bit_8_15 // EByte 0
      L PIB [ AR1 , P#9.0 ]
      T     #StatusByte_Bit_0_7  // EByte 1
      L PIB [ AR1 , P#10.0 ]
      T     #SpeedIst_HB         // EByte 2
      L PIB [ AR1 , P#11.0 ]
      T     #SpeedIst_LB         // EByte 3


//    Ausgangsbytes schreiben
      L     P#P0.0               // Aktuellen Pointer definieren
      RRD   3
      L     #PAB_Startadresse    // Anfangsadresse
      +I
      RLD   3
      LAR1
      L     #SteuerByte_Bit_8_15 // Steuerbits LB
      T PQB [ AR1 , P#8.0 ]
      L     #SteuerByte_Bit_0_7  // Steuerbits HB
      T PQB [ AR1 , P#9.0 ]
      L     #SpeedSoll_HB        // Solldrehzahl
      T PQB [ AR1 , P#10.0 ]
      L     #SpeedSoll_LB        // Solldrehzahl
      T PQB [ AR1 , P#11.0 ]

FloJu
 
Zuletzt bearbeitet:
Warum willst Du auf die Peripherie zugreifen? Ist nicht bei der S7-1200 automatische jede E/A-Adresse im Prozessabbild PAE/PAA? Auf PAE/PAA kannst Du mit PEEK/POKE oder UDT zugreifen.
In welchem OB wird der Code aufgerufen?
Sind die Pumpen Profinet-IO-Devices? Eventuell kannst Du auch DPRD_DAT und DPWR_DAT verwenden.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Code ist in einem FB geschrieben und wird über einen FC im OB1 aufgerufen.

Bei dem Baustein (AWL) konnte man über eine Input-Variable die Startadresse für die Kommunikation eintragen (z.B. 200).
Und über den Code werden dann die benötigten Bytes ausgelesen.
Byte 208 := #StatusByte_Bit_8_15
Byte 209 := #StatusByte_Bit_0_7
...

So muss ich nur die Startadresse außen an dem FB angeben, oder versteh ich das falsch?
Der Baustein ist nicht von mir.
Dieser Baustein wurde auf einer 317F-3 CPU verwendet.

Die Pumpen werden über ProfiBus angesteuert.
 
Hallo,
würde dir auch DPRD_DAT und DPWR_DAT empfehlen, da kannst du auch symbolisch die HW-Aderesse/HW_Identifier (Systemkonstante) deiner Pumpe verwenden.
Und jeweils eine Struktur mit deinen In-/Output daten des FU´s erstellen die dann an DPRD_Dat und DPWR_DAT.

HW_Identifier.pngDPRD_DAT.png
 
Der Code ist in einem FB geschrieben und wird über einen FC im OB1 aufgerufen.
Ist bei den EA-Adressen "Automatische Aktualisierung" des Prozessabbildes eingestellt? Dann brauchst Du keinen Peripheriezugriff und kannst PEEK + POKE verwenden, wenn Du unbedingt "numeriertes Herumstochern" in den EA-Adressen brauchst.

Stelle die E/A-Zugriffe auf WORD- oder komplett DWORD-Zugriff um! Ich schätze, der originale AWL-Code ist so nicht korrekt und kann unerklärliche Fehler hervorrufen, weil er die Datenkonsistenz nicht beachtet, z.B. zumindest Solldrehzahl und Istdrehzahl müssen bei Peripheriezugriff zwingend als WORD verarbeitet werden und nicht als 2 einzelne BYTE.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Okay vielen Dank @Peda und @PN/DP.

Ich werde das erstmal mit "DPRD_DAT" / "DPWR_DAT" versuchen, dass scheind mir die schönste Lösung zu sein.

Das mit den 2 Bytes für die Drehzalen find ich auch komisch.
Zu mir hieß es nur, dass der Baustein so einwandfrei funktioniert.

FloJu
 
Ich würde die Strukturen (UDTs) direkt in die Variablentabelle legen und direkt dem E/A-Bereich arbeiten. Das ist aus meiner Sicht die übersichtlichste und schlankeste Lösung.
 
Zurück
Oben