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

Ergebnis 1 bis 7 von 7

Thema: Problem mit Libnodave unter VB

  1. #1
    Registriert seit
    24.04.2006
    Beiträge
    23
    Danke
    3
    Erhielt 2 Danke für 2 Beiträge

    Unglücklich


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,
    habe ein Problem mit Libnodave unter Visualbasic 6. Habe das Exel-VBA Beispiel als Grundlage benutzt. Das Auslesen einer S7-300 317DP über CP341Lean und ISOoverTCP funktioniert auch problemlos. Das VB-Programm läuft auf einem Server und holt regelmäßig Daten aus der CPU. Nur werden
    bei jeder Abfrage 2 Handles an Windows nicht zurückgegeben (Taskmanager/Systemleistung/Handles) und der verfügbare Systemspeicher schwindet langsam aber sicher dahin, bis der Server abschmiert.
    Folgende Sequence wird alle paar Sekunden abgearbeitet (vereinfacht)

    Unterprogamm initialize(...)
    ph = openSocket(102, peer$) ' for ISO over TCP
    di = daveNewInterface(ph, ph, "IF1", 0, daveProtoISOTCP, daveSpeed187k)
    res = daveInitAdapter(di)
    dc = daveNewConnection(di, MpiPpi, Rack, Slot)

    Unterprogramm Daten lesen
    res2 = daveReadBytes(dc, daveDB, DB, Startbyte, AnzahlBytes, 0)

    Unterprogramm CleanUp(...)
    res = daveDisconnectPLC(dc)
    Call daveFree(dc)
    res = daveDisconnectAdapter(di)
    Call daveFree(di)
    res = closePort(ph)

    Wie gesagt es funktioniert, ich bekomme alle gewünschten Daten. Im Unterprogramm CleanUp meldet die letzte Funktion "closePort(ph)" einen Rückgabewert von 1. Ansonsten sind alle Rückgabewerte 0 = kein Fehler.
    Wer kann mir einen Tip geben ?

    Gruß Buster
    Zitieren Zitieren Problem mit Libnodave unter VB  

  2. #2
    Registriert seit
    25.07.2005
    Ort
    Vogelsbergkreis
    Beiträge
    1.717
    Danke
    48
    Erhielt 68 Danke für 60 Beiträge

    Standard

    Zitat Zitat von Buster
    Hallo zusammen,
    habe ein Problem mit Libnodave unter Visualbasic 6. Habe das Exel-VBA Beispiel als Grundlage benutzt. Das Auslesen einer S7-300 317DP über CP341Lean und ISOoverTCP funktioniert auch problemlos. Das VB-Programm läuft auf einem Server und holt regelmäßig Daten aus der CPU. Nur werden
    bei jeder Abfrage 2 Handles an Windows nicht zurückgegeben (Taskmanager/Systemleistung/Handles) und der verfügbare Systemspeicher schwindet langsam aber sicher dahin, bis der Server abschmiert.
    Folgende Sequence wird alle paar Sekunden abgearbeitet (vereinfacht)

    Unterprogamm initialize(...)
    ph = openSocket(102, peer$) ' for ISO over TCP
    di = daveNewInterface(ph, ph, "IF1", 0, daveProtoISOTCP, daveSpeed187k)
    res = daveInitAdapter(di)
    dc = daveNewConnection(di, MpiPpi, Rack, Slot)

    Unterprogramm Daten lesen
    res2 = daveReadBytes(dc, daveDB, DB, Startbyte, AnzahlBytes, 0)

    Unterprogramm CleanUp(...)
    res = daveDisconnectPLC(dc)
    Call daveFree(dc)
    res = daveDisconnectAdapter(di)
    Call daveFree(di)
    res = closePort(ph)

    Wie gesagt es funktioniert, ich bekomme alle gewünschten Daten. Im Unterprogramm CleanUp meldet die letzte Funktion "closePort(ph)" einen Rückgabewert von 1. Ansonsten sind alle Rückgabewerte 0 = kein Fehler.
    Wer kann mir einen Tip geben ?

    Gruß Buster
    Du trennst und schließt also die Verbindung dauernd? Wieso hälst du sie nicht offen?

    Gruß Sebastian

  3. #3
    Buster ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.04.2006
    Beiträge
    23
    Danke
    3
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Zitat Zitat von seeba
    Du trennst und schließt also die Verbindung dauernd? Wieso hälst du sie nicht offen?

    Gruß Sebastian
    Die Abfrage erfolgt ca. alle 30 Sekunden und ich bin kein Freund von unnötig geöffneten Verbindungen. Außerdem besteht die Möglichkeit das Anlagenbediener den Hauptschalter ausschalten oder die Netzwerkverbindung unterbrochen wird. Ich habe noch nicht getestet wie sich das Programm bei einer geöffneten Verbindung verhält, wenn sie getrennt wird. So wie oben macht das nichts.

    Gruß Buster

  4. #4
    Registriert seit
    25.07.2005
    Ort
    Vogelsbergkreis
    Beiträge
    1.717
    Danke
    48
    Erhielt 68 Danke für 60 Beiträge

    Standard

    Zitat Zitat von Buster
    Die Abfrage erfolgt ca. alle 30 Sekunden und ich bin kein Freund von unnötig geöffneten Verbindungen. Außerdem besteht die Möglichkeit das Anlagenbediener den Hauptschalter ausschalten oder die Netzwerkverbindung unterbrochen wird. Ich habe noch nicht getestet wie sich das Programm bei einer geöffneten Verbindung verhält, wenn sie getrennt wird. So wie oben macht das nichts.

    Gruß Buster
    Versuch es, es wird dein Problem beheben.

  5. #5
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Eigentlich sollte closePort die handles zurückgeben....muß ich mir gelegentlich ansehen. Die Verbindung solltest du offenlassen, weil openSocket() und daveConnectPLC() Zeit fressen. Wenn jemand den Stecker zieht oder die SPS ausschaltet, wirst du es daran merken, daß deine nächste Abfrage mit timeout ended. Dann ist es Zeit, eine neue Verbindung aufzubauen.

  6. #6
    Buster ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.04.2006
    Beiträge
    23
    Danke
    3
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Habe das Programm umgestrickt. Halte die Verbindung offen und es gibt kein Problem mehr mit den Handles . Aber grundsätzlich werden anscheinend bei ClosePort() nicht alle Handles zurückgegeben. Dadurch das ich ClosePort nur noch bei Programmende ausführe ist es nicht mehr so tragisch. Danke für den Tip.

    Gruß Buster
    Zitieren Zitieren Funzt  

  7. #7
    Buster ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.04.2006
    Beiträge
    23
    Danke
    3
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Zottel
    Eigentlich sollte closePort die handles zurückgeben....muß ich mir gelegentlich ansehen. Die Verbindung solltest du offenlassen, weil openSocket() und daveConnectPLC() Zeit fressen. Wenn jemand den Stecker zieht oder die SPS ausschaltet, wirst du es daran merken, daß deine nächste Abfrage mit timeout ended. Dann ist es Zeit, eine neue Verbindung aufzubauen.
    Hallo Zottel
    Eine komplett neue Verbindung OpenSocket(),daveNewInterface(), daveInitAdapter() und daveNewConnection(), oder nur daveNewConnection() ?

    Gruß Buster
    Zitieren Zitieren Neue Verbindung ?  

Ähnliche Themen

  1. Qt4 unter Windows und Libnodave
    Von Waddi im Forum Hochsprachen - OPC
    Antworten: 7
    Letzter Beitrag: 16.02.2011, 14:28
  2. Antworten: 0
    Letzter Beitrag: 09.09.2010, 00:27
  3. LibNoDave unter VB.Net ohne libnodave.net.dll
    Von Earny im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 09.03.2010, 18:57
  4. libnodave unter windows ce 5.0???
    Von Jochen Kühner im Forum HMI
    Antworten: 1
    Letzter Beitrag: 26.06.2007, 09:57
  5. Netzwerkunterbrechung bei libnodave unter XP
    Von rolf.geiger@krayer.net im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 08.03.2007, 09:27

Lesezeichen

Berechtigungen

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