# Profibus Signale auslesen



## Ragnaroek18 (28 Oktober 2010)

Hallo,

Ich hab mal wieder ein Projekt vor mir. Und zwar würde ich gerne über die MPI/DP Schnittstelle eines FieldPG (Windows XP) Daten die über den Profibus gesendet werden erfassen. Vielleicht zunächst einfach nur zum mitrschneiden und dann Programme erstellen um spezifische Diagnosen zu tätigen.
Das ist für mich jetzt ein ganz neues Gebiet und ich will erstmal einen Überblick bekommen. 

Was ist alles nötig damit ich dieses Ziel erreichen kann.
Muss ich für die Schnittstelle Treiber programmieren?
Wenn ich den Datenstrom irgendwie erfassen könnte dann müsste ich doch nur die Daten nach dem Protokoll entschlüsseln bzw. filtern oder?

Später soll man dann vielleicht auch über andere Schnittstellen die Daten erfassen können.

Zeit habe ich aufjedenfall. Könnte eventuell auch meine Bachelorarbeit darauf aufbauen.

Wenn ihr Literaturhinweise, Tipps oder Lösungsvorschläge habt wäre ich sehr erfreut.


----------



## Ralle (28 Oktober 2010)

Ich würde mal hier im Forum mit der Suche nach "Analyzer" beginnen. Da gibt es diverse Beiträge und auch viele Links u.a. zu Software, die genau das macht. Auch Software, die die Signale am Profibus exakt mitschneidet gibt es, z.Bsp. u.a. von Autem.


----------



## Ragnaroek18 (28 Oktober 2010)

Ok, schonmal Danke für die schnelle Antwort.

Habe jetzt mal ein paar Beiträge zu den scheinbar gängigen Analyzern (Service Lab, SPS Analyzer, WinPLC, IBA...usw) gelesen. Allerdings finde ich diese für meine Bedürfnisse viel zu umfangreich. Außerdem sprengen sie das Budget, welches bei quasi null Euro liegt.

Im Endeffekt soll ich auch nur eine Oberfläche mit LED's programmieren welche dann bestimmte Zustände und Signale einer Sinumerik anzeigt.

Wie gesagt ich habe viel Zeit und kann mich in diverse neue Bereiche einarbeiten und selber entwickeln/programmieren.


----------



## Ralle (28 Oktober 2010)

Ok, dann suche mal hier unter "libnodave" (freeware). Damit kannst du die Daten einer S7 lesen und schreiben.


----------



## centipede (28 Oktober 2010)

Den Amprolyzer von Siemens gibts doch mittlerweile auch kostenlos zum Download:


----------



## LowLevelMahn (28 Oktober 2010)

*eine Sinumerik - dann erkläre mal genau was du machen willst*



> ...welche dann bestimmte Zustände und Signale einer Sinumerik anzeigt.


welche Zustände denn genau - falls es sich dabei nur um SPS-Dinge z.B. Merker, Bytes, Bits usw. handelt kannst du auf Libnodave oder andere S7-Anbindungen für PCs setzen
(das geht dann auch von C/C++, VB, ... bis C# und Java)

möchtest du aber NCK-Spezifische Informationen haben also z.B. Achsposition, aktiver Kanal usw. dann wirst du mit Libnodave und Konsorten keinen Erfolg haben -> die NC ist keine SPS

du kannst aber:


über den NCDDE-Server gehen (DDE basierte Kommunikation zum Schreiben/Lesen/Horchen von SPS/NC-Daten) -> Testprogramm unter f:\mmc2\ddetest.exe


 die SOPCMaschineSwitch-OPC Server des Sinumerik-Systems nutzen (Funktionsgleich zum DDE-Server) unter f:\mmc2\opc\... und z.B. OPCExplorer


 die NC-Daten intern auf die SPS kopieren und dann per Libnodave aus der SPS lesen
 oder auch als einzige kommerzielle nicht-Siemens-Lösung die NCK-Extension von Deltalogics AGLink nutzen


----------



## Ragnaroek18 (2 November 2010)

*libnodave*

Vielen Dank für die hilfreichen Antworten.

Ich hab mich jetzt mal genauer erkundigt was denn überhaupt die Anforderungen sind.

Es sollen eigentlich nur Schnittstellensignale aus einem DB auf der Sinumerik ausgelesen werden und dann grafisch dargestellt.
Dafür ist libnodave die beste Lösung.

Habe auch bereits mit dem Testprogramm über Ethernet Daten aus einem DB auslesen können.

Jetzt versuche ich gerade ein eigenes Programm in Visual C++ (Visual Studio 2010) zu bauen.Weis allerdings noch nicht wie ich genau die dll da einbinden muss. Aber ich beschäftige mich noch ein bissel damit.

Ich hab auch noch nicht ganz verstanden wann und wofür ich die vcmakefile.bat brauche(hab ich in einer Readme File gelesen). Hab die mal ausgeführt mit angepassten Pfaden, aber dann kommt eine Fehlermeldung "msdp100.dll" konnte nicht gefunden werden, die wird von einer cl.exe genutzt.

Vielleicht kann mir da ja noch jemand helfen!?


----------



## Ragnaroek18 (3 November 2010)

*lib h dll und mehr*

Ich brauche nochmal dringend Hilfe.

Und zwar bin ich mir nicht sicher ob ich alles richtig eingebunden habe.

Ich habe in Visual C++ 2010 ein neues Projekt erstellt (Win32 Konsolenanwendung).

Habe mir dann eine C Datei erstellt mit folgendem Inhalt.


```
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define BCCWIN

#include "nodave.h"
#include "openSocket.h"

int main(){
    daveInterface * di;
    daveConnection * dc;
    _daveOSserialType fds;
    PDU p;
    daveResultSet rs;
    
    daveSetDebug(daveDebugPrintErrors);

}
```

Ich will erstmal noch keine Funktion haben. Sondern nur mal die .exe erstellen.

Jetzt weis ich nicht ob ich alles richtig eingefügt habe. Die nodave.h und openSocket.h habe ich in den Projektordner kopiert. Sonst hätte er Sie auch nicht gefunden.
Außerdem liegen dort auch die libnodave.dll und libnodave.lib, welche nochmals im Debugordner liegen. Muss das so?

Bei den Linkereinstellungen habe ich auch nochmal denm Pfad zur libnodave.lib angegeben.

Ich bekomme jetzt beim Kompilieren folgenden Fehler:

```
MSVCRTD.lib(crtexew.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_WinMain@16" in Funktion "___tmainCRTStartup".
c:\dokumente und einstellungen\scenic.fusie\eigene dateien\visual studio 2010\Projects\DBlesen\Debug\DBlesen.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
```

Was habe ich noch nicht richtig gemacht?


----------



## Ragnaroek18 (8 Dezember 2010)

*Exception_Access_Violation*

Hey,

Ich möchte den Post nochmal aufleben lassen. Habe jetzt mein vorheriges Problem lösen können. Bei Bedarf stelle ich die Lösung auch zur Verfügung.

Bin jetzt aber auf C++ genauer Ultimate++ umgestiegen um .NET zu umgehen.

Habe erfolgreich libnodave eingebunden und auch schon ein kleines Programm geschrieben zum auslesen einiger DB's. Man kann bei dem Programm auswählen ob man per Ethernet (TCP ISO) oder MPI (CP5611->S7Online) verbinden möchte. Das funktioniert auch. Einziges Problem ist wenn ein anderer PC nun kein STEP7 oder die Schnittstelle CP5611 besitzt dann tritt ein schwerwiegender Fehler beim ausführen der Zeile:


```
fds.rfd=openS7online("/S7online",0);
```
Die Exception lautet dann (mit dem Debugger ausgeführt):


> Exception: C0000005 at 737AC9F1
> EXCEPTION_ACCESS_VIOLATION
> reading at 00000000


Nun möchte ich wissen ob es eine Möglichkeit gibt diese Zeile nicht auszuführen wenn STEP7/CP5611 nicht vorhanden ist oder ob man die Exception über einen try-catch Block erfassen kann.

Hat da jemand eine Idee?


----------

