Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 6 von 6

Thema: Any-Pointer über indirekte Adressierung in SCL auf einer S7-1500

  1. #1
    Registriert seit
    03.03.2015
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich bin gerade dabei mich in TIA einzuarbeiten und migriere gerade von S7-300 auf S7-1500. Ich habe auch bei Siemens eine Umsteigerschulung besucht, die aber nicht viel neues Wissen vermittelt hat.

    Die Migration in TIA war sehr schwierig, hat aber letztendlich funktioniert. Beim Tausch von S7-300 in eine S7-1500 konnte er einige Anweisungen nicht konvertieren.

    Ich habe in SCL über indirekte Adressierung einen Any-Pointer zugewiesen

    Code:
    #tany_CheckPosition:=WORD_TO_BLOCK_DB(#tw_DB_Number).DW(#tint_index);
    Die Variable tany_CheckPosition ist ein Any-Pointer, den ich über die indirekte Adressierung die Startadresse zuweise. Über ein AT-Konstrukt, habe ich dann die benötigte Länge angepasst.

    Bei der Migration wird dann der Classic-Code in Kommentaren gesetzt, und ein Verweis auf Peek and Poke gegeben. So wie ich die Befehle aber verstanden habe, werden dort nur die Werte ausgelesen (kein Zugriff auf die Adresse). Der Baustein kann so auch nicht kompiliert werden.

    Fragen hierzu:
    1. Ist es möglich diesen Code (bei nicht optimierten Bausteinen) irgendwie auf die S7-1500 umzusetzen?
    2. Ich verwende den Code für das Kopieren (BLKMOV) einer Struktur (zur Laufzeit bestimmt) auf eine Temp-Variable der gleichen Struktur, um im Baustein symbolisch adressieren zu können.
    Wie würde hierfür eine Alternative in TIA bei der S7-1500 aussehen?


    Schönen Gruß,

    Simon
    Zitieren Zitieren Any-Pointer über indirekte Adressierung in SCL auf einer S7-1500  

  2. #2
    Registriert seit
    20.01.2008
    Ort
    Österreich
    Beiträge
    349
    Danke
    91
    Erhielt 18 Danke für 15 Beiträge

    Standard

    Sieh dir in der Hilfe die befehle PEEK and POOK an das solte dir Weiterhelfen....
    ACHTUNG geht aber nur bei "NICHT OPTIMIERTEN" Datenbausteinen.....

  3. #3
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.476
    Danke
    1.140
    Erhielt 1.238 Danke für 971 Beiträge

    Standard

    Schau dir doch mal bei der 1500er die Möglichkeiten von Array-DBs an.
    Evtl kannst du dir so einen Konstrukt sparen ...

  4. #4
    Simon_Fa ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    03.03.2015
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Rauchegger Beitrag anzeigen
    Sieh dir in der Hilfe die befehle PEEK and POOK an das solte dir Weiterhelfen....
    ACHTUNG geht aber nur bei "NICHT OPTIMIERTEN" Datenbausteinen.....
    Wie ich oben schon geschrieben habe, wird damit anscheinend nur der Wert an der Adresse ausgegeben, ich benötige aber die Adresse selbst.
    Die folgende Anweisung wird vom Compiler als fehlerhaft gekennzeichnet:
    Code:
    #tany_CheckPosition:=PEEK_WORD(area:=16#84,dbNumber:=WORD_TO_UINT(#tw_DB_Number),byteOffset:=#tint_index);

    Zitat Zitat von Blockmove Beitrag anzeigen
    Schau dir doch mal bei der 1500er die Möglichkeiten von Array-DBs an.
    Evtl kannst du dir so einen Konstrukt sparen ...
    Darüber habe ich auch schon nachgedacht. Grundsätzlich gehe ich gerade mein Programm durch und versuche Stellen für die Optimierung zu finden und neue Wege zu probieren.
    Trotzdem würde ich gerne Wissen, ob diese Funktion noch irgendwie möglich ist, da ich sie für verschiedene Funktionen verwendet habe.

    Bei den Arrays finde ich es sehr schade, dass ich diese nicht mit einem Symbol identifizieren kann wie z.B. MyArray[rot].var1. Dies würde an vielen Stellen den Programmcode vereinfachen und ich würde wohl an vielen Stellen umsteigen.
    Ich habe mir schon überlegt, ob ich versuche, dass über Anwenderkonstanten zu lösen: rot =1, blau = 2 etc. Nur müsste ich das dann für jedes Array separat machen und die Deklaration befindet sich dann an einer anderen Stelle als das Array selbst.

  5. #5
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.476
    Danke
    1.140
    Erhielt 1.238 Danke für 971 Beiträge

    Standard

    Persönlich nutze ich sehr gerne UDTs in Array.

  6. #6
    Simon_Fa ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    03.03.2015
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Habe jetzt mein Programm umgestellt und verwende jetzt an vielen Stellen Arrays of UDTs statt viele UDTs hintereinander im DB wie bisher.

    Mein Problem ist jetzt, dass es mir nicht mehr möglich ist Funktionen mit variabler Länge von Arrays aufzurufen. Ich bin mir eigentlich sicher, dass es nicht geht, aber vielleicht hat ja noch jemand eine Idee.

    An einer anderen Stelle im Programm habe ich es schon mal so gelöst, dass ich in der Funktion ein temporäres Array of UDT erstellt habe. Als InOut habe ich dann einen Variant verwendet. In der Funktion überprüfe ich dann, ob der Variant vom richtigen Typ ist und kopiere mittels VariantGet in das temporäre Array.

    In dieser Funktion ist das Array aber vom Typ Int und nicht besonders groß und ich muss nur lesend darauf zugreifen.

    Jetzt versuche ich etwas ähnliches, allerdings ist der UDT etwa 200 Byte groß und das Array besteht aus bis zu 100 Elementen. Ich will aber nur einen Wert vom UDT für alle Elemente schreiben. Mit einem Temp-Array, würde die Kopiererei zu viel Zeit benötigten.

    Als Notlösung überlege ich jetzt, die Arrays an den verschiedenen Stellen alle auf den Maximalwert zu setzen, was aber natürlich viel unnötigen Speicherplatz verbraucht.

    Hat irgendjemand noch eine Idee?

    Schönen Gruß,
    Simon

Ähnliche Themen

  1. Indirekte Adressierung Pointer berechnen
    Von Supermario73 im Forum Programmierstrategien
    Antworten: 4
    Letzter Beitrag: 07.02.2014, 13:58
  2. Indirekte Adressierung / Pointer ???
    Von max1de im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 20.02.2012, 18:29
  3. Indirekte Adressierung über einen ANY Pointer
    Von sventek im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 11.12.2009, 06:33
  4. cpu stop indirekte adressierung pointer
    Von falk.jaeger im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 23.02.2009, 07:22
  5. indirekte Adressierung und Pointer ??????????????
    Von Mathias W. im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 13.10.2003, 20:21

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •