tcpclient webrelay和控制模拟输出

时间:2016-10-01 23:04:34

标签: vb.net tcp tcpclient

这是我第一次在程序控制webrelay中使用网络。我能够成功地编写我的程序...或者我认为。几天前,我有一台设备从网络上掉线,我的程序“被锁定”。我知道它并没有真正锁定。我做了一些调试,发现发生的事情是当tcpclient抛出异常时,它会停止运行后面的任何代码。这导致我的程序停止更新,因为计时器从未重新启动,我无法控制模拟输出。

Public Class ControlPanelX317
Private SQL As New SQLControl

Private Sub ControlPanelX317_Load(sender As Object, e As EventArgs) Handles MyBase.Load


    LoadControlsX317()
End Sub
'Dislay Conrol
'__________________________________________________________________________________________________________________________________________________________________________
Private Sub LoadControlsX317()
    Dim loadqry As String = "SELECT * FROM controlsX317  WHERE controlsX317.ValueVoltageID = '" & 1 & "' "
    Dim SQLCmd As New SqlCommand(loadqry, Sql.SQLCon)

    If Sql.SQLCon.State = ConnectionState.Closed Then Sql.SQLCon.Open()

    Dim reader As SqlDataReader = SQLCmd.ExecuteReader
    While reader.Read = True
        txt_S1_VolueVoltage.Text = reader("S1VolueVoltage")
        txt_S2_VolueVoltage.Text = reader("S2VolueVoltage")
        txt_S3_VolueVoltage.Text = reader("S3VolueVoltage")
        txt_S4_VolueVoltage.Text = reader("S4VolueVoltage")

    End While
    SQLCmd.Dispose()
    reader.Close()
    Sql.SQLCon.Close()
End Sub
Private Sub btn_Save_ValueVoltage_Click(sender As Object, e As EventArgs) Handles btn_Save_ValueVoltage.Click
    If txt_S1_VolueVoltage.Text > 10 Then
        MsgBox("Max Voltage is 10V")
        txt_S1_VolueVoltage.Clear()
        Exit Sub
    End If
    If txt_S2_VolueVoltage.Text > 10 Then
        MsgBox("Max Voltage is 10V")
        txt_S2_VolueVoltage.Clear()
        Exit Sub
    End If
    If txt_S3_VolueVoltage.Text > 10 Then
        MsgBox("Max Voltage is 10V")
        txt_S3_VolueVoltage.Clear()
        Exit Sub
    End If
    If txt_S4_VolueVoltage.Text > 10 Then
        MsgBox("Max Voltage is 10V")
        txt_S4_VolueVoltage.Clear()
        Exit Sub
    End If
    If txt_S1_VolueVoltage.Text <> "" Then
        Dim UpdateValueVoltage As String = "UPDATE controlsX317 SET S1VolueVoltage='" & txt_S1_VolueVoltage.Text & "',  S2VolueVoltage='" & txt_S2_VolueVoltage.Text & "',
                                          S3VolueVoltage='" & txt_S3_VolueVoltage.Text & "', S4VolueVoltage='" & txt_S4_VolueVoltage.Text & "' 
                                          WHERE ValueVoltageID ='" & 1 & "' "
        If SQL.DataUpdate(UpdateValueVoltage) = 0 Then
            MsgBox("The Sysytem could not be found!!! ")
        Else
            MsgBox("VolueVoltage successfully changed")
        End If

    Else
        MsgBox("You must restart a Sysytem")
    End If
End Sub

Private Sub btn_S1_SetVoltage_Click(sender As Object, e As EventArgs) Handles btn_S1_SetVoltage.Click
    lbl_S1_AnalogOutput.Text = Val(txt_S1_VolueVoltage.Text) * Val(txt_S1_ControlViltage.Text / 100) & "V"
End Sub

Private Sub btn_S2_SetVoltage_Click(sender As Object, e As EventArgs) Handles btn_S2_SetVoltage.Click
    lbl_S2_AnalogOutput.Text = Val(txt_S2_VolueVoltage.Text) * Val(txt_S2_ControlViltage.Text / 100) & "V"
End Sub

Private Sub btn_S3_SetVoltage_Click(sender As Object, e As EventArgs) Handles btn_S3_SetVoltage.Click
    lbl_S3_AnalogOutput.Text = Val(txt_S3_VolueVoltage.Text) * Val(txt_S3_ControlViltage.Text / 100) & "V"
End Sub

Private Sub btn_S4_SetVoltage_Click(sender As Object, e As EventArgs) Handles btn_S4_SetVoltage.Click
    lbl_S4_AnalogOutput.Text = Val(txt_S4_VolueVoltage.Text) * Val(txt_S4_ControlViltage.Text / 100) & "V"
End Sub
'End Display Control
'_________________________________________________________________________________________________________________________________________________________________________

'Conection to WebRelay X317
'_________________________________________________________________________________________________________________________________________________________________________

Public Sub getWebRelayState()
    Dim tcpClient As New TcpClient()
    Dim port As Integer

    Try
        port = Convert.ToInt32(txtPort.Text)
        tcpClient.Connect(txt_IPAddress.Text, port)

        If tcpClient.Connected Then


            'Create a network stream object
            Dim netStream As NetworkStream = tcpClient.GetStream()

            'If we can read and write to the stream then do so
            If netStream.CanWrite And netStream.CanRead Then

                'Send the on command to webrelay
                Dim sendBytes As Byte() = Encoding.ASCII.GetBytes("GET /state.xml?noReply=0 HTTP/1.1" & vbCrLf & "Authorization: Basic bm9uZTp3ZWJyZWxheQ==" & vbCrLf & vbCrLf)
                netStream.Write(sendBytes, 0, sendBytes.Length)

                'Get the response from webrelay
                Dim bytes(tcpClient.ReceiveBufferSize) As Byte
                netStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))

                'Parse the response and update the webrelay state and input text boxes
                Dim returndata As String = Encoding.ASCII.GetString(bytes)

                'Parse out the relay state and input state
                Dim array1 As Char() = returndata.ToCharArray()

                Dim ana(4) As Integer

                'Relay State found at index 66
                If array1(66) = "1" Then
                    RelayState.Text = "ON"
                Else
                    RelayState.Text = "OFF"
                End If

                'Input State found at index 94
                If array1(94) = "1" Then
                    inputState.Text = "ON"
                Else
                    inputState.Text = "OFF"
                End If

            End If

            'Close the connection
            tcpClient.Close()

        End If


    Catch ex As Exception
        inputState.Text = "Error"
        RelayState.Text = "Error"
        'Disable the timer
        TimerRelayRefresh.Enabled = False
    End Try
End Sub


Private Sub sendRequest(ByVal val As String)

    Dim tcpClient As New TcpClient()
    Dim port As Integer

    Try
        'Disable the timer
        TimerRelayRefresh.Enabled = False

        port = Convert.ToInt32(txtPort.Text)
        tcpClient.Connect(txt_IPAddress.Text, port)

        If tcpClient.Connected Then
            MsgBox("connection successful")


            'Create a network stream object
            Dim netStream As NetworkStream = tcpClient.GetStream()

            'If we can read and write to the stream then do so
            If netStream.CanWrite And netStream.CanRead Then

                'Send the on command to webrelay
                Dim sendBytes As Byte() = Encoding.ASCII.GetBytes("GET /state.xml?relayState=1 HTTP/1.1<CR><LF>" & vbCrLf & "Authorization: Basic bm9uZTp3ZWJyZWxheQ==<CR><LF><CR><LF>" & vbCrLf & vbCrLf)
                netStream.Write(sendBytes, 0, sendBytes.Length)

                'Get the response from webrelay
                Dim bytes(tcpClient.ReceiveBufferSize) As Byte
                netStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))

                'Parse the response and update the webrelay state and input text boxes
                Dim returndata As String = Encoding.ASCII.GetString(bytes)


                'Parse out the relay state and input state
                Dim array1 As Char() = returndata.ToCharArray()


                'Relay State found at index 66
                If array1(66) = "1" Then
                    RelayState.Text = "ON"

                Else
                    RelayState.Text = "OFF"
                End If

                'Input State found at index 94
                If array1(94) = "1" Then
                    inputState.Text = "ON"
                End If
            Else
                    inputState.Text = "OFF"
                End If

            End If


        'Enable the timer
        TimerRelayRefresh.Enabled = True

    Catch ex As Exception
        inputState.Text = "Error"
        RelayState.Text = "Error"
        'Disable the timer
        TimerRelayRefresh.Enabled = False
    End Try
End Sub
Private Sub btn_ControlsX317_On_Click(sender As Object, e As EventArgs) Handles btn_ControlsX317_On.Click
    sendRequest("1")
End Sub

Private Sub btn_ControlsX317_Off_Click(sender As Object, e As EventArgs) Handles btn_ControlsX317_Off.Click
    sendRequest("0")
End Sub

Private Sub btn_ControlsX317_PULSE_Click(sender As Object, e As EventArgs) Handles btn_ControlsX317_PULSE.Click
    sendRequest("2")
End Sub

'End Conetion
'_________________________________________________________________________________________________________________________________________________________________________

结束班

0 个答案:

没有答案