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

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

Thema: Unzulässige Parameterversorgunge bei Übergabe von in_out var von Multiinst. FB zu FC

  1. #1
    Registriert seit
    15.05.2007
    Beiträge
    46
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Beitrag


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen, ich habe folgendes Problem.

    Ich möchte von einer aufgerufenen Multiinstanz, die als in_out Variablen ein array hat, dieses an einen FC, der in der Multiinstanz aufgerufen wird, als in_out Variablen übergeben. Beide haben natürlich die gleiche Größe und Struktur. Beim Übersetzen bekomme ich einen Fehler: unzulässige Parameter-Versorgung

    Hier noch mal mein Versuch die Struktur "grafisch" darzustellen:

    Aufruf FB

    Multiinstanz FB (inout array) --> FC (inout array)



    Aufruf Dbi

    Ich bin schon draufgekommen, das die Übergabe von in_out var nicht so einfach ist. Die Übergabe basiert auf einem DB-Zeiger.

    Wenn ich die Übergabe der var über stat_var mache geht es auch. Ich wollte halt eine "gekapselte" Multiinstanz mit Schnittstelle erzeugen.

    Hat vielleicht von euch jemand eine Idee wie man das Problem umgehen könnte, oder vielleicht eine Lösung.

    Vielen Dank im voraus.

    chris
    Zitieren Zitieren Unzulässige Parameterversorgunge bei Übergabe von in_out var von Multiinst. FB zu FC  

  2. #2
    Registriert seit
    21.01.2008
    Ort
    Lippe
    Beiträge
    317
    Danke
    43
    Erhielt 49 Danke für 46 Beiträge

    Standard

    Multiinstanz geht meines wissens nach nur mit zwei FB's.
    Du sparst dir dann weitere Instanzdatenbausteine für jeden FB.

  3. #3
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Sieh dir auch das mal an, besonders marlobs Siemens-Link:

    http://www.sps-forum.de/showthread.p...ighlight=INOUT

    Ich glaube Array, UDT und auch Structs kann man nicht so einfach durchreichen, da sie ja nicht direkt übergeben werden, sondern als Any-Pointer im IDB abgelegt werden. Daher muß man sich den Pointer hernehemen und kann diesen dann weiterreichen. Leider geht dabei der eigentiche Vorteil verloren, man kann nicht mehr direkt mit der Symolik des übergebenen Structs alá mystruct.testvar arbeiten, sonden muß sich das alles selbst zusammenbasteln. Eine weitere Variante wäre das Umkopieren des 1. Inputs in ein statisches array/udt/stuct und diese dann übergeben. Das geht aber wieder zu Lasten der Zykluszeit.
    Geändert von Ralle (13.08.2008 um 12:10 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  4. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    iga-graz (13.08.2008)

  5. #4
    Registriert seit
    15.05.2007
    Beiträge
    46
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard

    hi ralle, wie würdest du denn ein array oder ein struct von in auf stat var umkopieren.
    da muss ich mir ja auch was zusammenbasteln, mit blockmove usw. oder hast du einen besseren vorschlag.

  6. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard

    Ich würde das ARRAY über einen ANY-Pointer einlesen.

    aber Gegenfrage: Wofür brauchst du das überhaupt ? Kannst du die Daten, die du übergeben willst nicht schon mit dem FB erzeugen ?

    Gruß
    LL

  7. #6
    Registriert seit
    15.05.2007
    Beiträge
    46
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Frage

    hi, wie meinst du das denn, wie ich die daten mit dem fb erzeugen soll?

    ich habe einen aufruf FB, in diesem 2 Multiinstanzen, die ich mit in-outs beschalten will, und in diesen Multiinstanzen wird jeweils der selbe FC aufgerufen, der die in_out var benötigen würde.

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Ich würde das ARRAY über einen ANY-Pointer einlesen.

    aber Gegenfrage: Wofür brauchst du das überhaupt ? Kannst du die Daten, die du übergeben willst nicht schon mit dem FB erzeugen ?

    Gruß
    LL
    Grüße chris

  8. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard

    Hallo Chris,
    ich habe da schon eine Idee, aber ob die für dich paßt kann ich ohne mehr Info nicht sagen. Deshalb noch einmal die Frage von eben :
    Wofür brauchst du das überhaupt ? Kannst du die Daten, die du übergeben willst nicht schon mit dem FB erzeugen ?
    Jetzt müßtest du nur den Passus "mit dem FB erzeugen" gegen "mit dem FB verarbeiten" austauschen ...
    Aber da kann ich auch vollkommen falsch damit liegen ... deshalb die Frage nach dem "Wofür".

    Gruß
    LL

  9. #8
    Registriert seit
    15.05.2007
    Beiträge
    46
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi, also:
    ich habe 2 Anlagenteile die ich jeweils in einem aufruf FB aufrufen möchte.
    --> AT_FB, ATx_dbi
    Die Programmstruktur:
    aufrufFB, aufrufFB_dbi
    MultiInst_FB_1
    AT_FB, AT1_dbi

    MultiInst_FB_2
    AT_FB, AT2_dbi

    jeden Anlagenteil muss ich vom aufrufFB aus beschalten, da sich diese beiden Anlagenteile in ein paar Ausprägungen unterscheiden.

    Das wären nun keine Multiinstanzen sondern normale FB Aufrufe aus einem FB. --> AT_FB, ATx_dbi


    ich habe nun für die Beschaltung der beiden Anlagenteile vor, im aufrufFB für jeden Anlagenteil eine Multiinstanz zu erstellen. --> MultiInst_FB_x

    in diesem MultiInst_FB_x wiederum wird ein FC aufgerufen, der als in_out Variablen arrays mit structs hat.

    Mein Ziel war es eigentlich mit den MultiInst_FB_x eine gewisse "Kapselung" zu erreichen, da die Anlage irgendwann noch erweitert wird und ich mir für die Beschaltung die Tippfehler ersparen wollte.

    Ich hoffe mein Problem wird jetzt deutlicher.

    Vielen Dank im voraus.

    gr chris

  10. #9
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard

    ... irgendwie kommen wir beide nicht weiter ...

    Es war mir schon klar, dass du (bei deinem Beispiel bleibend) den FC100 sowohl vom FB1 als auch vom FB2 aus aufrufst. Dieser FC100 (ich nenne ihn mal so) verarbeitet einen Teil der Daten aus dem FB (1 oder 2), die er zuvor als ARRAY übermittelt bekommen hat.
    Meine Frage war nun, warum du die Daten dem FC zum Bearbeiten übergibst und sie nicht schon im FB verarbeitest ?

    Wie auch immer ... wenn du so vorgehen möchtest, dann ist aus meiner Sicht der ANY-Pointer der richtige Weg (oder alternativ ein UDT). Mit dem ANY bis du nur aus vielleicht etwas flexibler bei Änderungen.

    Gruß
    LL

  11. #10
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Es wird nur ein Any gehen, den er "durchreicht", auch ein UDT läßt sich nicht "Durchreichen", dafür sind eigentlich die Pointer als In gedacht (steht jedenfalls in der Siemens Hilfe.

    ig-graz

    Richtig, umkopieren mit SFC20. Aber Achtung, zum Schluß muß das sicher auch wieder zurückkopiert werden, schon wegen der INOUT.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Ähnliche Themen

  1. IN_OUT eines FB/FC
    Von Daimonion im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 03.11.2011, 16:18
  2. IN_OUT mit Indirekter Adressierung
    Von SCM im Forum Simatic
    Antworten: 24
    Letzter Beitrag: 14.10.2011, 12:07
  3. Mit BLKMOV im FB auf IN_OUT vom Typ UDT
    Von Johannes F im Forum Programmierstrategien
    Antworten: 8
    Letzter Beitrag: 17.12.2009, 13:27
  4. UDT als In_Out an Multiinstanz FB
    Von dirknico im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 01.10.2009, 12:28
  5. IN/OUT/IN_OUT/Temp Anfangswert definieren?
    Von Hawkster im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 28.11.2008, 21:52

Lesezeichen

Berechtigungen

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