using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Runtime.InteropServices; using ORiN2.interop.CAO; namespace SysmacStudioTester { public partial class Form1 : Form { private CaoEngine caoEng; private CaoWorkspaces caoWss; private CaoWorkspace caoWs; private CaoControllers caoCtrls; private CaoController caoCtrl; private CaoVariable caoVar; private object Address; public Form1() { InitializeComponent(); } // Initialize private void Form1_Load(object sender, EventArgs e) { cmbState.SelectedIndex = 0; cmbSetScanExec.SelectedIndex = 0; // Create CAO Engine, Wss, Ws, Ctrls caoEng = new CaoEngine(); caoWss = caoEng.Workspaces; caoWs = caoWss.Item(0); caoCtrls = caoWs.Controllers; } // Finalize private void Form1_FormClosing(object sender, FormClosingEventArgs e) { // Destroy CAO Variable, Controller and Ctrls btDisconnect_Click(sender, e); try { // Destroy CAO Ws, Wss and Engine if (caoWs != null) { caoWss.Remove(caoWs.Index); Marshal.ReleaseComObject(caoWs); caoWs = null; } if (caoWss != null) { Marshal.ReleaseComObject(caoWss); caoWss = null; } if (caoEng != null) { Marshal.ReleaseComObject(caoEng); caoEng = null; } } catch(Exception ex) { MessageBox.Show(ex.Message); } } private void btConnect_Click(object sender, EventArgs e) { try { // Create CAO Controller caoCtrl = caoWs.AddController("Sysmac", "CaoProv.OMRON.Sysmac.Studio", "", tbConOption.Text); btConnect.Enabled = false; btDisconnect.Enabled = true; gbAddVariable.Enabled = true; btCreate.Enabled = true; tbVarOption.Enabled = true; gbExecute1.Enabled = true; gbExecute2.Enabled = true; } catch (Exception ex) { btDisconnect_Click(sender, e); MessageBox.Show(ex.Message); } } private void btDisconnect_Click(object sender, EventArgs e) { try { // Destroy CAO Variable if (caoVar != null) { caoCtrl.Variables.Remove(caoVar.Index); Marshal.ReleaseComObject(caoVar); caoVar = null; } // Destroy CAO Controller and Ctrls if (caoCtrl != null) { caoCtrls.Remove(caoCtrl.Index); Marshal.ReleaseComObject(caoCtrl); caoCtrl = null; Marshal.ReleaseComObject(caoCtrls); caoCtrls = null; } btConnect.Enabled = true; btDisconnect.Enabled = false; gbAddVariable.Enabled = false; gbExecute1.Enabled = false; gbExecute2.Enabled = false; gbGetPutValue.Enabled = false; } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btCreate_Click(object sender, EventArgs e) { try { // Create CAO Variable caoVar = caoCtrl.AddVariable("Variable", tbVarOption.Text); btCreate.Enabled = false; btDestroy.Enabled = true; gbGetPutValue.Enabled = true; tbValue.Enabled = true; btGet.Enabled = true; btPut.Enabled = true; } catch(Exception ex) { btDestroy_Click(sender, e); MessageBox.Show(ex.Message); } } private void btDestroy_Click(object sender, EventArgs e) { try { // Destroy CAO Variable if (caoVar != null) { caoCtrl.Variables.Remove(caoVar.Index); Marshal.ReleaseComObject(caoVar); caoVar = null; } btCreate.Enabled = true; btDestroy.Enabled = false; gbGetPutValue.Enabled = false; } catch(Exception ex) { MessageBox.Show(ex.Message); } } private void btGet_Click(object sender, EventArgs e) { try { // Get value tbValue.Text = caoVar.Value[0].ToString(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btPut_Click(object sender, EventArgs e) { try { // Put value caoVar.Value = tbValue.Text; } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btGetVarAddr_Click(object sender, EventArgs e) { try { object[] tmp = new object[1]; tmp[0] = new object(); tmp[0] = tbGetVarAddr.Text.ToString(); Address = caoCtrl.Execute("GetVarAddr", tmp); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btASyncWriteMem_Click(object sender, EventArgs e) { try { object[] tmp = new object[1]; tmp[0] = new object(); byte[] array = new byte[1]; array[0] = new byte(); array[0] = byte.Parse(tbASyncWriteMem.Text); tmp[0] = array; object[] param = new object[] {tmp, Address, 0, 0 }; caoCtrl.Execute("ASyncWriteMem", param); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btASyncReadMem_Click(object sender, EventArgs e) { try { object[] tmp = new object[] { Address, 0, 0 }; dynamic ret; ret = caoCtrl.Execute("ASyncReadMem", tmp); tbASyncReadMem.Text = ret[0][0].ToString(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btSetMode_Click(object sender, EventArgs e) { try { object[] tmp = new object[] { "mode", cmbState.Text.ToString() }; caoCtrl.Execute("SetMode", tmp); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btGetMode_Click(object sender, EventArgs e) { try { tbGetMode.Text = caoCtrl.Execute("GetMode", "mode"); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btSetScanExec_Click(object sender, EventArgs e) { try { caoCtrl.Execute("SetScanExec", cmbSetScanExec.Text.ToString()); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btCheckScanState_Click(object sender, EventArgs e) { try { tbCheckScanState.Text = (caoCtrl.Execute("CheckScanState")).ToString(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } } }