# Libnodave und S7online



## adi (5 Januar 2011)

Hallo zusammen,

ich möchte in einem VB6-Programm mit Hilfe der libnodave-Bibliothek auf SPS-Daten zugreifen.

Als Protokoll möchte/muß ich S7online verwenden. Leider bringe ich keine Kommunikation zustande. :-?

Als Hardware habe ich eine PCU50 mit WinAC RTX (Soft-PLC).

Wenn ich die PG/PC-Schnittstelle auf S7ONLINE --> PC internal (local) einstelle funktioniert mein kleines Testprogramm.
Beim Umstellen der PG/PC-Schnittstelle auf Profibus geht es nicht mehr.
Ich muß die PG/PC-Schnittstelle aber auf S7ONLINE --> "Profibus" eingestellt lassen (wegen Visualisierung, Zugriff auf mehrere Steuerungen am Profibus,...)

Im Simatic Manager und für das HMI (ProTool und Transline) funktioniert die Einstellung PG/PC-Schnittstelle auf "Profibus".

Hier mein kleines Testprogramm:

```
Sub Main()
 
Dim SPS_DB As Integer
Dim SPS_Byte As Integer
Dim SPS_Bit As Integer
Dim SPS_Status As Byte ' 0 oder 1 -> Wert auf den das Bit gesetzt wird
 
Dim RetCode As Long
Dim ph As Long
 
' --------------------------------------------------------------------------
 
' exemplarisch den Merker M987.1 setzen
'SPS_DB = 900
SPS_Byte = 987
SPS_Bit = 1
SPS_Status = 1 ' Status, auf den das Bit gesetzt wird
 
' Verbindung herstellen
ph = openS7online("/S7ONLINE", Form1.hWnd)
 
If ph > 0 Then
[INDENT]hInterface = daveNewInterface(ph, ph, "IF1", 0, daveProtoS7online, daveSpeed187k)
RetCode = daveInitAdapter(hInterface)
If RetCode = daveResOK Then
[INDENT]hConnection = daveNewConnection(hInterface, 2, 0, 0)
RetCode = daveConnectPLC(hConnection)
If RetCode = 0 Then
[INDENT]' wenn Verbindung OK, Bit setzen oder ruecksetzen
' RetCode = daveWriteBits(hConnection, daveDB, SPS_DB, SPS_Byte * 8 + SPS_Bit, 1, SPS_Status)
RetCode = daveWriteBits(hConnection, daveFlags, 0, SPS_Byte * 8 + SPS_Bit, 1, SPS_Status)
 
' Verbindung ordentlich wieder abbauen -> sonst Problem
RetCode = daveDisconnectPLC(hConnection)
[/INDENT]End If
RetCode = daveDisconnectAdapter(hInterface)
[/INDENT]End If
RetCode = closeS7online(ph)
[/INDENT]End If
End Sub
```
 
daveInitAdapter und daveConnectPLC melden eigentlich keine Fehler (RetCode = 0)
daveWriteBits meldet Fehler -128

Hat jemand eine Idee, wie ich die Verbindung über Profibus mit S7online doch noch in Gang bringen kann?

Woher weiß die Verbindung eigentlich, zu welcher SPS ich Connecten möchte (z.B. über Profibusadresse ?)

Der S7-Manager ermittelt dies wohl aus der Hardwarekonfiguration vom aktuell angewählten Projekt, ... aber libnodave ?

Grüsse

Albert


----------



## Rainer Hönle (5 Januar 2011)

Was bedeuten denn die Parameter bei daveNewConnection?


----------



## adi (5 Januar 2011)

Rainer Hönle schrieb:


> Was bedeuten denn die Parameter bei daveNewConnection?


 
Das war schon mal der entscheidende Hinweis.

In der testS7online.c schaut der Aufruf so aus


```
daveNewConnection(di,plcMPI,0,0)
```
 
für den Parameter plcMPI habe ich testweise die Profibusadresse der SPS (=1) eingetragen -> Test -> und welche Überraschung - es funktioniert !!! 

Den Parameter hatte ich irrtümlicher Weise als Steckplatznummer interpretiert. 

Was mir am Rande aufgefallen ist, meine Anwendung mag es nicht, wenn von S7 gleichzeitig "Variable steuern/beobachten" geöffnet ist. Aber im Normalbetrieb ist das nicht der Fall und ich kann gut damit leben.

Many THX to Rainer Hönle 

Albert


----------

