using ORiN2.ManagedCAO; using System; using System.Windows.Forms; namespace LaserMarkerSample { public partial class Form1 : Form { private CCaoEngine _eng; private CCaoWorkspace _ws; private CCaoController _ctrl; private CCaoVariable _var; enum Status { Connected, Access, Disconnected } public Form1() { InitializeComponent(); // Create CaoEngine _eng = new CCaoEngine(); // Create CaoWorkspace _ws = _eng.AddWorkspace("SampleWorkspace", ""); // Initialize Window _rbnRelay.Checked = true; _cmbRelayDevice.SelectedIndex = 0; _cmbRegisterDevice.SelectedIndex = 0; _cmbSize.SelectedIndex = 0; ChangeWindow(Status.Disconnected); } private void _btnConnect_Click(object sender, EventArgs e) { // Create CaoController Option var optionString = "Conn=com:" + _nudCom.Value; optionString += ",Timeout=" + _nudConnectTimeout.Value; try { // Create CaoController _ctrl = _ws.AddController("ctrl", "CaoProv.TCmini", string.Empty, optionString); ChangeWindow(Status.Connected); } catch (Exception ex) { MessageBox.Show(this, ex.Message); } } private void _btnDisconnect_Click(object sender, EventArgs e) { try { // Delete CaoController if (_ctrl != null) { _ws.Controllers.Remove(_ctrl.Index); _ctrl = null; } ChangeWindow(Status.Disconnected); } catch (Exception ex) { MessageBox.Show(this, ex.Message); } } private void _btnSet_Click(object sender, EventArgs e) { var varName = ""; // Select Relay if(_rbnRelay.Checked == true) { varName = SetRelayVarName(); } else { varName += _cmbRegisterDevice.Text + Decimal.ToInt32(_nudRegisterAddress.Value).ToString("X3"); } try { // Create CaoVariable _var = _ctrl.AddVariable(varName, ""); ChangeWindow(Status.Access); } catch (Exception ex) { MessageBox.Show(this, ex.Message); } } private string SetRelayVarName() { var varName = ""; switch (_cmbSize.SelectedIndex) { case 0: // 1 bit varName += _cmbRelayDevice.Text + Decimal.ToInt32(_nudRelayAddress.Value).ToString("X3"); break; case 1: // 2 Byte varName += _cmbRelayDevice.Text + Decimal.ToInt32(_nudRelayAddress.Value).ToString("X2") + "W"; break; case 2: // 1 Byte(H) varName += _cmbRelayDevice.Text + Decimal.ToInt32(_nudRelayAddress.Value).ToString("X2") + "H"; break; case 3: // 1 Byte(L) varName += _cmbRelayDevice.Text + Decimal.ToInt32(_nudRelayAddress.Value).ToString("X2") + "L"; break; } return varName; } private void ChangeWindow(Status status) { if (status == Status.Connected) { _btnConnect.Enabled = false; _btnDisconnect.Enabled = true; _gbxSetting.Enabled = true; _btnAdd.Enabled = true; _btnDelete.Enabled = false; _gbxGetAndPut.Enabled = false; } else if (status == Status.Access) { _btnConnect.Enabled = false; _btnDisconnect.Enabled = true; _btnAdd.Enabled = false; _btnDelete.Enabled = true; _gbxGetAndPut.Enabled = true; } else if (status == Status.Disconnected) { _btnConnect.Enabled = true; _btnDisconnect.Enabled = false; _gbxSetting.Enabled = false; _gbxGetAndPut.Enabled = false; } } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { // Delete CaoEngine if(_eng != null) { _eng.Dispose(); } } private void _btnReset_Click(object sender, EventArgs e) { // Delete CaoVariable if(_var != null) { _ctrl.Variables.Remove(_var.Index); _var = null; } ChangeWindow(Status.Connected); } private void _btnGet_Click(object sender, EventArgs e) { try { _nudData.Value = Convert.ToInt32(_var.Value); } catch (Exception ex) { MessageBox.Show(this, ex.Message); } } private void _btnPut_Click(object sender, EventArgs e) { try { _var.Value = _nudData.Value; } catch(Exception ex) { MessageBox.Show(this, ex.Message); } } private void _rbnRelay_CheckedChanged(object sender, EventArgs e) { _cmbRelayDevice.Enabled = true; _nudRelayAddress.Enabled = true; _cmbSize.Enabled = true; _cmbRegisterDevice.Enabled = false; _nudRegisterAddress.Enabled = false; } private void _rbtRegister_CheckedChanged(object sender, EventArgs e) { _cmbRelayDevice.Enabled = false; _nudRelayAddress.Enabled = false; _cmbSize.Enabled = false; _cmbRegisterDevice.Enabled = true; _nudRegisterAddress.Enabled = true; } } }