-> Hier kostenlos registrieren
Hallo zusammen,
ich hatte die direkte MPI Kommunikation etwas auf Eis gelegt, aber es gibt noch immer noch das selbe Problem bei meiner MPI Kommunikationversuchen unter libnodave (0.8.4.5) und Visual Basic 2008 Express.
Mein Ziel ist es einen Datenlogger zu programmieren, welcher konfigurierbare Datenbereiche (E,A,M,DB...) einer S7 317 PN/DP in ebenfalls konfigurierbaren Formaten (bin, dez,hex...) in eine simple Datei schreibt. Dies möchte ich absichtlich mit einem autarken Programm erstellen, da ich ohne Excel oder ähnliches auskommen möchte.
So weit so gut, über ISO TCP funktioniert das ganze schon ganz passabel, jedoch scheitere ich bei dem Versuch über den SSW7 USB nach MPI Adapter von Helmholz Daten zu lesen.
Mit dem Protokoll "libnodave.daveProtoMPI" scheint die SPS Verbindung erfolgreich initiert zu werden (der Rückgabewert von "di.initAdapter" und "dc.connectPLC" ist "0", also eigentlich alles ok, auch leuchten beim Adapter alle Kommunikations LEDs). Beim Leseversuch per "dc.readBytes" oder auch das Multiread "dc.execReadRequest" jedoch schmiert mir das Programm mit Speicherverletzungsfehler (Rückgabewert von "dc.execReadRequest": -5) ab, auch lässt sich die "erfolgreich" geöffnete Verbindung nicht mehr schliessen.
Mit den Protokollen "libnodave.daveProtoMPI2" oder "libnodave.daveProtoMPI3", "libnodave.daveProtoMPI4" und "libnodave.daveProtoMPI_IBH" bekomme ich leider gar keine Verbindung aufgebaut.
Bei "libnodave.daveProtoMPI2" ist der Rückgabewert von "di.initAdapter" "0" und "dc.connectPLC" ist Fehlercode "3", ich weiss jedoch leider nicht wo die Fehlercodes dokumentiert sind. Wenn mir vielleicht jemand mitteilen könnte wo die Rückgabewerte inkl Fehlercodes der libnodave Funktionen und auch deren Parameteroptionen aufgelistet sind würde mir dies evtl auch schon helfen den Fehler eingrenzen zu können.
Bei "libnodave.daveProtoMPI3" ist der Rückgabewert von "di.initAdapter" bereits -1, ich weiss jedoch wie gesagt leider nicht was dieser Code aussagt, da bei mir dei Funktion libnodave.daveStrerror(res) nur kryptische Zeichenketten zurück gibt.
Ich habe bei allen Versuchen, sowohl 19,2 als auch 187,5kBaud probiert, auch habe ich die Tests einmal auf einem Rechner ohne und einmal mit installiertem SIMATIC Manager durchgeführt.
Eine Frage habe ich da mal ausserdem. Wieso wird auch in diversen MPI Beispielen bei libnodave.setPort() eine niedrigere Baudrate als bei libnodave.daveInterface() angegeben. Da das Interface ja über den Port kommuniziert müsste doch eigentlich nach meinem Verständnis der Port eine höhere Rate haben als das Interface.
Für libnodave.daveInterface() gint es ja ausserdem nur eine eingeschränkte Auswahl an Baudraten wie z.B.
libnodave.daveSpeed9k '9600Baud
libnodave.daveSpeed19k '19200Baud
libnodave.daveSpeed45k '45000Baud?
libnodave.daveSpeed93k '93000Baud?
libnodave.daveSpeed187k '187500Baud
libnodave.daveSpeed500k '500000Baud
libnodave.daveSpeed1500k '1500000Baud
Bei den Beispielen wird libnodave.setPort() hingegen oftmals mit 38400Baud parametriert, welche es bei libnodave gar nicht zur AUswahl gibt. Was sind die Hintergründe und wie spielen diese Parametrierungen zusammen?
Ich bin für jede neue Erkenntnis offen und dankbar.
Gruss,
bool
ich hatte die direkte MPI Kommunikation etwas auf Eis gelegt, aber es gibt noch immer noch das selbe Problem bei meiner MPI Kommunikationversuchen unter libnodave (0.8.4.5) und Visual Basic 2008 Express.
Mein Ziel ist es einen Datenlogger zu programmieren, welcher konfigurierbare Datenbereiche (E,A,M,DB...) einer S7 317 PN/DP in ebenfalls konfigurierbaren Formaten (bin, dez,hex...) in eine simple Datei schreibt. Dies möchte ich absichtlich mit einem autarken Programm erstellen, da ich ohne Excel oder ähnliches auskommen möchte.
So weit so gut, über ISO TCP funktioniert das ganze schon ganz passabel, jedoch scheitere ich bei dem Versuch über den SSW7 USB nach MPI Adapter von Helmholz Daten zu lesen.
Mit dem Protokoll "libnodave.daveProtoMPI" scheint die SPS Verbindung erfolgreich initiert zu werden (der Rückgabewert von "di.initAdapter" und "dc.connectPLC" ist "0", also eigentlich alles ok, auch leuchten beim Adapter alle Kommunikations LEDs). Beim Leseversuch per "dc.readBytes" oder auch das Multiread "dc.execReadRequest" jedoch schmiert mir das Programm mit Speicherverletzungsfehler (Rückgabewert von "dc.execReadRequest": -5) ab, auch lässt sich die "erfolgreich" geöffnete Verbindung nicht mehr schliessen.
Mit den Protokollen "libnodave.daveProtoMPI2" oder "libnodave.daveProtoMPI3", "libnodave.daveProtoMPI4" und "libnodave.daveProtoMPI_IBH" bekomme ich leider gar keine Verbindung aufgebaut.
Bei "libnodave.daveProtoMPI2" ist der Rückgabewert von "di.initAdapter" "0" und "dc.connectPLC" ist Fehlercode "3", ich weiss jedoch leider nicht wo die Fehlercodes dokumentiert sind. Wenn mir vielleicht jemand mitteilen könnte wo die Rückgabewerte inkl Fehlercodes der libnodave Funktionen und auch deren Parameteroptionen aufgelistet sind würde mir dies evtl auch schon helfen den Fehler eingrenzen zu können.
Bei "libnodave.daveProtoMPI3" ist der Rückgabewert von "di.initAdapter" bereits -1, ich weiss jedoch wie gesagt leider nicht was dieser Code aussagt, da bei mir dei Funktion libnodave.daveStrerror(res) nur kryptische Zeichenketten zurück gibt.
Ich habe bei allen Versuchen, sowohl 19,2 als auch 187,5kBaud probiert, auch habe ich die Tests einmal auf einem Rechner ohne und einmal mit installiertem SIMATIC Manager durchgeführt.
Eine Frage habe ich da mal ausserdem. Wieso wird auch in diversen MPI Beispielen bei libnodave.setPort() eine niedrigere Baudrate als bei libnodave.daveInterface() angegeben. Da das Interface ja über den Port kommuniziert müsste doch eigentlich nach meinem Verständnis der Port eine höhere Rate haben als das Interface.
Für libnodave.daveInterface() gint es ja ausserdem nur eine eingeschränkte Auswahl an Baudraten wie z.B.
libnodave.daveSpeed9k '9600Baud
libnodave.daveSpeed19k '19200Baud
libnodave.daveSpeed45k '45000Baud?
libnodave.daveSpeed93k '93000Baud?
libnodave.daveSpeed187k '187500Baud
libnodave.daveSpeed500k '500000Baud
libnodave.daveSpeed1500k '1500000Baud
Bei den Beispielen wird libnodave.setPort() hingegen oftmals mit 38400Baud parametriert, welche es bei libnodave gar nicht zur AUswahl gibt. Was sind die Hintergründe und wie spielen diese Parametrierungen zusammen?
Ich bin für jede neue Erkenntnis offen und dankbar.
Gruss,
bool