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

Ergebnis 1 bis 8 von 8

Thema: libnodave - Kommunikationsaufbau

  1. #1
    Registriert seit
    13.07.2015
    Beiträge
    3
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guten Tag,
    für ein Projekt möchte ich eine Verbindung vom PC (einem C++ Programm) zu einer SPS herstellen.
    Im Internet bin ich auf die libnodave Bibliothek gestoßen. Ich verwende eine CPU 315 - 2PN/DP und einen Windows7 Rechner.
    Ich wollte nun mit dem testISO_TCP(simplified) Beispielprogramm die Verbindung herstellen.
    Da ich nicht so der IT Fachmann bin, beschreibe ich einfach was ich gemacht habe und wo mein Problem liegt. Ich hoffe jemand kann mir helfen

    1. Bibliotheken und Headerdateien werden im C++ Programm erkannt und ich kann das Programm auch debuggen.
    2. Meine CPU hat die IP Adresse 192.168.0.1, desshalb habe ich meinem PC die IP Adresse 192.168.0.100 zugewiesen. Der PC erkennt die LAN Verbindung.
    3. Wenn ich das Programm jetzt starte kommt die Meldung:
    "Usage: testISO_TCP IP-Address of CP"und bricht das Programm ab.
    Mir fehlt jetzt der Ansatz wie ich überhaupt die Kommunikation zur SPS aufbauen kann, ich hab das Gefühl, dass irgendwas mit der IP Adressen nicht stimmt oder ich noch irgendeine Einstellung in Simatic vornehmen muss, da habe ich nämlich bisher noch nichts geändert ( bloß die Hardwarekonfiguration erstellt und der CPU übergeben).

    Ich hoffe jemand kann mir helfen.


    Zitieren Zitieren libnodave - Kommunikationsaufbau  

  2. #2
    Registriert seit
    23.10.2009
    Beiträge
    390
    Danke
    58
    Erhielt 112 Danke für 86 Beiträge

    Standard

    Die Fehlermeldung sagt doch schon alles:
    Du musst hinter testISO_TCP auch die IP-Adresse der SPS angeben.
    Gruß
    Erich


    Geändert von LargoD (13.07.2015 um 13:33 Uhr)

  3. #3
    Fabse ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    13.07.2015
    Beiträge
    3
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ok, ich danke dir schonmal für deine schnelle Antwort Erich.

    Allerdings glaube ich mitlerweile, dass das Programm sich die ip Adresse selber nimmt und zwar an der Stelle:
    fds.rfd=openSocket(102, argv[5]); und zwar das argv[5] kann das sein?
    Wenn nicht, weiß vllt. jmd. wo ich das im Code unten angeben muss?

    Zudem wollte ich nochmal nachfragen ob ich meinen PC überhaupt direkt per Ethernet an meine CPU anschließen kann, oder ob ich dafür einen gesonderten CP brauche?

    #include "StdAfx.h"
    #include <stdlib.h>
    #include <stdio.h>
    #include "nodavesimple.h"
    #include "nodave.h"
    #include "openSocket.h"

    char ip[] = "192.168.0.1";

    int main(int argc, char **argv) {
    int a,b,c,res;
    float d;
    daveInterface * di;
    daveConnection * dc;
    _daveOSserialType fds;

    daveSetDebug(daveDebugPrintErrors);

    if (argc<2) {
    printf("Usage: testISO_TCP IP-Address of CP\n");
    exit(-1);
    }

    fds.rfd=openSocket(102, argv[5]);
    fds.wfd=fds.rfd;

    if (fds.rfd>0) {
    di = daveNewInterface(fds,"IF1", 0, daveProtoISOTCP, daveSpeed187k);
    daveSetTimeout(di,5000000);
    dc =daveNewConnection(di,2,0, 2); // insert your rack and slot here

    if (0==daveConnectPLC(dc)) {
    printf("Connected.\n");

    res=daveReadBytes(dc,daveFlags,0,0,16,NULL);
    if (0==res) {
    a=daveGetU32(dc);
    b=daveGetU32(dc);
    c=daveGetU32(dc);
    d=daveGetFloat(dc);
    printf("FD0: %d\n",a);
    printf("FD4: %d\n",b);
    printf("FD8: %d\n",c);
    printf("FD12: %f\n",d);
    } else
    printf("failed! (%d)\n",res);

    printf("Finished.\n");
    return 0;
    } else {
    printf("Couldn't connect to PLC.\n");
    getchar();
    return -2;
    }
    } else {
    printf("Couldn't open TCP port. \nPlease make sure a CP is connected and the IP address is ok. \n");
    getchar();
    return -1;
    }
    return 0;
    }

    Das war vorhin meine erste Frage in so einem Forum wie diesem und ich habe prompt eine Antwort erhalten. Ich muss sagen ich bin echt begeistert.

  4. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Ein C++ Programmierer sollte eigentlich wissen, was eine Eingabeaufforderung ist und wie man die bedient..

    Am Windows-Startknopf gibst Du mal CMD ein und Enter. In dem erschienenen schwarzen Fenster gehst Du mittels "CD \<pfad zu deiner exe>" in das Verzeichnis, wo Deine testISO_TCP.exe liegt und startest nun die testISO_TCP.exe mit Angabe der IP Deiner CPU:
    ...>testISO_TCP 192.168.0.1

    Die hinter testISO_TCP eingegebenen Parameter der Kommandozeile kann die Exe in main() im Array argv auslesen.

    Hier in dieser FAQ kannst Du sehen, wie das mit der Eingabeaufforderung aussieht:
    [Libnodave] Beispiel TCP Verbindung zu S7-Welt

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. Folgende 2 Benutzer sagen Danke zu PN/DP für den nützlichen Beitrag:

    Fabse (14.07.2015),LargoD (13.07.2015)

  6. #5
    Registriert seit
    23.10.2009
    Beiträge
    390
    Danke
    58
    Erhielt 112 Danke für 86 Beiträge

    Standard

    Zitat Zitat von Fabse Beitrag anzeigen
    Allerdings glaube ich mitlerweile, dass das Programm sich die ip Adresse selber nimmt und zwar an der Stelle:
    fds.rfd=openSocket(102, argv[5]); und zwar das argv[5] kann das sein?
    Zum Glück hat Software weniger mit Glauben als mit Wissen zu tun.
    Mach Dich mal schlau, welche Argumente Du dem Programm beim Aufruf mitgeben musst. argv[...] sind genau die Argumente der Kommandozeile.
    Wenn Du selbst programmieren willst, solltest Du das wissen.

  7. Folgender Benutzer sagt Danke zu LargoD für den nützlichen Beitrag:

    Fabse (14.07.2015)

  8. #6
    Registriert seit
    07.01.2011
    Ort
    Rhein-Neckar
    Beiträge
    36
    Danke
    1
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Hallo Fabse,

    was Du hier als Code anführst sieht ziemlich stark nach den Libnodave beispielen aus!

    Dein Programm gibt Usage: testISO_TCP IP-Address of CP aus da Du hier am Anfang landest:

    Code:
    if (argc<2) {
    printf("Usage: testISO_TCP IP-Address of CP\n");
    exit(-1);
    } 
    
    Dies lässt wiederum zurückschießen, das Du hier in die Main-Funktion keine Argumente übergibst!
    Code:
    ...
    int main(int argc, char **argv)
    ...
    


    Also am besten noch einmal schauen welche Argumente wirklich im Code erwartet werden oder den Code so modifizieren das keine Argumente notwendig sind


    Gruß Dominik

    http://domes-finest.de - Mein kleiner Blog

  9. Folgender Benutzer sagt Danke zu dolo280 für den nützlichen Beitrag:

    Fabse (14.07.2015)

  10. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Zitat Zitat von Fabse Beitrag anzeigen
    Allerdings glaube ich mitlerweile, dass das Programm sich die ip Adresse selber nimmt und zwar an der Stelle:
    fds.rfd=openSocket(102, argv[5]); und zwar das argv[5] kann das sein?
    Ja, Du kannst die IP auch fest im Programm einprogrammieren:

    Code:
    char ip[] = "192.168.0.1";
    
    int main(int argc, char **argv) {
    ...
    
    
    //das Exit bei leerer Kommandozeile verhindern: Zeilen löschen oder auskommentieren
    //    if (argc<2) {
    //      printf("Usage: testISO_TCP IP-Address of CP\n");
    //      exit(-1);
    //    }    
    
        fds.rfd=openSocket(102, "192.168.0.1");  // oder auch so: fds.rfd=openSocket(102, ip);
    ...
    }

    Deinen Computer kannst Du direkt mit einem Netzwerkkabel mit der PN-Schnittstelle der CPU verbinden. Oder über einen Switch.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  11. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    Fabse (14.07.2015)

  12. #8
    Fabse ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    13.07.2015
    Beiträge
    3
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Jo besten Dank an euch alle,
    ich bin kein erfahrener Programmierer und das mit der Bedeutung von argv und argc habe ich, so meine ich, nie im Lehrbuch gelesen. Da ich das bisher noch nicht gebraucht habe, habe ich dem auch nicht viel bei gemessen. Vielen Dank. Wie gut, dass ich hier nachgefragt habe.

Ähnliche Themen

  1. TIA CP 343-1 Kommunikationsaufbau nach Spannungsausfall
    Von Niklas412 im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 24.02.2015, 08:48
  2. Antworten: 0
    Letzter Beitrag: 09.09.2010, 00:27
  3. ÄÖnderungen am libnodave.net.cs File von libnodave
    Von Jochen Kühner im Forum Hochsprachen - OPC
    Antworten: 5
    Letzter Beitrag: 12.05.2010, 16:56
  4. LibNoDave unter VB.Net ohne libnodave.net.dll
    Von Earny im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 09.03.2010, 18:57
  5. libnodave: Woher kommt die "libnodave.net.dll"?
    Von Thomas_v2.1 im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 10.11.2008, 12:07

Stichworte

Lesezeichen

Berechtigungen

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