Werte aus einen DB mit libnodave

magmaa

Level-1
Beiträge
349
Reaktionspunkte
27
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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?
 
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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):
 
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 ...
 
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.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
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 :rolleyes: )
 
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?
 
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
Ok ich möchte schrittweise vorgehen.

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

Code:
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
 
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...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok das ja nur die Initialisierung

die eigentliche Verbindung zur CPU ist doch diese Prozedur oder?

Code:
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
 
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?
 
Zurück
Oben