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

Ergebnis 1 bis 6 von 6

Thema: mehrere Instanzen/globale variablen/hauptprogramm

  1. #1
    Registriert seit
    08.06.2011
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    Ich habe einen TCP Server als FB erstellt.
    Darin ist eine Callback-Funktion, die eine globale BOOL-Variable aufruft. Damit werden die Callbacks registriert.

    Wie kann ich mit der globalen Variable umgehen, wenn ich nun in meinem Hauptprogramm mehrere Instanzen des Servers aufrufe (praktischer wäre natürlich ein mehrfacher aufruf eines clients, aber das ist ähnlich).
    Die Callbacks werden für die erste Instanz registriert, für die nächsten aber nicht mehr.

    Damit gleich zu meiner 2. Frage:
    Die Callback Funktion greift auf das Socket im Server über den namen des Hauptprogrammes zu, z.B. so:

    [HTML]IF MAIN.fbTCPserver.server_socket <> SOCKET_INVALID THEN[/HTML] usw.

    Wenn ich nun den Umgang mit dem FB so einfach wie möglich gestalten möchte, kann ich doch nicht vom Nutzer verlangen, jedes Mal den Namen des Hauptprogramms (hier: MAIN) zu ändern (wenn er sich ändern sollte..)
    Kann man auf die Variablen im FB auch irgendwie anders zugreifen?

    Versteht das jemand?

    Vielen Dank an alle, die sich mit der Frage beschäftigen,
    Norman
    Zitieren Zitieren mehrere Instanzen/globale variablen/hauptprogramm  

  2. #2
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    745
    Danke
    27
    Erhielt 164 Danke für 142 Beiträge

    Standard

    So ganz verstehe ich es noch nicht. Brauchst Du nur einen Callback-Zähler oder eine Callback-Registrierung für jede einzelne Server-Instanz? Und warum muss das eine globale Variable sein?
    Zum zweiten Punkt: Ich nehme an, dass MAIN.fbTCPServer die FB-Instanz ist, aus der heraus die Callback-Funktion aufgerufen wird. Dann übergib ihr doch die Variable Server_Socket des FB's als Input-Parameter.

  3. #3
    blackedding ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.06.2011
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,

    Also, ich bräuchte eine Callback-Registrierung für jede Server- bzw. Client-Instanz. Vielleicht lässt es sich mit einem Callback-Zähler einfacher realisieren. Kannst du mir ein Beispiel dazu geben?

    Meines Wissens dürfen Callback-Funktionen keine lokalen Variablen besitzen, deswegen arbeite ich mit der globalen Variable. Zählen VAR_INPUT Variablen zu lokalen Variablen? Muss ich mal ausprobieren.


    Danke für die Vorschläge!
    Ich werde das Thema auf dem aktuellsten Stand halten.

  4. #4
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    745
    Danke
    27
    Erhielt 164 Danke für 142 Beiträge

    Standard

    Wenn du die Callbacks den FB-Instanzen eindeutig zuordnen willst, ist ein Zähler nicht das richtige, da brauchst Du schon eine Variable für jede FB-Instanz. Die könntest Du aber auch als VAR_OUTPUT in den FB's anlegen. Dann ist sie für das aufrufende Programm auch sichtbar.

    Funktionen können schon lokale Variablen enthalten, die sind allerdings nicht statisch, d. h. sie werden beim Aufruf der Funktion angelegt und beim Verlassen wieder freigegebén.

  5. #5
    blackedding ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.06.2011
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Es ist, glaube ich, mal Zeit für Code

    Zur Zeit habe ich den FB, der bei erfolgreichem Erstellen eines Sockets diese Funktion aufruft (g_bCallbackRegistered ist die globale Variable):
    [HTML]FUNCTION Register_Callbacks : DWORD
    VAR_INPUT
    END_VAR
    VAR
    END_VAR[/HTML]

    [HTML]IF NOT g_bCallbackRegistered THEN
    SysCallbackRegister(INDEXOF(Callback_Reset), EVENT_BEFORE_RESET);
    g_bCallbackRegistered := TRUE;
    END_IF[/HTML]

    Call back_Reset sieht so aus:
    [HTML]FUNCTION Callback_Reset : BOOL
    VAR_INPUT
    dwEventWORD;
    dwFilterWORD;
    dwOwnerWORD;
    END_VAR
    VAR
    END_VAR[/HTML]
    In der Doku zur SysLibCallback.lib steht übrigens, dass der Prototyp immer so aussehen muss (... wie über diesem Satz).

    [HTML]IF MAIN.fbServer.server_socket <> SOCKET_INVALID THEN
    TCPserverCloseSocket(ADR(MAIN.fbServer.server_socket));
    END_IF
    IF MAIN.fbServer.socket <> SOCKET_INVALID THEN
    TCPserverCloseSocket(ADR(MAIN.fbServer.socket));
    END_IF[/HTML]

    Hast du gemeint, dass die Callbacks für jede Instanz im Hauptprogramm registriert werden? An das Hauptprogramm wird also eine Variable vom FB übergeben wird? - Sobald diese zB TRUE ist, wird der Callback aufgerufen?
    Diese Variable wird an der Stelle TRUE gesetzt, an der die Register_Callbacks Funktion aufgerufen wird?
    Könnte man es so angehen?

    Vielen Dank für deine Tipps!
    Zitieren Zitieren Code  

  6. #6
    blackedding ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.06.2011
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    Danke für die Vorschläge.
    Ich habe es nun anders lösen können. Ein Kollege hat mir einen Tipp gegeben, der mich weitergeführt hat.

    Anstatt Callbacks für bestimmte Events zu registrieren, schließe ich alle Sockets zu Beginn des Zyklus.
    Das macht genau, was ich will

    Viele Grüße und nochmals vielen Dank,
    Norman
    Zitieren Zitieren andere Lösung  

Ähnliche Themen

  1. TwinCat HMI Web / Globale Variablen gesucht!
    Von Shlomi im Forum CODESYS und IEC61131
    Antworten: 0
    Letzter Beitrag: 03.09.2010, 17:38
  2. Antworten: 17
    Letzter Beitrag: 06.08.2010, 09:41
  3. Globale Variablen initialisieren
    Von softwareheini im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 24.01.2010, 15:04
  4. Globale Variablen
    Von wroky im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 03.06.2009, 22:33
  5. Antworten: 19
    Letzter Beitrag: 16.09.2007, 20:13

Stichworte

Lesezeichen

Berechtigungen

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