TIA Indirekte Adressierung für ein Schieberegister

Kleidukos

Level-1
Beiträge
16
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Es ist das erste mal das ich etwas mit AWL gemacht habe. Ich sollte ein Schieberegister umsetzen, was soweit funktioniert hat. (Siehe code)
Jetzt soll ich das so umsetzen das es auf einer S7-300 laufen könnte.
Mir wurde das so erklärt das es nicht möglich ist auf einzelne Elemente in einem Array mit [...] zuzugreifen da dies nur aktuell von S7-1500 Unterstützt wird.

Leider verstehe ich nicht wie ich das umsetzen soll, ich hoffe Ihr könnt mir weiterhelfen.


Code:
      U     #Schieben
      FP    #KannSchieben
      =     #Schieb

      U     #Schieb
      SPBN  end
      L     #Anzahl
      +     -1
      T     #Index
      CLR

mov:  L     #Index
      +     1
      T     #IndexWeiter

      L     #Register[#Index]
      T     #Register[#IndexWeiter]

      L     #Index
      +     -1
      T     #Index

      L     #Index
      L     -1
      <>I
      =     #SchiebNochmal

      U     #SchiebNochmal
      SPB   mov

end:  NOP 0

      U     #Schieb
      L     #Einfügen
      T     #Register[0]
      CLR

      L     #Register[#Anzahl]
      T     #LetzterWert
      CLR



Hier noch ein Screenshot von meinen Variablen

1691496186335.png
 
Du könntest es in SCL programmieren. Da müsste man den Code mit fast keinen Unterschieden zwischen den Versionen für S7-1500 und S7-300 programmieren können.

War das eine Hausaufgabe oder Strafarbeit? ;) Oder wer kommt auf die Idee, neuen Code für S7-1500 in AWL zu entwickeln? :unsure:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit Hilfe des Adressregisters und eines Pointers kannst du das Problem in AWL lösen:
IndexWeiter würde entfallen da du mit Offset 2 arbeiten kannst.

Code:
      U     #Schieben
      FP    #KannSchieben
      =     #Schieb

      U     #Schieb
      SPBN  end
      L     #Anzahl
      +     -1
      T     #Index
      CLR
-----------------------------------------------------
mov: L     P##Register
      LAR1
      L     #Index
      SLW   3
      +AR1
      L     W [AR1,P#0.0]
      T     W [AR1,P#2.0]
-----------------------------------------------------
      L     #Index
      +     -1
      T     #Index

      L     #Index
      L     -1
      <>I
      =     #SchiebNochmal

      U     #SchiebNochmal
      SPB   mov

end:  NOP   0

      U     #Schieb
      L     #Einfuegen
      T     #Register[0]
      CLR
-----------------------------------------------------
      L     P##Register
      LAR1
      L     #Anzahl
      SLW   3
      +AR1
      L     W [AR1,P#0.0]
----------------------------------------------------
      T     #LetzterWert
      CLR
 
Hallo Kleidukos,
Mir wurde das so erklärt das es nicht möglich ist auf einzelne Elemente in einem Array mit [...] zuzugreifen da dies nur aktuell von S7-1500 Unterstützt wird.
Diese Aussage ist nur richtig, wenn du die 300er in AWL, FUP oder KOP programmierst, bei SCL geht das.
(Hinweis: Bei 1200 und 1500 geht's in allen Programmiersprachen.)

In SCL kannst du den Code, wie bei 1200/1500 aufbauen, also für ein Schieberegister empfiehlt sich eine FOR Schleife. Am besten legst du dir eine UDT mit deinen Stationsdaten (für eine Station) an, diese UDT verwendest du als Datentyp deiner Schiebdaten array[von..bis] of udt.
 
Du könntest es in SCL programmieren. Da müsste man den Code mit fast keinen Unterschieden zwischen den Versionen für S7-1500 und S7-300 programmieren können.

War das eine Hausaufgabe oder Strafarbeit? ;) Oder wer kommt auf die Idee, neuen Code für S7-1500 in AWL zu entwickeln? :unsure:
Weder noch, ich bin denen in meinem Lehrjahr voraus was FUP angeht, also soll ich AWL lernen und schwerere Aufgaben lösen damit die anderen Azubis etwas mehr Zeit haben
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Weder noch, ich bin denen in meinem Lehrjahr voraus was FUP angeht, also soll ich AWL lernen und schwerere Aufgaben lösen damit die anderen Azubis etwas mehr Zeit haben
FUP und auch KOP (böse Modus an - KOP ist diese Reihen und Parallelschaltungen von Kondensatoren - böse Modus aus) sind für logische Verknüpfungen ja super, aber vlt. könntest du deinem (eurem) Ausbilder vorschlagen eure Lerneinheiten nur rudimentär auf AWL (wird bei 1200 nicht mehr und bei 1500 nur wegen Kompatibilitäten unterstützt) zu legen und dafür mehr SCL zu lernen.
 
FUP und auch KOP (böse Modus an - KOP ist diese Reihen und Parallelschaltungen von Kondensatoren - böse Modus aus) sind für logische Verknüpfungen ja super, aber vlt. könntest du deinem (eurem) Ausbilder vorschlagen eure Lerneinheiten nur rudimentär auf AWL (wird bei 1200 nicht mehr und bei 1500 nur wegen Kompatibilitäten unterstützt) zu legen und dafür mehr SCL zu lernen.
Wir lernen eigentlich FUP, jedoch sind die momentanen Aufgaben, so blöd es sich anhört, zu einfach für mich. Das meinste in meinem Betrieb ist mit AWL programmiert, also ist es mehr Vorbereitung für mach der Ausbildung. Eigentlich sollen wir nur FUP lernen da wir damit unsere prüfung programmieren müssen soweit ich weiß.
 
Mit Hilfe des Adressregisters und eines Pointers kannst du das Problem in AWL lösen:
IndexWeiter würde entfallen da du mit Offset 2 arbeiten kannst.

Code:
      U     #Schieben
      FP    #KannSchieben
      =     #Schieb

      U     #Schieb
      SPBN  end
      L     #Anzahl
      +     -1
      T     #Index
      CLR
-----------------------------------------------------
mov: L     P##Register
      LAR1
      L     #Index
      SLW   3
      +AR1
      L     W [AR1,P#0.0]
      T     W [AR1,P#2.0]
-----------------------------------------------------
      L     #Index
      +     -1
      T     #Index

      L     #Index
      L     -1
      <>I
      =     #SchiebNochmal

      U     #SchiebNochmal
      SPB   mov

end:  NOP   0

      U     #Schieb
      L     #Einfuegen
      T     #Register[0]
      CLR
-----------------------------------------------------
      L     P##Register
      LAR1
      L     #Anzahl
      SLW   3
      +AR1
      L     W [AR1,P#0.0]
----------------------------------------------------
      T     #LetzterWert
      CLR
Danke für die Antwort, das werde ich gleich morgen testen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit Hilfe des Adressregisters und eines Pointers kannst du das Problem in AWL lösen:
IndexWeiter würde entfallen da du mit Offset 2 arbeiten kannst.

Code:
      U     #Schieben
      FP    #KannSchieben
      =     #Schieb

      U     #Schieb
      SPBN  end
      L     #Anzahl
      +     -1
      T     #Index
      CLR
-----------------------------------------------------
mov: L     P##Register
      LAR1
      L     #Index
      SLW   3
      +AR1
      L     W [AR1,P#0.0]
      T     W [AR1,P#2.0]
-----------------------------------------------------
      L     #Index
      +     -1
      T     #Index

      L     #Index
      L     -1
      <>I
      =     #SchiebNochmal

      U     #SchiebNochmal
      SPB   mov

end:  NOP   0

      U     #Schieb
      L     #Einfuegen
      T     #Register[0]
      CLR
-----------------------------------------------------
      L     P##Register
      LAR1
      L     #Anzahl
      SLW   3
      +AR1
      L     W [AR1,P#0.0]
----------------------------------------------------
      T     #LetzterWert
      CLR
1691558417295.png

Ich bekomme immer diesen Fehler angezeigt.
 
Ich hatte es in Step7 ausprobiert da hat es funktioniert. Schau mir mal gleich an was in TIA geht. Kann vielleicht an den optmierten DB von TIA liegen.
 
Zurück
Oben