Connect wenn MPI nicht zur Verfügung steht

JoEr

Level-1
Beiträge
10
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen

Mir fehlt im Moment der Ansatz, wenn’s überhaupt möglich ist…

Ich hatte bis anhin eine CPU315 PN/DP und konnte somit via MPI kommunizieren. Nun habe ich eine CPU1515 mit 2 x PN. Bis hier klar.

Codeschnipsel:

Dim PlcMPI As Integer = 2
Dim PlcRack As Integer = 0
Dim PlcSlot As Integer = 2

LndInterface = New libnodave.daveInterface(LndOSserialType, LndInterfaceName, LndInterfaceLocalMPI, LndInterfaceUseProto, LndInterfaceSpeed)


LndConnection = New libnodave.daveConnection(LndInterface, PlcMPI, PlcRack, PlcSlot)
ErrResult = LndConnection.connectPLC() <-- HIER ERFOLG DER ERROR

Mir fehlt der Ansatz, was zu tun ist, wenn MPI nun nicht mehr zur Verfügung steht. Wie muss der Connect dann erfolgen?

Bin um jede Hilfe dankbar

Gruas
JoEr
 
Nun habe ich eine CPU1515 mit 2 x PN
Dann wirst Du wohl ziemlich sicher mit der S7-1500 per Ethernet kommunizieren ---> bei "New libnodave.daveInterface(...)" angeben, daß das ISO-over-TCP-Protokoll benutzt werden soll, dann wird bei "New libnodave.daveConnection(...)" der Parameter PlcMPI nicht verwendet (Wert ist dann egal). Bei daveInterface(...) wird dann auch InterfaceSpeed ignoriert.

Bei S7-1500 sollte PlcRack = 0 und PlcSlot = 1 sein (siehe die Gerätekonfig Deiner CPU1515).
Bei S7-1500 muß in den Eingenschaften der CPU unter "Schutz" die PUT/GET-Kommunikation erlaubt werden.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo und Guten Morgen

Der Connect funktioniert nun - Danke an dieser Stelle an Harald.

Nun erhalte ich bei der Codezeile:

ErrResult = LndConnection.writeManyBytes(libnodave.daveDB, int_DB_Nummer, 0, int_ByteLaenge, bb.ToArray())

Den Error -1025

Ich hab auch versuche nur mit writeBytes - leider mit demselben Ergebnis.

Einen Input hier wäre toll. Wie bereits geschrieben funktioniert die Zeile bei einer MPI Verbindung.

Gruas
JoEr
 
Moin,

kann es sein, daß der Ziel-DB auf "optimierten" Zugriff eingestellt ist? LibNodave kann nur auf DB mit "Standard"-Zugriff zugreifen.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zum 2ten

Was ich nicht verstehe ist folgendes:

Wenn ich folgendes übertrage funktioniert es:

Code:
Dim buf(100) As Byte
Dim x3 As Short = 88

buf = BitConverter.GetBytes(libnodave.daveSwapIed_16(x3))
ErrResult = LndConnection.writeBytes(libnodave.daveDB, 161, 2, 2, buf)

Ich hab aber viel mehr zu übertragen. Dies wird je nach Definition im Baustein gewandelt (und "geswapt") und in ein Shortarray geschrieben

Code:
Dim srt_intDBSchreiben(3000) As Short

Dieses wiederum wird wie folgt in ein Bytearray respektive in eine List of Byte übernommen

Code:
Dim a1() As Byte
Dim bb As New List(Of Byte)

For i = 0 To CInt((CInt(My.Settings.str_SPS_Bytelaenge_Write) / 2)) 
     a1 = BitConverter.GetBytes(srt_intDBSchreiben(i))
     bb.AddRange(a1)
Next i

übertragen wird dann mittels

Code:
ErrResult = LndConnection.writeManyBytes(daveDB, int_DB_Nummer, 0, int_ByteLaenge, bb.ToArray())

Wie bereits erwähnt, bei MPI funktioniert das so. Auf der CPU1515 mit 2 x PN nicht mehr. Der Connect wurde umgeschrieben und verbindet nun fehlerfrei. Muss ich für eine CPU1515 mit 2 x PN anders wandeln?

Bin für jeden Input dankbar.

Gruas
JoEr
 
Ich hab aber viel mehr zu übertragen.
Vielleicht hat Siemens bei der S7-1500 was am Protokoll geändert bzw. handelt eine S7-1500 es anders als eine S7-300, wenn mehr als 1 PDU zu übertragen ist? (das wird man wohl nur per Netzwerk-Sniffer (z.B. Wireshark) und/oder Libnodave im Debug-Modus rauskriegen)

Vorschlag: taste Dich empirisch an die maximal mögliche Nachrichtengröße heran (vermutlich irgendwas zwischen 160 ... 240 ... 960 Byte) und zerlege Deine Schreibaufträge selber in Häppchen etwas kleiner als die ermittelte Grenze.

Harald
 
Zurück
Oben