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

Ergebnis 1 bis 6 von 6

Thema: FC zu FB + Programmfrage

  1. #1
    Registriert seit
    20.02.2007
    Ort
    Dresden
    Beiträge
    109
    Danke
    17
    Erhielt 11 Danke für 10 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich hab ein Programm vor mir, bei dem für spätere Zwecke die FC Bausteine als FB umgeschrieben werden sollen. Im Grunde sollte das keine Probleme machen. Ich übertrage die NW des FC so wie sie sind in einen FB!? Oder gibt es noch eine schnellere Methode? Nur die Zugriffe auf den (dann festen) Datenbaustein sollten wahrscheinlich angepasst werden.

    Jetzt ist mir noch etwas unklar. Zu Beginn wird der Datenbereich #p geladen und dann auf eine Art temporären „Merker“ geschoben (#m). Ich möchte hier auf den angehängten Screenshot verweisen, um jetzt keinen Blödsinn zu erzählen. Ich verstehe leider den Vorgang nicht. Da erreichen zwei Monate SPS-Selbststudium bereits ihre Grenzen. Ich hoffe in dem Screenshot sind alle nötigen Informationen enthalten und ihr könnt mir da helfen.

    In den folgenden NWs wird nun mit dem m-Bereich gearbeitet (#m.open, #m.close, ...) und am Ende werden die Werte aus #m wieder mittels SFC20 auf #p zurückgeschoben.

    Welchen Sinn hat das und hängt das mit der Verwendung des FC zusammen?
    Sollte ich jetzt etwas daran ändern oder ist diese Vorgehensweise auch beim FB nötig/möglich?

    Danke
    Kniffo
    Angehängte Grafiken Angehängte Grafiken
    Zitieren Zitieren FC zu FB + Programmfrage  

  2. #2
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 183 Danke für 168 Beiträge

    Standard

    Hallo!

    Hier wird ein ANY Pointer gebildet!
    Da werden die Daten für den ANY Pointer ab der Adresse von Instance 10Bytes lang in den Bereich von p kopiert. (p wird als Anypointer Deklariert sein)
    Befindet sich Instance im INOUT Bereich?

    Mit der SFC 20 werden die Daten die mit dem ANY Pointer p Adressiert sind in den Bereich kopiert der mit den ANY Pointer m Adressiert ist.

    VORSICHT!
    Wenn du mit dem Adressregister 2 und Multiinstanzen arbeitest dann vorher die adresse zwischenspeicher und nach dem Stück Programmcode wieder in das Adressregister 2 zurückschreiben.

    godi
    Geändert von godi (23.05.2007 um 10:37 Uhr)

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

    Kniffo (23.05.2007)

  4. #3
    Avatar von Kniffo
    Kniffo ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    20.02.2007
    Ort
    Dresden
    Beiträge
    109
    Danke
    17
    Erhielt 11 Danke für 10 Beiträge

    Standard

    Ajo, so langsam verstehe ich.
    Zitat Zitat von godi Beitrag anzeigen
    Befindet sich Instance im INOUT Bereich?
    Ja tut es und dieser erscheint als Eingang am FC. Dort ist wiederum der Pointer P#DB1001.DBX0.0 angegeben.
    Den Bereicht lädt er dann also, arbeitet mit ihm und schreibt ihn zurück...alles klar.

    Liegt das jetzt an dem FC, das man mit dem Pointer arbeitet oder macht man das beim FB genauso?

    Zitat Zitat von godi Beitrag anzeigen
    VORSICHT!
    Wenn du mit dem Adressregister 2 und Multiinstanzen arbeitest dann vorher die adresse zwischenspeicher und nach dem Stück Programmcode wieder in das Adressregister 2 zurückschreiben.
    Wird gemacht, im NW 1 steht:
    Code:
          TAR1  #temp_AR1
          TAR2  #temp_AR2
    Gibt es noch eine einfache Erklärung, warum man das machen muss?

  5. #4
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 183 Danke für 168 Beiträge

    Standard

    Zitat Zitat von Kniffo Beitrag anzeigen
    Ajo, so langsam verstehe ich.


    Ja tut es und dieser erscheint als Eingang am FC. Dort ist wiederum der Pointer P#DB1001.DBX0.0 angegeben.
    Den Bereicht lädt er dann also, arbeitet mit ihm und schreibt ihn zurück...alles klar.
    Wenn der Pointer direkt (also mit am P#DB1001.DBX0.0) an INOUT übergeben wird dann könntest du das ganze auch weglassen und am SFC 20 gleich instance angeben.

    Zitat Zitat von Kniffo Beitrag anzeigen
    Liegt das jetzt an dem FC, das man mit dem Pointer arbeitet oder macht man das beim FB genauso?
    Normalerweise bildet man sich einen Pointer selbst wenn er sich während der laufzeit ändern soll.

    Zitat Zitat von Kniffo Beitrag anzeigen
    Wird gemacht, im NW 1 steht:
    Code:
          TAR1  #temp_AR1
          TAR2  #temp_AR2
    Gibt es noch eine einfache Erklärung, warum man das machen muss?
    Bei Multiinstanzen steht im Adressregister 2 das Offset des Bausteines drinnen. Also wenn ein FB in einem Deklarationsbereich von einem anderen FB deklariert wird dann bekommt die Variable eine Adresse. Diese steht dann im AR2 von deiner Multiinstanz. Das ist gut damit der Baustein weiß wo sich seine Variablen im DB befinden. Also die Adresse bildet sich bei ner Multiinstanz aus dem Offset vom AR2 + zusätzlich noch die Adresse der Variable aus der Deklaration.
    Kompliziert zu erklären!

    So jetzt genugt das nicht wenn du nur im ersten Netzwerk das machst.
    Du solltest bevor du das AR2 neu beschreibst es sichern und bevor du die erste Variable abfragst wieder zurückschreiben.

  6. #5
    Avatar von Kniffo
    Kniffo ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    20.02.2007
    Ort
    Dresden
    Beiträge
    109
    Danke
    17
    Erhielt 11 Danke für 10 Beiträge

    Standard

    Zitat Zitat von godi Beitrag anzeigen
    Wenn der Pointer direkt (also mit am P#DB1001.DBX0.0) an INOUT übergeben wird dann könntest du das ganze auch weglassen und am SFC 20 gleich instance angeben.
    Ich meinte damit nur (für mich), dass beim Aufruf des FC Instance (ist ja IN_OUT) mit am Eingang erscheint. Dort ist dann der Pointer angegeben.
    Im FC selbst wird dann nur noch P##instance geladen.

    Zitat Zitat von godi Beitrag anzeigen
    Normalerweise bildet man sich einen Pointer selbst wenn er sich während der laufzeit ändern soll.
    Ja soweit klar. Ich muss mir nur nochmal generell die Benutzung von Pointern zu Gemüte führen. Man benutzt sie in FBs und FCs gleichermaßen!?


    Wegen dem AR2 sichern...ist dies nicht (wie du auch sagst) nur bei Multiinstanzen, also FBs nötig? Ich habe ja hier aber einen FC vorliegen. Warum wurde da das AR gesichert? Ich möchte ihn ja jetzt erst in einen FB umschreiben.

  7. #6
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 183 Danke für 168 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Kniffo Beitrag anzeigen
    Ich meinte damit nur (für mich), dass beim Aufruf des FC Instance (ist ja IN_OUT) mit am Eingang erscheint. Dort ist dann der Pointer angegeben.
    Im FC selbst wird dann nur noch P##instance geladen.
    Damit meinte ich das du die Zusammensetzung des Pointers weglassen kannst und an der SFC 20 anstatt #p gleich #instance anschreiben kannst

    Zitat Zitat von Kniffo Beitrag anzeigen
    Ja soweit klar. Ich muss mir nur nochmal generell die Benutzung von Pointern zu Gemüte führen. Man benutzt sie in FBs und FCs gleichermaßen!?
    Ja benutzt man gleichermaßen

    Zitat Zitat von Kniffo Beitrag anzeigen
    Wegen dem AR2 sichern...ist dies nicht (wie du auch sagst) nur bei Multiinstanzen, also FBs nötig? Ich habe ja hier aber einen FC vorliegen. Warum wurde da das AR gesichert? Ich möchte ihn ja jetzt erst in einen FB umschreiben.
    Wenn man Bausteine hat die man öfters Verwendet bzw Bibliotheksfähig sein sollen dann sollte man das so machen damit in dem Baustein wo der Busteinaufruf erfolgt sich nichts in den Adressregistern ändert.

    godi

  8. Folgender Benutzer sagt Danke zu godi für den nützlichen Beitrag:

    Kniffo (24.05.2007)

Lesezeichen

Berechtigungen

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