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 PLC { public partial class Form1 : Form { private CaoEngine caoEng; private CaoWorkspaces caoWss; private CaoWorkspace caoWs; private CaoController caoCtrl; private CaoVariable caoVarD; private CaoVariable caoVarM; private CaoVariable caoVarX; private CaoVariable caoVarY; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // Create CAO Engine caoEng = new CaoEngine(); caoWss = caoEng.Workspaces; caoWs = caoWss.Item(0); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { btnDisconnect_Click(sender, e); 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 btnConnect_Click(object sender, EventArgs e) { try { // Connect Dummy.PLC Provider caoCtrl = caoWs.AddController("PLC", "CaoProv.Dummy.PLC", "", ""); // Get Variable object caoVarD = caoCtrl.AddVariable("D16", ""); caoVarM = caoCtrl.AddVariable("M16", "Type=Word"); caoVarX = caoCtrl.AddVariable("X1E", ""); caoVarY = caoCtrl.AddVariable("Y1E", "Elements=2"); // Enable command buttons btnConnect.Enabled = false; btnDisconnect.Enabled = true; btnReadD.Enabled = true; btnReadM.Enabled = true; btnReadX.Enabled = true; btnReadY.Enabled = true; btnWriteD.Enabled = true; btnWriteM.Enabled = true; btnWriteX.Enabled = true; btnWriteY.Enabled = true; } catch (Exception ex) { btnDisconnect_Click(sender, e); MessageBox.Show(ex.Message); } } private void btnDisconnect_Click(object sender, EventArgs e) { if (caoVarY != null) { Marshal.ReleaseComObject(caoVarY); caoVarY = null; } if (caoVarX != null) { Marshal.ReleaseComObject(caoVarX); caoVarX = null; } if (caoVarM != null) { Marshal.ReleaseComObject(caoVarM); caoVarM = null; } if (caoVarD != null) { Marshal.ReleaseComObject(caoVarD); caoVarD = 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; btnReadD.Enabled = false; btnReadM.Enabled = false; btnReadX.Enabled = false; btnReadY.Enabled = false; btnWriteD.Enabled = false; btnWriteM.Enabled = false; btnWriteX.Enabled = false; btnWriteY.Enabled = false; } private void btnReadD_Click(object sender, EventArgs e) { try { lblDsp.Text = caoVarD.Value.ToString(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btnWriteD_Click(object sender, EventArgs e) { try { caoVarD.Value = (short)-32768; } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btnReadM_Click(object sender, EventArgs e) { try { lblDsp.Text = caoVarM.Value.ToString(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btnWriteM_Click(object sender, EventArgs e) { try { caoVarM.Value = (short)32767; } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btnReadX_Click(object sender, EventArgs e) { try { lblDsp.Text = caoVarX.Value.ToString(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btnWriteX_Click(object sender, EventArgs e) { try { caoVarX.Value = (short)1; } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btnReadY_Click(object sender, EventArgs e) { try { short[] iVals = (short[])caoVarY.Value; lblDsp.Text = string.Format("{0}, {1}", iVals[1], iVals[0]); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btnWriteY_Click(object sender, EventArgs e) { try { caoVarY.Value = new short[] { (short)1, (short)1 }; } catch (Exception ex) { MessageBox.Show(ex.Message); } } } }