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 ORiN2.interop.CAO; namespace FL_netCaoTester { public partial class Form4 : Form { #region Fields public CaoExtension Extension; private List listForm3; #endregion Fields #region Constructor public Form4(string Name, CaoExtension ext) { InitializeComponent(); this.Text += Name; this.Extension = ext; } #endregion Constructor #region Load/Closed private void Form4_Load(object sender, EventArgs e) { listForm3 = new List(); } private void Form4_FormClosed(object sender, FormClosedEventArgs e) { Form4_VariablesClear(); try { // RemoveExtension ((Form1)(((Form2)this.Owner).Owner)).caoCtrl.Extensions.Remove(this.Extension.Index); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void Form4_VariablesClear() { foreach (Form3 f in listForm3) { try { f.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } } #endregion Load/Closed #region Button private void button_Name_Click(object sender, EventArgs e) { try { this.textBox_Name.Text = this.Extension.Name; } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void button_Attribute_Click(object sender, EventArgs e) { try { this.textBox_Attribute.Text = this.Extension.Attribute.ToString(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void button_Help_Click(object sender, EventArgs e) { try { this.textBox_Help.Text = this.Extension.Help; } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void button_Tag_Put_Click(object sender, EventArgs e) { try { // TODO: dynamic型への変換 //this.textBox_Tag_Put.Text = this.Extension.Tag; } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void button_Tag_Get_Click(object sender, EventArgs e) { try { // TODO: dynamic型への変換 //this.textBox_Tag_Get.Text = this.Extension.Tag; } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void button_ID_Put_Click(object sender, EventArgs e) { try { this.Extension.ID = int.Parse(this.textBox_ID_Put.Text); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void button_ID_Get_Click(object sender, EventArgs e) { try { int id = (int)this.Extension.ID; this.textBox_ID_Get.Text = id.ToString(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void button_VariableNames_Click(object sender, EventArgs e) { try { string[] strArryNames = new string[0]; //strArryNames = this.Extension.VariableNames(this.textBox_AddVariableOption.ToString()); strArryNames = this.Extension.VariableNames; for (int i = 0; i < strArryNames.Length; i++) { this.listBox_VariableNames.Items.Add(strArryNames[i].ToString()); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void button_AddVariable_Click(object sender, EventArgs e) { try { // AddVariable CaoVariable Val = this.Extension.AddVariable(this.textBox_AddVariableName.Text, this.textBox_AddVariableOption.Text); // Valiable画面生成 Form3 f = new Form3(this.textBox_AddVariableName.Text, Val); f.Owner = this; f.Show(); listForm3.Add(f); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void button_Variables_Clear_Click(object sender, EventArgs e) { try { // Variables Clear Form4_VariablesClear(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } #endregion Button #region Execute private void button_Execute_Click(object sender, EventArgs e) { this.button_Execute.Enabled = false; try { this.textBox_Result.Text = ""; string[] strArry = this.textBox_Parameter.Text.Split(','); int iArryLen = strArry.Length; object objParam = new object(); switch (this.combo_Command.Text.ToString()) { case "ReadMultipleDiscreteOutputs": case "ReadMultipleDiscreteInputs": case "ReadMultipleHoldingRegisters": case "ReadMultipleHoldingRegistersLongInt": case "ReadMultipleHoldingRegistersFloat": case "ReadMultipleInputRegisters": case "ReadMultipleInputRegistersLongInt": case "ReadMultipleInputRegistersFloat": { if (iArryLen < 2) throw new System.ArgumentException("パラメータ指定数が不足しています"); object[] objArry = new object[2]; for (int i=0; i<2; ++i) objArry[i] = Convert.ToInt32(strArry[i]); objParam = objArry; } break; case "WriteSingleDiscreteOutput": { if (iArryLen < 2) throw new System.ArgumentException("パラメータ指定数が不足しています"); object[] objArry = new object[2]; objArry[0] = Convert.ToInt32(strArry[0]); objArry[1] = Convert.ToBoolean(strArry[1]); objParam = objArry; } break; case "WriteSingleHoldingRegister": { if (iArryLen < 2) throw new System.ArgumentException("パラメータ指定数が不足しています"); object[] objArry = new object[2]; objArry[0] = Convert.ToInt32(strArry[0]); objArry[1] = Convert.ToUInt16(strArry[1]); objParam = objArry; } break; case "WriteMultipleDiscreteOutputs": { if (iArryLen < 3) throw new System.ArgumentException("パラメータ指定数が不足しています"); object[] objArry = new object[3]; objArry[0] = Convert.ToInt32(strArry[0]); int iCount = Convert.ToInt32(strArry[1]); objArry[1] = iCount; object[] objArryData = new object[iCount]; for (int i = 0; i < iCount; ++i) objArryData[i] = Convert.ToBoolean(strArry[2 + i]); objArry[2] = objArryData; objParam = objArry; } break; case "WriteMultipleHoldingRegisters": { if (iArryLen < 3) throw new System.ArgumentException("パラメータ指定数が不足しています"); object[] objArry = new object[3]; objArry[0] = Convert.ToInt32(strArry[0]); int iCount = Convert.ToInt32(strArry[1]); objArry[1] = iCount; object[] objArryData = new object[iCount]; for (int i = 0; i < iCount; ++i) objArryData[i] = Convert.ToUInt16(strArry[2 + i]); objArry[2] = objArryData; objParam = objArry; } break; case "WriteMultipleHoldingRegistersLongInt": { if (iArryLen < 3) throw new System.ArgumentException("パラメータ指定数が不足しています"); object[] objArry = new object[3]; objArry[0] = Convert.ToInt32(strArry[0]); int iCount = Convert.ToInt32(strArry[1]); objArry[1] = iCount; object[] objArryData = new object[iCount]; for (int i = 0; i < iCount; ++i) objArryData[i] = Convert.ToInt32(strArry[2 + i]); objArry[2] = objArryData; objParam = objArry; } break; case "WriteMultipleHoldingRegistersFloat": { if (iArryLen < 3) throw new System.ArgumentException("パラメータ指定数が不足しています"); object[] objArry = new object[3]; objArry[0] = Convert.ToInt32(strArry[0]); int iCount = Convert.ToInt32(strArry[1]); objArry[1] = iCount; object[] objArryData = new object[iCount]; for (int i = 0; i < iCount; ++i) objArryData[i] = Convert.ToSingle(strArry[2 + i]); objArry[2] = objArryData; objParam = objArry; } break; case "MaskWriteHoldingRegister": { if (iArryLen < 3) throw new System.ArgumentException("パラメータ指定数が不足しています"); object[] objArry = new object[3]; objArry[0] = Convert.ToInt32(strArry[0]); objArry[1] = Convert.ToUInt16(strArry[1]); objArry[2] = Convert.ToUInt16(strArry[2]); objParam = objArry; } break; case "ReadWriteMultipleHoldingRegisters": { if (iArryLen < 5) throw new System.ArgumentException("パラメータ指定数が不足しています"); object[] objArry = new object[5]; objArry[0] = Convert.ToInt32(strArry[0]); objArry[1] = Convert.ToInt32(strArry[1]); objArry[2] = Convert.ToInt32(strArry[2]); int iCount = Convert.ToInt32(strArry[3]); objArry[3] = iCount; object[] objArryData = new object[iCount]; for (int i = 0; i < iCount; ++i) objArryData[i] = Convert.ToUInt16(strArry[4 + i]); objArry[4] = objArryData; objParam = objArry; } break; case "AnotherFunctionCode": { if (iArryLen < 4) throw new System.ArgumentException("パラメータ指定数が不足しています"); object[] objArry = new object[4]; objArry[0] = Convert.ToInt32(strArry[0]); int iCount = Convert.ToInt32(strArry[1]); objArry[1] = iCount; object[] objArryData = new object[iCount]; for (int i = 0; i < iCount; ++i) objArryData[i] = Convert.ToByte(strArry[2 + i]); objArry[2] = objArryData; objArry[3] = Convert.ToInt32(strArry[2 + iCount]); objParam = objArry; } break; case "DiagnosticsReturnQueryData": { if (iArryLen < 2) throw new System.ArgumentException("パラメータ指定数が不足しています"); object[] objArry = new object[2]; int iCount = Convert.ToInt32(strArry[0]); objArry[0] = iCount; object[] objArryData = new object[iCount]; for (int i = 0; i < iCount; ++i) objArryData[i] = Convert.ToByte(strArry[1 + i]); objArry[1] = objArryData; objParam = objArry; } break; case "DiagnosticsRestartCommunicationsOption": { if (iArryLen < 1) throw new System.ArgumentException("パラメータ指定数が不足しています"); objParam = Convert.ToBoolean(strArry[0]); } break; case "ReadExceptionStatus": break; default: if (!this.checkBox_Array.Checked && (strArry.Length > 1)) { throw new System.ArgumentException("Arrayチェックなし複数要素指定"); } bool bChecked = this.checkBox_Array.Checked; int iSelectedIndex = this.comboBox_Type.SelectedIndex; Common cm = new Common(); objParam = cm.ConvertStringToObject(strArry, ref bChecked, ref iSelectedIndex); this.checkBox_Array.Checked = bChecked; this.comboBox_Type.SelectedIndex = iSelectedIndex; break; } // Executeコマンド実行 object objResult = this.Extension.Execute(this.combo_Command.Text.ToString(), objParam); // 実行結果 if (objResult != null) { bool bChecked = this.checkBox_Array.Checked; int iSelectedIndex = this.comboBox_Type.SelectedIndex; Common cm = new Common(); this.textBox_Result.Text = cm.ConvertVariantToString(objResult, ref bChecked, ref iSelectedIndex); this.checkBox_Array.Checked = bChecked; this.comboBox_Type.SelectedIndex = iSelectedIndex; } } catch (Exception ex) { MessageBox.Show(ex.Message); } this.button_Execute.Enabled = true; } #endregion Execute #region Ivent private void listBox_VariableNames_SelectedIndexChanged(object sender, EventArgs e) { this.textBox_AddVariableName.Text = this.listBox_VariableNames.SelectedItem.ToString(); } #endregion Ivent } }