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

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

Thema: Productdaten speichern

  1. #11
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Andy,
    du mußt dir einen Pointer bilden auf die Adresse, auf der dein Datensatz mit dem entsprechenden Index liegt und diesen dann an den SFC20 übergeben. Das funktioniert allerdings nicht automatisiert - du mußt also alles "zu Fuß" machen. Hierbei sollte dir die Anleitung von Volker schon hilfreich sein - zumal dort eigentlich auch Alles ziemlich detailiert beschrieben ist. Deshalb meine Frage von vorhin noch einmal : woran hängt es denn konkret ?

    Gruß
    LL

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

    Standard

    Hallo Andy,

    da Deine Typverwaltung ja ein UDT ist und natürlich heute so und morgen ganz anders ausschauen kann und außerdem irgendein DB sein kann, sollte das ganze flexibel aufgebaut sein.

    Dazu musst Du jetzt Deiner FCx den ersten Datensatz übergeben (Typverwaltung.typ[0]) damit Du weißt um welchen DB es sich handelt und wie lang der UDT ist.
    Den list Du als Anyzeiger ein und zerlegst in um an die Daten zu kommen.
    Außerdem übergibst Du die Int welchen Datensatz kopiert werden soll.
    Code:
    FUNCTION FC1 : VOID
    TITLE = BLOCK KOPIEREN
    VERSION : 1.0
     
    VAR_INPUT
    DATEN    : ANY ; // Typverwaltung Satz 0
    PROG_NR : INT ; //  Welcher Datensatz
    END_VAR
     
    VAR_TEMP
    QUELLE : ANY ;
    ZIEL     : ANY ;
    FEHLER : INT  ;
    DB_NR  : INT  ;
    ANZAHL: INT  ;
    OFFSET: INT  ;
    QUELL_ANF: DWORD ;
    ZIEL_ANF  : DWORD ;
    END_VAR
     
    BEGIN
    NETWORK
    TITEL =Anyzeiger zerlegen
     
     L       P##DATEN;
     LAR1 ;
     L     W [AR1, P#4.0]; // DB-Nummer
     T     # DB_NR ;
     
     L     W [AR1, P#2.0];
     T     #ANZAHL  ;       // Anzahl der Byte des UDT (flexibel ;))
     L     #PROG_NR ;       // Welcher Datensatz soll kopiert werden
     *I
      T    #OFFSET   ;      // Offset für Anfangsadresse
     
    // Quell und Ziel Adresse ermitteln
     L     D [AR1, P#6.0];
     L     DW#16#7FFFF;  // Bereichskennung ausblenden
     UD ;
     SRD 3   
     T    #ZIEL_ANF;      // Hier landet der Kopierte Bereich
     L    #OFFSET;
     +D ;
     T   #QUELL_ANF;    // Start Adresse zum kopieren
     
    NETWORK
    TITEL = Quellpointer zusammensetzen
     
       LAR1   P##QUELLE;    // Anfangsadresse ins AR1
       L        B#16#10;    // AWL Kennung für ANY
       T        LB [AR1, P#0.0];
     
       L        B#16#2 ;   // Bereichstype
       T        LB [AR1, P#1.0];
     
       L       #Anzahl ;         // Wurde im 1. NW ermittelt
       T       LW [AR1, P#2.0];  // Länge eintragen
     
       L       #DB_NR ;           // Wurde auch ermittelt
       T       LW [AR1, P#4.0];
     
       L       P#DBX 0.0;       // Pointer Format
       L       QUELL_ANF ;      // Wurde im 1.NW errechnet
       SLD 3;
       +D ;
       T      LD [AR1, P#6.0];  // Quelladresse in Any-Pointer
     
    NETWORK
    TITEL = Zielpointer zusammensetzen
     
    // Genau das gleiche wie Netzwerk 2 nur statt AR1 das AR2 nehmen 
    // und statt in 4. Letzter Zeile QUELL_ANF das ZIEL_ANF nehmen
     
    NETWORK
    CALL "BLKMOV" (
       SRCBLK   := #QUELLE,
       RET_VAL := #FEHLER,
       DSTBLK   := #ZIEL);
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  3. Folgender Benutzer sagt Danke zu Paule für den nützlichen Beitrag:

    Andy082 (30.10.2009)

  4. #13
    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

    Danke!

    Ich hoffe du hattest das Ganze bereits in der Schublade und musstest nicht extra für meinen Post hier zum Tippen anfangen.

    Hab die verwendete SPS+TP in der Arbeit liegen, werd aber einfach meine Gebäudesteuerung plattmachen und eines meiner Panelchen zum Spielen dran hängen. (ich hasse PLCSIM)

    Geb bescheid wie's aussieht...

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

  5. #14
    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

    @ Larry
    Ich hab bisher nicht mit Pointern gearbeitet, außer jenem, mit welchem ich mein Datum und meine Uhrzeit in einzelne Bytes zerlege.

    @Paule
    So, hab's denn nun doch gleich per Simulator ausprobiert....
    (Frau schläft bereits, und "Batman die Rückkehr" auf ATV fesselt mich nicht gerade)

    Hab nun alles entsprechend deinem Codeauszug in einen eigenen FC geschrieben und rufe diesen nun bei jedem Wechsel meiner Indexzahl auf.
    Nur werden meine hinterlegten Einstellungen nicht so geladen wie Sie es denn tun sollten.

    Da in deinem Bsp von einem Ziel- und einem Quell-Pointer gesprochen wird, bin ich mir nicht sicher, ob sich unsere beiden Vorstellungen kreuzen.

    Ich will bei jedem Wechsel meiner Indexzahl den entsprechenden DB in meinen GrundDB laden.

    Indexzahl: 1
    "Typverwaltung".Typ[1] in "Typverwaltung".Typ[0]

    Indexzahl: 2
    "Typverwaltung".Typ[2] in "Typverwaltung".Typ[0]

    usw.

    Somit sollte meine Quelle am SFC der erstellte "Quellpointer" sein,
    mein Ziel immer "Typverwaltung".Typ[0] - P#DB110.DBX100.0

    Hab dies bereits verändert, was leider keine Veränderung brachte.

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

  6. #15
    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
    Da in deinem Bsp von einem Ziel- und einem Quell-Pointer gesprochen wird, bin ich mir nicht sicher, ob sich unsere beiden Vorstellungen kreuzen.

    Ich will bei jedem Wechsel meiner Indexzahl den entsprechenden DB in meinen GrundDB laden.

    Somit sollte meine Quelle am SFC der erstellte "Quellpointer" sein,
    mein Ziel immer "Typverwaltung".Typ[0] - P#DB110.DBX100.0
    Hallo Andy,
    eigentlich sollten sich unsere Vorstellungen nicht kreuzen sondern in einer Linie laufen.

    Zitat Zitat von Andy082 Beitrag anzeigen
    Wird meine Indexzahl verändert, lade ich den zur Nummer meiner Indexzahl passenden UDT in den UDT[0].
    Ich ging bei Deinem Beitrag 3 davon aus, dass es sich um einen DB handelt. Sprich:
    Code:
    P# DB110.DBX  0.0 Byte 20 ==> Typverwaltung Soll
    P# DB110.DBX 20.0 Byte 20 ==> Typverwaltung.Rezept.[1]
    Darauf basiert mein Beispiel:
    Es wird die Typverwaltung Soll in die Bestandteile zerlegt daraus lässt sich der DB, die Zieladresse und die UDT Länge und somit der Offset für die Rezeptnummern ermitteln.

    Wenn Dein Ziel in einem anderen DB liegt, musst Du auch diesen noch übergeben.
    Brauchst Du dabei Unterstützung?
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

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

    Andy082 (31.10.2009)

  8. #16
    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
    Ich sage vorerst nein und nochmals ein großes Danke.

    Dass du aus der "Typverwaltung" Soll deine für den Pointer benötigten Daten herausziehst ist mir nun klar, denn woher solltest du denn sonst alle Attripute für den Pointer nehmen.

    Anhand deiner Angaben, sollte es mir nun möglich sein, meinen FC selbst so hinzubasteln, dass dieser entsprechend funktioniert.

    Andernfalls muss ich eben nochmals posten, bzw. gibts natürlich von meinerseite auch eine Rückmeldung mit Codeauszug, damit auch andere was von der Sache haben.


    Andy
    >> 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
  •