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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14

Thema: Prozessvisualisierung: Daten in einem Datenbaustein sammeln

  1. #11
    Registriert seit
    03.04.2008
    Beiträge
    6.200
    Danke
    237
    Erhielt 815 Danke für 689 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Für die ganze Aktion wird wenn man es ordentlich macht überhaupt keine Indirekte oder Absolutadressierung benötigt, und auch kein Any-Gefrickel.

    Der Baustein der die Daten des Gerätes einsammelt, bekommt dazu einen Ausgang entweder als struct oder udt in dem die Daten liegen. In dem Datenbaustein wird ebenfalls ein identisch aufgebauter struct/udt angelegt, und der Sammelbaustein bekommt dieses als Parameter.
    Wenn du von "Hochsprachen"-Seite her kommst würdest du das doch genau so machen. Und nicht einer Funktion eine Adresse übergeben, und dann manuell irgendwelche Offsets daraufrechnen.
    Stimmt, man kann es gleich und auch richtig machen.
    Seit es Pointer in der PLC gibt denkt jeder man muss diese verwenden.
    Auf Ein- und Ausgänge mit einem Zeiger zugreifen war das Schönste und kann als Beispiel wie man es nicht machen soll, dienen.


    bike
    "Any fool can write code that a computer can understand.
    Good programmers write code that humans can understand."
    --Martin Fowler

  2. Folgender Benutzer sagt Danke zu bike für den nützlichen Beitrag:

    Reibekuchen (11.05.2014)

  3. #12
    Reibekuchen ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.05.2014
    Beiträge
    16
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Können wir dann also davon ausgehen, daß Du das Programm in AWL oder SCL für eine theoretische S7-300-CPU in Step7 V5.x schreibst und zum Test simulierst?
    Genau. Wobei die Vorgabe ist, dass das Programm in AWL realisiert werden soll.

    Ich habe jetzt den ganzen Nachmittag und Abend damit verbracht, mich über indirekte Adressierung, Pointer etc. zu informieren.
    Grundsätzlich bedeutet das doch einfach ausgedrückt, dass ich z.B. ein Datenwort in eine Adresse schreibe, die eine Variable enthält, oder?

    So richtig weitergekommen bin ich aber irgendwie noch nicht...

    Ich bin mir beispielsweise nicht sicher, ob der Datenbaustein, in welchem ich die Daten sammeln möchte, schon im Vorfeld erstellt wird, oder ob dies erst in der Laufzeit des Programms passiert - falls das überhaupt möglich ist.

    Zudem frage ich mich, in welcher Form ich die 'Daten des externen Gerätes' an den Funktionsbaustein übergebe. Dies soll laut Aufgabenstellung durch einen Parameter WERT des Funktionsbausteines geschehen. Um mehrere Werte aufzunehmen, muss ich doch für jeden Wert den FB neu aufrufen, oder?

    @ Thomas
    Lässt sich dieser Ansatz auch in AWL umsetzen?

    Sorry, falls ich blöde Fragen stelle, so langsam raucht mir der Schädel...

  4. #13
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.345
    Danke
    451
    Erhielt 691 Danke für 516 Beiträge

    Standard

    Zitat Zitat von Reibekuchen Beitrag anzeigen
    Ich bin mir beispielsweise nicht sicher, ob der Datenbaustein, in welchem ich die Daten sammeln möchte, schon im Vorfeld erstellt wird, oder ob dies erst in der Laufzeit des Programms passiert - falls das überhaupt möglich ist.
    Möglich wäre es schon aber warum solltest du das tun wollen. Du erstellst ganz einfach selbst einen DB der zum Beispiel ein Array von x-mal "WERT" enthält.

    Zitat Zitat von Reibekuchen Beitrag anzeigen
    Zudem frage ich mich, in welcher Form ich die 'Daten des externen Gerätes' an den Funktionsbaustein übergebe. Dies soll laut Aufgabenstellung durch einen Parameter WERT des Funktionsbausteines geschehen. Um mehrere Werte aufzunehmen, muss ich doch für jeden Wert den FB neu aufrufen, oder?
    Da die SPS zyklisch läuft, wird dein FB sowieso (sofern man ihn nicht durch logische Bedingungen überspringt) in jedem Zyklus aufgerufen.
    Deinen Messwert übergibst du in gewünschtem Format (Int/Real) an den FB. Zusätzlich wäre noch einen Art Trigger (Abtastsignal) gut, damit du dem FB sagen kannst: "Jetzt bitte speichern"

    Wenn der FB den Trigger bekommt, kopiert er die Zahl am Eingang "WERT" in die nächst Freie Stelle deines Arrays. Je nach dem wie dein Puffer beschaffen sein soll (FIFO, FILO, Ringpuffer etc.) lässt sich das über den ein oder anderen Weg bewerkstelligen. Wie meine Vorredner schon sagten mit indirekter Adressierung oder vielleicht auch irgendwas mit SFC20 Blockmove.
    Erzähl uns mal genauer wie deine Auszeichnung aussehen soll.

    Zitat Zitat von Reibekuchen Beitrag anzeigen
    @ Thomas
    Lässt sich dieser Ansatz auch in AWL umsetzen?
    JA.
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  5. Folgender Benutzer sagt Danke zu RONIN für den nützlichen Beitrag:

    Reibekuchen (11.05.2014)

  6. #14
    Registriert seit
    26.09.2013
    Beiträge
    20
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    so habe ich das ganze mal gelöst. Hier wird allerdings immer um 1 hochgezählt und wenn die Max Zahl an Datensätzen geschrieben wurde wird der erste wieder
    überschrieben. Den DB wo die Werte gespeichert werden sollen musst du vorher anlegen.

    Baustein: FC35 Gewichtswerte in DB speichern

    Netzwerk: 1 Datenbaustein indirekt aufschlagen
    L #DeBe //Nr. des DBs mit Gewichtswerten
    T #DBNr
    AUF DB [#DBNr]

    Netzwerk: 2 Ist_Zahl und Max_Zahl verwalten
    L DBB 0 //Max_Zahl an Gewichtswerten im DB
    L DBB 1 //Ist_Zahl gespeicherter Gewichtswerte
    + 1 //um 1..
    T DBB 1 //..erhöhen
    >=I //wenn Max_Zahl >= Ist_Zahl
    SPB weit //springen (neue Ist_Zahl im Akku1)
    L 1 //ansonsten
    T DBB 1 //Ist-_Zahl auf 1 setzen

    Netzwerk: 3 Adressberechnung und Ablage des Gewichts
    weit: L P#2.0 //Adressberechnung:
    *D //Ist_Zahl * P#2.0 = DBW-Adresse
    T #Zeiger //Adresse des DBWs, in das jetzt geschrieben wird
    L #Gewicht //aktuelles Gewicht
    T DBW [#Zeiger] //in DBW ablegen

    Gruss Dirk

  7. Folgender Benutzer sagt Danke zu dirkke für den nützlichen Beitrag:

    Reibekuchen (11.05.2014)

Ähnliche Themen

  1. Step 7 Daten per FTP in einem Datenbaustein ablegen
    Von Cleverly im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 17.01.2014, 10:26
  2. Daten sammeln im Programm
    Von Paul1987 im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 10.08.2009, 11:41
  3. Daten sammeln und schieben
    Von Forge_01 im Forum Programmierstrategien
    Antworten: 3
    Letzter Beitrag: 25.05.2008, 19:32
  4. Daten im Datenbaustein sortieren
    Von Golden Egg im Forum Stammtisch
    Antworten: 5
    Letzter Beitrag: 11.10.2006, 11:20
  5. wie lege ich daten in einem Datenbaustein mit arrays ab ?
    Von Tom100 im Forum Programmierstrategien
    Antworten: 7
    Letzter Beitrag: 03.06.2005, 09:03

Lesezeichen

Berechtigungen

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