using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; using ORiN2.interop.CAO; namespace FDProvSample { public partial class Sample : Form { private delegate void SetTextCallback(CaoMessage msg); // Delegate for OnMessage private CaoEngine caoEng; private CaoWorkspaces caoWss; private CaoWorkspace caoWs; private CaoControllers caoCtrls; private CaoVariable caoVarOneShot; // Scanner objects private CaoController caoCtrl; public Sample() { InitializeComponent(); //CreateEngine caoEng = new CaoEngine(); caoWss = caoEng.Workspaces; caoWs = caoWss.Item(0); caoCtrls = caoWs.Controllers; comboBoxFormat.SelectedIndex = 0; comboBoxTrigger.SelectedIndex = 0; groupBoxOneShot.Enabled = false; groupBoxOnMessage.Enabled = false; } ~Sample() { caoVarOneShot = null; caoCtrl = null; caoCtrls = null; caoWs = null; caoWss = null; caoEng = null; System.GC.Collect(); } private void connectProvider() { String connectOp = string.Format("Conn=eth:{0}:{1},Trigger={2}, Format={3}, Timeout={4}, ReadPort={5}" , textBoxIP.Text, numericUpDownPort.Value.ToString() , (comboBoxTrigger.SelectedIndex+1).ToString() , comboBoxFormat.SelectedIndex.ToString() , numericUpDownTimeout.Value.ToString() , numericUpDownReadPort.Value.ToString()); try { // Create object and connect with FD caoCtrl = caoWs.AddController("FD", "CaoProv.DENSO.FD", "", connectOp); // Enable command buttons groupBox1.Enabled = false; buttonDisconnect.Enabled = true; buttonConnect.Enabled = false; if (comboBoxTrigger.SelectedIndex == 0) { groupBoxOnMessage.Enabled = true; } else { groupBoxOneShot.Enabled = true; } // Regist Event Handler caoCtrl.OnMessage += new _ICaoControllerEvents_OnMessageEventHandler(OnMessage); // Set Variable Object caoVarOneShot = caoCtrl.AddVariable("@ONE_SHOT", "500"); } catch (Exception ex) { disconnectProvider(); MessageBox.Show(ex.Message); } } private void disconnectProvider() { // Disconnect from the controller if (caoCtrl != null) { CaoControllers ctrls = caoWs.Controllers; ctrls.Remove(caoCtrl.Index); int a = Marshal.ReleaseComObject(caoCtrl); caoCtrl = null; Marshal.ReleaseComObject(caoVarOneShot); caoVarOneShot = null; Marshal.ReleaseComObject(ctrls); ctrls = null; System.GC.Collect(); } buttonDisconnect.Enabled = false; buttonConnect.Enabled = true; groupBox1.Enabled = true; groupBoxOneShot.Enabled = false; groupBoxOnMessage.Enabled = false; } private void buttonOneShot_Click(object sender, EventArgs e) { try { dynamic temp = caoVarOneShot.Value; textBoxReadData.Text = Convert.ToString(temp[0]); textBoxScannerID.Text = Convert.ToString(temp[1]); textBoxReadStable.Text = Convert.ToString(temp[2]); textBoxSymbol.Clear(); foreach(var strTemp in temp[3]) { textBoxSymbol.Text += strTemp+" "; } } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void buttonAddCtrl_Click(object sender, EventArgs e) { connectProvider(); } // OnMessage private void OnMessage(CaoMessage pICaoMsg) { try { switch (pICaoMsg.Number) { case 1: SetTextCallback SetMsg = new SetTextCallback(SetText); Invoke(SetMsg, pICaoMsg); break; default: break; } } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void SetText(CaoMessage msg) { textBoxReadData_Mes.Text = Convert.ToString(msg.Value[0]); textBoxScannerID_Mes.Text = Convert.ToString(msg.Value[1]); textBoxReadStable_Mes.Text = Convert.ToString(msg.Value[2]); textBoxSymbol_Mes.Clear(); foreach (var strTemp in msg.Value[3]) { textBoxSymbol_Mes.Text += strTemp + " "; } } private void button1_Click(object sender, EventArgs e) { disconnectProvider(); } } }