基于康耐视visionpro的vb通讯

242 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

每次在程序运行前的准备---授权查询

#Region "检测软件授权"
    Delegate Sub mydelegate()
    Dim LicensedFeatures As New CogStringCollection
    Public Sub CheckLicense()
        Try
            If InvokeRequired Then
                Dim mydel As New mydelegate(AddressOf CheckLicense)
                Invoke(mydel)
                Return
            End If
            LicensedFeatures = CogMisc.GetLicensedFeatures(False)
            If LicensedFeatures.Count > 0 Then
            Else
                mLoadingThread.Abort()
                mCloseThread = New Thread(AddressOf CloseStart)
                mCloseThread.Start()
                'Sleep(20)
                'mLoadingThread.Abort()
                'LogAdd("License不存在,请检查License!", False)
                MessageBox.Show("License不存在,请检查License!")
                Application.Exit()
            End If
        Catch gx As CogException
            MessageBox.Show(gx.ToString)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub
#End Region

用来产看有没有获得官方授权

自己弄的类,用来处理visionpro

嗨,这样就不会显得文章很短,全是代码了。 这些是tcp通讯的类文件

我们怎么通讯呢

实例化

'=========初始化TCPSever==========================
        mServerC1.InitTcpServer(Parm.SerPort(1), 2, 1024, 10)
        mServerC1.StartServer()
        
        

对于TCP的状态做个监控

 '=====================通讯状态监控==============================
    Private Delegate Sub TCPStatusC1(ByVal str As String, ByVal Flag As Boolean)

    Private Sub mServerC1_ClientConnected(ByVal IP As String, ByVal Port As String) Handles mServerC1.ClientConnected
        Try
            Me.Invoke(New TCPStatusC1(AddressOf StatusDisplayC1), " Camera01客户端" & IP & "已连接!", True)
            gOnlineFlag = True
        Catch ex As Exception
            LogAdd(ex.Message, False)
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub mServerC1_ClientClose(ByVal IP As String, ByVal Port As String) Handles mServerC1.ClientClose
        Try
            Me.Invoke(New TCPStatusC1(AddressOf StatusDisplayC1), " Camera01客户端" & IP & "已断开!", False)
        Catch ex As Exception
            LogAdd(ex.Message, False)
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    '==================状态灯监控===================================
    Private Sub StatusDisplayC1(ByVal Log As String, ByVal Flag As Boolean)
        If Flag Then
            LogAdd(Log, True)
            picStatusC1.BackgroundImage = My.Resources.green
        Else
            LogAdd(Log, False)
            picStatusC1.BackgroundImage = My.Resources.red
        End If
    End Sub
    Private Sub LogMessageC1(ByVal Log As String)
        STimeC1 = GetTime()
        LogAdd(Log, True)
    End Sub

接收来自TCP的数据

 '==================接收数据监控==================================
    Private Delegate Sub CameraRecC1()
    Private Delegate Sub LogAddC1(ByVal LogStr As String)
    Private Delegate Sub CmbDisplayC1(ByVal JobStr As String)
    Private Sub mServerC1_DataArrived(ByVal value() As Byte, ByVal Len As Integer, ByVal IPAddress As String, ByVal Port As String) Handles mServerC1.DataArrived
        Try
            Dim ReceiveStr As String = ""
            Dim ReStr() As String
            ReceiveStr = Encoding.Default.GetString(value)

            Me.Invoke(New LogAddC1(AddressOf LogMessageC1), "Camera01接收数据:" & ReceiveStr)
            ReStr = Split(ReceiveStr, "!")
            ReceiveStr = ReStr(0)
            If CStr(ReStr(1)) <> "" Then
                C1ImageName = ReceiveStr.Substring(0, 4) & "_" & ReStr(1)
            End If
            For i As Integer = 1 To C1.JobNum
                If C1.Trigger(i) = ReceiveStr Then
                    C1.SelectJobNum = i
                    Me.Invoke(New CameraRecC1(AddressOf CameraDataC1))
                End If
            Next
        Catch ex As Exception
            LogAdd(ex.Message, False)
            MessageBox.Show(ex.Message)
        End Try
    End Sub

我们根据接收到的数据去判断,然后去运行我们的额程序

TCP 发送数据

  '*******************************TCP发送数据*******************************************
    Private Sub TCPSendData(ByVal CameraIndex As Integer, ByVal data As String, ByVal Flag As Boolean)
        Dim SendByte() As Byte
        SendByte = Encoding.ASCII.GetBytes(data)
        Try
            Select Case CameraIndex
                Case 1
                    If gStep = 1 Then
                        mServerC1.SendDataToAllClient(SendByte)
                        ETimeC1 = GetTime()
                        gRunTimeC1 = CalRunTime(STimeC1, ETimeC1)
                        LogAdd("Camera01发送结果:" & data, Flag)
                    Else
                        ETimeC1 = GetTime()
                        gRunTimeC1 = CalRunTime(STimeC1, ETimeC1)
                        LogAdd("Camera01检测结果:" & data, Flag)
                    End If
                    lblRunTimeC1.Text = gRunTimeC1 & "ms"
                    C1ImageName = ""
                Case 2
                    If gStep = 1 Then
                        mServerC2.SendDataToAllClient(SendByte)
                        ETimeC2 = GetTime()
                        gRunTimeC2 = CalRunTime(STimeC2, ETimeC2)
                        LogAdd("Camera02发送结果:" & data, Flag)
                    Else
                        ETimeC2 = GetTime()
                        gRunTimeC2 = CalRunTime(STimeC2, ETimeC2)
                        LogAdd("Camera02检测结果:" & data, Flag)
                    End If
                    lblRunTimeC2.Text = gRunTimeC2 & "ms"
                    C2ImageName = ""
                Case 3
                    If gStep = 1 Then
                        mServerC3.SendDataToAllClient(SendByte)
                        ETimeC3 = GetTime()
                        gRunTimeC3 = CalRunTime(STimeC3, ETimeC3)
                        LogAdd("Camera03发送结果:" & data, Flag)
                    Else
                        ETimeC3 = GetTime()
                        gRunTimeC3 = CalRunTime(STimeC3, ETimeC3)
                        LogAdd("Camera03检测结果:" & data, Flag)
                    End If
                    lblRunTimeC3.Text = gRunTimeC3 & "ms"
                    C3ImageName = ""
                Case 4
                    If gStep = 1 Then
                        mServerC4.SendDataToAllClient(SendByte)
                        ETimeC4 = GetTime()
                        gRunTimeC4 = CalRunTime(STimeC4, ETimeC4)
                        LogAdd("Camera04发送结果:" & data, Flag)
                    Else
                        ETimeC4 = GetTime()
                        gRunTimeC4 = CalRunTime(STimeC4, ETimeC4)
                        LogAdd("Camera04检测结果:" & data, Flag)
                    End If
                    lblRunTimeC4.Text = gRunTimeC4 & "ms"
                    C4ImageName = ""
                Case 5
                    mServerC1.SendDataToAllClient(SendByte)
                    LogAdd("Camera01发送结果:" & data, Flag)
            End Select
        Catch ex As Exception
            LogAdd(ex.Message, False)
            MessageBox.Show(ex.Message)
        End Try

    End Sub