# Werte aus einen DB mit libnodave



## magmaa (24 März 2009)

So WinCC flex hab ich nun hinbekommen.
Nun wollte ich mir mal die Lösung von vierlagig probieren.
In dem alten Beitarg wird noch diskutiert darum hab ich mal neuen auf gemacht. Um nicht alles zu vermixen.


Also ich möchte folgendes ereichen auf einem PC habe ich Soft CPU laufen WinAC RTX 2005.
Auf dem zweiten PC will ich über LAN daten aus einem DB in eine Exceltabelle schreiben. 

Entspricht ja schon fast dem Beispiel von vierlagig 

http://www.sps-forum.de/showpost.php?p=136465&postcount=39

Das erste problem hab ist schon das die libnodave.dll nicht gefunden wird liegen aber beide in einem Ordner.


----------



## Ralle (24 März 2009)

magmaa schrieb:


> Das erste problem hab ist schon das die libnodave.dll nicht gefunden wird liegen aber beide in einem Ordner.



Beide?
Kannst ja mal die dll ins Windows-Verzeichnis verschieben, da muß sie auf jeden Fall gefunden werden.


----------



## magmaa (24 März 2009)

Beide? ist doch nur eine DLL?

Wenn ich die ins Windows-Verzeichnis lege wird schonmal nicht mehr gemeckert.

Zweite frage wäre woher kommt der Port ist der Standard?


----------



## Ralle (24 März 2009)

magmaa schrieb:


> Beide? ist doch nur eine DLL?
> 
> Wenn ich die ins Windows-Verzeichnis lege wird schonmal nicht mehr gemeckert.
> 
> Zweite frage wäre woher kommt der Port ist der Standard?



Ich muß mal doof Nachfragen (hab das Beispiel von 4L nicht parat), meinst du Port 102? Ja, der wäre dann bei Siemens Standard.


----------



## magmaa (24 März 2009)

Ja Port 102.

Gut wäre das auch geklärt.

Dann versuche ich es mal weiter.


----------



## magmaa (24 März 2009)

Hm vielleicht kann vierlagig ja noch mal Stellung zu seinem Skript nehmen zum besseren nachvollziehen.  

Vielleicht erstmal noch paar grundsätzliche Sachen. 
Was soll passieren wenn man auf Start drückt?

Und wozu sind die Angaben:

      MD:       Raster (ms):       Dauer (ms):


----------



## vierlagig (24 März 2009)

magmaa schrieb:


> Hm vielleicht kann vierlagig ja noch mal Stellung zu seinem Skript nehmen zum besseren nachvollziehen.


 
eins vorab: das skript wurde nur schnell zusammengestrickt!

es ist dafür gedacht mit dem FB "kurvenschreiber" (aufruf in OB35; 10ms)zusammen zu arbeiten und stellt nur die schnittstelle zu den daten dar, die mit diesem fb gesammelt werden ...

beim drücken von start wird in der cpu ein datenbaustein mit der länge: (dauer/raster * 4byte) + 4 byte kopfdaten erstellt und die aufzeichnung gestartet

beim drücken von lesen werden die daten aller angelegter datenbausteine aus der CPU geholt und angezeigt

es können maximal 10 datenbausteine erstellt werden - diese müssen gelöscht werden (button "DB löschen") wenn alle 10 belegt sind ...


----------



## magmaa (24 März 2009)

Ahja ok also mir würde schon reichen einen DB mit einem Array mit 10 Wörtern zu lesen. Dann wäre ich schon zufrieden.
Dann brauch ich mich nur erstmal auf die Lese Funktion zu konzentrieren.
Das müsste ja zu machen sein, mit euer Hilfe.


----------



## vierlagig (24 März 2009)

magmaa schrieb:


> Ahja ok also mir würde schon reichen einen DB mit einem Array mit 10 Wörtern zu lesen. Dann wäre ich schon zufrieden.
> Dann brauch ich mich nur erstmal auf die Lese Funktion zu konzentrieren.
> Das müsste ja zu machen sein, mit euer Hilfe.


 
dann verbieg lesen so, dass auf einen bestimmten datenbaustein mit definierter länge zugegriffen wird ... wie gesagt, dass was du da als beispiel heran gezogen hast funktioniert "nur" im zusammenspiel mit dem FB "kurvenschreiber" (quelle ist im zip drin ... glaub ich  )


----------



## magmaa (24 März 2009)

Na mal schauen ob ich dein Beispiel zum laufen bekomme.

Ach die Verbindung jetzt läuft über einen Router ist das ein Problem?
Oder brauch ich eine direkt Verbindung?


----------



## magmaa (25 März 2009)

Hm ne bekomme es nicht zum laufen hab das Beispiel mal in die Soft SPS geladen passiert aber nix und Excel stürzt immer ab.


----------



## magmaa (18 Juni 2009)

So nun ist es wieder soweit, hab wieder etwas Luft zum probieren.
Mal sehen ob ich es diesmal hin bekomme mit libnodave 
diesmal aber nehme ich aber ne 313 CPU und IBH Link müsste ja theoretische funktionieren.


----------



## magmaa (19 Juni 2009)

Ok ich möchte schrittweise vorgehen.

Ich habe mir die initialize Funktion angesehen und versucht anzupassen
würde das so passen 


```
Private Function initialize(ByRef ph As Long, ByRef di As Long, ByRef dc As Long)

ph = 0
di = 0
dc = 0

initialize = -1

port$ = Cells(3, 2)  '1099
peer$ = Cells(4, 2)  'IP Adresse

ph = openSocket(port$, peer$)

If (ph > 0) Then
   di = daveNewInterface(ph, ph, "IF1", 0, daveProtoMPI_IBH, daveSpeed187k)

    res = daveInitAdapter(di)
 
    If res = 0 Then
        Rack$ = Cells(5, 2)
        Slot$ = Cells(6, 2)

        dc = daveNewConnection(di, 0, Rack$, Slot$)
        res = daveConnectPLC(dc)
        
        If res = 0 Then
            initialize = 0
        End If
    End If
End If
End Function
```


----------



## Zottel (19 Juni 2009)

Soweit ich sehe sieht das richtig aus. Port 1099 und die richtige IP-Adresse müssen natürlich an der passenden Stelle im Excel-Blatt stehen...


----------



## magmaa (19 Juni 2009)

Ok das ja nur die Initialisierung 

die eigentliche Verbindung zur CPU ist doch diese Prozedur oder?


```
Sub startToPLC()
Dim buffer(1024) As Byte
Dim ph As Long, di As Long, dc As Long
res = initialize(ph, di, dc)
Db = Cells(7, 2)

If res = 0 Then
    a = davePut16(buffer(0), Cells(8, 2))
    a = davePut16(buffer(2), Cells(9, 2))
    a = davePut32(buffer(4), Cells(10, 2))
    res2 = daveWriteBytes(dc, daveDB, Db, 2, 8, buffer(0))
End If
Call cleanUp(ph, di, dc)
res = initialize(ph, di, dc)
If res = 0 Then
    res2 = daveWriteBits(dc, daveDB, Db, 0, 1, 1)
End If
Call cleanUp(ph, di, dc)
res = initialize(ph, di, dc)
If res = 0 Then
    res2 = daveWriteBits(dc, daveDB, Db, 0, 1, 0)
End If
Call cleanUp(ph, di, dc)
End Sub
```


----------



## magmaa (24 Juni 2009)

Hm irgendwie bekomme ich es nicht zum laufen!


----------



## magmaa (25 Juni 2009)

Hat jemand vielleicht kleines Bsp. Projekt was ich mir anschauen kann mit einer einfachen Verbindung mit IBH- LINK in Excel und das auslesen bzw. beschreiben einer variablen aus einem DB?


----------



## magmaa (21 Juli 2009)

Ähm nur mal so muss ich die libnodave.dll mit regsvr32 in die Registry eintragen damit es funktioniert?


----------



## Ralle (21 Juli 2009)

magmaa schrieb:


> Ähm nur mal so muss ich die libnodave.dll mit regsvr32 in die Registry eintragen damit es funktioniert?



Nö, die muß entweder im gleichen Verzeichnis wie deine Exe sein oder im Systemverzeichnis von WinDoof.


----------

