Imports ORiN2.interop.CAO
Imports System.Runtime.InteropServices.Marshal

Public Class Form1
    Dim caoEng As CaoEngine
    Dim caoWss As CaoWorkspaces
    Dim caoWs As CaoWorkspace

    ' Robot objects
    Dim caoCtrl As CaoController ' Robot Controller
    Dim caoVarI As CaoVariable ' for I (Variable)
    Dim caoVarF As CaoVariable ' for F (Variable)
    Dim caoVarD As CaoVariable ' for D (Variable)
    Dim caoVarV As CaoVariable ' for V (Variable)
    Dim caoVarP As CaoVariable ' for P (Variable)
    Dim caoVarJ As CaoVariable ' for J (Variable)
    Dim caoVarT As CaoVariable ' for T (Variable)
    Dim caoVarS As CaoVariable ' for S (Variable)
    Dim caoVarIO As CaoVariable ' for IO (Variable)

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        Call btnDisconnect_Click(sender, New System.EventArgs)

        ' Delete CaoEngine
        If Not caoWs Is Nothing Then
            ReleaseComObject(caoWs)
            caoWs = Nothing
        End If

        If Not caoWss Is Nothing Then
            ReleaseComObject(caoWss)
            caoWss = Nothing
        End If

        If Not caoEng Is Nothing Then
            ReleaseComObject(caoEng)
            caoEng = Nothing
        End If
    End Sub

    '-----------------------------Initialization----------------------------
    Private Sub btnInit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInit.Click
        ' Create Engine
        caoEng = New CaoEngine
        caoWss = caoEng.Workspaces
        caoWs = caoWss.Item(0)

        btnInit.Enabled = False
        btnConnect.Enabled = True
    End Sub

    ' ---------------------------------------------------------------
    ' Connect with the Robot
    ' ---------------------------------------------------------------
    Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click
        On Error GoTo ErrorProc

        ' Create object and connect with VRC
        caoCtrl = caoWs.AddController("Robot", "caoProv.DENSO.RC8", "", "Server=192.168.0.1")

        ' Create object of valiable(I,F,D,V,P,J,T,S,IO)
        caoVarI = caoCtrl.AddVariable("I1")
        caoVarF = caoCtrl.AddVariable("F1")
        caoVarD = caoCtrl.AddVariable("D1")
        caoVarV = caoCtrl.AddVariable("V1")
        caoVarP = caoCtrl.AddVariable("P1")
        caoVarJ = caoCtrl.AddVariable("J1")
        caoVarT = caoCtrl.AddVariable("T1")
        caoVarS = caoCtrl.AddVariable("S1")
        caoVarIO = caoCtrl.AddVariable("IO128")

        ' Enable command buttons
        btnConnect.Enabled = False
        btnDisconnect.Enabled = True
        btnIRead.Enabled = True
        btnIWrite.Enabled = True
        btnFRead.Enabled = True
        btnFWrite.Enabled = True
        btnDRead.Enabled = True
        btnDWrite.Enabled = True
        btnVRead.Enabled = True
        btnVWrite.Enabled = True
        btnPRead.Enabled = True
        btnPWrite.Enabled = True
        btnJRead.Enabled = True
        btnJWrite.Enabled = True
        btnTRead.Enabled = True
        btnTWrite.Enabled = True
        btnSRead.Enabled = True
        btnSWrite.Enabled = True
        btnIORead.Enabled = True
        btnIOWrite.Enabled = True

        Exit Sub

ErrorProc:
        Call btnDisconnect_Click(sender, e)
        MsgBox(Err.Description & " : " & Hex(Err.Number))

    End Sub

    ' ---------------------------------------------------------------
    ' disconnect from the Robot
    ' ---------------------------------------------------------------
    Private Sub btnDisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisconnect.Click
        On Error Resume Next

        ' Disconnect from the controller
        If Not caoVarI Is Nothing Then
            ReleaseComObject(caoVarI)
            caoVarI = Nothing
        End If

        If Not caoVarF Is Nothing Then
            ReleaseComObject(caoVarF)
            caoVarF = Nothing
        End If

        If Not caoVarD Is Nothing Then
            ReleaseComObject(caoVarD)
            caoVarD = Nothing
        End If

        If Not caoVarV Is Nothing Then
            ReleaseComObject(caoVarV)
            caoVarV = Nothing
        End If

        If Not caoVarP Is Nothing Then
            ReleaseComObject(caoVarP)
            caoVarP = Nothing
        End If

        If Not caoVarJ Is Nothing Then
            ReleaseComObject(caoVarJ)
            caoVarJ = Nothing
        End If

        If Not caoVarT Is Nothing Then
            ReleaseComObject(caoVarT)
            caoVarT = Nothing
        End If

        If Not caoVarS Is Nothing Then
            ReleaseComObject(caoVarS)
            caoVarS = Nothing
        End If

        If Not caoVarIO Is Nothing Then
            ReleaseComObject(caoVarIO)
            caoVarIO = Nothing
        End If

        If Not caoCtrl Is Nothing Then
            Dim tmpCtrls As CaoControllers
            tmpCtrls = caoWs.Controllers

            tmpCtrls.Remove(caoCtrl.Name)

            ReleaseComObject(caoCtrl)
            caoCtrl = Nothing

            ReleaseComObject(tmpCtrls)
        End If

        ' Disable command buttons
        btnConnect.Enabled = True
        btnDisconnect.Enabled = False
        btnIRead.Enabled = False
        btnIWrite.Enabled = False
        btnFRead.Enabled = False
        btnFWrite.Enabled = False
        btnDRead.Enabled = False
        btnDWrite.Enabled = False
        btnVRead.Enabled = False
        btnVWrite.Enabled = False
        btnPRead.Enabled = False
        btnPWrite.Enabled = False
        btnJRead.Enabled = False
        btnJWrite.Enabled = False
        btnTRead.Enabled = False
        btnTWrite.Enabled = False
        btnSRead.Enabled = False
        btnSWrite.Enabled = False
        btnIORead.Enabled = False
        btnIOWrite.Enabled = False
    End Sub

    Private Sub btnIRead_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIRead.Click
        On Error GoTo ErrorProc

        ' Reading of "I variable"
        lblValue.Text = caoVarI.Value

        Exit Sub

ErrorProc:
        MsgBox(Err.Description & " : " & Hex(Err.Number))
    End Sub

    Private Sub btnIWrite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIWrite.Click
        On Error GoTo ErrorProc

        ' Writing of "I variable"
        caoVarI.Value = 1

        Exit Sub

ErrorProc:
        MsgBox(Err.Description & " : " & Hex(Err.Number))
    End Sub

    Private Sub btnFRead_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFRead.Click
        On Error GoTo ErrorProc

        ' Reading of "F variable"
        lblValue.Text = caoVarF.Value

        Exit Sub

ErrorProc:
        MsgBox(Err.Description & " : " & Hex(Err.Number))
    End Sub

    Private Sub btnFWrite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFWrite.Click
        On Error GoTo ErrorProc

        ' Writing of "F variable"
        caoVarF.Value = 1.23F

        Exit Sub

ErrorProc:
        MsgBox(Err.Description & " : " & Hex(Err.Number))
    End Sub

    Private Sub btnDRead_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDRead.Click
        On Error GoTo ErrorProc

        ' Reading of "D variable"
        lblValue.Text = caoVarD.Value

        Exit Sub

ErrorProc:
        MsgBox(Err.Description & " : " & Hex(Err.Number))
    End Sub

    Private Sub btnDWrite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDWrite.Click
        On Error GoTo ErrorProc

        ' Writing of "D variable"
        caoVarD.Value = 0.123456789

        Exit Sub

ErrorProc:
        MsgBox(Err.Description & " : " & Hex(Err.Number))
    End Sub

    Private Sub btnVRead_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVRead.Click
        On Error GoTo ErrorProc

        Dim varV As Object
        ' Reading of "V variable"
        varV = caoVarV.Value
        lblValue.Text = varV(0) & "," & varV(1) & "," & varV(2)

        Exit Sub

ErrorProc:
        MsgBox(Err.Description & " : " & Hex(Err.Number))
    End Sub

    Private Sub btnVWrite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVWrite.Click
        On Error GoTo ErrorProc

        Dim varV As Object
        ' Writing of "V variable"
        varV = New Object() {100, 200, 300}
        caoVarV.Value = varV

        Exit Sub

ErrorProc:
        MsgBox(Err.Description & " : " & Hex(Err.Number))
    End Sub

    Private Sub btnPRead_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPRead.Click
        On Error GoTo ErrorProc

        Dim varP As Object
        ' Reading of "P variable"
        varP = caoVarP.Value
        lblValue.Text = varP(0) & "," & varP(1) & "," & varP(2) & "," & varP(3) & "," & varP(4) & "," & varP(5) & "," & varP(6)

        Exit Sub

ErrorProc:
        MsgBox(Err.Description & " : " & Hex(Err.Number))
    End Sub

    Private Sub btnPWrite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPWrite.Click
        On Error GoTo ErrorProc

        Dim varP As Object
        ' Writing of "P variable"
        varP = New Object() {500, 0, 350, 180, 0, 180, 5}
        caoVarP.Value = varP

        Exit Sub

ErrorProc:
        MsgBox(Err.Description & " : " & Hex(Err.Number))
    End Sub

    Private Sub btnJRead_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnJRead.Click
        On Error GoTo ErrorProc

        Dim varJ As Object
        ' Reading of "J variable"
        varJ = caoVarJ.Value
        lblValue.Text = varJ(0) & "," & varJ(1) & "," & varJ(2) & "," & varJ(3) & "," & varJ(4) & "," & varJ(5) & "," & varJ(6) & "," & varJ(7)

        Exit Sub

ErrorProc:
        MsgBox(Err.Description & " : " & Hex(Err.Number))
    End Sub

    Private Sub btnJWrite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnJWrite.Click
        On Error GoTo ErrorProc

        Dim varJ As Object
        ' Writing of "J variable"
        varJ = New Object() {0, 39.52, 95.71, 0, 44.77, 0}
        caoVarJ.Value = varJ

        Exit Sub

ErrorProc:
        MsgBox(Err.Description & " : " & Hex(Err.Number))
    End Sub

    Private Sub btnTRead_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTRead.Click
        On Error GoTo ErrorProc

        Dim varT As Object
        ' Reading of "T variable"
        varT = caoVarT.Value
        lblValue.Text = varT(0) & "," & varT(1) & "," & varT(2) & "," & varT(3) & _
                        "," & varT(4) & "," & varT(5) & "," & varT(6) & "," & varT(7) & "," & varT(8) & "," & varT(9)

        Exit Sub

ErrorProc:
        MsgBox(Err.Description & " : " & Hex(Err.Number))
    End Sub

    Private Sub btnTWrite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTWrite.Click
        On Error GoTo ErrorProc

        Dim varT As Object
        ' Writing of "T variable"
        varT = New Object() {500, 0, 300, 0, 1, 0, 0, 0, -1, 5}
        caoVarT.Value = varT

        Exit Sub

ErrorProc:
        MsgBox(Err.Description & " : " & Hex(Err.Number))
    End Sub

    Private Sub btnSRead_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSRead.Click
        On Error GoTo ErrorProc

        ' Reading of "S variable"
        lblValue.Text = caoVarS.Value

        Exit Sub

ErrorProc:
        MsgBox(Err.Description & " : " & Hex(Err.Number))
    End Sub

    Private Sub btnSWrite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSWrite.Click
        On Error GoTo ErrorProc

        ' Writing of "S variable"
        caoVarS.Value = "DENSO ROBOT"

        Exit Sub

ErrorProc:
        MsgBox(Err.Description & " : " & Hex(Err.Number))
    End Sub

    Private Sub btnIORead_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIORead.Click
        On Error GoTo ErrorProc

        ' Reading of "IO variable"
        lblValue.Text = caoVarIO.Value

        Exit Sub

ErrorProc:
        MsgBox(Err.Description & " : " & Hex(Err.Number))
    End Sub

    Private Sub btnIOWrite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIOWrite.Click
        On Error GoTo ErrorProc

        ' Writing of "IO variable"
        caoVarIO.Value = True   ' ON
        'caoVarIO.Value = False ' OFF

        Exit Sub

ErrorProc:
        MsgBox(Err.Description & " : " & Hex(Err.Number))
    End Sub
End Class
