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

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

Thema: libnodave und falsche IP

  1. #1
    Registriert seit
    27.01.2009
    Beiträge
    9
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo

    Ich arbeite gerade an einem Projekt für meine Bachelorarbeit. Dabei sollen mithilfe von Libnodave Daten aus einer SPS ausgelesen und in einem BDE weiterverarbeitet werden.

    Die Verbindung läuft über TCP.

    Meine Programmierkenntnisse gehen leider auch nicht weiter als das was mir auf der FH beigebracht wurde..... daher könnte es sein das ich sachen Frage die für euch bereits ganz klar sind....

    Programmiert wird das ganze Mithilfe von LabWindowsCVI, also mit ANSI_C.

    Die Verbindung klappt einwandfrei, allerding nur solange die richtige IP Adresse eingegeben wird.
    Bei der falschen IP bleibt das ganze Programm hängen.
    Ich nehme mal an das der Fehler bei

    fds_PLC1.rfd=openSocket(102,IP_PLC1) passiert.

    ich frage Fehler aber erst bei error=daveConnectPLC(dc_PLC1) ab.

    Wie kann ich einen Verbindungsfehler bei bei openSoocket abfangen?

    Achja, über die Konsole erhalte ich die Fehlermeldung von OpenSocketw.c, arbeite hier allerdings bereits mit einer GUI.

    Danke
    für Unterstützung und dafür nicht gleich in der Luft zerissen zu werden.

    EDIT: Was gibt openSocket zurück wenn die Verbindung nicht initialisiert werden kann?
    Geändert von TheEngineer0815 (04.03.2009 um 13:24 Uhr)
    Zitieren Zitieren libnodave und falsche IP  

  2. #2
    Registriert seit
    13.03.2006
    Beiträge
    428
    Danke
    5
    Erhielt 43 Danke für 43 Beiträge

    Standard

    Ich vermute mal, dass das Programm in der Funktion connect()
    siehe:
    openSocket.c

    hängt.

    connect() ist eine Funktion aus der socket library des Betriebssystems.
    Diese Funktion hat einen relativ großen Timeout.
    Nach 1-2 Minuten sollte der connect Aufruf aber ein Timeout bekommen.
    Dann sollte 0 als file desciptor zurückgeliefert werden.

  3. #3
    TheEngineer0815 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    27.01.2009
    Beiträge
    9
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Guten Morgen

    Danke,
    hab gestern nachmittag die Source Codes durchstöbert und mir auch schon etwas in die Richtung gedacht.
    Überprüfe jetzt den Rückgabewert und fang erst mit den weiteren Schritten an wenn dieser >0 ist.

    Verstehe nur eines nicht so ganz, openSocket hat int als Rückgabewert, in _daveOSserialType wird allerdings der Datentyp HANDLE gespeichert.... komme damit gedankenmäßig nicht klar..... bzw.verstehe ich nicht was hier "__declspec (dllexport) HANDLE __stdcall openSocket(const int port, const char * peer)" in openSocketw.c passiert.

    ich überprüfe das ganze jetzt so:

    HANDLE connectioncheck;
    connectioncheck=openSocket(102,IP);
    if(connectioncheck>(HANDLE)0)
    {
    mach weiter...
    }else
    {
    gib "Keine Verbindung" aus
    }

    Weiß nicht ob diese Typkonvertierung (HANDLE)0 sauber ist oder besser gemacht werden könnte.
    Geändert von TheEngineer0815 (05.03.2009 um 10:06 Uhr)

  4. #4
    Registriert seit
    13.03.2006
    Beiträge
    428
    Danke
    5
    Erhielt 43 Danke für 43 Beiträge

    Standard

    openSocket.h sieht ja so aus:

    +-- 19 Zeilen: Part of Libnodave, a free communication libray for Siemens S7 300/40

    #ifndef __openSocket
    #define __openSocket

    #ifdef BCCWIN
    #ifdef DOEXPORT
    #define EXPORTSPEC __declspec (dllexport)
    #else
    #define EXPORTSPEC __declspec (dllimport)
    #endif
    EXPORTSPEC int openSocket(const int port, const char * peer);
    #endif

    #ifdef LINUX
    #define EXPORTSPEC
    int openSocket(const int port, const char * peer);
    #endif

    #ifdef CYGWIN
    #define EXPORTSPEC
    int openSocket(const int port, const char * peer);
    #endif
    #endif
    +-- 6 Zeilen: Changes: -----------------------------------------------------------
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    "openSocket.h" 48L, 1443C 1,1 Alles

    Das EXPORTSPEC ist also nur unter Windows interessant und
    dient nur dazu die DLL aus anderen Programmen ansprechen zu können.

    Prinzipiell ist die lib aber portabel und hinter dem fd steckt nur ein einfaches int.

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

    TheEngineer0815 (06.03.2009)

  6. #5
    TheEngineer0815 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    27.01.2009
    Beiträge
    9
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    noch eine Frage zur Verbindung:

    wenn ich mit "daveISOTCP" als Protokoll eingebe... welches Protokoll wird jetzt eigentlich wirklich verwendet?

    S7 oder ISO over TCP

    DANKE
    Zitieren Zitieren libnodave Protokoll  

  7. #6
    Registriert seit
    28.10.2005
    Ort
    Ottweiler, Saar
    Beiträge
    940
    Danke
    259
    Erhielt 124 Danke für 109 Beiträge

    Standard

    Zitat Zitat von TheEngineer0815 Beitrag anzeigen
    noch eine Frage zur Verbindung:

    wenn ich mit "daveISOTCP" als Protokoll eingebe... welches Protokoll wird jetzt eigentlich wirklich verwendet?

    S7 oder ISO over TCP

    DANKE
    Tja, warum heißt es wohl "daveISOTCP" und nicht "daveS7"?
    In Wirklichkeit ist das S7-Protokoll eine Erweiterung, besser Abwandlung,
    von ISO on TCP. Läuft alles über den selben TCP-Port 112.
    Du kannst Dir also aussuchen was Dir lieber ist...

  8. #7
    Registriert seit
    13.03.2006
    Beiträge
    428
    Danke
    5
    Erhielt 43 Danke für 43 Beiträge

    Standard

    Zitat Zitat von TheEngineer0815 Beitrag anzeigen
    noch eine Frage zur Verbindung:
    welches Protokoll wird jetzt eigentlich wirklich verwendet?
    S7 oder ISO over TCP
    Es gibt ein ISO on TCP
    Dafür ist
    #define ISO_PORT 102
    definiert.

    Es handelt sich dabei um eine "Krücke" um Software, die ursprünglich ISO OSI mit TSAP's etc. verwendete auf TCP zu bringen.
    Dazu wird ein eigener Header noch mal künstlich draufgesattelt.

    Siehe: read_iso() und write_iso() unter
    http://pvbrowser.de/pvbrowser/sf/man...iemensTCP.html

    Das S7 Protokoll liegt nun quasi eine Ebene höher im ISO/OSI 7 Schichtenmodell. read_iso()/write_iso() sind logisch die Transportschicht,
    während das S7 Protokoll in der Anwendungsschicht oben drüber liegt.

  9. #8
    Registriert seit
    13.03.2006
    Beiträge
    428
    Danke
    5
    Erhielt 43 Danke für 43 Beiträge

    Standard

    Der ISO Port ist 102

    lehrig@nb4lehrig:~> grep 102 /etc/services | grep ISO
    iso-tsap 102/tcp # ISO-TSAP Class 0
    iso-tsap 102/udp # ISO-TSAP Class 0

    Der Port 112, wie oben gesagt wurde ist NICHT ISO sondern

    lehrig@nb4lehrig:~> grep 112/ /etc/services
    mcidas 112/tcp # McIDAS Data Transmission Protocol
    mcidas 112/udp # McIDAS Data Transmission Protocol
    Zitieren Zitieren kleiner Nachtrag  

  10. #9
    Registriert seit
    28.10.2005
    Ort
    Ottweiler, Saar
    Beiträge
    940
    Danke
    259
    Erhielt 124 Danke für 109 Beiträge

    Standard

    Ja is gut, 112 war ein Tippfehler...
    Danke.

  11. #10
    TheEngineer0815 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    27.01.2009
    Beiträge
    9
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    daveDisconnectPLC():

    Hallo, was macht die Funktion überhaupt?
    Irgendwie hab ich wenn ich mir nodave.c so ansehe den Eindruck -> die wird aufgerufen aber tut nichts.

    erst passiert:
    int DECL2 daveDisconnectPLC(daveConnection * dc) {
    return dc->iface->disconnectPLC(dc);
    }

    dann im Interface:

    di->disconnectPLC=_daveReturnOkDummy2;

    int DECL2 _daveReturnOkDummy2(daveConnection * dc){
    return 0;
    }


    hm.......
    wie wird die Verbindung jetzt überhaupt beendet???
    über Readbytes werden nämlich danach immer noch Daten aus der SPS ausgelesen, das möchte ich natürlich nicht.

Ähnliche Themen

  1. CPU 314 zeigt falsche Bestellnummer an
    Von damu60 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 09.11.2010, 14:49
  2. falsche Passworteingabe OP77B
    Von isensmet im Forum HMI
    Antworten: 7
    Letzter Beitrag: 05.06.2009, 12:05
  3. 3 Mal falsche Passwort
    Von Pikador im Forum HMI
    Antworten: 4
    Letzter Beitrag: 19.02.2008, 09:02
  4. Falsche Ware
    Von waldy im Forum Stammtisch
    Antworten: 33
    Letzter Beitrag: 23.01.2008, 00:42
  5. op 27 falsche eingabe
    Von Anonymous im Forum HMI
    Antworten: 5
    Letzter Beitrag: 23.09.2004, 19:38

Lesezeichen

Berechtigungen

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