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

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

Thema: DB als Speicherziel eines eigenen FB`s deklarieren

  1. #1
    Registriert seit
    10.07.2008
    Beiträge
    47
    Danke
    19
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe folgendes Problem.

    Ich habe einen FB geschrieben der ein Eingangsignal verarbeitet und mehrere Werte als Doppelwert herausgibt.
    Der FB hat natürlich seinen eigenen DB (Instanz).
    Ich möchte nun aber beim Aufruf des FB´s, das der Nutzer dieses FB sich aussuchen kann in welchen DB er die Ausgangdaten ablegen kann (da ich ja im Vorfeld nicht weiß in welchem Projekt welcher DB noch frei ist.)

    z.B. Der Nutzer xy, ruft den Baustein auf und muss dann als Ausgangsvariable einen DB angeben aus dem er dann später die Nutzdaten ziehen kann.


    Frage ist nun wie deklariere ich diesen in meinem FB, als In, Out oder In/Out. Was für ein Format muss ich nutzen (Any ...?) und wie deklariere ich den DB dann in meinem Programm z.B mov doppelwort nach DB????.DBD???

    Ich hoffe ich konnte mein Problem plausibel dalegen und hoffe auf eure Hilfe
    Zitieren Zitieren DB als Speicherziel eines eigenen FB`s deklarieren  

  2. #2
    Registriert seit
    02.08.2006
    Beiträge
    166
    Danke
    11
    Erhielt 10 Danke für 9 Beiträge

    Standard

    hmm.. verstehe ich nicht so ganz...

    also du hast einen FB geschrieben...
    wenn du in diesem FB Variablen nutzt die du unter "STAT" angelegt hast, werden diese in dem Instanz DB generiert.
    Wenn du den FB aufrufst kann du ja aussuchen wie der DB zum FB heißen soll.

    oder meinst du das du interne "Ergebnisse", aussen zur Verfügung stellen willst?

    hier mal ein Bild:


    Oben bei Schnittstellen legst du deine Ein/Ausgänge fest die du im FB benutzen möchtest und beim Aufruf des FB's von aussen beschreiben kannst.
    Temp sind temporäre Variablen (bei jedem Zyklus wieder 0). Unter Stat sind Werte die der FB in dem Instanz DB ablegt.

    Du kannst auch anstatt M1.0, M1.1, MW1 oder MW3 unter "Schnittstelle -> IN" einen Eingang erstellen an dem du dann später irgendeinen Eingang "anschließen" kannst.
    So hast du einen FB geschrieben der z.B. eine Berechnung oder einen Vergleich von XY durchführt, XY kann sich der Benutzer durch das Beschreiben der FB Schnittstelle dann selber aussuchen. Ob es nun E1.0 oder E100.0 sein soll. Als kleine Beispiel mal nur
    Geändert von Garog (19.02.2009 um 19:35 Uhr)

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

    Kiter11 (26.02.2009)

  4. #3
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    ich mach mal das crosslinking: http://sps-forum.de/showthread.php?t=25666
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

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

    Kiter11 (26.02.2009)

  6. #4
    Registriert seit
    10.07.2008
    Beiträge
    47
    Danke
    19
    Erhielt 0 Danke für 0 Beiträge

    Standard

    [quote=Garog;184727]hmm.. verstehe ich nicht so ganz...

    also du hast einen FB geschrieben...
    wenn du in diesem FB Variablen nutzt die du unter "STAT" angelegt hast, werden diese in dem Instanz DB generiert.
    Wenn du den FB aufrufst kann du ja aussuchen wie der DB zum FB heißen soll.

    oder meinst du das du interne "Ergebnisse", aussen zur Verfügung stellen willst?



    Hallo, schon mal Danke für die Antwort.

    Ich möchte die im FB erarbeiteten Daten aussen zur Verfügung stellen.
    Die Daten selber werden nicht mehr weiterverarbeitet, sie dienen nur noch zur Visualisierung.
    Es sind aber 160 Doppelwörter die dieser FB kontinuierlich ausgibt.
    Das Problem ist also, das der Nutzer diese Programms keine lust hat beim Aufruf des Programms alle 160 (In/outs) zu beschriften (deklarieren).
    Deshalb habe ich Programm intern (also im FB) mir einmal die Mühe gemacht, alle Daten in einen seperaten DB abzuspeichern. Das war bis dahin schon viel einfacher und sauberer. Der Nutzer brauchte dann seiner Visu nur noch zu sagen, das in dem DB XX die Nutzdaten sind.

    Das Blöde ist nun aber, das ich im Vorfeld nicht weiß, welcher DB noch frei ist. Beim Aufruf des FB´s kann der Nutzer wie du schon gesagt hast, den Instanz DB selber wählen.
    Den "Speicher-DB" habe ich bis jetzt aber selber fest deklariert.

    Nun möchte ich das der Nutzer den FB aufruft (call FB xx) dann erscheint ja der "Kasten" mit den In/out Variablen. Und dort soll er dann einen DB angeben.
    In diesen soll mein Programm dann die Nutzdaten ablegen.

    Die Frage ist, wie mache ich das?

  7. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Hallo,
    so wie ich das sehe hast du 3 Möglichkeiten :

    1. wenn der Kunde die ermittelten Daten deines FB's "nur noch" visualisiert, dann lass sie ihn doch direkt aus dem I-DB deines FB nehmen ...

    2. Du nimmst einen IN-Parameter, der als BLOCK_DB deklariert ist, baust dir daraus einen Pointer und schiebst deine Daten in die Datenworte 0..x des besagten DB's. Der Kunde übergibt in dem Fall als Parameter den DB seiner Wahl.

    3. Du nimmst einen IN-Parameter vom Typ ANY. Hier kann der Kunde dann ggf. nicht nur den DB sondern auch das Anfangs-DW festlegen, wohin die Daten deines FB's geschrieben werden. Hier musst du dann den ANY zerlegen und dann entsprechend wie bei 2. verfahren ...

    Gruß
    LL

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

    Kiter11 (26.02.2009)

  9. #6
    Registriert seit
    10.07.2008
    Beiträge
    47
    Danke
    19
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,

    vielen Dank schon mal für die Antworten.
    Die Variante 3 sagt mir am meisten zu, da man, wie Du schon sagst, dann auch die Anfangsadresse aussuchen.
    Fals ich nämlich mal meinen FB 2 mal aufrufen will kann ich dann ja immernoch die 160 zusätzlichen Daten in den selben DB schreiben.

    Nun die "blöde" Frage, wie zerlege ich den Any und warum? und wie mache ich das mit dem Pointer?

  10. #7
    Registriert seit
    11.09.2007
    Ort
    Suedwestpfalz
    Beiträge
    917
    Danke
    81
    Erhielt 209 Danke für 192 Beiträge

    Standard

    Ich würde Larry's Nummer 2 nehmen, aber abgeändert:

    Block_DB für den Speicher-DB
    DINT für erstes Speicherwort in o.A. DB

    dtsclipper
    Das Grauen lauert in der Zwischenablage !!

  11. #8
    Registriert seit
    10.07.2008
    Beiträge
    47
    Danke
    19
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich habe das jetzt mal so versucht wie ich das verstanden habe.
    Habe als IN einen Datentyp Block_DB gewählt.
    Beim Aufruf des FB`s erscheint dann dieser und ich kann an dieser Stelle einen DB meiner Wahl eintragen. Bis hierher alles OK.
    Nun möchte ich an z.B. meinen "MOVE-Baustein" der DWORD herausgibt ja deklarieren wo er denn in dem DB dieses DWORD hinzuschieben hat. Aber wie??
    Sobald ich "#IN1" eingebe,meckert S7 mit dem Dialog, das Aktualdatentyp Block nicht zum Formalen Typ DWORD des Formalparameters passt

  12. #9
    Registriert seit
    11.09.2007
    Ort
    Suedwestpfalz
    Beiträge
    917
    Danke
    81
    Erhielt 209 Danke für 192 Beiträge

    Standard

    Ich schätze mal die Variable #IN1 ist als "BLOCK_DB" definiert.

    In dem Fall sollte der Code dann etwa so aussehen:
    Code:
    AUF #IN1
    Damit wird nur der DB geöffnet.

    Die Adresse in diesem DB muss noch definiert werden.

    Nimmst Du den KOP/FUP-MOVE oder den SFC 20 ?

    dtsclipper
    Das Grauen lauert in der Zwischenablage !!

  13. Folgender Benutzer sagt Danke zu dtsclipper für den nützlichen Beitrag:

    Kiter11 (26.02.2009)

  14. #10
    Registriert seit
    10.07.2008
    Beiträge
    47
    Danke
    19
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich habe bisher alles im FUP gemacht, da ich gerade erst angefangen habe S7 zum Programmieren und nicht nur als "Online nach Fehlern in der Anlage zu suchen".

    Deswegen wird es jetzt auch kompliziert auf einmal AWL hinein zu bekommen, aber wenn es sein muss.

Ähnliche Themen

  1. DB mit UDT für WinCC deklarieren?
    Von Poldi007 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 14.04.2016, 14:27
  2. Eigenen FC erstellen
    Von Blade81 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 19.09.2010, 15:26
  3. Füllstand in der SPS Deklarieren
    Von sapor123 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 07.04.2010, 15:59
  4. DB als Speicherziel deklarieren
    Von Kiter11 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 20.02.2009, 02:25
  5. Timer in eigenen FC`s
    Von Keeper im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 15.03.2007, 07:42

Lesezeichen

Berechtigungen

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