Initial commit
This commit is contained in:
		
							
								
								
									
										431
									
								
								Handler/Project/Dialog/DIOMonitor.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										431
									
								
								Handler/Project/Dialog/DIOMonitor.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,431 @@ | ||||
| #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.ColorListItem[] { | ||||
|                 new arDev.AjinEXTEK.ColorListItem{ BackColor1 = Color.DimGray, BackColor2 = Color.FromArgb(30,30,30), Remark="False" }, | ||||
|                 new arDev.AjinEXTEK.ColorListItem{ BackColor1 = Color.Lime, BackColor2 = Color.Green, Remark="True" }, | ||||
|             }; | ||||
|             tblDO.ColorList = new arDev.AjinEXTEK.ColorListItem[] { | ||||
|                 new arDev.AjinEXTEK.ColorListItem{ BackColor1 = Color.DimGray, BackColor2 = Color.FromArgb(30,30,30), Remark="False" }, | ||||
|                 new arDev.AjinEXTEK.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.IOPanel.ItemClickEventArgs e) | ||||
|         { | ||||
|             var newValue = !PUB.dio.GetDOValue(e.idx); | ||||
|             if (PUB.dio.IsInit == false) | ||||
|             { | ||||
|                 //임시시그널 | ||||
|                 var dlg = UTIL.MsgQ("가상 시그널을 생성하시겠습니까?"); | ||||
|                 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.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("가상 시그널을 생성하시겠습니까?"); | ||||
|                 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 dr = PUB.mdm.dataSet.InputDescription.Where(t => t.Idx == (int)item).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(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 ChiKyun Kim
					ChiKyun Kim