LibNodave 0.8.4 - daveConnectPLC liefert Rückgabewert 4

Nuecke

Level-1
Beiträge
35
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich habe mit libNoDave problemlos eine Verbindung über ISO TCP herstellen können, Werte aus der Steuerung auslesen funktioniert einwandfrei.
Eine Verbindung über MPI (mit Siemens Programmieradapter) bekomme ich jedoch nicht hin. die Funktion daveConnectPLC gibt immer den Wert 4 zurück. Was bedeutet dies? Konnte bisher nichts darüber finden, bin am weitersuchen.

Hier der Auszug aus meinem Programm:
ph = setPort(CPar.port, CPar.baud, Asc(Left$(CPar.parity, 1)))
If (ph > 0) Then
di = daveNewInterface(ph, ph, "IF1", 0, daveProtoMPI2, daveSpeed187k)
res = daveInitAdapter(di)
If res = 0 Then
dc = daveNewConnection(di, MpiPpi, Rack, Slot)
res = daveConnectPLC(dc)
Debug.Print ("res=" + Str(res) + " " + daveStrError(res))
If res = 0 Then
Initialize = 0
End If

Habe das alles aus dem Beispiel Modul12.bas in VB6 übernommen.

ich sitz inzwischen komplett auf dem Schlauch und hab den Eindruck ich seh den Wald vor lauter Bäumen nicht mehr :confused:, vielleicht kann mir ja jemand weiterhelfen?

Gruß
Nuecke
 
Hast du schon das Testprogramm (testmpi.exe) ausprobiert ????
wenn ja, gibts da fehler ???

in daveStrerror (nodave.c) steht drin was die Codes Bedeuten:

4 = daveAddressOutOfRange: = "the desired address is beyond limit for this PLC";
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hast du schon das Testprogramm (testmpi.exe) ausprobiert ????
wenn ja, gibts da fehler ???

in daveStrerror (nodave.c) steht drin was die Codes Bedeuten:

4 = daveAddressOutOfRange: = "the desired address is beyond limit for this PLC";
Sorry, die Texte passen überwiegend nur für Fehlercodes, die von der SPS übermittelt werden...Ich schätze, hier kommt nichts von der SPS zurück...
Geht testMPI?
 
Hallo zusammen ,

evt . liegt es am MPI2 aufruf . Hab auch zuerst mit VB6 mit Libnodave probiert . Bei mir hat es mit folgendem geschnackelt ( mit genuzter adapteradresse 31 und auch 0 ) :

myPH = setPort(port, baud$, Asc(Left$(parity$, 1)))
myDI = daveNewInterface(myPH, myPH, "IF1", 31, daveProtoMPI, daveSpeed187k)

mfg der Micha
 
Hallo zusammen ,

evt . liegt es am MPI2 aufruf . Hab auch zuerst mit VB6 mit Libnodave probiert . Bei mir hat es mit folgendem geschnackelt ( mit genuzter adapteradresse 31 und auch 0 ) :

myPH = setPort(port, baud$, Asc(Left$(parity$, 1)))
myDI = daveNewInterface(myPH, myPH, "IF1", 31, daveProtoMPI, daveSpeed187k)

mfg der Micha
Deshalb fragen wir nach testMPI: Da kann man die verschiedenen Untervarianten mal eben mit einer Option auf der Kommandozeile probieren. testMPI -2 COM1 verwendet daveProtoMPI2 usw.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hm , habe die Konsolentestprogramme noch net ausprobiert . Werde mir die mal anschauen . Habe gerade mal das kleene Testprog in VB6 mit 0.8.4 gefüttert und mit daveProtoMPI2 probiert , bekomme dort auch Fehler 4 , daveProtoMPI funzt .
 
Hallo zusammen,
also mit den Konsolentestprogrämmchen bekomme ich folgendes ergebnis

D:\temp\LibNoDave>testmpi -d COM1
1st parameter -d
turning debug on
fds8
setPort COM1
setPort 38400
setPort O
fds.rfd 2004
fds.wfd 2004
IF1 enter initAdapter(1).
I send:
0:0x02,
readSingle 0 chars. 1st 02
IF1 initAdapter() no answer (DLE) from adapter.
readSingle 0 chars. 1st 10
IF1 initAdapter() no answer (DLE) from adapter.
IF1 initAdapter() fails.

--> Verwende ich in VB6 daveProtoMPI, so erhalte ich bei daveInitAdapter(di) als Rückgabewert -44

Wenn ich testMPI -2 verwende, bekomme ich folgendes Ergebnis
D:\temp\LibNoDave>testmpi -2 -d COM1
1st parameter -2
turning debug on
fds8
setPort COM1
setPort 38400
setPort O
fds.rfd 2004
fds.wfd 2004
I send:
0:0x02,
readSingle 0 chars. 1st 02
IF1 initAdapter() no answer (DLE) from adapter.
readSingle 0 chars. 1st 10
IF1 initAdapter() no answer (DLE) from adapter.
IF1 initAdapter() success.
I send:
0:0x10,
I send:
0:0x02,
readSingle 0 chars. 1st 02
IF1 connectPLC(2) no answer (DLE) from adapter.
readSingle 0 chars. 1st 10
IF1 connectPLC(2) no answer (DLE) from adapter.
IF1 daveConnectPLC() step 4.
IF1 daveConnectPLC() step 4 ends with 4.

daveConnect step 4 scheint hier ebenfalls das Ergebnis 4 zurück zuliefern
--> Bei verwendung von daveProtoMPI2 erhalte ich bei daveConnect(dc) den Rückgabewert 4

Wenn ich das nun richtig interpretiere, scheint es bei mir hier auch mit den Konsolenprogrammen nicht zu funktionieren(?)
 
Da kommt einfach nichts vom Adapter zurück. Was ist es für ein Adapter? seriell? USB? Bei Siemens. Welche MLFB?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zottel,
es handelt sich um einen Siemens MPI-Adapter (RS232 auf MPI). MLFB kann ich leider nicht ablesen, da der Adapter schon ziemlich abgegriffen ist.
(--> Adapter siehe Bild).
Gibts da eventuell Probleme mit älteren Adapterversionen?
 

Anhänge

  • MPI_Adapter.JPG
    MPI_Adapter.JPG
    6,1 KB · Aufrufe: 24
in dieser Richtung hatte ich auch schon nachgeforscht, die Einstellung des Adapters stimmt (38400). Ich verwende diesen Adapter auch gelegentlich zum Programmieren von SPSen und habe die Einstellung soeben noch ein weiteres Mal überprüft und mit einer Steuerung getestet --> alles i.O., Zugriff mit Step7 auf eine CPU315-2DP fkt. einwandfrei.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In Libnodave 0.8.4 ist ein patch aufgenommen worden, der die RTS-Leitung vor dem Senden auf 0 zieht.
Ein anderer User (Andrea) schrieb mir vor einigen Tagen, daß es sein Adapter dort hängen bleibt und schickte einen weiteren Patch.

Im Anhang findest du testMPI aus der Version 0.8.2 (enthält keinen der Patches) und testMPI aus der (unveröffentlichten) 0.8.4.4 (enthält beide Patches). Probier mal, ob es damit geht. Dazu mußt du die Dateierweiterung .txt wieder durch .exe ersetzen. Exe-Dateien läßt die doppelpluschlaue Forumssoftware nicht zu und bewahrt uns so vor dem Bösen...

Die Patches:
Code:
   EscapeCommFunction(di->fd.rfd, CLRRTS);  // patch from Keith Harris. He says:
                         //******* this is what microwin does (needed for usb-serial)    
    WriteFile(di->fd.rfd, buffer, length, &i,NULL);
// patch from Andrea. He says:
// In this way the PC Adapter connected to CPU313C hangs waiting for RTS line before answering back.
// Added the following to regain answers:
    EscapeCommFunction(di->fd.rfd, SETRTS);
 

Anhänge

  • testMPI82.txt
    136 KB · Aufrufe: 16
  • testMPI844.txt
    136 KB · Aufrufe: 16
Zuletzt bearbeitet:
Habe beide ausgeführt, ergibt folgendes Ergebnis

D:\temp\LibNoDave\test>testmpi844 -w COM1
daveListReachablePartners List length: 126
Device at address:0
Device at address:2
ConnectPLC
PLC FD0: 2
PLC FD4: 4
PLC FD8: 6
PLC FD12: -427919360.000000
Now we write back these data after incrementing the integers by 1,2 and 3 and the float by 1.1.
Press return to continue.
FD0: 3
FD4: 6
FD8: 9
FD12: 2.200000
Now disconnecting

D:\temp\LibNoDave\test>testmpi82 -w COM1
daveListReachablePartners List length: 126
Device at address:0
Device at address:2
ConnectPLC
PLC FD0: 3
PLC FD4: 6
PLC FD8: 9
PLC FD12: 2.200000
Now we write back these data after incrementing the integers by 1,2 and 3 and the float by 1.1.
Press return to continue.
FD0: 4
FD4: 8
FD8: 12
FD12: 3.300000
Now disconnecting

Bin etwas :confused:, weil meine "testMPI.exe" hier aus dem gedownloadeten libNoDave-Paket gibt ganz andere Sachen aus :???:
 
Das sieht aber schon mal ordentlich aus. Warum testest du mit der Option -w (schreiben in die SPS)?

Was wirklich erstaunlich ist: Wenn testMPI aus 0.8.2 geht und das aus 0.8.4 nicht, müßte das heißen, daß in Version 0.8.4 mit seriellen Adaptern unter Windows GARNICHTS mehr geht. Und daß das seit einem Jahr keiner bemängelt hat.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du solltest dann mit der folgenden Version von libnodave.dll mit deinem eigenen Programm benutzen (bitte wieder die Erweiterung auf .dll setzen):
 

Anhänge

  • libnodave.txt
    124 KB · Aufrufe: 40
habe gerade das testmpi mal ausgeführt , geht bei mir auch net mit dem seriellen Adapter, dann hab ich die dll aus dem Ordner win aus dem tar Verzeichniss der 0.8.4 in meinen aktuellen Projektordner geschoben , die funktioniert net . Da scheint er recht zu haben . Gestern hatte ich die 0.8.2 in den VB6 Ordner reingeschoben , nicht wie ich geglaubt hatte die 0.8.4 . Mit der selbstkompilierten 0.8.4 geht des auch net bei dem ding .
 
Hallo zusammen,
verfolge das Thema seit gestern sehr intensiv. Beschäftige mich auch damit über den gleichen Siemens-MPI-Seriell-Adapter Daten zu schaufeln. Mit der libnodave_0.8.2 funktioniert die Kopplung endlich. Super Tipp.
Allerdings bekomme ich keine sinnvollen Daten aus der SPS. Auch wenn die Daten sich in der SPS ändern erscheinen nur unsinnige statische Werte in NoDaveDemo.
Habt Ihr dafür vielleicht eine Erklärung?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zottel,
habe mein VB6-Progrämmchen mit der von Dir gestern eingestellen DLL getestet. Der Verbindungsaufbau funktioniert nun. (Habe auch noch Version 0.8.2 ausprobiert --> Verbindungsaufbau funktioniert damit ebenso). Daten auslesen habe ich noch nicht getestet, das folgt als nächstes.
 
Habe eben Werte aus der Steuerung ausgelesen (mit DLL Version 0.8.2). Funktioniert nun einwandfrei über MPI :ROFLMAO::sc7::s12::s10:

vielen Dank für die Hilfe
viele Grüße
Nuecke
 
Allerdings bekomme ich keine sinnvollen Daten aus der SPS. Auch wenn die Daten sich in der SPS ändern erscheinen nur unsinnige statische Werte in NoDaveDemo.
Habt Ihr dafür vielleicht eine Erklärung?
Verwendest du NoDaveDemo und libnodave.dll aus der gleichen Version? Wenn du das Demo aus der 0.8.4 mit der dll aus 0.8.2 verwendest, muß es nicht gehen. Die hier gepostete korrigierte dll 0.8.4.4 sollte mit dem Demo aus 0.8.4 funktionieren.
 
Zurück
Oben