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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: Productdaten speichern

  1. #1
    Registriert seit
    14.05.2007
    Ort
    M nähe Sbg in AUT
    Beiträge
    159
    Danke
    35
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Abend.

    Bin dabei von der S7-200 & TP und meinen Nachbesserungen an einigen 300er-Programmen dazu überzugehen, mir mein eigenes 300er-Universalprogramm zu erstellen.

    Eine ausgeklügelte Schrittkettenverwaltung und einen FB für schier alle Automationsabläufe habe ich mir bereits erstellt.

    Was für mich nun interessant wäre, ist ein universelles Programm zum Speichern von Einstellungen, wie zB Farbe des Produkts, entsprechende Codierung, etc.

    Natürlich könnte man das Ganze nun in einen/zwei/drei.... DB(s) hinterlegen und sagen, wenn ich zB Produkt 1 lade, dann kopiere ich DB1 in einen "Soll-DB", lade ich Produkt2, dann kopiere ich DB2... usw.
    Wäre wohl ein gangbarer Weg, wie ich meine, aber keine schöne Lösung, vor allem wenn es mehrere Produkte werden, benötige ich auch mehrere DBs.

    Hab mir nun das Programm eines Bekannten unter die Lupe genommen und entdeckt, dass dieser einen GlobalenTypDB verwendet, in welchem er einen UDT und in diesem dann einzelne UDTs aufgerufen werden.

    Nach dem Laden eines Produktes schreibt er die aktuellen Einstellungen wieder in einen neuen DB, in welchem die selben UDTs wie oben aufgerufen werden.

    Zum Handling wird hier ein wohl selbst zusammengebastelter SCL-Baustein verwendet, welchen ich, da nur wenig Ahnung von SCL, gegen einen in AWL ersetzen will.

    Was mir hier nun überhaupt nicht geläufig ist, ist das Handling der einzelnen UDT's.
    Ich will nicht, dass mir hier nun jemand mein Programm Stück-für-Stück vorkaut, sondern ledigtlich erklärt, was hier scheinbar mit den UDTs passiert. Denn egal, welchen Wert ich in einem der UDT's ergänze, dieser wird automatisch in alle Produktstände (bis zu 30!) übertragen und kann beliebig eingestellt/verändert werden, was für mich gerade zu ideal wäre.

    Eventuell nimmt sich ja jemand etwas Zeit für mein Problem.

    Danke!

    Andy
    Angehängte Grafiken Angehängte Grafiken
    >> Gefährlich wird es für Andere erst dann, wenn die Dummen fleißig werden! <<
    Zitieren Zitieren Productdaten speichern  

  2. #2
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von Andy082 Beitrag anzeigen
    Was mir hier nun überhaupt nicht geläufig ist, ist das Handling der einzelnen UDT's.
    Ich will nicht, dass mir hier nun jemand mein Programm Stück-für-Stück vorkaut, sondern ledigtlich erklärt, was hier scheinbar mit den UDTs passiert. Denn egal, welchen Wert ich in einem der UDT's ergänze, dieser wird automatisch in alle Produktstände (bis zu 30!) übertragen und kann beliebig eingestellt/verändert werden, was für mich gerade zu ideal wäre.
    Hallo Andy,

    der UDT ist eigentlich nur ein Muster (Vorlage).
    Wenn Du den UDT in den DB einfügst, ändert der DB seine Struktur genau nach diesem Muster.
    Und wenn Du die Vorlage änderst, ändert sich auch das Ergebnis, sprich der DB. Das ist der Vorteil, ich brauche die Vorlage nur einmal schreiben und überall wo sie eingefügt wird ändert sich das Ergebnis.
    Ich hoffe das war einigermaßen verständlich.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  3. #3
    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,
    eigentlich hat Paule schon das Wesentliche gesagt ...
    Vielleicht noch Eines :

    Ein UDT ist eine Anwender-definierte Struktur. Dies eignet sich besonders dann, wenn diese Struktur öfter an unterschiedlichen Punkten im Programm Anwendung findet. Du kannst die in einem DB als Variablen-Typ einfügen oder aber auch dazu benutzen um von einem Baustein an den Anderen Daten zu übergeben, die den gleichen Aufbau haben und die du eben nicht Byte für Byte (oder Wort für Wort) einzeln übergeben möchtest.
    Das macht natürlich besonders unter SCL Sinn ... deshalb gibt es da wohl auch diesen "Hantierungs-Baustein" ...

    Zu beachten ist vielleicht noch, das UDT's, obwohl flexibel anzulegen, aufgrund des Daten-Handlings der SPS'en letztlich nicht wirklich flexibel sind. Veränderst du deine Struktur, so verändern sich in deinem Programm möglicherweise ein ganzer Haufen an Speicher-Adressen. Das kann die Step7-Software bei symbolischer Adressierung zwar kompensieren - das gilt dann aber nur für das Nachhalten der "echten" Speicher-Adressen. Daten-Inhalte, die in den Speicherstellen ggf. schon drin sind und erhalten werden sollen sind dann ggf. falsch zugeordnet.

    Das Thema ist auf jeden Fall etwas, mit dem man "ein wenig" herum-experimentieren sollte ...

    Gruß
    LL

  4. #4
    Avatar von Andy082
    Andy082 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.05.2007
    Ort
    M nähe Sbg in AUT
    Beiträge
    159
    Danke
    35
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo....

    ....nach einem wohl leicht aufreibenden Tag. *in die Stammtisch-Rubrik rüber schau*

    Also was ich euren beiden Aussagen entnehmen kann ist, dass ein UDB quasi nur die Struktur eines oder mehrerer DBs bildet.
    So weit so gut.... ist für mich alles verständlich.
    Auch, dass sich einzelne Daten verschieben, sollte ich den Inhalt ändern ist klar. Worum es mir in Punkto "universell" geht ist, dass ich mir eben nur einmal die Arbeit antun will, sowas zu schreiben und dannach nur mehr meinen DB bzw. meine einzelnen UDBs meinen Wünschen anpasse.

    Was nun mein "Projekt" betrifft, habe ich das Ganze mal wie folgt durchgekaut und versucht auf den Punkt zu bringen......

    Grundlegend Definiere ich meinen DB mit einem array[0..64] und hänge dem Ganzen meinen GlobalTypUDT dran.
    Somit erhalte ich 65x die Struktur meines UDT.

    An meinem Panel gibt es zwei Tasten, welche einen Zähler pro Betätigung um 1 nach oben oder nach unten zählen.
    Wird meine Indexzahl verändert, lade ich den zur Nummer meiner Indexzahl passenden UDT in den UDT[0].
    Verändere ich etwas ohne zu speichern, bleibt der Inhalt unberührt, betätige ich jedoch am Panel mein Save, lege ich rückwirkend meine Einstellungen des UDT[0] in jenen der gewählten Indexzahl zurück.

    Das Ganze funktioniert soweit so gut, aber wenn man sich den Baustein ansieht, ist zu erkennen, dass das Lesen und Schreiben der Daten mit "universell" noch nichts zu tun hat.

    Kennt jemand nen' Möglichkeit das in AWL so umzusetzen, dass die Funktion eher universeller abläuft?

    Code:
      
          L     4
          L     #IN_OUT.TypIndex
          ==I   
          U     #temp.loadTyp
          SPBN  d004
          CALL  "BLKMOV"
             SRCBLK :="Typverwaltung".Typ[4]
             RET_VAL:=#tempInt
             DSTBLK :="Typverwaltung".Typ[0]
          R     #temp.loadTyp
    d004: SET
    ....für jeden Produkttyp zu schreiben will ich mir sparen.
    Sieht so, wenn auch funktionell ok, nicht sauber aus.


    mfg,
    Andy



    P.S.:
    Im Anhang meine Bausteine als Quelle exportiert.
    Angehängte Dateien Angehängte Dateien
    >> Gefährlich wird es für Andere erst dann, wenn die Dummen fleißig werden! <<

  5. #5
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von Andy082 Beitrag anzeigen
    Kennt jemand nen' Möglichkeit das in AWL so umzusetzen, dass die Funktion eher universeller abläuft?
    Ja Andy,

    das geht am besten wenn Du Dir Quelle und Ziel für den SCF20 als Pointer zusammenstellst.

    Brauchst Du dabei Hilfe?
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  6. #6
    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 Andy,
    ich hätte dir für AWL jetzt ziemlich genau die Blockmove-Geschichte vorgeschlagen wie in deinem Code-Schnipsel. Wenn du das universeller haben willst, so bleibt dir (bei AWL) nichts anderes übrig als aus der Datenquelle einen ANY-Pointer zu bauen und den an den SFC20 zu übergeben.
    Ich will dir hier jetzt nicht SCL verkaufen, aber dort könntest du im Script wirklich genau das programmieren :
    Code:
    Typverwaltung.Typ(0) := Typverwaltung.Typ(meinIndex) ;
    Gruß
    LL

  7. #7
    Avatar von Andy082
    Andy082 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.05.2007
    Ort
    M nähe Sbg in AUT
    Beiträge
    159
    Danke
    35
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Ja, Hilfe nehme ich immer gerne in Anspruch.....
    Vorallem wenn es sich um Pointer handelt.

    Hier bin ich mir nie 100%ig sicher, sollte diese Lücke mal auffüllen.

    Was die Quellen des SFC20 betrifft, so verwende ich hier bereits Pointer.

    - siehe Bausteine oder *jpg.


    Wie sollte ich diesen zusammensetzen, damit er, je nach Indexzahl, auf ein anderes array verweißt?


    mfg,
    Andreas
    Angehängte Grafiken Angehängte Grafiken
    >> Gefährlich wird es für Andere erst dann, wenn die Dummen fleißig werden! <<

  8. #8
    Avatar von Andy082
    Andy082 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.05.2007
    Ort
    M nähe Sbg in AUT
    Beiträge
    159
    Danke
    35
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hm, ich denke anhand dieses Posts kann ich mir meine Frage nun selbst beantworten......

    http://www.sps-forum.de/showthread.p...hlight=Pointer

    Zumindest hoffe ich das nun mal....



    Edit:
    .....oder auch nicht.

    http://sps-forum.net/showthread.php?t=12923
    Auch die Erklärungen von Volker machen für mich die Thematik Pointer nicht einfach zu verstehen.
    Geändert von Andy082 (29.10.2009 um 22:26 Uhr)
    >> Gefährlich wird es für Andere erst dann, wenn die Dummen fleißig werden! <<

  9. #9
    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

    ... wo hängt es denn ?

  10. #10
    Avatar von Andy082
    Andy082 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.05.2007
    Ort
    M nähe Sbg in AUT
    Beiträge
    159
    Danke
    35
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Das ich grundlegend keine Ahnung habe, wie ich hier meinen Pointer gestalten muss.....

    .......kleine Hilfe, Andeutung, etc?


    mfg
    >> Gefährlich wird es für Andere erst dann, wenn die Dummen fleißig werden! <<

Ähnliche Themen

  1. DB als .xls Speichern
    Von Deep Blue im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 15.12.2009, 12:44
  2. Einstellungen speichern
    Von eYe im Forum HMI
    Antworten: 2
    Letzter Beitrag: 25.02.2009, 21:28
  3. Logfiles speichern
    Von Roos im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 23.01.2009, 19:22
  4. auf MMC speichern
    Von slk230-power im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 01.10.2007, 21:29
  5. Speichern in 312 IFM
    Von waldy im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 01.07.2004, 20:59

Lesezeichen

Berechtigungen

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