# LibNodave 0.8.4 - daveConnectPLC liefert Rückgabewert 4



## Nuecke (4 Februar 2008)

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 , vielleicht kann mir ja jemand weiterhelfen?

Gruß
Nuecke


----------



## MW (4 Februar 2008)

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";


----------



## Zottel (4 Februar 2008)

MW schrieb:


> Hast du schon das Testprogramm (testmpi.exe) ausprobiert ????
> wenn ja, gibts da fehler ???
> 
> in daveStrerror (nodave.c) steht drin was die Codes Bedeuten:
> ...


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?


----------



## der Micha (4 Februar 2008)

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


----------



## Zottel (4 Februar 2008)

der Micha schrieb:


> 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 ) :
> 
> ...


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.


----------



## der Micha (4 Februar 2008)

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 .


----------



## Nuecke (6 Februar 2008)

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(?)


----------



## Zottel (6 Februar 2008)

Da kommt einfach nichts vom Adapter zurück. Was ist es für ein Adapter? seriell? USB? Bei Siemens. Welche MLFB?


----------



## Nuecke (6 Februar 2008)

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?


----------



## Zottel (6 Februar 2008)

Das sollte nichts besonderes sein...bist du sicher, daß du es auf 38400 Baud eingestellt hast?


----------



## Nuecke (6 Februar 2008)

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.


----------



## Zottel (6 Februar 2008)

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:

```
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);
```


----------



## Nuecke (6 Februar 2008)

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 , weil meine "testMPI.exe" hier aus dem gedownloadeten libNoDave-Paket gibt ganz andere Sachen aus :???:


----------



## Zottel (6 Februar 2008)

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.


----------



## Zottel (6 Februar 2008)

Du solltest dann mit der folgenden Version von libnodave.dll mit deinem eigenen Programm benutzen (bitte wieder die Erweiterung auf .dll setzen):


----------



## der Micha (6 Februar 2008)

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 .


----------



## suwe (7 Februar 2008)

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?


----------



## Nuecke (7 Februar 2008)

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.


----------



## Nuecke (7 Februar 2008)

Habe eben Werte aus der Steuerung ausgelesen (mit DLL Version 0.8.2). Funktioniert nun einwandfrei über MPI :sc7::s12::s10:

vielen Dank für die Hilfe
viele Grüße
Nuecke


----------



## Zottel (7 Februar 2008)

suwe schrieb:


> 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.


----------



## afk (7 Februar 2008)

Zottel schrieb:


> 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.


Falls es auch mit zusammenpassender Demo und DLL nicht funktioniert:
Liefert die Demo in ihrer Statusleiste eine Fehlermeldung ? 
Evtl. wäre ein Screenshot hilfreich.

Gruß Axel


----------



## suwe (8 Februar 2008)

Benutze die 0.8.4.4'er dll und die 0.8.4'er Version von NoDaveDemo. Die TestMPI läuft eigentlich sehr gut - Benchmarks laufen auch ab, ich kann die Anzahl der DB's usw. aus der SPS anzeigen lassen. Allerdings ist der DB nicht groß genug um ihn direkt anzeigen zu lassen. 
In NoDaveDemo werden wie gesagt keine passenden Werte angezeigt und es kommt die Fehlermeldung Error = -10.


----------



## afk (8 Februar 2008)

suwe schrieb:


> In NoDaveDemo werden wie gesagt keine passenden Werte angezeigt und es kommt die Fehlermeldung Error = -10.


Welches Protokoll verwendest Du in der Demo ?

In der Version 0.8.4 von libnodave finde ich den Returncode -10 ausschließlich bei der _daveGetResponseMPI3 (daveProtoMPI3).
Falls Du das verwendest, dann probier's doch mal mit daveProtoMPI / daveProtoMPI2.


Gruß Axel


----------



## suwe (8 Februar 2008)

Hallo afk,
es ist sehr kurios. Testmpi aus 0.8.2 und dll aus 0.8.2 funktioniert in Standardeinstellung. Adapter startet und stoppt korrekt. NoDaveDemo mit dll 0.8.2 funktioniert gar nicht. NoDaveDemo mit dll 0.8.4.4 funktioniert nur hin und wieder (wenn ich die Protokolle wechsel, programm stoppe, neu starte). Dann kommen auch korrekte Werte. Ist nur nicht reproduzierbar. Anscheinend stoppt das Programm den Adapter nicht korrekt. Zum Stoppen muß ich immer TestMPI aus 0.8.2 neu laufen lassen.

Die Kombination dll 0.8.4.4 und TestMPI 0.8.4 läuft überhaupt nicht.


----------



## Zottel (8 Februar 2008)

suwe schrieb:


> Hallo afk,
> es ist sehr kurios. Testmpi aus 0.8.2 und dll aus 0.8.2 funktioniert in Standardeinstellung. Adapter startet und stoppt korrekt. NoDaveDemo mit dll 0.8.2 funktioniert gar nicht. NoDaveDemo mit dll 0.8.4.4 funktioniert nur hin und wieder (wenn ich die Protokolle wechsel, programm stoppe, neu starte). Dann kommen auch korrekte Werte. Ist nur nicht reproduzierbar. Anscheinend stoppt das Programm den Adapter nicht korrekt. Zum Stoppen muß ich immer TestMPI aus 0.8.2 neu laufen lassen.
> 
> Die Kombination dll 0.8.4.4 und TestMPI 0.8.4 läuft überhaupt nicht.


TestMPI benötigt die dll garnicht, weil der Code statisch gelinkt ist. Dadurch ist natürlich der fehlerhafte Code der Version 0.8.4 drin.
Ich habe gestern eine Version 0.8.4.4 veröffentlich. Lade sie dir am besten komplett herunter.


----------



## Ruud (13 Februar 2008)

Hallo,

Kann es sein das mit den neue dll auch die anruf von S7ONLINE geandert ist?

In meinen visual basic 2005 code hatte ich die code immer so angerufen:

 myPH = openS7online(acspnt)

wobei "acspnt" ein string ist.
Mit den neue dll, bekomme ich aber eine vb fehler, der darauf deutet das die anruf geandert ist, vielleicht ist die parameter kein string mehr oder ist da vielleicht eine parameter dazu gekommen?

hat jemand eine idee?

p.s. Die schreib fehler kommen ja davon das ich ein niederlander bin.


----------



## Zottel (13 Februar 2008)

Ruud schrieb:


> Hallo,
> 
> Kann es sein das mit den neue dll auch die anruf von S7ONLINE geandert ist?
> 
> ...


Ja, es ist ein Parameter dazugekommen (allerdings schon in 0.8.4), das Window-Handle des laufenden Programms. Leider kann ich dir nicht sofort sagen, wie du an diese Handle kommst.


----------



## Ruud (13 Februar 2008)

Zottel schrieb:


> Ja, es ist ein Parameter dazugekommen (allerdings schon in 0.8.4), das Window-Handle des laufenden Programms. Leider kann ich dir nicht sofort sagen, wie du an diese Handle kommst.



Dann warte ich mal ab. mit window-handle meinen sie ob  das form maximized, minimized ist?

Danke fur die schnelle antwort!!!

gruss Ruud


----------



## Zottel (13 Februar 2008)

Ruud schrieb:


> .. mit window-handle meinen sie ob  das form maximized, minimized ist?


Nein. Ein window-handle wir von windows erzeugt, wenn ein neues Fenster geöffnet wird. Es dient dazu, ein Fenster zu identifizieren. Kannst du C lesen? Dann schau dir mal testS7online.c an:
 Die Funktion GetConsoleHwnd() liefert das handle des (bereits offenen) Konsolenfensters, in dem das Programm gerade läuft. Dieses wird dann an openS7online als zweiter Parameter übergeben.
Verstehst du das so oder soll ich das lieber auf Englisch schreiben?


----------



## Question_mark (13 Februar 2008)

*Window-Handle*

Hallo,



			
				Ruud schrieb:
			
		

> mit window-handle meinen sie ob das form maximized, minimized ist?



Nein ich glaube nicht, das Zottel damit den Status (maximized, minimized) meint. Vielmehr hat (nicht nur) jedes Fenster in Windows ein Handle. 
Damit kann z.B. auf ein Fenster in einem anderen Prozess zugegriffen werden.
Oder wie in diesem Falle eher wahrscheinlich, ein Callback an das aufrufende Programm, oder was auch immer ...

Gruß

Question_mark


----------



## Ruud (14 Februar 2008)

Hallo,

Die declaration musste dan so sein.

 Private Declare Function openS7online Lib "libnodave.dll" (ByVal peer As String, ByVal iHandle As Integer) As Integer
und dan die anruf:
iTest = Form1.Handle
myPH = openS7online(acspnt, iTest) 
Gehe das  jetzt mal probieren, danke fur die gute responce.

gruss Ruud


----------



## marcengbarth (14 Februar 2008)

Wird LibNoDave eigentlich regelmäßig aktualisiert? Ich hab ewig die Version 0.8.4...


----------



## afk (14 Februar 2008)

marcengbarth schrieb:


> Wird LibNoDave eigentlich regelmäßig aktualisiert? Ich hab ewig die Version 0.8.4...


Aktualisiert wird es schon, aber eher unregelmäßig, da das Projekt im Grunde genommen allein auf Zottels Schultern lastet. 

Mir sind aber so gut wie keine Probleme mit der Version 0.8.4 bekannt, und wenn doch mal irgendwelche Bugs auftauchen, gibt Zottel normalerweise auch recht schnell eine neue Version raus, in der der Fehler behoben ist (siehe Version 0.8.4.4).

Wenn Dir allerdings die Weiterentwicklung zu langsam geht, dann kannst Du Dich natürlich auch selbst damit befassen, libnodave ist ja schließlich Open-Source.


Gruß Axel


----------



## Zottel (14 Februar 2008)

Ruud schrieb:


> Hallo,
> 
> Die declaration musste dan so sein.
> 
> ...


Hallo Ruud, 2 Fragen:
1. funktioniert es so?
2. Handle und der Rückgabewert der Funktion sind 32 bit breit. Ist Integer in VB 32 bit? Ist das neu? Ab welcher Version?


----------



## Ruud (14 Februar 2008)

Zottel schrieb:


> Hallo Ruud, 2 Fragen:
> 1. funktioniert es so?
> 2. Handle und der Rückgabewert der Funktion sind 32 bit breit. Ist Integer in VB 32 bit? Ist das neu? Ab welcher Version?



1- Die anruf funktioniert jezt, aber wenn ich jezt z.b. eine INT abfrage kriege ich als antwort -128, ich muss erst aussuchen was das ist. Alle ander verbindustypen funktionieren einwandfrei.

2. Ich glaub das mit den umstieg von VB6 (da is INT noch 16 bit) auf vb2003 die INT geandert ist in 32. Und auch die long ist geandert. Ich habe eine PDF dazu.


----------



## Ralle (14 Februar 2008)

@Ruud

Nimmst du TCP/IP? Da gibt es irgendein Problem, ich bin auch gerade am Suchen.
S7-Online funktioniert bei mir mit CP5511, aber nicht mit TCP/IP (CP343).
Warum kann ich leider auch nicht sagen, Ich werde morgen mal probieren,
ob es noch mit meinem NetLinkPro läuft. Eigentlich sollte das ja egal sein, da die
Schnittstelle ja mit den S7-Tools eingestellt wird.

PS: Ist aber im Prinzip auch nicht notwendig, da man ja nicht S7-Online nutzen muß,
     wenn man direkt TCP/IP fahren kann .


----------



## afk (14 Februar 2008)

Ralle schrieb:


> Nimmst du TCP/IP? Da gibt es irgendein Problem, ich bin auch gerade am Suchen.


Geht TCP/IP überhaupt mit S7Online ? 
Wo wird dann die IP-Adresse der SPS übergeben bzw. eingestellt ?


Gruß Axel


----------



## Ralle (14 Februar 2008)

afk schrieb:


> Geht TCP/IP überhaupt mit S7Online ?
> Wo wird dann die IP-Adresse der SPS übergeben bzw. eingestellt ?
> 
> 
> Gruß Axel



Na ich dachte immer mit dem Siemens-Programm (PG-Schnittstelle einstellen), liege ich da falsch? Aber wie gesagt, ist ja eigentlich auch nicht sinnvoll/notwemdig, da man direkt mit Libnodave auf den CP kommt.


----------



## afk (14 Februar 2008)

Ralle schrieb:


> Na ich dachte immer mit dem Siemens-Programm (PG-Schnittstelle einstellen), liege ich da falsch?


Keine Ahnung, ich hab bisher noch keine Stelle gefunden (weder in den Einstellungen der PG/PC-Schnittstelle, noch in libnodave), wo ich bei S7Online eine IP-Adresse eingeben oder als Parameter übergeben kann. Darum bin ich davon ausgegangen, daß TCP/IP per S7Online mit libnodave (noch ?) nicht geht.



Ralle schrieb:


> Aber wie gesagt, ist ja eigentlich auch nicht sinnvoll/notwemdig, da man direkt mit Libnodave auf den CP kommt.


Ganz Deiner Meinung, darum hab ich mir darüber auch keine weiteren Gedanken gemacht ...


Gruß Axel


----------



## Ruud (14 Februar 2008)

Hallo,

Ich glaube das S7ONLINE das IP adres aus den step7 project holt. Da steht es ja in die "properties" von die CP karte.

Bei meinem test habe ich die S7ONLINE mit den "ISO on TCP" eingestelt. Das vorteil davon ist das es nur eine MAC adresse benotigt.

Selber habe ich ein CP5512, die teste ich morgen mal, ob der vielleicht funktioniert.

gruss Ruud


----------



## Ralle (14 Februar 2008)

Ruud schrieb:


> Hallo,
> 
> Ich glaube das S7ONLINE das IP adres aus den step7 project holt. Da steht es ja in die "properties" von die CP karte.
> 
> ...



Yep, genau so war es heute bei mir, mit CP5511, geht es, mit TCP/IP geht es nicht. Bin auf dein Ergebnis gespannt.


----------



## afk (14 Februar 2008)

Ruud schrieb:


> Ich glaube das S7ONLINE das IP adres aus den step7 project holt. Da steht es ja in die "properties" von die CP karte.


Damit S7Online das wissen kann, muß dann aber zumindest das Projekt auf die PC-Station geladen werden, oder nicht ?

Wird dafür dann nicht auch noch SimaticNet auf dem PC gebraucht ?

Falls ja, wofür dann noch libnodave, bzw. warum nicht mit libnodave direkt über ISO-over-TCP, ohne S7Online ?


Gruß Axel


----------



## Ruud (14 Februar 2008)

Ich denke, du hast da recht.

Darum funktioniert auch nur die MPI mit S7ONLINE, bei diese anruf gibt man ja alle benotigte parameter mit. Wenn man z.b. ISO on TCP auswahlt dan musste mann auch die MAC adresse mitgeben. 

Oder es musse ja so sein wie du sagst, das er sich die info aus das geffonente (muss mir einen deutschen worterbuch downloaden) Step7 projekt holt.


----------



## Zottel (14 Februar 2008)

Ruud schrieb:


> Ich denke, du hast da recht.
> 
> Darum funktioniert auch nur die MPI mit S7ONLINE, bei diese anruf gibt man ja alle benotigte parameter mit. Wenn man z.b. ISO on TCP auswahlt dan musste mann auch die MAC adresse mitgeben.
> 
> Oder es musse ja so sein wie du sagst, das er sich die info aus das geffonente (muss mir einen deutschen worterbuch downloaden) Step7 projekt holt.


Nein, nicht die MAC-Adresse.
S7online ist auch der Name des "access points", dessen Zugriffsweg du unter "PC/PG-Schnittstelle einstellen" festlegst.
Wenn du "PC/PG-Schnittstelle einstellen" aus der Systemsteuerung öffnest, kannst du eigene "access points" definieren. Deren Namen kannst du dann an openS7online übergeben. Sinn: Eine Libnodave-Anwendung kann mit einer SPS kommunizieren, während du mit Step7 mit einer anderen SPS arbeitest.
Bei daveProtoISOTCP mußt du nicht openS7online sondern openSocket aufrufen. openSocket erwartet die IP-Adresse, nicht die MAC-Adresse. 
Du solltest das s7online-Protokoll mit Libnodave nur dann benutzen, wenn es keinen anderen Weg gibt, die Hardware zu verwenden (z.B. CP5611, Siemens USB-MPI-Adapter unter Windows). Wenn du ISO over TCP nutzt, solltest du auf jeden Fall daveProtoISOTCP verwenden. Es ist viel besser getestet, braucht keine Siemens-Software und kann parallel zu anderen gleichartigen Verbindungen arbeiten.


----------



## afk (15 Februar 2008)

Ruud schrieb:


> Wenn man z.b. ISO on TCP auswahlt dan musste mann auch die MAC adresse mitgeben.


Bei ISO-over-TCP braucht man grundsätzlich nicht die MAC-Adresse, sondern die IP-Adresse der CPU. Darum kann ISO-over-TCP ja auch über das LAN hinaus geroutet werden.



Zottel schrieb:


> Wenn du "PC/PG-Schnittstelle einstellen" aus der Systemsteuerung öffnest, kannst du eigene "access points" definieren. Deren Namen kannst du dann an openS7online übergeben. Sinn: Eine Libnodave-Anwendung kann mit einer SPS kommunizieren, während du mit Step7 mit einer anderen SPS arbeitest.


Solange das gleiche Interface und das gleiche Protokoll verwendet wird, ist dafür auch nur ein Access-Point notwendig, oder nicht ?
Jedenfalls wird in der Systemsteuerung nur das Interface, das Protokoll und ggf. die eigene Adresse festgelegt. Wenn zwei Steuerungen ab gleichen Bus hängen, dann müßte IMHO Step 7 mit der einen und libnodave mit der anderen SPS über den gleichen Access-Point kommunizieren können. Ich denke, verschiedene Access-Points braucht man nur dann, wenn verschiedene Kommunikationswege verwendet werden sollen oder müssen. 



Zottel schrieb:


> Wenn du ISO over TCP nutzt, solltest du auf jeden Fall daveProtoISOTCP verwenden. Es ist viel besser getestet, braucht keine Siemens-Software und kann parallel zu anderen gleichartigen Verbindungen arbeiten.


Ist das nicht sowieso die einzige Möglichkeit, mit libnodave per ISO-over-TCP zu kommunizieren ?
Beim Protokoll S7Online ist mir jedenfalls keine Funktion in libnodave bekannt, mit der ich die IP-Adresse der CPU angeben kann. 


Gruß Axel


----------



## Zottel (15 Februar 2008)

afk schrieb:


> Solange das gleiche Interface und das gleiche Protokoll verwendet wird, ist dafür auch nur ein Access-Point notwendig, oder nicht ?


Notwendig, ja. Aber darf einen anderen und mehrere benutzen. 


afk schrieb:


> Jedenfalls wird in der Systemsteuerung nur das Interface, das Protokoll und ggf. die eigene Adresse festgelegt. Wenn zwei Steuerungen ab gleichen Bus hängen, dann müßte IMHO Step 7 mit der einen und libnodave mit der anderen SPS über den gleichen Access-Point kommunizieren können.


 Ja, klar.


afk schrieb:


> Ist das nicht sowieso die einzige Möglichkeit, mit libnodave per ISO-over-TCP zu kommunizieren ?


Wahrscheinlich ja. Wenn ich im PC/PG-Schnittstelle TCP/IP einstelle ist zwar der "access point" s7online mit TCP/IP verknüpft, aber wo käme dann die IP-Adresse her???


afk schrieb:


> Beim Protokoll S7Online ist mir jedenfalls keine Funktion in libnodave bekannt, mit der ich die IP-Adresse der CPU angeben kann.


Nein. Ich wüßte auch nicht, wie eine solche Funktion die Adresse dann weiterreicht...
Wenn ich eine CPU mit intergrierter Ethernet-Schnittstelle habe und komme mit einem PG mit Step7 ohne jede Prijektierungm was muß ich dann tun, um die CPU über ihre IP ansprechen zu können?


Gruß Axel[/QUOTE]


----------



## Ruud (15 Februar 2008)

Zottel schrieb:


> Wenn du ISO over TCP nutzt, solltest du auf jeden Fall daveProtoISOTCP verwenden. Es ist viel besser getestet, braucht keine Siemens-Software und kann parallel zu anderen gleichartigen Verbindungen arbeiten.



Hallo Zottel,
Da hast du naturlich recht. 
Aber das protokol was ich meinte ist "ISO Ind. Ethernet" (atachment). Das ist ein fehler meiner seite.

Ich habe die S7ONLINE mit die CP5512 getestet und es funktioniert. 
weiter habe ich auch noch die RS232 von Siemens mit S7ONLINE getestet und der funktioniert auch.

gruss Ruud


----------



## suwe (15 Februar 2008)

Hallo,
hatte leider früher keine Zeit (andere Projekte). Wie gesagt versuche ich den Siemens-MPI-Adapter zum laufen zu bringen. Die 0.8.4.4-Version von TestMPI im Standardprotokoll läuft jetzt einwandfrei.
Ich versuche jetzt unter Delphi 5 das ganze zum Laufen zu bekommen. Die NoDavekomponente läuft allerdings nicht korrekt - wie auch das Demoprogramm. 
Benutze ich die nodave.pas aus dem pascal-Verzeichnis kann ich den Adapter mit daveNewInterface initialisieren, bekomme also einen Pointer zurück, kann ihn auch wieder abmelden, aber bei daveInitadapter bekomme ich nur ne 9 zurück und nicht 0. ReachablePartners sind dann 126 und daveNewConnection liefert 3.
Kann es sein, daß die Pascal-Version von nodave und die C-Version deutlich unterschiedlich sind?


----------



## afk (15 Februar 2008)

suwe schrieb:


> Ich versuche jetzt unter Delphi 5 das ganze zum Laufen zu bekommen. Die NoDavekomponente läuft allerdings nicht korrekt - wie auch das Demoprogramm.


Hab mir jetzt gerade mal die Version 0.8.4.4 geholt und getestet, die Delphi-Demo läuft bei mir mit S7Online über einen CP5512 an MPI problemlos.

Allerdings habe ich die Delphi-Komponente und die Demo in Delphi 6 entwickelt, und arbeite seit einiger Zeit nur noch mit Delphi 2006. Ob es mit Delphi 5 da Probleme geben kann, weiß ich nicht, und mangels serieller Schnittstelle und entsprechendem MPI-Adapter kann ich es auch nur mit meinem CP5512 testen. 

Mußt es eigentlich unbedingt ein seriell/MPI-Adapter sein ? 
Heutzutage gibt es da doch wesentlich leistungsfähigere, preiswerte Alternativen, z.B. den Netlink-PRO.


Gruß Axel


----------



## suwe (15 Februar 2008)

Hallo afk,
danke erstmal für die schnelle Antwort. Allerdings hilft mir deine Antwort nicht wirklich weiter. Zum Adapter: Habe zur Zeit keinen anderen. Mit S7Online meinst Du das entsprechende MPI-Protokoll nehme ich an. Damit läuft die Demo, allerdings stimmen die Werte aus der SPS nicht.
Da ich leider gezwungen bin in Delphi 5 zu arbeiten (mehr gönnt mir die Firma nicht ;-) ), werde ich wohl ohne Komponente direkt auf NoDave zugreifen müssen. Daher nochmal meine Frage: Kann ich die Nodave.pas nehmen oder entspricht sie nicht mehr der aktuellen C-Version?
Das Datum der Datei ist jedenfalls schon lange nicht mehr aktuell.

Gruß
Suwe


----------



## Ralle (15 Februar 2008)

Ich nutze die nodave.pas aus Version 0.8.0 in Delphi7. Es hat sich zwar ein wenig geändert (Funktionen kamen dazu) bzw. es wurde bei der s7Online-Funktion das Handle eingefügt, aber ansonsten gibt es kein Problem damit. Ich kann sie dir auch gerne zumailen. Inzwischen nutze ich diese mit der libnodave.dll V0.8.4.4, auch das problemlos. Allerdings hab ich nie den seriellen Adapter genutzt, da ich keinen habe.


----------



## afk (15 Februar 2008)

suwe schrieb:


> Daher nochmal meine Frage: Kann ich die Nodave.pas nehmen oder entspricht sie nicht mehr der aktuellen C-Version?
> Das Datum der Datei ist jedenfalls schon lange nicht mehr aktuell.


Meine Antwort auf die Frage wird Dir wahrscheinlich auch nicht viel helfen:
Die nodave.pas wird von Zottel gepflegt, und fristet bei Ihm aus nachvollziehbaren Gründen ein wenig ein Nieschendasein. Andererseits setzt meine Komponente auch auf der nodave.pas auf, und die Komponente würde auch bei mir nicht funktionieren, wenn die Funktionsdeklarationen in der nodave.pas gravierende Fehler hätten. Demzufolge können einzelne Funktionsdeklarationen in der nodave.pas veraltet sein, aber die wichtigen Funktionen sind richtig, sonst hätte ich mit meiner Komponente Probleme.


Gruß Axel

PS: Ralle war schneller ...


----------



## suwe (15 Februar 2008)

Hallo afk, Hallo Ralle,

habe mal versucht die NoDaveDemo in Delphi 5 umzusetzen. Gab einige Fehlermeldungen. Könntet Ihr mal probieren, ob diese Version bei Euch läuft?
Habe die Exe in doc umbenannt.

Ergebnis wäre für mich sehr interessant.

Gruß
Suwe


----------



## Ralle (15 Februar 2008)

Kann aber bis Montag dauern, ich melde mich.


----------



## Ralle (19 Februar 2008)

Bei mir läuft deine Demo nicht, ich teste "ISO over TCP". Allerdings läuft die DEMO, die ich selbst mit D7 übersetzt habe problemlos.

Aber da ist noch mehr dran faul, die kann z.Bsp. ihre eigene INI beim Starten nicht lesen, "vergißt" also alle Werte.


----------



## suwe (19 Februar 2008)

Hallo Ralle,
Danke erstmal für das probieren. Das mit der Nichtspeicherung der Werte hatte ich auch schon gesehen. Muß wohl an den Konvertierungen nach Delphi 5 liegen. War auch nur ein Versuch.

Was mich so komisch stimmt, ist die Tatsache, daß TestMPI mit meinem Adapter läuft, aber wenn ich das Programm in Delphi nachbilde, es eben nicht funktioniert. Ich benutze die gleichen Funktionen. (kratz, kratz...).

Ich bekomme z.B. nach Setzen des daveNewInterface bei daveInitAdapter immer nur ne 9 zurück, nie eine 0. Ich kann aber den Adapter starten und stoppen. 
Vielleicht noch ne Idee?

Gruß
Stefan


----------



## Ralle (19 Februar 2008)

Wenn du willst, kann ich dir mal "mein" Delphi-Demo-Projekt zumailen. Das funzt ja bei mir (nur ISO over TCP getestet) mit Libnodave V0.8.4.4


----------



## suwe (19 Februar 2008)

Das wäre sehr nett.


----------



## Einherjer14 (29 Mai 2008)

Excel / VB WindowHandle ermitteln (falls Form1.hwnd nicht verfügbar):

Private Declare Function GetActiveWindow Lib "user32" () As Long

Dim hwnd As Long
hwnd = GetActiveWindow
'MsgBox DialogGetCaption(hwnd)
ph = openS7online(acspnt$, hwnd) 



'Falls geprüft werden soll, ob das Fenster das richtige ist:
Function DialogGetCaption(lHwnd As Long) As String
    Const clMaxLen As Long = 255
    Dim lLen As Long, sValue As String * clMaxLen
    lLen = GetWindowText(lHwnd, sValue, clMaxLen)
    If lLen Then DialogGetCaption = Left$(sValue, lLen)
End Function


----------

