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

Ergebnis 1 bis 6 von 6

Thema: Indirekter zugriff auf DB's (SCL)

  1. #1
    Registriert seit
    11.12.2008
    Beiträge
    226
    Danke
    92
    Erhielt 2 Danke für 2 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Indirekter Zugriff auf unterschiedliche DB`s .


    Habe mehrere DBs (1..10) angelegt welche die gleiche Struktur aufweisen (siehe Abbildung).
    Jetzt möchte via HMI tasten zwischen den verschiedenen Datenbauasteinen umschalten.
    Also Programm 1 (DB250) bis 10 (DB260).
    Und innerhalb dieser Programme zwischen 20 Datensätzen blättern (Array of UDT).
    Die Daten werden durch den Bediener eingepflegt.


    Möchte das Ganze in SCL umsetzen!

    Wie wird die DB Nummer ermittelt?
    wie kann ich auf die Bereiche in den DB zugreifen?

    Bild: DB inhalt
    Unbenannt.jpg




    Danke in voraus!
    Zitieren Zitieren Indirekter zugriff auf DB's (SCL)  

  2. #2
    zloyduh ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    11.12.2008
    Beiträge
    226
    Danke
    92
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Habe mir folgendes überlegt um z.B. den Programm-Namen (STRING) zu speichern, funktioniert aber nicht.

    Wie geht man da prinzipiell vor? habe leider noch keine Erfahrung in solchen Sachen machen können!



    Gibt es einen anderen Weg?



    // PROGRAMM SCROLLEN
    // +1
    IF #i_Programm < #ANZ_PROG THEN
    IF #PROG_PLUS AND NOT #FL1 THEN
    #i_Programm:= #i_Programm+1;
    END_IF;
    END_IF;
    #FL1:= #PROG_PLUS;
    // -1
    IF #i_Programm > 1 THEN
    IF #PROG_MINUS AND NOT #FL2 THEN
    #i_Programm:= #i_Programm-1;
    END_IF;
    END_IF;
    #FL2:= #PROG_PLUS;

    // DATENSATZ SCROLLEN
    // +1
    IF #i_Datensatz < #ANZ_DAT THEN
    IF #DAT_PLUS AND NOT #FL3 THEN
    #i_Datensatz:= #i_Datensatz+1;
    END_IF;
    END_IF;
    #FL3:= #DAT_PLUS;
    // -1
    IF #i_Datensatz > 1 THEN
    IF #DAT_MINUS AND NOT #FL4 THEN
    #i_Datensatz:= #i_Datensatz-1;
    END_IF;
    END_IF;
    #FL4:= #DAT_MINUS;


    // PROGRAMM SPEICHERN
    IF #PROG_SPEICHERN AND NOT #FL5 THEN
    WORD_TO_BLOCK_DB(INT_TO_WORD(#DB_PROGRAMM+#i_Programm)).DB[0]:= #PROG_NAME;
    END_IF;
    #FL5:=#PROG_SPEICHERN;
    ...


    bild.JPG
    Geändert von zloyduh (02.05.2012 um 17:53 Uhr)

  3. #3
    Registriert seit
    19.06.2005
    Ort
    in Bayern ganz oben
    Beiträge
    1.360
    Danke
    188
    Erhielt 372 Danke für 290 Beiträge

    Standard

    Hi,

    nehme doch einfach den SFC20 BLOCK MOVE den ANY-Zeiger setzt du entsprechend auf deinen DB und Datensatz und kopierst den in den STAT Bereich oder sonst wo hin.

    Gruss Daniel
    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

    OSCAT.lib Step 7

    Open Source Community for Automation Technolgy

    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

  4. #4
    Registriert seit
    19.06.2005
    Ort
    in Bayern ganz oben
    Beiträge
    1.360
    Danke
    188
    Erhielt 372 Danke für 290 Beiträge

    Standard

    Ein Beispiel dazu findest Du z.B. hier

    http://support.automation.siemens.com/WW/view/de/21946854

    Gruss Daniel
    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

    OSCAT.lib Step 7

    Open Source Community for Automation Technolgy

    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

  5. #5
    Registriert seit
    13.09.2010
    Beiträge
    2.292
    Danke
    178
    Erhielt 375 Danke für 355 Beiträge

    Standard

    Daniel hat ja schon eine elegante Lösung aufgezeigt

    Deine Anwendung klingt nach Rezepturdaten-Handling, vielleicht solltest du dir diese mal anschauen !
    Die SuFu hier im Forum bietet dir da auch einiges
    kind regards
    SoftMachine

  6. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.708
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ... oder wenn du bei deiner Lösung bleiben willst :
    SCL kann von sich aus nur mit den Elementar-Typen bei dieser Form des Zugriffs arbeiten - also Bit, Byte, Word, DWord.
    Wenn du einen String übertragen willst, so solltest du den dann als Array_of_Byte sehen und auch so behandeln - also Byte für Byte übertragen.

    Gruß
    Larry

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 23.01.2012, 17:06
  2. Indirekter Zugriff auf DB und DB-Inhalt
    Von KingShango im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 27.11.2007, 20:09
  3. Indirekter Zugriff auf Lokaldaten des Vorgänger
    Von Senator42 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 24.03.2007, 14:17
  4. SCL - Indirekter Zugriff auf DB/AR1,2
    Von Floh im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 07.06.2006, 10:32
  5. Antworten: 0
    Letzter Beitrag: 07.12.2004, 15:23

Lesezeichen

Berechtigungen

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