#pragma warning disable IDE1006 // 명명 스타일 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 arDev.DIO; using arDev.AjinEXTEK; using AR; using AR; namespace Project.Dialog { public partial class fIOMonitor : Form { arCtl.GridView.GridView[] gvIlog; Label[] lbILog; public fIOMonitor() { InitializeComponent(); this.FormClosed += fIOMonitor_FormClosed; this.Opacity = 1.0; gvIlog = new arCtl.GridView.GridView[] { gbi00,gbi01,gbi02,gbi03,gbi04,gbi05, gbi06,gbi07,gbi08,gbi09,gbi10,gbi11, gbi12,gbi13,gbi14,gbi15,gbi16,gbi17, }; lbILog = new Label[] { lbi00,lbi01,lbi02,lbi03,lbi04,lbi05, lbi06,lbi07,lbi08,lbi09,lbi10,lbi11, lbi12,lbi13,lbi14,lbi15,lbi16,lbi17, }; //DI,DO, var dinames = DIO.Pin.GetDIName; var donames = DIO.Pin.GetDOName; tblDI.setTitle(dinames); tblDO.setTitle(donames); //tblFG.setTitle(PUB.flag.Name); var pinNameI = DIO.Pin.GetDIPinName;// new string[dinames.Length]; var pinNameO = DIO.Pin.GetDOPinName;// new string[donames.Length]; //for (int i = 0; i < pinNameI.Length; i++) pinNameI[i] = Enum.GetName(typeof(eDIPin), i); //for (int i = 0; i < pinNameO.Length; i++) pinNameO[i] = Enum.GetName(typeof(eDOPin), i); tblDI.setNames(pinNameI); tblDO.setNames(pinNameO); tblDI.setItemTextAlign(ContentAlignment.MiddleLeft); tblDO.setItemTextAlign(ContentAlignment.MiddleLeft); // tblFG.setItemTextAlign(ContentAlignment.BottomLeft); tblDI.ColorList = new arDev.AjinEXTEK.UI.ColorListItem[] { new arDev.AjinEXTEK.UI.ColorListItem{ BackColor1 = Color.DimGray, BackColor2 = Color.FromArgb(30,30,30), Remark="False" }, new arDev.AjinEXTEK.UI.ColorListItem{ BackColor1 = Color.Lime, BackColor2 = Color.Green, Remark="True" }, }; tblDO.ColorList = new arDev.AjinEXTEK.UI.ColorListItem[] { new arDev.AjinEXTEK.UI.ColorListItem{ BackColor1 = Color.DimGray, BackColor2 = Color.FromArgb(30,30,30), Remark="False" }, new arDev.AjinEXTEK.UI.ColorListItem{ BackColor1 = Color.Tomato, BackColor2 = Color.Red, Remark="True" }, }; //인터락이름 //var ILNameEV = new string[Pub.iLock.Length]; for (int i = 0; i < PUB.iLock.Length; i++) { var axisname = ((eAxis)i).ToString(); var nonaxis = false; if (i >= 7) //이름이없는경우 { axisname = PUB.iLock[i].Tag.ToString(); nonaxis = true; } string[] ILNameEV; //if (axisname.StartsWith("X")) ILNameEV = Enum.GetNames(typeof(eILockPKX)); //else if (axisname.StartsWith("Y")) ILNameEV = Enum.GetNames(typeof(eILockPKY)); //else if (axisname.StartsWith("Z")) ILNameEV = Enum.GetNames(typeof(eILockPKZ)); //else if (axisname.StartsWith("U")) ILNameEV = Enum.GetNames(typeof(eILockEV)); //else if (axisname.StartsWith("L")) ILNameEV = Enum.GetNames(typeof(eILockEV)); //else if (i == 7) ILNameEV = Enum.GetNames(typeof(eILockPRL)); else if (i == 8) ILNameEV = Enum.GetNames(typeof(eILockPRR)); else if (i == 9) ILNameEV = Enum.GetNames(typeof(eILockVS0)); else if (i == 10) ILNameEV = Enum.GetNames(typeof(eILockVS1)); else if (i == 11) ILNameEV = Enum.GetNames(typeof(eILockVS2)); else if (i == 12) ILNameEV = Enum.GetNames(typeof(eILockCV)); else if (i == 13) ILNameEV = Enum.GetNames(typeof(eILockCV)); else ILNameEV = Enum.GetNames(typeof(eILock)); this.lbILog[i].Text = axisname; this.gvIlog[i].setTitle(ILNameEV); this.gvIlog[i].setItemTextAlign(ContentAlignment.MiddleCenter); this.gvIlog[i].ColorList[1].BackColor1 = Color.IndianRed; this.gvIlog[i].ColorList[1].BackColor2 = Color.LightCoral; if (nonaxis) { lbILog[i].ForeColor = Color.Gold; } else { if (axisname.StartsWith("PX")) this.lbILog[i].ForeColor = Color.Gold; else if (axisname.StartsWith("PY")) this.lbILog[i].ForeColor = Color.Tomato; else if (axisname.StartsWith("PZ")) this.lbILog[i].ForeColor = Color.Lime; else if (axisname.StartsWith("PU")) this.lbILog[i].ForeColor = Color.SkyBlue; else if (axisname.StartsWith("PL")) this.lbILog[i].ForeColor = Color.Magenta; else this.lbILog[i].ForeColor = Color.DimGray; } } //값확인 List diValue = new List(); for (int i = 0; i < PUB.dio.GetDICount; i++) diValue.Add(PUB.dio.GetDIValue(i)); List doValue = new List(); for (int i = 0; i < PUB.dio.GetDOCount; i++) doValue.Add(PUB.dio.GetDOValue(i)); //List fgValue = new List(); //for (int i = 0; i < PUB.flag.Length; i++) // fgValue.Add(PUB.flag.get(i)); tblDI.setValue(diValue.ToArray()); tblDO.setValue(doValue.ToArray()); // tblFG.setValue(fgValue.ToArray()); PUB.dio.IOValueChanged += dio_IOValueChanged; //PUB.flag.ValueChanged += flag_ValueChanged; //interlock var axislist = Enum.GetNames(typeof(eAxis)); for (int i = 0; i < PUB.iLock.Length; i++) { List PKValues = new List(); //인터락에는 값이 몇개 있지? for (int j = 0; j < 64; j++) { PKValues.Add(PUB.iLock[i].get(j)); } gvIlog[i].setValue(PKValues.ToArray()); gvIlog[i].Tag = i; PUB.iLock[i].ValueChanged += LockXF_ValueChanged; if (PUB.sm.isRunning == false) { gvIlog[i].ItemClick += gvILXF_ItemClick; } gvIlog[i].Invalidate(); } if (PUB.sm.isRunning == false) { this.tblDI.ItemClick += tblDI_ItemClick; this.tblDO.ItemClick += tblDO_ItemClick; //this.tblFG.ItemClick += tblFG_ItemClick; } this.tblDI.Invalidate(); this.tblDO.Invalidate(); // this.tblFG.Invalidate(); this.KeyDown += fIOMonitor_KeyDown; this.WindowState = FormWindowState.Maximized; } void fIOMonitor_FormClosed(object sender, FormClosedEventArgs e) { PUB.dio.IOValueChanged -= dio_IOValueChanged; // PUB.flag.ValueChanged -= flag_ValueChanged; for (int i = 0; i < PUB.iLock.Length; i++) { PUB.iLock[i].ValueChanged -= LockXF_ValueChanged; } if (PUB.sm.isRunning == false) { this.tblDI.ItemClick -= tblDI_ItemClick; this.tblDO.ItemClick -= tblDO_ItemClick; // this.tblFG.ItemClick -= tblFG_ItemClick; for (int i = 0; i < PUB.iLock.Length; i++) { gvIlog[i].ItemClick -= gvILXF_ItemClick; } } this.KeyDown -= fIOMonitor_KeyDown; } void LockXF_ValueChanged(object sender, AR.InterfaceValueEventArgs e) { var item = sender as CInterLock; //var tagStr = item.Tag.ToString(); //var axis = (eAxis)Enum.Parse(typeof(eAxis), tagStr); var axisno = item.idx;// (int)axis; if (this.gvIlog[axisno].setValue((int)e.ArrIDX, e.NewValue)) this.gvIlog[axisno].Invalidate(); } void gvILXF_ItemClick(object sender, arCtl.GridView.GridView.ItemClickEventArgs e) { var gv = sender as arCtl.GridView.GridView; var tagStr = gv.Tag.ToString(); var axis = (eAxis)Enum.Parse(typeof(eAxis), tagStr); var axisno = (int)axis; var curValue = PUB.iLock[axisno].get((int)e.idx); PUB.iLock[axisno].set((int)e.idx, !curValue, "IOMONITOR"); } void fIOMonitor_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Escape) this.Close(); else if (e.KeyCode == Keys.D && e.Control) { this.tblDO.showDebugInfo = !this.tblDO.showDebugInfo; this.tblDI.showDebugInfo = this.tblDO.showDebugInfo; // this.tblFG.showDebugInfo = this.tblDO.showDebugInfo; } } private void fIOMonitor_Load(object sender, EventArgs e) { this.Text = "I/O Monitor"; this.Show(); //'Application.DoEvents(); Dialog.Quick_Control fctl = new Quick_Control { TopLevel = false, Visible = true }; this.panel3.Controls.Add(fctl); fctl.Dock = DockStyle.Top; fctl.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; fctl.panBG.BackColor = this.BackColor; fctl.panBG.BorderStyle = BorderStyle.None; fctl.Show(); fctl.Dock = DockStyle.Fill; this.tmDisplay.Start(); } //void tblFG_ItemClick(object sender, arCtl.GridView.GridView.ItemClickEventArgs e) //{ // var curValue = PUB.flag.get((int)e.idx); // PUB.flag.set((int)e.idx, !curValue, "IOMONITOR"); //} void tblDO_ItemClick(object sender, arDev.AjinEXTEK.UI.IOPanel.ItemClickEventArgs e) { var newValue = !PUB.dio.GetDOValue(e.idx); if (PUB.dio.IsInit == false) { //임시시그널 var dlg = UTIL.MsgQ("Do you want to create a virtual signal?"); if (dlg == System.Windows.Forms.DialogResult.Yes) { PUB.dio.RaiseEvent(eIOPINDIR.OUTPUT, e.idx, newValue); PUB.log.Add("fake do : " + e.idx.ToString() + ",val=" + newValue.ToString()); } } else { PUB.dio.SetOutput(e.idx, newValue); PUB.log.Add(string.Format("set output(iomonitor-userclick) idx={0},val={1}", e.idx, newValue)); } } void tblDI_ItemClick(object sender, arDev.AjinEXTEK.UI.IOPanel.ItemClickEventArgs e) { var newValue = !PUB.dio.GetDIValue(e.idx); if (PUB.dio.IsInit == false || PUB.flag.get(eVarBool.FG_DEBUG) == true) { //임시시그널 var dlg = UTIL.MsgQ("Do you want to create a virtual signal?"); if (dlg == System.Windows.Forms.DialogResult.Yes) { PUB.dio.RaiseEvent(eIOPINDIR.INPUT, e.idx, newValue); PUB.log.Add("fake di : " + e.idx.ToString() + ",val=" + newValue.ToString()); } } } //void flag_ValueChanged(object sender, AR.InterfaceValueEventArgs e) //{ // //var butIndex = getControlIndex(e.ArrIDX); // //if (butIndex >= this.tblFG.Controls.Count) return; // //해당 아이템의 값을 변경하고 다시 그린다. // if (tblFG.setValue((int)e.ArrIDX, e.NewValue)) // tblFG.Invalidate();//.drawItem(e.ArrIDX); //} void dio_IOValueChanged(object sender, arDev.DIO.IOValueEventArgs e) { //var butIndex = getControlIndex(e.ArrIDX); if (e.Direction == eIOPINDIR.INPUT) { //해당 아이템의 값을 변경하고 다시 그린다. if (tblDI.setValue(e.ArrIDX, e.NewValue)) tblDI.Invalidate();//.drawItem(e.ArrIDX); } else { //해당 아이템의 값을 변경하고 다시 그린다. if (tblDO.setValue(e.ArrIDX, e.NewValue)) tblDO.Invalidate();//.drawItem(e.ArrIDX); } } private void tmDisplay_Tick(object sender, EventArgs e) { if (this.tabControl1.SelectedIndex == 2) { //flag //var fvalue = PUB.flag.Value(); //lbTitle3.Text = "FLAG(" + fvalue.HexString() + ")"; //for (int i = 0; i < 128; i++) // tblFG.setValue((int)i, PUB.flag.get(i)); //tblFG.Invalidate(); } else if (this.tabControl1.SelectedIndex == 3) { //inter lock for (uint i = 0; i < PUB.iLock.Length; i++) { var axis = (eAxis)i; var axisname = axis.ToString(); if (axisname.Equals(i.ToString())) { axisname = PUB.iLock[i].Tag.ToString(); } this.lbILog[i].Text = string.Format("{0}({1})", axisname, PUB.iLock[i].Value().HexString()); } } } private void lbTitle1_Click(object sender, EventArgs e) { //input list var fn = "descin.txt"; var sb = new System.Text.StringBuilder(); sb.AppendLine("No\tTitle\tDesc"); foreach (var item in Enum.GetValues(typeof(eDIName))) { var em = (eDIName)item; var dr = PUB.mdm.dataSet.InputDescription.Where(t => t.Idx == (int)em).FirstOrDefault(); var pinNo = $"X{(int)em:X2}"; var pinTitle = item.ToString(); var Desc = dr == null ? "" : dr.Description; sb.Append(pinNo); sb.Append("\t"); sb.Append(pinTitle); sb.Append("\t"); sb.Append(Desc); sb.AppendLine(); } System.IO.File.WriteAllText(fn, sb.ToString(), System.Text.Encoding.Default); UTIL.RunExplorer(fn); } private void arLabel2_Click(object sender, EventArgs e) { //oputput list var fn = "descout.txt"; var sb = new System.Text.StringBuilder(); sb.AppendLine("No\tTitle\tDesc"); foreach (var item in Enum.GetValues(typeof(eDOName))) { var em = (eDOName)item; var itemidx = (int)em; var dr = PUB.mdm.dataSet.OutputDescription.Where(t => t.Idx == itemidx).FirstOrDefault(); var pinNo = $"Y{(int)em:X2}"; var pinTitle = item.ToString(); var Desc = dr == null ? "" : dr.Description; sb.Append(pinNo); sb.Append("\t"); sb.Append(pinTitle); sb.Append("\t"); sb.Append(Desc); sb.AppendLine(); } System.IO.File.WriteAllText(fn, sb.ToString(), System.Text.Encoding.Default); UTIL.RunExplorer(fn); } private void pinDefineToolStripMenuItem_Click(object sender, EventArgs e) { var f = new fSetting_IOMessage(); f.ShowDialog(); tblDI.setTitle(DIO.Pin.GetDIName); tblDO.setTitle(DIO.Pin.GetDOName); tblDI.setNames(DIO.Pin.GetDIPinName); tblDO.setNames(DIO.Pin.GetDOPinName); tblDI.Invalidate(); tblDO.Invalidate(); } } }