433 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			433 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| #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<Boolean> diValue = new List<bool>();
 | |
|             for (int i = 0; i < PUB.dio.GetDICount; i++)
 | |
|                 diValue.Add(PUB.dio.GetDIValue(i));
 | |
| 
 | |
|             List<Boolean> doValue = new List<bool>();
 | |
|             for (int i = 0; i < PUB.dio.GetDOCount; i++)
 | |
|                 doValue.Add(PUB.dio.GetDOValue(i));
 | |
|             //List<Boolean> fgValue = new List<bool>();
 | |
|             //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<Boolean> PKValues = new List<bool>();
 | |
| 
 | |
|                 //인터락에는 값이 몇개 있지?
 | |
|                 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();
 | |
|         }
 | |
|     }
 | |
| }
 | 
