using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; using ORiN2.interop.CAO; namespace Robot { public partial class Form1 : Form { private CaoEngine caoEng; private CaoWorkspaces caoWss; private CaoWorkspace caoWs; private CaoController caoCtrl; private CaoTask caoTask; private CaoRobot caoRobot; private CaoVariable caoVarCurAng; private CaoVariable caoVarCurPos; private CaoVariable caoVarDummy; public Form1() { InitializeComponent(); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { btnDisconnect_Click(sender, e); // Delete CaoEngine if (caoWs != null) { Marshal.ReleaseComObject(caoWs); caoWs = null; } if (caoWss != null) { Marshal.ReleaseComObject(caoWss); caoWss = null; } if (caoEng != null) { Marshal.ReleaseComObject(caoEng); caoEng = null; } } private void btnInit_Click(object sender, EventArgs e) { //Create CAO Engine caoEng = new CaoEngine(); caoWss = caoEng.Workspaces; caoWs = caoWss.Item(0); btnInit.Enabled = false; btnConnect.Enabled = true; } private void btnConnect_Click(object sender, EventArgs e) { try { // Connect Dummy.Robot Provider caoCtrl = caoWs.AddController("Robot", "CaoProv.Dummy.Robot", "", ""); caoRobot = caoCtrl.AddRobot("Robot", ""); caoTask = caoCtrl.AddTask("Prg1", ""); caoVarCurAng = caoRobot.AddVariable("@CURRENT_ANGLE", ""); caoVarCurPos = caoRobot.AddVariable("@CURRENT_POSITION", ""); caoVarDummy = caoRobot.AddVariable("@DUMMY", ""); // Enable command buttons btnConnect.Enabled = false; btnDisconnect.Enabled = true; btnReadCurAng.Enabled = true; btnReadCurPos.Enabled = true; btnReadDummy.Enabled = true; btnStart.Enabled = true; btnStop.Enabled = true; } catch (Exception ex) { btnDisconnect_Click(sender, e); MessageBox.Show(ex.Message); } } private void btnDisconnect_Click(object sender, EventArgs e) { if (caoVarDummy != null) { Marshal.ReleaseComObject(caoVarDummy); caoVarDummy = null; } if (caoVarCurPos != null) { Marshal.ReleaseComObject(caoVarCurPos); caoVarCurPos = null; } if (caoVarCurAng != null) { Marshal.ReleaseComObject(caoVarCurAng); caoVarCurAng = null; } if (caoTask != null) { Marshal.ReleaseComObject(caoTask); caoTask = null; } if (caoRobot != null) { Marshal.ReleaseComObject(caoRobot); caoRobot = null; } // Disconnect Provider if (caoCtrl != null) { CaoControllers ctrls = caoWs.Controllers; ctrls.Remove(caoCtrl.Name); Marshal.ReleaseComObject(caoCtrl); caoCtrl = null; Marshal.ReleaseComObject(ctrls); ctrls = null; } // Disable command buttons btnConnect.Enabled = true; btnDisconnect.Enabled = false; btnReadCurAng.Enabled = false; btnReadCurPos.Enabled = false; btnReadDummy.Enabled = false; btnStart.Enabled = false; btnStop.Enabled = false; } private void btnReadCurAng_Click(object sender, EventArgs e) { try { lblDsp.Text = ""; double[] dblVals = (double[])caoVarCurAng.Value; for (int i = 0; i < dblVals.Length - 1; i++) { lblDsp.Text += dblVals[i].ToString("F1") + ", "; } lblDsp.Text += dblVals[dblVals.Length - 1].ToString("F1"); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btnReadCurPos_Click(object sender, EventArgs e) { try { lblDsp.Text = ""; double[] dblVals = (double[])caoVarCurPos.Value; for (int i = 0; i < dblVals.Length - 1; i++) { lblDsp.Text += dblVals[i].ToString("F1") + ", "; } lblDsp.Text += dblVals[dblVals.Length - 1].ToString("F1"); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btnReadDummy_Click(object sender, EventArgs e) { try { lblDsp.Text = ""; double[] dblVals = (double[])caoVarDummy.Value; for (int i = 0; i < dblVals.Length - 1; i++) { lblDsp.Text += dblVals[i].ToString("F1") + ", "; } lblDsp.Text += dblVals[dblVals.Length - 1].ToString("F1"); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btnStart_Click(object sender, EventArgs e) { try { // Start [1:One cycle execution, 2:Continuous execution, 3:Step forward] caoTask.Start(2, ""); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btnStop_Click(object sender, EventArgs e) { try { // Stop [0:Default stop, 1:Instant stop, 2:Step stop, 3:Cycle stop, 4:Initialized stop] caoTask.Stop(4, ""); } catch (Exception ex) { MessageBox.Show(ex.Message); } } } }