S
I have finally been able to write up some visual basic code to write to a Schneider Premium PLC via TCP. The only problem is that i cannot read the response back from the PLC. It also breaks off the socket connection after 3 write attempts
<pre>Imports System.IO
Imports System.Net.Sockets
Imports System.Text
Public Class Form1
'"localhost", 8585)
'= serverListener.GetStream
Dim str As String
Dim mix As Integer
Dim modmsg As String
Dim rcvbytes(256) As Byte
Dim jj As String
Dim sendbyte(256) As Byte
Private Sub cmdSendmsg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSendmsg.Click
Try
Dim serverListener As New TcpClient()
Dim newlistener As New TcpClient()
Dim readStream As Stream
Dim newstream As Stream
Dim returndata As String = ""
Dim zz As Integer = 0
Dim j, sx As Integer
Dim ct = 0
Dim joy As String
Dim snt As Integer
Dim sendbuff(256) As Byte
j = 1
serverListener.Connect(Me.txtAdr.Text, 502)
newlistener.Connect(Me.txtAdr.Text, 502)
readStream = serverListener.GetStream
newstream = serverListener.GetStream
serverListener.SendBufferSize = 1024
serverListener.ReceiveBufferSize = 1024
newlistener.SendBufferSize = 256
newlistener.ReceiveBufferSize = 256
' serverListener.Client.ReceiveTimeout = 10000;
'serverListener.Client.SendTimeout = 10;
' serverListener.s()
'' Console.WriteLine("Input Lines:")
' Me.txtMsg.Text = modmsg
str = Me.txtMsg.Text
If j = 1 Then
'Single reg
'Byte 0
sendbuff(0) = 0
sendbuff(1) = 1
sendbuff(2) = 0
sendbuff(3) = 0
sendbuff(4) = 0
'Byte 0 Function code
sendbuff(5) = 6
'Byte 1 Function code
sendbuff(6) = 1
sendbuff(7) = 6
sendbuff(8) = 0
'register offset ' %MW1=1, %MW2=2 %MW3=3
sendbuff(9) = 1
sendbuff(10) = 0
'value to write
sendbuff(11) = 6
Else
'Multiple regs
'Byte 0
sendbuff(0) = 0
'think its an ID
sendbuff(1) = 1
sendbuff(2) = 0
sendbuff(3) = 0
sendbuff(4) = 0
'Byte 0 - Depends on number of regidsters 0b, od - Think its total packet size
sendbuff(5) = 11
'Byte 1
sendbuff(6) = 1
'Byte 2 function code
sendbuff(7) = 10
'Byte 3 not sure
sendbuff(8) = 0
'Byte 4 not sure
sendbuff(9) = 0
'Byte 5 not sure
sendbuff(10) = 0
'Byte 7 no of registers
sendbuff(11) = 2
'Byte 8 twice the previous no.
sendbuff(12) = 4
'Byte 9 First val
sendbuff(13) = 0
'Byte 10 first val
sendbuff(14) = 6
'Byte 11 second val
sendbuff(15) = 0
'Byte 12 second val
sendbuff(16) = 7
End If
' Dim sendBuff As Byte() = System.Text.Encoding.ASCII.GetBytes(str)
'sendbuff = System.Text.Encoding.ASCII.GetBytes(str)
Do While (Not serverListener.GetStream.DataAvailable()) And (sx < 3)
If serverListener.GetStream.CanWrite Then
If serverlistener.connected Then
serverListener.GetStream.Write(sendbuff, 0, sendbuff.Length)
End If
'readStream.Flush()
Else
MsgBox("sorry socket writing accessible")
End If
sx = sx + 1
Loop
Do While ((ct < 1000))
If Me.chkGetres.Checked = True Then
If serverListener.GetStream.CanRead Then
Do While serverListener.GetStream.DataAvailable()
serverListener.GetStream.Read(rcvbytes, 0, CInt(serverListener.ReceiveBufferSize))
returndata = Encoding.ASCII.GetString(rcvbytes)
Me.txtResp.Text = returndata
Loop
Else
MsgBox("sorry socket reading accessible")
End If
End If
ct = ct + 1
Loop
mix = mix + 1
jj = CStr(mix)
If mix < 10000 Then modmsg = "00000000000000" & "03" & "" & jj & "0001"
If mix < 1000 Then modmsg = "00000000000000" & "03" & "0" & jj & "0001"
If mix < 100 Then modmsg = "00000000000000" & "03" & "00" & jj & "0001"
If mix < 10 Then modmsg = "00000000000000" + "03" + "000" + jj + "0001"
serverListener.Close()
Catch exp As Exception
MsgBox("Exception: " + exp.ToString())
End Try
' serverListener.Close()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.txtAdr.Text = "192.168.2.5"
mix = 1000
jj = CStr(mix)
If mix < 10000 Then modmsg = "00000000000000" & "03" & "" & jj & "0001"
If mix < 1000 Then modmsg = "00000000000000" & "03" & "0" & jj & "0001"
If mix < 100 Then modmsg = "00000000000000" & "03" & "00" & jj & "0001"
If mix < 10 Then modmsg = "00000000000000" + "03" + "000" + jj + "0001"
Me.txtMsg.Text = modmsg
End Sub
Public Sub New()
' This call is required by the Windows Form Designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
End Sub
End Class</pre>
<pre>Imports System.IO
Imports System.Net.Sockets
Imports System.Text
Public Class Form1
'"localhost", 8585)
'= serverListener.GetStream
Dim str As String
Dim mix As Integer
Dim modmsg As String
Dim rcvbytes(256) As Byte
Dim jj As String
Dim sendbyte(256) As Byte
Private Sub cmdSendmsg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSendmsg.Click
Try
Dim serverListener As New TcpClient()
Dim newlistener As New TcpClient()
Dim readStream As Stream
Dim newstream As Stream
Dim returndata As String = ""
Dim zz As Integer = 0
Dim j, sx As Integer
Dim ct = 0
Dim joy As String
Dim snt As Integer
Dim sendbuff(256) As Byte
j = 1
serverListener.Connect(Me.txtAdr.Text, 502)
newlistener.Connect(Me.txtAdr.Text, 502)
readStream = serverListener.GetStream
newstream = serverListener.GetStream
serverListener.SendBufferSize = 1024
serverListener.ReceiveBufferSize = 1024
newlistener.SendBufferSize = 256
newlistener.ReceiveBufferSize = 256
' serverListener.Client.ReceiveTimeout = 10000;
'serverListener.Client.SendTimeout = 10;
' serverListener.s()
'' Console.WriteLine("Input Lines:")
' Me.txtMsg.Text = modmsg
str = Me.txtMsg.Text
If j = 1 Then
'Single reg
'Byte 0
sendbuff(0) = 0
sendbuff(1) = 1
sendbuff(2) = 0
sendbuff(3) = 0
sendbuff(4) = 0
'Byte 0 Function code
sendbuff(5) = 6
'Byte 1 Function code
sendbuff(6) = 1
sendbuff(7) = 6
sendbuff(8) = 0
'register offset ' %MW1=1, %MW2=2 %MW3=3
sendbuff(9) = 1
sendbuff(10) = 0
'value to write
sendbuff(11) = 6
Else
'Multiple regs
'Byte 0
sendbuff(0) = 0
'think its an ID
sendbuff(1) = 1
sendbuff(2) = 0
sendbuff(3) = 0
sendbuff(4) = 0
'Byte 0 - Depends on number of regidsters 0b, od - Think its total packet size
sendbuff(5) = 11
'Byte 1
sendbuff(6) = 1
'Byte 2 function code
sendbuff(7) = 10
'Byte 3 not sure
sendbuff(8) = 0
'Byte 4 not sure
sendbuff(9) = 0
'Byte 5 not sure
sendbuff(10) = 0
'Byte 7 no of registers
sendbuff(11) = 2
'Byte 8 twice the previous no.
sendbuff(12) = 4
'Byte 9 First val
sendbuff(13) = 0
'Byte 10 first val
sendbuff(14) = 6
'Byte 11 second val
sendbuff(15) = 0
'Byte 12 second val
sendbuff(16) = 7
End If
' Dim sendBuff As Byte() = System.Text.Encoding.ASCII.GetBytes(str)
'sendbuff = System.Text.Encoding.ASCII.GetBytes(str)
Do While (Not serverListener.GetStream.DataAvailable()) And (sx < 3)
If serverListener.GetStream.CanWrite Then
If serverlistener.connected Then
serverListener.GetStream.Write(sendbuff, 0, sendbuff.Length)
End If
'readStream.Flush()
Else
MsgBox("sorry socket writing accessible")
End If
sx = sx + 1
Loop
Do While ((ct < 1000))
If Me.chkGetres.Checked = True Then
If serverListener.GetStream.CanRead Then
Do While serverListener.GetStream.DataAvailable()
serverListener.GetStream.Read(rcvbytes, 0, CInt(serverListener.ReceiveBufferSize))
returndata = Encoding.ASCII.GetString(rcvbytes)
Me.txtResp.Text = returndata
Loop
Else
MsgBox("sorry socket reading accessible")
End If
End If
ct = ct + 1
Loop
mix = mix + 1
jj = CStr(mix)
If mix < 10000 Then modmsg = "00000000000000" & "03" & "" & jj & "0001"
If mix < 1000 Then modmsg = "00000000000000" & "03" & "0" & jj & "0001"
If mix < 100 Then modmsg = "00000000000000" & "03" & "00" & jj & "0001"
If mix < 10 Then modmsg = "00000000000000" + "03" + "000" + jj + "0001"
serverListener.Close()
Catch exp As Exception
MsgBox("Exception: " + exp.ToString())
End Try
' serverListener.Close()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.txtAdr.Text = "192.168.2.5"
mix = 1000
jj = CStr(mix)
If mix < 10000 Then modmsg = "00000000000000" & "03" & "" & jj & "0001"
If mix < 1000 Then modmsg = "00000000000000" & "03" & "0" & jj & "0001"
If mix < 100 Then modmsg = "00000000000000" & "03" & "00" & jj & "0001"
If mix < 10 Then modmsg = "00000000000000" + "03" + "000" + jj + "0001"
Me.txtMsg.Text = modmsg
End Sub
Public Sub New()
' This call is required by the Windows Form Designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
End Sub
End Class</pre>