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

Ergebnis 1 bis 9 von 9

Thema: Pointer (kein ANY) in SCL FC verwenden

  1. #1
    Registriert seit
    30.03.2015
    Beiträge
    7
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guten Abend Zusammen,

    Ich bin dabei einen Baustein zu entwerfen der eine Überwachungsfunktion erfüllt und deshalb immer wieder aufgerufen werden soll.
    Geschrieben werden soll dieser, laut Auftraggeber in SCL.

    Die Daten für diesen FC (und den jeweiligen aufruf) liegen in dem jeweiligen Daten-DB von den anderen FCs / FBs.

    Auf diesen Datenbereich (ca 10 Bytes des Typ BOOL) würde ich gerne über einen Pointer zugreifen.

    Jetzt würde ich nur gerne wissen, wie ich diesen Pointer in meinem FC verarbeiten / verwenden muss um die einzelnen Bits aus diesem Datenbereich in dem Überwachungsprogramm verarbeiten zu können.


    mfg

    Mark
    Zitieren Zitieren Pointer (kein ANY) in SCL FC verwenden  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.192
    Danke
    925
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Hmm, Deine Aufgabe klingt so, als ob sie auch völlig easy ganz ohne Pointer lösbar wäre. Warum soll es so umständlich gelöst werden?
    Zweitens geht modernes Programmdesign zu vollsymbolischen Lösungen ohne ineffiziente und undurchsichtige Pointerei. Wozu dann noch so einen Dinosaurier-Baustein entwickeln, der später nicht auf moderne CPUs konvertiert werden kann?
    Und drittens wäre noch zu klären, ob Deine Ziel-CPU und die Step7-Version solche indirekte Adressierung überhaupt zulässt bzw. wie die genau realisierbar wäre.
    Vielleicht gibst Du uns noch ein paar mehr Informationen?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #3
    serverfreak95 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    30.03.2015
    Beiträge
    7
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ja, eigentlich hast du recht. Nur ist so, dass es einen so ähnlichen Baustein mit diesem Aufbau schon in AWL gibt. Dieser soll nun für das neue Projekt zum einen in SCL geschrieben werden und zum anderen die Funktion um ein zwei Sachen erweitert werden. Der Baustein soll in SCL sein, weil auch der Rest des Programms in SCL geschrieben werden soll.

    Die Vorgabe mit dem Aufbau mit Pointer kommt vom Auftraggeber, da die ihren Standard behalten wollen, wie auch in den anderen Projekten.

    Die Daten die in den Bereich des Pointers geschrieben werden und vom dem FC bearbeitet werden sollen, werden auch noch an anderen Stellen abgefragt.

    Wir arbeiten mit einer CPU 319F und Step 7 V13

    In dem AWL FC gibt es die Zeile : S DBX [AR1,P#8.0] so ähnlich würde ich es auch gerne in SCL machen bzw. halt so wie es möglich ist.

    Mark

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard

    Hallo,
    jetzt haben wir da natürlich ein "kleines Problem".
    Erstmal kann SCL mit Pointer und eigentlich auch mit ANY nicht so schrecklich viel anfangen. Einen ANY kann man natürlich mit AT (zumindestens bei S7-Classic) noch auflösen um daraus eine indirekte Adressierung zu bilden - bei einem Pointer bekämst du ja bestenfalls nur eine Start-Adresse - was hättest du davon ? Du müßtest jetzt ja nun davon ausgehen, dass die übergebene Adresse sinnvoll zu deinem Baustein passt und gnadenlos den Speicher dahinter einlesen. Für so etwas wäre dann eine Struktur (UDT) oder ein Array eigentlich der bessere Ansatz.

    Was soll denn da überhaupt so ganz genau passieren ?

    Gruß
    Larry

  5. #5
    serverfreak95 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    30.03.2015
    Beiträge
    7
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Also folgendes soll geschehen bzw. ist bisher mit dem AWL Baustein geschehen:

    Der Baustein ist dafür da die Bewegungs- und Überschneidungszeiten von Zylindern zu Überwachen. Die Daten werden in einem UDT abgelegt. Der UDT-Bereich wird über einen DB aufgerufen und der Pointer zeigt dann immer auf den Beginn des jeweiligen Bereiches. Die Daten aus dem UDT werden dann noch an nen paar anderen Stellen abgefragt. Unter anderem auch für das HMI. Das ganze ist ein Standard den der Auftraggeber auch für alle restlichen Anlagen verwendet hat.
    Bislang ist der Baustein halt nur in AWL geschrieben und soll jetzt noch um ein paar Funktionen erweitert werden und dann halt in SCL geschrieben sein.

    Oder gibt es vielleicht eine andere möglichkeit wie ich einem FC einen Speicherbereich in einem DB / UDT bei dem Aufruf zuweisen kann?

    Mark


    Aufruf des AWL-FC mit beschaltung:

    FC_Beweg.jpg

  6. #6
    Registriert seit
    29.03.2004
    Beiträge
    5.739
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard

    Wenn die Daten in einer UDT vorliegen, wäre es sinnvoll diese UDT auch als Parameter dem Baustein zu übergeben.
    Dann lassen sich auch Daten an der UDT verändern, und der Baustein zur Auswertung funktioniert später immer noch (wenn er dann auch neu übersetzt wurde).

  7. #7
    serverfreak95 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    30.03.2015
    Beiträge
    7
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ja das klingt auch nach ner guten Idee.

    Wie müss ich das denn dann in meinem scl fc anwenden und wie kann ich auf die einzelnen Bits in dem UDT zugreifen? Wenn ich den FC dann aufrufe, wie gebe den UDT an den Eingang weiter?

  8. #8
    Registriert seit
    29.03.2004
    Beiträge
    5.739
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard

    Wahrscheinlich genauso wie du es jetzt auch hast.

    Mal angenommen dein "DB_TRA_L1".Hubeinheit.Ueberwachung ist vom Typ UDT_Antrieb. Dann kannst du bei deinem FC einen Parameter z.B "Antriebsdaten" vom Typ UDT_Antrieb anlegen, und dann wie vor die Daten mit dem Symbol übergeben. Im Baustein kannst du dann auch mit den Symbolen des UDT arbeiten (falls du das noch nicht gemacht hast). Die Variablentypen beim AUfruf müssen dann aber zusammenpassen, das überprüft der Compiler. D.h. du kannst dann keine Daten von Typ z.B. UDT_Ventil übergeben wie das bei einem unspezifizierten Pointer möglich gewesen wäre.
    Die Daten werden bei Typ UDT auch als Zeiger übergeben, also kann sich der Auftraggeber eigentlich nicht beschweren

  9. #9
    serverfreak95 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    30.03.2015
    Beiträge
    7
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wenn ich jetzt meinen SCL Baustein habe, erstelle bei dem als Input ne Variable typ UDT. Wie muss ich dann weiter verfahren um im SCL Baustein die einzelnen Bits aus meinem UDT bearbeiten zu können?
    Ich habe bis mit Pointern und UDTs recht wenig gearbeitet. Hat vielleicht einer mal nen Beipsiel?

Ähnliche Themen

  1. Step 7 SCL Pointer
    Von Sickone4 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 03.06.2014, 16:27
  2. TIA DB_ANY in SCL verwenden
    Von joru_sps im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 03.12.2013, 08:16
  3. Any-Pointer ohne SFC20 verwenden
    Von RONIN im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 21.10.2009, 23:50
  4. Pointer in SCL (kein any)
    Von jck0815 im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 07.01.2009, 21:10
  5. Verwenden der Adressregister in SCL
    Von Zappel im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 31.12.2003, 13:03

Lesezeichen

Berechtigungen

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