**Attention** : Read this resource material carefully and in its entirety before use, to ensure it is understood and used properly.  Failure to properly follow the instructions in the resource materials DPAM provides may result in damage to your equipment.  As a result, by using the resource materials, you are assuming the risks associated with modifying your equipment. DENSO holds no liability, implied or otherwise, for damage, injury or any legal responsibility incurred, directly or indirectly from the use of the resource materials, including any loss of data or damage to property which may occur by your use of the resource materials. The use of the resource materials are not recommended unless you have technical knowledge and functional experience with the equipment and related software. DENSO is unable to provide support, remote or otherwise, for the information included in the resource material, nor for the ancillary topics relating to the information included in the resource materials. Therefore, if you are not fully comfortable with it, we strongly recommend that you send your unit to one of our Regional Support Centers for repair.  The information contained in the resource materials are subject to change at the sole discretion of DPAM. 


Overview

In ORiN2 SDK, DCOM (Distributed Component Object Model) of Microsoft Corporation is adopted as a distributed object technology. The DCOM based CAO can be used from various program languages such as C++, JAVA, and Visual Basic.

This article is meant to help to gather information on resources that can help you get started with interfacing with the CAO Engine in VB .NET (Visual Studio IDE). This article is not intended to aid you with programming in VB .NET nor how to use Visual Studio IDE. 


Tools and Parts needed


NOTE:
The following sample code is provided "AS IS" under the MIT License. Programming support service of VB .NET is out of warranty. Please note that we do not provide any programming support service beyond basic setup and troubleshooting. 


Video Tutorial 


Previous Steps...

Please make sure that you have reviewed the ORiN2 - Overview article and that your RC controller is properly setup. You can use the CAOTester to make sure that your PC is ready to communicate with the controller. 


Set up your controller to accept messages from your PC.

ORiN 2 - Robot Controller Setup (RC8 / RC8A / COBOTTA)
Test communication using CAO Tester application

ORiN 2 - Operation check using CAOTester (CAO Engine)
Configuring the Project to Point to the ORiN Library (CaoRCW)



Programming References

At this point, you should be ready to begin programming your application to interface with your robot controller. When connecting to the controller, you will need to specify the ORiN provider you are trying to use to establish communication. The provider differs based on the robot controller you are using. RC5, RC7, and RC7M controllers use the NetwoRC provider. RC8, RC8A, and COBOTTA controllers us the RC8 provider.

NetwoRC provider directory

C:\ORiN2\CAO\ProviderLib\DENSO\NetwoRC


RC8 provider directory

C:\ORiN2\CAO\ProviderLib\DENSO\RC8


NOTE:
Please consult the Owner's manual for information on how to program your DENSO Robot or details on specific robot commands. 


Programming using the Provider

The following samples are for performing various basic but essential operations. The samples are for connecting using the RC8 Provider.

For more information you can reference Section 4 RC8 Programming Using the Provider from the RC8 Provider User's Guide PDF document


RC8 Provider User Guide Samples in VB .NET

This document intends to give you a better experience when trying to implement a command in the provider. We have "translated" the original VB6 samples in Section 5.0 from the RC8 provider guide into VB .NET language. Click here to download a copy.

 

Variable Sample

This sample code will read or write to the string global variable "S15" on the robot controller.

For more information, reference Section 4.1 RC8 controller variable access.


Imports ORiN2.interop.CAO

Public Class Variable
    Dim g_eng As CaoEngine
    Dim g_ctrl As CaoController
    Dim g_val As CaoVariable

    Private Sub Command1_Click(sender As System.Object, e As System.EventArgs) Handles Command1.Click
        Text1.Text = g_val.Value    'Read Variable
    End Sub

    Private Sub Command2_Click(sender As System.Object, e As System.EventArgs) Handles Command2.Click
        g_val.Value = Convert.ToBoolean(Text2.Text) 'Write Variable
    End Sub

    Private Sub Variable_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        g_eng = New CaoEngine

        'Connect RC: IP setting depends on your RC setting.
        g_ctrl = g_eng.Workspaces.Item(0).AddController("RC8", "CaoProv.DENSO.RC8", "localhost", "Server=192.168.0.1")

        'Variable name "IO150"
        g_val = g_ctrl.AddVariable("IO150", "")
    End Sub

    Private Sub Variable_FormClosed(sender As System.Object, e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
        'Delete variable object
        g_ctrl.Variables.Clear()
        System.Runtime.InteropServices.Marshal.ReleaseComObject(g_val)
        g_val = Nothing

        'Delete controller object
        g_eng.Workspaces.Item(0).Controllers.Remove(g_ctrl.Index)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(g_ctrl)
        g_ctrl = Nothing

        'Delete engine object
        System.Runtime.InteropServices.Marshal.ReleaseComObject(g_eng)
        g_eng = Nothing
    End Sub

End Class

 

Task Sample

This sample code will start or stop a robot program (Pro1.pcs), also known as tasks.

Prerequisites: 

  • Controller must have a program named Pro1.pcs 
  • Controller must be set to Auto mode

For more information, reference Section 4.2 Task controller with RC8 controller.



Imports ORiN2.interop.CAO

Public Class Task
    Dim g_eng As CaoEngine
    Dim g_ctrl As CaoController
    Dim g_task As CaoTask

    Private Sub Command1_Click(sender As System.Object, e As System.EventArgs) Handles Command1.Click
        g_task.Start(1, "")     'Start Task
    End Sub

    Private Sub Command2_Click(sender As System.Object, e As System.EventArgs) Handles Command2.Click
        g_task.Stop(4, "")      'Stop Task
    End Sub

    Private Sub Task_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        g_eng = New CaoEngine

        'Connect RC: IP setting depends on your RC setting.
        g_ctrl = g_eng.Workspaces.Item(0).AddController("RC8", "caoProv.DENSO.RC8", "", "Server=192.168.0.1")

        g_task = g_ctrl.AddTask("PRO1", "") 'Task Name PRO1
    End Sub

    Private Sub Task_FormClosed(sender As System.Object, e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
        'Delete task object
        g_ctrl.Tasks.Clear()
        System.Runtime.InteropServices.Marshal.ReleaseComObject(g_task)
        g_task = Nothing

        'Delete controller object
        g_eng.Workspaces.Item(0).Controllers.Remove(g_ctrl.Index)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(g_ctrl)
        g_ctrl = Nothing

        'Delete engine object
        System.Runtime.InteropServices.Marshal.ReleaseComObject(g_eng)
        g_eng = Nothing
    End Sub
End Class


Robot Motion Sample

This sample code will turn the motor ON or OFF. When the Start Robot button is pressed, the robot will Move to position P10 and then to position P11.

Prerequisites: 

  • Global variables P10 and P11 must have valid coordinate data
  • Robot state must be set to Auto mode

For more information, reference Section 4.3 Robot control with RC8 controller.



Imports ORiN2.interop.CAO

Public Class Robot
    Dim g_eng As CaoEngine
    Dim g_ctrl As CaoController
    Dim g_robot As CaoRobot
    Dim g_robotvar As CaoVariable
    Dim g_haltFlag As Boolean

    Private Sub Command1_Click(sender As System.Object, e As System.EventArgs) Handles Command1.Click
        'Start motor if arm is stationary
        If g_robotvar.Value = False Then
            g_robot.Execute("Motor", New Object() {1, 0})
        End If
    End Sub

    Private Sub Command2_Click(sender As System.Object, e As System.EventArgs) Handles Command2.Click
        'Stop motor if arm is stationary
        If g_robotvar.Value = False Then
            g_robot.Execute("Motor", New Object() {0, 0})
        End If
    End Sub

    Private Sub Command3_Click(sender As System.Object, e As System.EventArgs) Handles Command3.Click
        'Stop Robot
        g_robot.Halt("")

        'Record robot stop
        g_haltFlag = True
    End Sub

    Private Sub Command4_Click(sender As System.Object, e As System.EventArgs) Handles Command4.Click
        'Do not run new operation instruction if arm is running 
        If g_robotvar.Value = True Then
            Exit Sub
        End If

        g_haltFlag = False

        'Run robot
        g_robot.Move(1, "@P P10", "NEXT")

        'Do not start next motion until previous motion is completed
        Do Until g_robotvar.Value = False
            Application.DoEvents()
        Loop

        'Do not start next motion if robot has stopped
        If g_haltFlag = True Then
            Exit Sub
        End If

        'Run robot
        g_robot.Move(1, "@P P11", "NEXT")
    End Sub

    Private Sub Robot_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        g_eng = New CaoEngine

        'Connect RC: IP Setting depends on your RC Setting
        g_ctrl = g_eng.Workspaces.Item(0).AddController("RC8", "caoProv.DENSO.RC8", "", "WPJ=")

        'Create CaoRobot object 
        g_robot = g_ctrl.AddRobot("Arm")

        'Argument used to check arm running status
        g_robotvar = g_robot.AddVariable("@BUSY_STATUS")

        'Get arm control authority
        g_robot.Execute("TakeArm")

        'Start Motor
        Command1_Click(sender, e)
    End Sub

    Private Sub Robot_FormClosed(sender As System.Object, e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
        'Stop Motor
        Command2_Click(sender, e)

        'Release arm control authority
        g_robot.Execute("GiveArm")

        'Delete robot variable object
        g_robot.Variables.Clear()
        System.Runtime.InteropServices.Marshal.ReleaseComObject(g_robotvar)
        g_robotvar = Nothing

        'Delete robot arm object
        g_ctrl.Robots.Clear()
        System.Runtime.InteropServices.Marshal.ReleaseComObject(g_robot)
        g_robot = Nothing

        'Delete controller object
        g_eng.Workspaces.Item(0).Controllers.Remove(g_ctrl.Index)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(g_ctrl)
        g_ctrl = Nothing

        'Delete engine object
        System.Runtime.InteropServices.Marshal.ReleaseComObject(g_eng)
        g_eng = Nothing
    End Sub
End Class


More samples...

You can find VB .NET samples in your install of the ORiN 2 SDK. Here are some recommendations:


RC8 Provider Samples

Sample NameDirectory Path
Robot (Simple)C:\ORiN2\CAO\ProviderLib\DENSO\RC8\Samples\Simple\Robot\VB2005
Variable (Simple)C:\ORiN2\CAO\ProviderLib\DENSO\RC8\Samples\Simple\Variable\VB2005


NetwoRC Provider Samples

Sample NameDirectory Path
NonstopPathC:\ORiN2\CAO\ProviderLib\DENSO\NetwoRC\Samples\NonstopPath\VB2005
VariableC:\ORiN2\CAO\ProviderLib\DENSO\NetwoRC\Samples\Variable\VB2005

Owner's Manual Reference