Libnodave und S5

StefanK

Level-1
Beiträge
178
Reaktionspunkte
22
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo ich möchte mit Libnodave (aktuelle Version) per RS232/AS511 auf eine S5-95U zugreifen.
Ich habe Libnodave mit S7 schon einige male erfolgreich eingesetzt, nur bei der Verbindung zur S5 komm ich nicht weiter. Programmiert wird das ganze mit VB.NET 2008.
Bis jetzt habe ich:

Code:
fds.rfd = libnodave.setPort("COM2", "9600", 1)
fds.wfd = fds.rfd
If fds.rfd > 0 Then
  di = New libnodave.daveInterface(fds, "IF1", 0, libnodave.daveProtoAS511, libnodave.daveSpeed9k)
  res = di.initAdapter()
  If res = 0 Then
    di.setTimeout(1000000)
    dc = New libnodave.daveConnection(di, 0, 0, 2)
    res = dc.connectPLC
    If res = 0 Then
      Return True
    Else
      libnodave.closePort(fds.rfd)
      Return False
    End If
  Else
    Return False
  End If
  Else
  Return False
End If

Als Rückgabe in dieser Zeile "res = dc.connectPLC" bekomme ich: -22
Ich habe schon gesucht, habe aber keinen Hinweis auf die richtigen Parameter für S5 per AS511 gefunden.

Für ein paar Tips bin ich immer dankbar.
Gruß
Stefan
 
Ok, ich hab das unter Delphi 7.

Bei
Code:
fds.rfd = libnodave.setPort("COM2", "9600", 1)

steht bei mir:
Code:
Adress:= ComPort_to_Str(SimDatenListe.SimEintrag[I].ComPort) + #0;
DaveInterface.Remote[I].DaveFDS.rfd:=SetPort(@Adress[1], '9600', 'E');
Das ist in der Initialisierung auch schon der einzigste Unterschied zu MPI. dort steht bei mir:
Code:
Adress:= ComPort_to_Str(SimDatenListe.SimEintrag[I].ComPort) + #0;
DaveInterface.Remote[I].DaveFDS.rfd:=SetPort(@Adress[1], '38400', 'O');
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die schnelle Antwort,

bei der Parität hatte ich schon einmal einen Fehler (nicht einfach 0/1 sondern Asc(E) ).

Jetzt bekomme ich allerdings in der Zeile "res = dc.connectPLC" : -42

Einen Fehler weniger, danke. Doch leider funktioniert es immer noch nicht. Ich verwende ein PG-COM-Kabel von PI, welches auch funktioniert (getestet mit IBH S5 für Win).

Muss ich aus meiner Applikation den Comport einstellen o.ä.

Welche Einstellungen sind hier notwendig?

Code:
dc = New libnodave.daveConnection(di, 0, 0, 0)

Bisher kann ich hier einstellen was ich möchte, keine Reaktion.
 
Gar nicht so einfach für mich, das in meinem Delphicode zu finden, da ich da mit einem Array of Struct arbeite anstatt direkt mit den Werten.

Ich hab das mal im Debugger angesehen und meine Variablen ersetzt, soweit es ging:

dein Code
Code:
di = New libnodave.daveInterface(fds, "IF1", 0, libnodave.daveProtoAS511, libnodave.daveSpeed9k)

mein Code
Code:
DaveInterface.Remote[I].DaveIntf:=daveNewInterface(DaveInterface.Remote[I].DaveFDS, 'IFS3'#0, 1, daveProtoAS511), _daveSpeed187K);

Die Geschwindigkeitsangabe spielt u.U. gar keine Rolle, da das ja in Setport für dem Comport erledigt wurde, ich hab hier einfach die MPI-Angaben belassen.

dein Code
Code:
dc = New libnodave.daveConnection(di, 0, 0, 0)

mein Code
Code:
DaveInterface.Remote[I].DaveConn:=daveNewConnection(DaveInterface.Remote[I].DaveIntf, 2, 0, 0);
 
Danke, danke, danke.. doch leider...

...funzt immer noch nicht...!!

Vielen Dank erst mal an Ralle!

Ich schaue mir das nochmal genau an und teste ein wenig. Ich bekomme in der oben erwähnten Zeile immer noch eine -42 zurück. Kann ich irgendwo nachlesen, was die Rückgabewerte bedeuten?
Ich bin zwar die nächsten 2-3 Std. nicht online, melde mich aber mit dem Ergebnis.

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Um es prinzipiell zu testen, würde ich mal die AS511Test.exe durchlaufen lassen. Mit Debugmode, bekommt man da schon mal raus, ob es denn überhaupt mit dem Rechner und der SPS und dem Kabel funktioniert.
 
Test durchgeführt...

Jo, danke für den Hinweis.
Hier mal die "Testergebnisse".

Wow, wenn ich jetzt noch den Source hätte...
aber mal im ernst, wenn ich das nicht ganz falsch interpretiere, funktioniert das.
Irgendetwas mache ich falsch, aber was?
 

Anhänge

  • testAS511-w.jpg
    testAS511-w.jpg
    84,5 KB · Aufrufe: 50
  • testAS511-d -1-.jpg
    testAS511-d -1-.jpg
    81,3 KB · Aufrufe: 34
  • testAS511-d -2-.jpg
    testAS511-d -2-.jpg
    58 KB · Aufrufe: 26
Hallo,

habe mich letzte Woche damit beschäftigt, anbei mein Code:

Code:
#Region "Variablendeklaration"
    'Libnodave
    Public ph As New libnodave.daveOSserialType
    Public di As libnodave.daveInterface
    Public dc As libnodave.daveConnection
    Public res As Integer
#End Region

    Private Sub ConnectSPS()

        ph.rfd = libnodave.setPort("COM2", "9600", AscW("E"))
        ph.wfd = ph.rfd

        If ph.rfd > 0 Then
            di = New libnodave.daveInterface(ph, "S5", 0, libnodave.daveProtoAS511, libnodave.daveSpeed187k)
            res = di.initAdapter

            If res = 0 Then
                di.setTimeout(500000)
                dc = New libnodave.daveConnection(di, 2, 0, 0)
                res = dc.connectPLC
                If res = 0 Then
                    Timer1.Enabled = True
                Else
                    Timer1.Enabled = False
                    Call DisconnectSPS()
                    End
                End If
            Else
                libnodave.closePort(ph.rfd)
            End If
        End If

    End Sub

    Private Sub DisconnectSPS()
        If ph.rfd > 0 Then
            res = dc.disconnectPLC()
            di.disconnectAdapter()
            libnodave.closePort(ph.rfd)
        End If
    End Sub
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke, das funktioniert...

Hallo pm, Ralle,

danke, es funktioniert. Letztendlich habe ich einfach den Source von pm genutzt (wobei ich den groben Fehler in meinem nicht sehe).
Danke, Gruß
 
Freud mich das es funktioniert...
Glaube Dein "Fehler" liegt am Timeout "di.setTimeout(1000000)", der muss auf (500000) eingestellt werden.

MfG
Peter
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Freud mich das es funktioniert...
Glaube Dein "Fehler" liegt am Timeout "di.setTimeout(1000000)", der muss auf (500000) eingestellt werden.

MfG
Peter

Hmmm, ich hatte dem Timeout nicht so viel Beachtung geschenkt, werds aber nacher testen, danke für den Hinweis.

Gruß
Stefan
 
Timeouts kommen in der Regel im Fehlerfall zum tragen.
Daher glaube ich eher nicht, dass die Verkürzung von einer Sekunde auf eine halbe hier viel ausmacht.
Bin aber auf Deinen Bericht gespannt, StefanK.
 
Timeout

Timeouts kommen in der Regel im Fehlerfall zum tragen.
Daher glaube ich eher nicht, dass die Verkürzung von einer Sekunde auf eine halbe hier viel ausmacht.
Bin aber auf Deinen Bericht gespannt, StefanK.

Das dachte ich bis jetzt auch...

Also, bei

Code:
di.setTimeout(500000)

funktioniert es. Bei

Code:
di.setTimeout(1000000)

nicht.

Danke nochmal!
Gruß
Stefan
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Verstehe ich nicht

Also entweder kann ich schlecht die Nullen zählen oder ich verstehe nicht, im 2. Falle ist doch der Timeout länger, also sollte es im Problemfall eher besser werden?
 
Hallo,
hat schon jemand versucht über die DotNetSiemensPLCToolBoxLibrary.dll und AS511 eine Verbindung mit einer 810M Steuerung herzustellen?
Eine Verbindung bekomme ich hin,
if (myConn != null) myConn.Dispose();
myConn = new PLCConnection((string) lstConnections.SelectedItem);

// myConn.plc
myConn.Connect();

var tag = new PLCTag("EB97");
myConn.ReadValue(tag);
label3.Text = tag.ValueName.ToString();

Wenn myConn.Connect aufgerufen wird, zeigt er auch conntcted an.
Aber sobald ich myConn.Readvalue aufrufe kommt eine Meldung -5 zurück.
Das Eingangsbyte EB97 ist vorhanden, es gehen die Tasten vom Bedienfeld in diesen Bereich.
Was mache ich falsch?
Hat jemand ein funktionierendes Beispiel?
Danke
Thomas
 
Zurück
Oben