Hello.
Very good stuff. THANK YOU very much.
I have CP5611(PCI Card) and CP5612(PCIMCIA Card).
I use S7ONLINE protocol to make connection with S7-300 315-2DP by MPI.
I found example in internet, and little change it for my needs.
When I use CP5612 everything works great, but when I use CP5611 I cannot close connection. It looks like closing instruction didn't work.
Below is my code:
//////////////////////////////////////////////////////////////////////////////
Public Class Form1
Public Value As Integer = 0
Dim localMPI As Integer = 0, plcMPI As Integer = 2
Dim fds As libnodave.daveOSserialType
Dim di As libnodave.daveInterface
Dim dc As libnodave.daveConnection
Private Sub btnAufbau_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnAufbau.Click
Dim Rack As Integer = 0
Dim Slot As Integer = 0
PLCConnect_NEW(2, 0, 2)
End Sub
Private Function PLCConnect_NEW(ByVal MPIAddress As String, Optional ByVal PLCRack As Integer = 0, Optional ByVal PLCSlot As Integer = 2) As Boolean
Dim ConnectionOpened As Boolean
Dim initSuccess As Integer = 0
Dim i As Integer
Try
ListBox1.Items.Clear()
dc.disconnectPLC()
di.disconnectAdapter()
fds.rfd = libnodave.closeS7online(fds.rfd)
For i = 0 To 3
fds.rfd = libnodave.openS7online("S7ONLINE")
fds.wfd = fds.rfd
If fds.rfd > 0 Then
Exit For
End If
Next
If (fds.rfd > 0) Then
di = New libnodave.daveInterface(fds, "IF1", 0, libnodave.daveProtoS7online, libnodave.daveSpeed187k)
di.setTimeout(10000)
Dim j As Integer
For j = 0 To 2
If (0 = di.initAdapter) Then
initSuccess = 1
Exit For
Else
di.disconnectAdapter()
End If
Next
ListBox1.Items.Clear()
If initSuccess <> 1 Then
ListBox1.Items.Add("Couldn't connect to Adapter!")
Exit Function
End If
dc = New libnodave.daveConnection(di, MPIAddress, PLCRack, PLCSlot)
Dim ErrorCode As Integer = dc.connectPLC()
If ErrorCode = 0 Then
ListBox1.Items.Add("Connection opened.")
ConnectionOpened = True
Timer2.Enabled = True
Else
ListBox1.Items.Add("Error opening connection. Check rack & slot." & " = " & libnodave.daveStrerror(ErrorCode))
ConnectionOpened = False
End If
Else
ListBox1.Items.Add("Error opening access point.")
ConnectionOpened = False
End If
Return ConnectionOpened
Catch ex As Exception
' Error ("Couldn't open connection to " PLC)
For i = 0 To 3
fds.rfd = libnodave.openS7online("S7ONLINE")
fds.wfd = fds.rfd
If fds.rfd > 0 Then
Exit For
End If
Next
If (fds.rfd > 0) Then
di = New libnodave.daveInterface(fds, "IF1", 0, libnodave.daveProtoS7online, libnodave.daveSpeed187k)
di.setTimeout(10000)
Dim j As Integer
For j = 0 To 2
If (0 = di.initAdapter) Then
initSuccess = 1
Exit For
Else
di.disconnectAdapter()
End If
Next
ListBox1.Items.Clear()
If initSuccess <> 1 Then
ListBox1.Items.Add("Couldn't connect to Adapter!")
Exit Function
End If
dc = New libnodave.daveConnection(di, MPIAddress, PLCRack, PLCSlot)
Dim ErrorCode As Integer = dc.connectPLC()
If ErrorCode = 0 Then
ListBox1.Items.Add("Connection opened.")
ConnectionOpened = True
Timer2.Enabled = True
'comm = 1
Else
ListBox1.Items.Add("Error opening connection. Check rack & slot." & " = " & libnodave.daveStrerror(ErrorCode))
ConnectionOpened = False
End If
Else
ListBox1.Items.Add("Error opening access point.")
ConnectionOpened = False
End If
Return ConnectionOpened
End Try
End Function
Private Sub PLCDisConnect()
'btnAufbau.Show()
'Button2.Hide()
Timer2.Enabled = False
'comm = 0
ListBox1.Items.Clear()
dc.disconnectPLC()
di.disconnectAdapter()
fds.rfd = libnodave.closeS7online(fds.rfd)
ListBox1.Items.Add("Disconnected.")
End Sub
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
Dim ReadOK As Boolean = True
Dim ReceivedDataBytes(11) As Byte
Dim SendDataBites(0) As Byte
Dim RetVal As Integer
SendDataBites(0) = 1
ListBox1.Items.Clear()
RetVal = dc.readBytes(132, 3, 0, 12, ReceivedDataBytes)
If RetVal = 0 Then
Dim i As Integer
For i = 0 To ReceivedDataBytes.Length - 1
ListBox1.Items.Add(ReceivedDataBytes(i))
Next
Else
ReadOK = False
ListBox1.Items.Add("Read error: " & RetVal & " = " & libnodave.daveStrerror(RetVal))
PLCConnect_NEW(2, 0, 2)
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
PLCDisConnect()
End Sub
End Class
Thank You very much for any help.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hello.
Very good stuff. THANK YOU very much.
I have CP5611(PCI Card) and CP5612(PCIMCIA Card).
I use S7ONLINE protocol to make connection with S7-300 315-2DP by MPI.
I found example in internet, and little change it for my needs.
When I use CP5612 everything works great, but when I use CP5611 I cannot close connection. It looks like closing instruction didn't work.
Below is my code:
//////////////////////////////////////////////////////////////////////////////
Public Class Form1
Public Value As Integer = 0
Dim localMPI As Integer = 0, plcMPI As Integer = 2
Dim fds As libnodave.daveOSserialType
Dim di As libnodave.daveInterface
Dim dc As libnodave.daveConnection
Private Sub btnAufbau_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnAufbau.Click
Dim Rack As Integer = 0
Dim Slot As Integer = 0
PLCConnect_NEW(2, 0, 2)
End Sub
Private Function PLCConnect_NEW(ByVal MPIAddress As String, Optional ByVal PLCRack As Integer = 0, Optional ByVal PLCSlot As Integer = 2) As Boolean
Dim ConnectionOpened As Boolean
Dim initSuccess As Integer = 0
Dim i As Integer
Try
ListBox1.Items.Clear()
dc.disconnectPLC()
di.disconnectAdapter()
fds.rfd = libnodave.closeS7online(fds.rfd)
For i = 0 To 3
fds.rfd = libnodave.openS7online("S7ONLINE")
fds.wfd = fds.rfd
If fds.rfd > 0 Then
Exit For
End If
Next
If (fds.rfd > 0) Then
di = New libnodave.daveInterface(fds, "IF1", 0, libnodave.daveProtoS7online, libnodave.daveSpeed187k)
di.setTimeout(10000)
Dim j As Integer
For j = 0 To 2
If (0 = di.initAdapter) Then
initSuccess = 1
Exit For
Else
di.disconnectAdapter()
End If
Next
ListBox1.Items.Clear()
If initSuccess <> 1 Then
ListBox1.Items.Add("Couldn't connect to Adapter!")
Exit Function
End If
dc = New libnodave.daveConnection(di, MPIAddress, PLCRack, PLCSlot)
Dim ErrorCode As Integer = dc.connectPLC()
If ErrorCode = 0 Then
ListBox1.Items.Add("Connection opened.")
ConnectionOpened = True
Timer2.Enabled = True
Else
ListBox1.Items.Add("Error opening connection. Check rack & slot." & " = " & libnodave.daveStrerror(ErrorCode))
ConnectionOpened = False
End If
Else
ListBox1.Items.Add("Error opening access point.")
ConnectionOpened = False
End If
Return ConnectionOpened
Catch ex As Exception
' Error ("Couldn't open connection to " PLC)
For i = 0 To 3
fds.rfd = libnodave.openS7online("S7ONLINE")
fds.wfd = fds.rfd
If fds.rfd > 0 Then
Exit For
End If
Next
If (fds.rfd > 0) Then
di = New libnodave.daveInterface(fds, "IF1", 0, libnodave.daveProtoS7online, libnodave.daveSpeed187k)
di.setTimeout(10000)
Dim j As Integer
For j = 0 To 2
If (0 = di.initAdapter) Then
initSuccess = 1
Exit For
Else
di.disconnectAdapter()
End If
Next
ListBox1.Items.Clear()
If initSuccess <> 1 Then
ListBox1.Items.Add("Couldn't connect to Adapter!")
Exit Function
End If
dc = New libnodave.daveConnection(di, MPIAddress, PLCRack, PLCSlot)
Dim ErrorCode As Integer = dc.connectPLC()
If ErrorCode = 0 Then
ListBox1.Items.Add("Connection opened.")
ConnectionOpened = True
Timer2.Enabled = True
'comm = 1
Else
ListBox1.Items.Add("Error opening connection. Check rack & slot." & " = " & libnodave.daveStrerror(ErrorCode))
ConnectionOpened = False
End If
Else
ListBox1.Items.Add("Error opening access point.")
ConnectionOpened = False
End If
Return ConnectionOpened
End Try
End Function
Private Sub PLCDisConnect()
'btnAufbau.Show()
'Button2.Hide()
Timer2.Enabled = False
'comm = 0
ListBox1.Items.Clear()
dc.disconnectPLC()
di.disconnectAdapter()
fds.rfd = libnodave.closeS7online(fds.rfd)
ListBox1.Items.Add("Disconnected.")
End Sub
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
Dim ReadOK As Boolean = True
Dim ReceivedDataBytes(11) As Byte
Dim SendDataBites(0) As Byte
Dim RetVal As Integer
SendDataBites(0) = 1
ListBox1.Items.Clear()
RetVal = dc.readBytes(132, 3, 0, 12, ReceivedDataBytes)
If RetVal = 0 Then
Dim i As Integer
For i = 0 To ReceivedDataBytes.Length - 1
ListBox1.Items.Add(ReceivedDataBytes(i))
Next
Else
ReadOK = False
ListBox1.Items.Add("Read error: " & RetVal & " = " & libnodave.daveStrerror(RetVal))
PLCConnect_NEW(2, 0, 2)
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
PLCDisConnect()
End Sub
End Class
Thank You very much for any help.