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

Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 27 von 27

Thema: Input Parameter überschreiben

  1. #21
    Registriert seit
    13.10.2007
    Beiträge
    12.067
    Danke
    2.797
    Erhielt 3.288 Danke für 2.168 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Es liegt auch dran das die Programme mittlerweile so komplex sind, da sie in ganzem nicht mehr
    zu überblicken sind.
    Zu den umtrieben in AWL, vor 20 Jahren also S5 Zeiten, war auch noch nicht das möglich was heute
    mit S7 alles so gemacht werden kann.

  2. #22
    Registriert seit
    03.04.2008
    Beiträge
    6.206
    Danke
    237
    Erhielt 818 Danke für 692 Beiträge

    Standard

    Zitat Zitat von rostiger Nagel Beitrag anzeigen
    Es liegt auch dran das die Programme mittlerweile so komplex sind, da sie in ganzem nicht mehr
    zu überblicken sind.
    Oder überblickt werden will?
    Das Problem liegt schon daran, dass der Programmcode MS/DOS noch von einem Menschen zu lesen ist, so ist es bei Win$ in keiner Weise mehr möglich.
    Es wird etwas geschrieben, nach dem Motto wird schon gut gehen und wenn nicht dann gibt es ein Servicepack.
    Diese Denke ist inzwischen auch im Maschinen- und Anlagenbau angekommen.
    Es geht uns so, dass wir liefern müssen, obwohl es noch nicht fertig ist.
    Dann wird ein oder mehrere Patches gebaut und hinterher geschickt.
    Leider ist das so.


    bike

    P.S: wenn ich einen Wunsch hätte, dann den, dass ich nie mit TIA und / oder Win8 programmieren oder arbeiten muss. Man darf träumen.

  3. #23
    Registriert seit
    27.06.2011
    Beiträge
    30
    Danke
    18
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Zitat Zitat von StructuredTrash Beitrag anzeigen
    Der FB_1 ist im MAIN instanziiert, also dazu gedacht, vom MAIN aus aufgerufen zu werden. Dementsprechend kann er auch nur mit Variablen gefüttert werden, die dem MAIN zugänglich sind. Das Verwursten dieser Variablen ist doch ebenfalls Aufgabe von MAIN. Warum steht dann der Code in einer Funktion und nicht direkt im MAIN?
    Das Beispiel was ich hier gegeben habe ist stark vereinfacht, es geht um ein ziemlich kompliziertes Kommunikationsprotokoll, die Funktion FC_1 soll Exception-Telegramme generieren und bearbeiten (und viel mehr) und der FB_1 ist eine Display-Schnittstelle, bei manchen Telegramme soll die Funktion FC_1 paar Inputs von FB_1 aktualisieren. Die Funktion FC_1 kann also überall im Programm aufgerufen werden und nicht nur in Main.

  4. #24
    Registriert seit
    09.11.2007
    Ort
    Rhein Main (Darmstadt)
    Beiträge
    663
    Danke
    61
    Erhielt 112 Danke für 80 Beiträge

    Standard

    Zitat Zitat von sablitos Beitrag anzeigen
    Das Beispiel was ich hier gegeben habe ist stark vereinfacht, es geht um ein ziemlich kompliziertes Kommunikationsprotokoll, die Funktion FC_1 soll Exception-Telegramme generieren und bearbeiten (und viel mehr) und der FB_1 ist eine Display-Schnittstelle, bei manchen Telegramme soll die Funktion FC_1 paar Inputs von FB_1 aktualisieren. Die Funktion FC_1 kann also überall im Programm aufgerufen werden und nicht nur in Main.
    Wie ich schon weiter oben geschrieben habe geht das "well behaved" nur per VAR_IN_OUT. (nur FB soweit ich weiss)

    Der Weg über Pointer in Funktionen (FC) ist ebenfalls möglich aber nicht erste Sahne. Und wie Du schon schreibst, komplex und von überall aufgerufen, da ist Chaos angesagt, wenn ein neues Telegramm ggf. ein Telegramm im Sendebuffer überschreibt etc.

    Der Weg ginge dann am Besten über eine Warteschlange (FiFo/Queue) und ein kontrolliertes Zentrales Abarbeiten im Hauptprogram Zyklus (eigene Status Maschine für die Telegramm Bearbeitung).

    Und dann nochmal der Hinweis, es gibt Bücher. z.B. "Design Patterns" von Gramma etc. Erscheint erst einmal total abgehoben für eine SPS aber über die Zeit merkt man, das ist eine Goldgrube.

    Für die prinzipielle SPS Problematik: Heinrich Lepers "SPS Programmierung nach IEC", obwohl für Beginner geschrieben auch voller Schätze beim erneuten Lesen.
    Als Freelancer immer auf der Suche nach interessanten Projekten.

  5. #25
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.797
    Danke
    398
    Erhielt 2.418 Danke für 2.014 Beiträge

    Standard

    @sablitos:
    Vielleicht noch einmal als Rekapitulation :
    Du kannst ggf. auf die Schnittstelle eines FB (auch per Pointer oder Adressieren der Instanz oder was auch immer) draufschreiben was du willst - es wird erst dann bearbeitet, wenn der FB aufgerufen wird ... und es wird dann mit den Übergabe-Parametern gearbeitet, die dann an der Schnittstelle stehen. Du solltest vielleicht wirklich noch einmal überlegen, was du so erreichen willst und warum du es meinst nur so erreichen zu können ...

    Gruß
    Larry

  6. #26
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    757
    Danke
    27
    Erhielt 166 Danke für 144 Beiträge

    Standard

    Zitat Zitat von sablitos Beitrag anzeigen
    Das Beispiel was ich hier gegeben habe ist stark vereinfacht, es geht um ein ziemlich kompliziertes Kommunikationsprotokoll, die Funktion FC_1 soll Exception-Telegramme generieren und bearbeiten (und viel mehr) und der FB_1 ist eine Display-Schnittstelle, bei manchen Telegramme soll die Funktion FC_1 paar Inputs von FB_1 aktualisieren. Die Funktion FC_1 kann also überall im Programm aufgerufen werden und nicht nur in Main.
    Wenn Die FC_1 von überall her aufgerufen wird, selbst aber Variablen des MAIN manipuliert, baust Du Dir damit eine ewige Stolperfalle. Und wie schon Larry Laffer sagt, kann es passieren, dass die INPUT-Variablen des FB_1 mehrmals aktualisiert werden, bevor er aufgerufen wird. Wäre das in Deinem Sinn? Wenn die Gesamtstruktur schon so aussehen muss, würde ich den FB_1 global anlegen und jedesmal aus der FC_1 heraus aufrufen.

  7. #27
    Registriert seit
    27.06.2011
    Beiträge
    30
    Danke
    18
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von StructuredTrash Beitrag anzeigen
    Wenn die Gesamtstruktur schon so aussehen muss, würde ich den FB_1 global anlegen und jedesmal aus der FC_1 heraus aufrufen.
    Ich weiß dass die ideale Lösung für sowas ist immer global zu deklarieren, das Problem ist dass globalen Variablen zu viel Speicher brauchen. ( ich arbeite mit einem BC- mit 32 KB )
    Zitat Zitat von StructuredTrash Beitrag anzeigen
    Und wie schon Larry Laffer sagt, kann es passieren, dass die INPUT-Variablen des FB_1 mehrmals aktualisiert werden, bevor er aufgerufen wird
    das sollte kein Problem sein, es ist eigentlich genau so gewollt. Wie ich schon erwähnte geht es bei FB_1 um eine Display-Schnittstelle und in diesem bestimmten Display-Fenster soll sowas wie 'Last-ErrorID', 'Last-Device' usw. gezeigt werden. also es 'muss' eigentlich mehrmals aktualisiert werden.

Ähnliche Themen

  1. fs.filecopy überschreiben?
    Von hoT im Forum HMI
    Antworten: 1
    Letzter Beitrag: 14.03.2011, 19:15
  2. DB Inhalt überschreiben
    Von Black Scorpion im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 10.07.2009, 00:02
  3. Antworten: 4
    Letzter Beitrag: 18.03.2009, 16:12
  4. Baustein überschreiben
    Von Unregistriert im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 15.02.2006, 09:55
  5. LOGO! CPU Analog Input / Digital Input
    Von Anonymous im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 24.11.2005, 05:55

Lesezeichen

Berechtigungen

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