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

Ergebnis 1 bis 5 von 5

Thema: [Libnodave] Beispiel TCP Verbindung zu S7-Welt

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Vielleicht interessiert es ja noch mehr Leute, wie man die Testprogramme nutzt. Hier eine Anleitung mit Bildern:

    1. Du öffnest im Windows-Startmenü "Ausführen"
    2. Du gibst "cmd" ein. An diesen Punkt kommst du in XP auch über Zubehör/Eingabeaufforderung.
    3. Du hast jetzt ein Kosolenfenster wie dieses (Screenshot cmd.gif)
    Anhang 20459
    4. Darin zum Ort wechseln, wo du libnodave abgespeichert hast, darin zum Verzeichnis win (cmd2.gif)
    Anhang 20460
    5. Jetzt kannst du das Testprogramm testISO_TCP.exe mit der IP-Adresse deiner SPS aufrufen (cmd3.gif). Bei mir hat es mit dem default-mäßigen Slot 2 funktioniert.
    Anhang 20461
    6. Mit --slot=1 kannst du eine Slot-Nummer angeben: Hier funktioniert es dann aber nicht mehr...(cmd4.gif)
    Anhang 20462
    7. Wenn du wissen willst, was genau passiert, füge Option -d hinzu (cmd5.gif). Man sieht die Daten enes Paketes, das an die SPS gesendet wird, aber die SPS antwortet nie: "timeout in ReadISOpacket".
    Anhang 20463
    8. Wenn du die Ausgabe mit der Debug-Option in eine Datei leiten willst, hängst du ">degug.txt" an die Befehlszeile an (cmd6.gif).
    Du wirst keine Ausgabe mehr sehen. Statt dessen wurde die Datei debug.txt geschrieben, die ich hier auch anhänge.

    Schade, ich darf nur 5 Dateien anhängen...
    Angehängte Grafiken Angehängte Grafiken

  2. Folgende 3 Benutzer sagen Danke zu Zottel für den nützlichen Beitrag:

    ebt'ler (22.07.2013),ob35 (29.07.2015),thomass5 (21.07.2013)

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

    Standard

    Also gehts hier weiter...
    8. Wenn du die Ausgabe mit der Debug-Option in eine Datei leiten willst, hängst du ">degug.txt" an die Befehlszeile an (cmd6.gif).

    Du wirst keine Ausgabe mehr sehen. Statt dessen wurde die Datei debug.txt geschrieben, die ich hier auch anhänge.Anhang 20464
    Anhang 20465
    Angehängte Grafiken Angehängte Grafiken
    Angehängte Dateien Angehängte Dateien

  4. Folgende 2 Benutzer sagen Danke zu Zottel für den nützlichen Beitrag:

    ob35 (29.07.2015),thomass5 (21.07.2013)

  5. #3
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    10.976
    Danke
    897
    Erhielt 3.227 Danke für 2.608 Beiträge

    Standard

    OK, anbei ein komplettes Excel-Beispiel für zwei Tankstandanzeigen mit dem Auslesen der Daten per Ethernet aus drei verschiedenen SPS
    • CPU 315-2DP + CP 343-1
    • CPU 314C + S7LAN Ethernet/MPI-Adapter
    • CPU 316 + IBH NetLink Lite Ethernet Gateway



    Für die vielfältigen und speziellen Wünsche von Produktionsleitung, Abteilungsleitern, Schichtleitern, ... verwende ich oft Excel und LIBNODAVE (0.8.4.5)
    (siehe z.B. den Ausdruck einer etwas aufwendiger formatierten Tankanzeige GAP-Tanks.JPG - ist nicht im Beispiel enthalten )

    Meine Anwendungen sind meistens nach dem gleichen Schema aufgebaut:
    • ein Excel-Blatt mit einer Tabelle und/oder grafisches Diagramm und ein Button "Werte aus PLC lesen"
    • der Button ruft eine für dieses Blatt programmierte VBA-Routine readFrom...() auf, um die Daten einmalig aus der SPS zu lesen
    • readFrom...()
      - baut die Verbindung zu einer CPU auf: res = connect...(ph, di, dc)
      - liest Werte aus der CPU: res2 = daveReadBytes(dc, ...) und kopiert diese dann in das Tabellenblatt
      - schreibt bei Erfolg einen Lese-Zeitstempel in das Tabellenblatt
      - schließt die Verbindung wieder und gibt die verwendeten Ports frei: cleanUp(ph, di, dc)


    Für eigene Anwendungen sind in den connect...() die Verbindungsparameter anzupassen, z.B. die IP-Adresse der SPS.
    Meine ausführlichen Kommentare im VBA-Code sollten zum Verstehen und Anpassen des Beispiels ausreichen.
    Wie man Excel bedient und wie man in Excel mit VBA programmiert sollte man schon wissen oder in der Excel/VBA-Hilfe nachlesen.
    Ich verwende Excel 2002 als Entwicklungsplattform. Die xls-Dateien funktionieren auch unter neueren Excel-Versionen.
    Das Ausführen von Makros muß in Excel erlaubt sein.

    Um die Excel-Anwendungen vor "versehentlichen" Änderungen durch Anwender zu schützen haben die Blätter einen Blattschutz (ohne Passwort) und das VBA-Modul ist passwortgeschützt - Passwort ist: 100
    Im VBA-Modul sind nur die "ungefährlichen" Funktionen der libnodave.dll deklariert - die Deklarationen der in-die-SPS-schreibenden Funktionen habe ich absichtlich weggelassen.
    Ich lese immer nur einmalig "auf Knopfdruck" die Daten aus den SPS. Zyklisches lesen ist mit Excel zwar möglich, ich verwende es aber nicht - meine Anwender schafften es immer wieder, Excel dabei zu crashen.

    In den beteiligten SPS stelle ich die Daten meistens extra in einem zusammenhängenden DB-Bereich zusammen. Dann reicht meist ein einziges Lese-Kommando und ein versehentliches Schreiben auf diese Datenkopien hat keinen Einfluß auf das SPS-Programm.


    Anbei die Excel-Datei Tankanzeigen_mit_Libnodave.xls
    Zum Lesen des VBA-Programmcodes ohne Excel die Tankanzeigen_mit_Libnodave.xls.vba.txt, welche nur den projektspezifisch programmierten VBA-Teil aus der xls-Datei enthält.


    Die lizenzkostenfreie Library LIBNODAVE gibt es hier:
    http://libnodave.sourceforge.net/
    unter Windows XP kopiere die libnodave.dll nach C:\WINDOWS\system

    Zum Thema "Excel-Funktionen periodisch aufrufen":
    http://www.cpearson.com/excel/OnTime.aspx

    Harald
    Angehängte Grafiken Angehängte Grafiken
    Angehängte Dateien Angehängte Dateien
    Geändert von rostiger Nagel (21.07.2013 um 17:01 Uhr) Grund: Zitate aus dem Ursprungsthread entfernt
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet
    Zitieren Zitieren Programmbeispiel für grafische Datenanzeige mit EXCEL + LIBNODAVE  

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

    AirKlaus (24.09.2017),B3nnY (31.05.2015),Bobbybau91 (07.06.2017),Burkhard (06.12.2013),ebt'ler (22.07.2013),kocken (15.11.2017),Nuan (18.01.2014),ob35 (29.07.2015),pylades (28.04.2014),thomass5 (21.07.2013),Timmek (18.02.2014),Tuffi (10.10.2013)

  7. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    10.976
    Danke
    897
    Erhielt 3.227 Danke für 2.608 Beiträge

    Standard

    Hier ein Excel-Beispiel, das sowohl unter Excel (64-Bit) als auch Excel (32-Bit) funktioniert.
    Es liest Daten aus S7-300, einmal über CP343-1 bzw. PN-CPU, einmal über einen IBH NetLink Lite Ethernet Adapter. Im VBA-Modul sind die Deklarationen zur Einbindung der libnodave.dll-Funktionen (64-Bit und 32-Bit).

    Eine für 64-Bit kompilierte Version der libnodave.dll findet man hier:
    https://github.com/dotnetprojects/DotNetSiemensPLCToolBoxLibrary /externalDlls/ libnodave_jfkmod64.dll
    siehe auch LibNodave 64 Bit.

    Die DLL am besten nach C:\WINDOWS\system32 kopieren (auch die 64-Bit-Version).

    Hinweise zur VBA-Kompilierungskonstante Win64 und zur Declare-Anweisung mit PtrSafe-Attribut
    Kompatibilität zwischen der 32-Bit-Version und der 64-Bit-Version von Office 2010
    Angehängte Dateien Angehängte Dateien
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet
    Zitieren Zitieren Programmbeispiel für EXCEL 64-Bit und 32-Bit  

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

    Boxy (19.04.2016)

  9. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    10.976
    Danke
    897
    Erhielt 3.227 Danke für 2.608 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ein weiteres Excel-Beispiel: Auslesen eines Logbuch-Ringpuffers mit Libnodave
    Es funktioniert unter Excel 64-Bit und auch Excel 32-Bit.

    Das Logbuch liegt in einer S7-300 (PN oder mit CP343-1) in DB10.DBB2...DBB1001 und hat diese Struktur:
    Code:
    TYPE "Logbucheintrag"
      STRUCT
       TimeStamp : DATE_AND_TIME ;
       EventID   : BYTE ;
       ExtraInfo : BYTE ;
      END_STRUCT ;
    END_TYPE
    
    DATA_BLOCK "Logbuch"
      STRUCT
       LastIndex : INT  := -1;     //Schreibzeiger: Index des zuletzt beschriebenen Arrayplatzes
       LBA : ARRAY  [0 .. 99 ] OF  //Logbuch-Array (als Ringpuffer genutzt)
       "Logbucheintrag";
      END_STRUCT ;
    BEGIN
       LastIndex := -1; 
       LBA[0].TimeStamp := DT#90-1-1-0:0:0.000;
       LBA[0].EventID := B#16#0;
       LBA[0].ExtraInfo := B#16#0;
    ...
       LBA[99].ExtraInfo := B#16#0;
    END_DATA_BLOCK
    Programmierung und Step7-Projekt des Logbuchs siehe Überwachung von Digital Eingängen mit Uhrzeit

    Zum Ausprobieren den DB10 in die Test-SPS laden und im VBA-Modul10 in der Function initialize_xyz() die IP-Adresse der SPS anpassen (für S7-400/1200/1500 zusätzlich die Slot-Nummer auf den Steckplatz der CPU anpassen).

    VBA-Function zum Konvertieren eines S7-DATE_AND_TIME in einen Excel-Zeitwert
    (vereinfacht wird angenommen, daß alle Datumsangaben 2000 bis 2099 sind)
    Code:
    '*******************************************************************************
    ' S7-DATE_AND_TIME zu Excel-Zeitwert konvertieren
    '*******************************************************************************
    Function CS7DT2xlTime(DTH As Long, DTL As Long) As Double
    ' Den VBA-Datentyp "LongLong" (8 Byte) gibt es nur auf 64-Bit-Plattformen,
    ' deshalb den S7-DATE_AND_TIME in 2 Teilen je 4 Byte (DWord) übergeben.
    Dim s$, dblT#
    s = Right$("00000000" & Hex$(DTH), 8) & Right$("00000000" & Hex$(DTL), 8)
    dblT = DateSerial(CInt(Mid$(s, 1, 2)) + 2000, CInt(Mid$(s, 3, 2)), CInt(Mid$(s, 5, 2))) _
         + TimeSerial(CInt(Mid$(s, 7, 2)), CInt(Mid$(s, 9, 2)), CInt(Mid$(s, 11, 2))) _
         + CInt(Mid$(s, 13, 3)) / 86400000
    CS7DT2xlTime = dblT
    End Function
    Angehängte Dateien Angehängte Dateien
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet
    Zitieren Zitieren Logbuch auslesen  

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

    Wolfgang14 (08.11.2017)

Ähnliche Themen

  1. LibNoDave VB.Net Beispiel
    Von Krumnix im Forum Hochsprachen - OPC
    Antworten: 16
    Letzter Beitrag: 01.11.2013, 17:43
  2. LibNoDave VB6 Beispiel Programm
    Von Jochen Kühner im Forum HMI
    Antworten: 1
    Letzter Beitrag: 28.03.2009, 11:49
  3. Beispiel Libnodave mit Excel
    Von MW im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 31.03.2008, 11:52
  4. Unterschied TCP- und ISO-on-TCP-Verbindung
    Von kassla im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 19.08.2007, 07:27
  5. TCP-libnodave
    Von leo im Forum Feldbusse
    Antworten: 2
    Letzter Beitrag: 06.07.2006, 10:29

Lesezeichen

Berechtigungen

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