Imports ORiN2.interop.CAO

Public Class frmMain

    Public CaoEng As New CaoEngine
    Public CaoWs As CaoWorkspace
    Public CaoCtrl As CaoController

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    End Sub

    Private Sub chkJ7PosNo_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkJ7PosNo.CheckedChanged
        Me.txtJ7PosNo.Enabled = Me.chkJ7PosNo.CheckState
    End Sub

    Private Sub chkJ8PosNo_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkJ8PosNo.CheckedChanged
        Me.txtJ8PosNo.Enabled = Me.chkJ8PosNo.CheckState
    End Sub

    Private Sub chkAreaDataNo_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkAreaDataNo.CheckedChanged
        Me.txtAreaDataNo.Enabled = Me.chkAreaDataNo.CheckState
    End Sub

    Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click

        Dim con As String

        Try
            CaoWs = CaoEng.Workspaces.Item(0)
            CaoCtrl = CaoWs.AddController("RC0", "CaoProv.DENSO.NetwoRC", "", "Conn=" & Me.cmbParameter.Text)
            con = CaoCtrl.AddVariable("@VERSION", "@IfNotMember=True").Value
            Me.btnConnect.Enabled = False
            Me.btnDisconnect.Enabled = True
            Me.tabOrbit.Enabled = True
        Catch ex As Exception
            MsgBox("RobotController Connect Failure." + vbCrLf + ex.Message, MsgBoxStyle.Critical)
            CaoWs.Controllers.Clear()
            System.Runtime.InteropServices.Marshal.ReleaseComObject(CaoCtrl)
            CaoCtrl = Nothing
            System.Runtime.InteropServices.Marshal.ReleaseComObject(CaoWs)
            CaoWs = Nothing
        End Try

    End Sub

    Private Sub btnDisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisconnect.Click

        On Error Resume Next

        CaoCtrl.Variables.Clear()
        CaoWs.Controllers.Clear()
        System.Runtime.InteropServices.Marshal.ReleaseComObject(CaoCtrl)
        CaoCtrl = Nothing
        System.Runtime.InteropServices.Marshal.ReleaseComObject(CaoWs)
        CaoWs = Nothing

        Me.tabOrbit.Enabled = False
        Me.btnDisconnect.Enabled = False
        Me.btnConnect.Enabled = True

    End Sub

    Private Sub btnVariableRead_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVariableRead.Click

        Dim i
        Dim MsgStr As String
        Dim DataCount As Integer
        Dim PosNo As Integer
        Dim AreaNo As Integer
        Dim J7No As Integer
        Dim J8No As Integer
        Dim VarP As CaoVariable
        Dim VarF As CaoVariable
        Dim pVal() As Single
        Dim aVal() As Single
        Dim J7Val As Single
        Dim J8Val As Single

        Try
            DataCount = CInt(Me.txtPositionCount.Text)
            If (DataCount > 3) And (DataCount <= 200) Then
                PosNo = CInt(Me.txtRobotPosNo.Text)
                MsgStr = "Position : P[" & PosNo & "] ~ P[" & PosNo + (DataCount - 1) & "]"
                If Me.chkAreaDataNo.CheckState Then
                    AreaNo = CInt(Me.txtAreaDataNo.Text)
                    MsgStr = MsgStr & vbCrLf & "Area : P[" & AreaNo & "] ~ P[" & AreaNo + (DataCount - 1) & "]"
                End If
                If Me.chkJ7PosNo.CheckState Then
                    J7No = CInt(Me.txtJ7PosNo.Text)
                    MsgStr = MsgStr & vbCrLf & "J7 : F[" & J7No & "] ~ F[" & J7No + (DataCount - 1) & "]"
                End If
                If Me.chkJ8PosNo.CheckState Then
                    J8No = CInt(Me.txtJ8PosNo.Text)
                    MsgStr = MsgStr & vbCrLf & "J8 : F[" & J8No & "] ~ F[" & J8No + (DataCount - 1) & "]"
                End If

                If MsgBox("Variable Read OK?" & vbCrLf & vbCrLf & MsgStr, MsgBoxStyle.Question Or MsgBoxStyle.OkCancel Or MsgBoxStyle.DefaultButton2, "OrbitGenarate") = MsgBoxResult.Ok Then
                    Me.dgvOriginal.Rows.Clear()
                    VarP = CaoCtrl.AddVariable("P*", "@IfNotMember=True")
                    VarF = CaoCtrl.AddVariable("F*", "@IfNotMember=True")
                    For i = 0 To DataCount - 1
                        VarP.ID = PosNo + i
                        pVal = VarP.Value
                        If Me.chkAreaDataNo.CheckState Then
                            VarP.ID = AreaNo + i
                            aVal = VarP.Value
                        Else
                            aVal = New Single() {4, 4, 4, 4, 0, 0, 0}
                        End If
                        If Me.chkJ7PosNo.CheckState Then
                            VarF.ID = J7No + i
                            J7Val = VarF.Value
                        Else
                            J7Val = 0
                        End If
                        If Me.chkJ8PosNo.CheckState Then
                            VarF.ID = J8No + i
                            J8Val = VarF.Value
                        Else
                            J8Val = 0
                        End If
                        If (i = 0) Or (i = DataCount - 1) Then
                            Me.dgvOriginal.Rows.Add(New String() {i + 1, pVal(0), pVal(1), pVal(2), pVal(3), pVal(4), pVal(5), pVal(6), False, 100, 1, J7Val, J8Val, CInt(Me.txtToolNo.Text), aVal(0), aVal(1), aVal(2), aVal(3), aVal(4), aVal(5), CInt(Me.txtIONo.Text)})
                        Else
                            Me.dgvOriginal.Rows.Add(New String() {i + 1, pVal(0), pVal(1), pVal(2), pVal(3), pVal(4), pVal(5), pVal(6), True, 100, 0, J7Val, J8Val, CInt(Me.txtToolNo.Text), aVal(0), aVal(1), aVal(2), aVal(3), aVal(4), aVal(5), CInt(Me.txtIONo.Text)})
                        End If
                    Next
                    Me.btnOrbitCorrection.Enabled = True
                End If
            Else
                MsgBox("RobotPositionCount Error")
            End If
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "OrbitGenarate")
            Me.dgvOriginal.Rows.Clear()
        End Try


    End Sub

    Private Sub btnOrbitCorrection_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOrbitCorrection.Click

        Dim i
        Dim TeachPos() As Object
        Dim AreaData() As Object
        Dim OrgRow As DataGridViewRow
        Dim retPos() As Object
        Dim AreaEnable As Boolean

        Try
            ReDim TeachPos(Me.dgvOriginal.Rows.Count - 1)
            ReDim AreaData(Me.dgvOriginal.Rows.Count - 1)

            For Each OrgRow In Me.dgvOriginal.Rows
                TeachPos(CInt(OrgRow.Cells(0).Value) - 1) = New Object() {CSng(OrgRow.Cells(1).Value), CSng(OrgRow.Cells(2).Value), CSng(OrgRow.Cells(3).Value), _
                                                                                                        CSng(OrgRow.Cells(4).Value), CSng(OrgRow.Cells(5).Value), CSng(OrgRow.Cells(6).Value), _
                                                                                                        CInt(OrgRow.Cells(7).Value), CSng(OrgRow.Cells(11).Value), CSng(OrgRow.Cells(12).Value), _
                                                                                                        CSng(CSng(OrgRow.Cells(9).Value) * 0.01), CInt(OrgRow.Cells(10).Value), CInt(OrgRow.Cells(13).Value) _
                                                                                                        }
                AreaData(CInt(OrgRow.Cells(0).Value) - 1) = New Object() {CSng(OrgRow.Cells(14).Value), CSng(OrgRow.Cells(15).Value), CSng(OrgRow.Cells(16).Value), _
                                                                                                        CSng(OrgRow.Cells(17).Value), CSng(OrgRow.Cells(18).Value), CSng(OrgRow.Cells(19).Value) _
                                                                                                        }

            Next

            CaoCtrl.Execute("InitNonStopPathLib")                                ' Initialize NonStopPath Library
            ' Generate NonStopPath
            retPos = CaoCtrl.Execute("GenerateNonStopPath", _
                    New Object() {TeachPos, AreaData, Me.dgvOriginal.Rows.Count, CSng(Me.txtExtSpeed.Text) * 0.01, CSng(Me.txtCorrectionFactor.Text), CInt(Me.txtCorrectionMethod.Text)})

            Me.dgvPosOrbit.Rows.Clear()
            Me.dgvAreaOrbit.Rows.Clear()
            For i = 0 To UBound(retPos)
                Me.dgvPosOrbit.Rows.Add(New Object() {i + 1, Format(retPos(i)(0), "0.###"), Format(retPos(i)(1), "0.###"), Format(retPos(i)(2), "0.###"), Format(retPos(i)(3), "0.###"), Format(retPos(i)(4), "0.###"), Format(retPos(i)(5), "0.###"), retPos(i)(6), retPos(i)(9) * 100, retPos(i)(10), retPos(i)(7), retPos(i)(8), retPos(i)(11)})
            Next
            Me.txtPositionCountW.Text = UBound(retPos) + 1

            i = 0
            For Each OrgRow In Me.dgvOriginal.Rows
                If CBool(OrgRow.Cells(8).Value) Then
                    Me.dgvAreaOrbit.Rows.Add(New Object() {i + 1, CSng(OrgRow.Cells(1).Value), CSng(OrgRow.Cells(2).Value), CSng(OrgRow.Cells(3).Value), _
                                                                                CSng(OrgRow.Cells(4).Value), CSng(OrgRow.Cells(5).Value), CSng(OrgRow.Cells(6).Value), _
                                                                                CInt(OrgRow.Cells(7).Value), CSng(OrgRow.Cells(11).Value), CSng(OrgRow.Cells(12).Value), _
                                                                                CSng(OrgRow.Cells(14).Value), CSng(OrgRow.Cells(15).Value), CSng(OrgRow.Cells(16).Value), _
                                                                                CSng(OrgRow.Cells(17).Value), CSng(OrgRow.Cells(18).Value), CSng(OrgRow.Cells(19).Value), CInt(OrgRow.Cells(20).Value) _
                                                                                })
                    i = i + 1
                End If
            Next
            Me.txtTriggerCount.Text = i
            If i > 0 Then
                AreaEnable = True
            Else
                AreaEnable = False
            End If
            Me.txtAreaPosNoW.Enabled = AreaEnable
            Me.txtAreaDataNoW.Enabled = AreaEnable
            Me.chkJ7PosNoW.CheckState = Me.chkJ7PosNo.CheckState
            Me.chkJ8PosNoW.CheckState = Me.chkJ8PosNo.CheckState
            Me.txtJ7AreaNo.Enabled = (Me.chkJ7PosNoW.CheckState And AreaEnable)
            Me.txtJ8AreaNo.Enabled = (Me.chkJ8PosNoW.CheckState And AreaEnable)
            Me.tabOrbit.SelectedIndex = 1
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "OrbitGenarate")
            Me.dgvPosOrbit.Rows.Clear()
        End Try
    End Sub

    Private Sub chkJ7PosNoW_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkJ7PosNoW.CheckedChanged
        Me.txtJ7PosNoW.Enabled = Me.chkJ7PosNoW.CheckState
        Me.txtJ7AreaNo.Enabled = Me.chkJ7PosNoW.CheckState And (CInt(Me.txtTriggerCount.Text) > 0)
    End Sub

    Private Sub chkJ8PosNoW_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkJ8PosNoW.CheckedChanged
        Me.txtJ8PosNoW.Enabled = Me.chkJ8PosNoW.CheckState
        Me.txtJ8AreaNo.Enabled = Me.chkJ8PosNoW.CheckState And (CInt(Me.txtTriggerCount.Text) > 0)
    End Sub

    Private Sub btnVariableWrite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVariableWrite.Click

        Dim MsgStr As String
        Dim PosCount As Integer
        Dim AreaCount As Integer
        Dim PosNo As Integer
        Dim AreaNo As Integer
        Dim J7No As Integer
        Dim J8No As Integer
        Dim VarP As CaoVariable
        Dim VarF As CaoVariable
        Dim OrbitRow As DataGridViewRow

        Try
            PosCount = CInt(Me.txtPositionCountW.Text)
            PosNo = CInt(Me.txtRobotPosNoW.Text)
            AreaCount = CInt(Me.txtTriggerCount.Text)
            MsgStr = "Position : P[" & PosNo & "] ~ P[" & PosNo + (PosCount - 1) & "]"
            MsgStr = MsgStr & vbCrLf & "MoveParam : P[" & CInt(Me.txtMoveParam.Text) & "] ~ P[" & CInt(Me.txtMoveParam.Text) + (PosCount - 1) & "]"
            If Me.chkJ7PosNo.CheckState Then
                J7No = CInt(Me.txtJ7PosNoW.Text)
                MsgStr = MsgStr & vbCrLf & "J7 : F[" & J7No & "] ~ F[" & J7No + (PosCount - 1) & "]"
            End If
            If Me.chkJ8PosNo.CheckState Then
                J8No = CInt(Me.txtJ8PosNoW.Text)
                MsgStr = MsgStr & vbCrLf & "J8 : F[" & J8No & "] ~ F[" & J8No + (PosCount - 1) & "]"
            End If
            If CInt(Me.txtTriggerCount.Text) > 0 Then
                AreaNo = CInt(Me.txtAreaPosNoW.Text)
                MsgStr = MsgStr & vbCrLf & vbCrLf & "Area : P[" & AreaNo & "] ~ P[" & AreaNo + (AreaCount - 1) & "]"
                MsgStr = MsgStr & vbCrLf & "AreaData : P[" & CInt(Me.txtAreaDataNoW.Text) & "] ~ P[" & CInt(Me.txtAreaDataNoW.Text) + (AreaCount - 1) & "]"
                If Me.txtJ7AreaNo.Enabled Then
                    MsgStr = MsgStr & vbCrLf & "AreaJ7 : F[" & CInt(Me.txtJ7AreaNo.Text) & "] ~ F[" & CInt(Me.txtJ7AreaNo.Text) + (PosCount - 1) & "]"
                End If
                If Me.txtJ8AreaNo.Enabled Then
                    MsgStr = MsgStr & vbCrLf & "AreaJ8 : F[" & CInt(Me.txtJ8AreaNo.Text) & "] ~ F[" & CInt(Me.txtJ8AreaNo.Text) + (PosCount - 1) & "]"
                End If
            End If

            If MsgBox("Variable Write OK?" & vbCrLf & vbCrLf & MsgStr, MsgBoxStyle.Question Or MsgBoxStyle.OkCancel Or MsgBoxStyle.DefaultButton2, "OrbitGenarate") = MsgBoxResult.Ok Then
                VarP = CaoCtrl.AddVariable("P*", "@IfNotMember=True")
                VarF = CaoCtrl.AddVariable("F*", "@IfNotMember=True")
                For Each OrbitRow In Me.dgvPosOrbit.Rows
                    VarP.ID = CInt(Me.txtRobotPosNoW.Text) + (CInt(OrbitRow.Cells(0).Value) - 1)
                    'MovePosition (X,Y,Z,RX,RY,RZ,FIG)
                    VarP.Value = New Object() {CSng(OrbitRow.Cells(1).Value), CSng(OrbitRow.Cells(2).Value), CSng(OrbitRow.Cells(3).Value), _
                                                            CSng(OrbitRow.Cells(4).Value), CSng(OrbitRow.Cells(5).Value), CSng(OrbitRow.Cells(6).Value), _
                                                            CInt(OrbitRow.Cells(7).Value)}
                    VarP.ID = CInt(Me.txtMoveParam.Text) + (CInt(OrbitRow.Cells(0).Value) - 1)
                    'MoveParam (SpeedRate,PathMode,Tool)
                    VarP.Value = New Object() {CInt(OrbitRow.Cells(8).Value), CInt(OrbitRow.Cells(9).Value), CInt(OrbitRow.Cells(12).Value), 0, 0, 0, 0}
                    If Me.chkJ7PosNoW.CheckState Then
                        VarF.ID = CInt(Me.txtJ7PosNoW.Text) + (CInt(OrbitRow.Cells(0).Value) - 1)
                        'J7 MovePosition
                        VarF.Value = CSng(OrbitRow.Cells(10).Value)
                    End If
                    If Me.chkJ8PosNoW.CheckState Then
                        VarF.ID = CInt(Me.txtJ8PosNoW.Text) + (CInt(OrbitRow.Cells(0).Value) - 1)
                        'J8 MovePosition
                        VarF.Value = CSng(OrbitRow.Cells(11).Value)
                    End If
                Next

                For Each OrbitRow In Me.dgvAreaOrbit.Rows
                    VarP.ID = CInt(Me.txtAreaPosNoW.Text) + (CInt(OrbitRow.Cells(0).Value) - 1)
                    'AreaPosition (X,Y,Z,RX,RY,RZ,FIG)
                    VarP.Value = New Object() {CSng(OrbitRow.Cells(1).Value), CSng(OrbitRow.Cells(2).Value), CSng(OrbitRow.Cells(3).Value), _
                                                            CSng(OrbitRow.Cells(4).Value), CSng(OrbitRow.Cells(5).Value), CSng(OrbitRow.Cells(6).Value), _
                                                            CInt(OrbitRow.Cells(7).Value)}
                    VarP.ID = CInt(Me.txtAreaDataNoW.Text) + (CInt(OrbitRow.Cells(0).Value) - 1)
                    'AreaData (SizeX,SizeY,SizeZ,SizeAngle,I/O)
                    VarP.Value = New Object() {CSng(OrbitRow.Cells(10).Value), CSng(OrbitRow.Cells(11).Value), CSng(OrbitRow.Cells(12).Value), _
                                                            CSng(OrbitRow.Cells(13).Value), CInt(OrbitRow.Cells(16).Value), 0, 0}

                    If Me.txtJ7PosNoW.Enabled Then
                        VarF.ID = CInt(Me.txtJ7PosNoW.Text) + (CInt(OrbitRow.Cells(0).Value) - 1)
                        'J7 Position
                        VarF.Value = CSng(OrbitRow.Cells(8).Value)
                    End If
                    If Me.txtJ8PosNoW.Enabled Then
                        VarF.ID = CInt(Me.txtJ8PosNoW.Text) + (CInt(OrbitRow.Cells(0).Value) - 1)
                        'J8 Position
                        VarF.Value = CSng(OrbitRow.Cells(9).Value)
                    End If

                    If Me.txtJ7AreaNo.Enabled Then
                        VarF.ID = CInt(Me.txtJ7AreaNo.Text) + (CInt(OrbitRow.Cells(0).Value) - 1)
                        'J7 Size
                        VarF.Value = CSng(OrbitRow.Cells(14).Value)
                    End If
                    If Me.txtJ8AreaNo.Enabled Then
                        VarF.ID = CInt(Me.txtJ8AreaNo.Text) + (CInt(OrbitRow.Cells(0).Value) - 1)
                        'J8 Size
                        VarF.Value = CSng(OrbitRow.Cells(15).Value)
                    End If
                Next

                MsgBox("Variable Write Complete!", MsgBoxStyle.Information, "OrbitGenarate")
            End If
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "OrbitGenarate")
        End Try

    End Sub
End Class
