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; namespace Project { public partial class fModelM : Form { short axisIndex = 0; eAxis axis = eAxis.X_PICKER;// public string Value = string.Empty; // Dialog.fBlurPanel fb; public fModelM() { InitializeComponent(); if (System.Diagnostics.Debugger.IsAttached == false) { // fb = new Dialog.fBlurPanel(); //fb.Show(); } this.KeyPreview = true; this.KeyDown += (s1, e1) => { if (e1.KeyCode == Keys.Escape) this.Close(); }; this.StartPosition = FormStartPosition.CenterScreen; this.FormClosed += __Closed; this.lbTitle.MouseMove += LbTitle_MouseMove; this.lbTitle.MouseUp += LbTitle_MouseUp; this.lbTitle.MouseDown += LbTitle_MouseDown; var axlist = Enum.GetNames(typeof(eAxis)); var axvalues = Enum.GetValues(typeof(eAxis)); var preValueList = new List(); preValueList.AddRange(new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 }); for (int i = 0; i < axlist.Length; i++) { var axTitle = axlist[i]; var axradio = new RadioButton(); axradio.Tag = i; //축번호 axradio.Text = string.Format("[{0}] {1}", i, axTitle); axradio.Click += radClick_MotAxisSelect; //클릭작업 axradio.AutoSize = true; this.flowLayoutPanel1.Controls.Add(axradio); preValueList.AddRange(new ushort[] { 0, 1, 1, 1, 1, 1, 1, 1, 1 }); // this.tabControl1.TabPages[i].Text = string.Format("Axis [{0}]", i); //탭페이지 이름 변경 tblFG.setTitle(i + 1, 0, axTitle); //모니터링 축정보의 이름 지정 } tblFG.MatrixSize = new Point(tblFG.MatrixSize.X, axlist.Length + 1); tblFG.Values = preValueList.ToArray(); for (int i = 1; i <= 6; i++) tblFG.setItemTextAlign(i, 0, ContentAlignment.MiddleLeft); //링크레이블과 버튼 연결 AttachEvents(); } private void __Load(object sender, EventArgs e) { this.Show(); ////'Application.DoEvents(); this.ds1.Clear(); this.ds1.MCModel.Merge(Pub.mdm.dataSet.MCModel); this.ds1.MCModel.AcceptChanges(); this.ds1.MCModel.TableNewRow += Model_TableNewRow; this.bs.Filter = "isnull(title,'') <> ''"; this.bsPosData.Filter = "isnull(title,'') = '' and isnull(motindex,-1) = -1"; this.tmDisplay.Start(); //dispal current if (Pub.Result.isSetmModel) { arLabel18.Text = Pub.Result.mModel.Title; //find data var datas = this.ds1.MCModel.Select("", this.bs.Sort); for (int i = 0; i < datas.Length; i++) { if (datas[i]["Title"].ToString() == Pub.Result.mModel.Title) { this.bs.Position = i; break; } } } else arLabel18.Text = "--"; if (this.ds1.MCModel.Rows.Count < 1) { var newdr = this.ds1.MCModel.NewMCModelRow(); newdr.Title = "Default"; newdr.pidx = -1; newdr.PosIndex = -1; newdr.idx = ds1.MCModel.Rows.Count + 1; this.ds1.MCModel.AddMCModelRow(newdr); } //this.axisIndex = 0; //기본Z축 radClick_MotAxisSelect(this.flowLayoutPanel1.Controls[0], null); var rad = flowLayoutPanel1.Controls[0] as RadioButton; rad.Checked = true; var fctl = new Dialog.QuickControl(); fctl.TopLevel = false; fctl.Visible = true; fctl.Padding = new Padding(0, 0, 0, 0); fctl.ForeColor = Color.Black; fctl.panBG.BackColor = Color.White; fctl.panBG.ForeColor = Color.Black; fctl.groupBox1.ForeColor = Color.Black; //fctl.groupBox2.ForeColor = Color.Black; fctl.groupBox3.ForeColor = Color.Black; this.tabPage2.Controls.Add(fctl); fctl.Dock = DockStyle.Fill; fctl.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; //fctl.FormBorderStyle =.Visible = false; //fctl.panTopMenuDiv.Visible = false; /// fctl.panBG.BackColor = this.panel6.BackColor; fctl.panBG.BorderStyle = BorderStyle.None; fctl.Show(); fctl.Dock = DockStyle.Fill; Pub.log.RaiseMsg += log_RaiseMsg; //Pub.flag.set(eFlag.JOG, true, "MOTION CONTROL"); } void AttachEvents() { var EventConnectControls = new List(); EventConnectControls.Add(groupBox4); // foreach (TabPage page in this.tabControl1.TabPages) // EventConnectControls.Add(page); //linklabel 과 button 에 클릭 이벤트 생성 foreach (Control page in EventConnectControls) { foreach (var ctl in page.Controls) { if (ctl.GetType() == typeof(arFrame.Control.MotLinkLabel)) { var label = ctl as arFrame.Control.MotLinkLabel; if (label.motValueControl != null) label.LinkClicked += label_LinkClicked; } else if (ctl.GetType() == typeof(arFrame.Control.MotCommandButton)) { var button = ctl as arFrame.Control.MotCommandButton; if (button.motValueControl != null) button.Click += button_Click; } } } } void button_Click(object sender, EventArgs e) { var ctl = sender as arFrame.Control.MotCommandButton; var nud = ctl.motValueControl as arFrame.Control.MotValueNumericUpDown; var nudAcc = ctl.motAccControl;// as arFrame.Control.MotValueNumericUpDown; var nudSpd = ctl.motSpdControl; if (nud.MotionIndex < 0) { Util.MsgE("모션 축 번호가 지정되지 않았습니다\n\n" + "이름 : " + ctl.Name + "\n" + "제목 : " + ctl.Text); return; } if ((nudAcc == null || nudSpd == null) && ctl.motCommand != arFrame.Control.MotCommandButton.eCommand.AcceptPosition) { Util.MsgE("속도/가속도 컨트롤이 지정되지 않았습니다\n\n" + "이름 : " + ctl.Name + "\n" + "제목 : " + ctl.Text); return; } var axis = (eAxis)nud.MotionIndex; var pos = (double)nud.Value; //모션이 초기화가 안되있다면 오류로 처리한다 if (Pub.mot.isHomeSet[nud.MotionIndex] == false) { Util.MsgE("해당 축은 홈 검색이 완료되지 않았습니다.\n먼저 홈 검색을 완료 하세요"); return; } switch (ctl.motCommand) { case arFrame.Control.MotCommandButton.eCommand.AcceptPosition: var msg1 = string.Format("모션의 설정값을 변경 하시겠습니까\n" + "축 : {0}\n" + "변경전 : {1}\n" + "변경후 : {2}\n" + "변경 후 '저장'을 눌러야 영구 기록 됩니다", axis, Pub.mot.dACTPOS[nud.MotionIndex], pos, nud.Value); if (Util.MsgQ(msg1) != System.Windows.Forms.DialogResult.Yes) return; ChangeCurrentPosition(nud.MotionIndex, nud); break; case arFrame.Control.MotCommandButton.eCommand.AbsoluteMove: case arFrame.Control.MotCommandButton.eCommand.RelativeMove: var speed = (double)nudSpd.Value; var acc = (double)nudAcc.Value; var relative = false; if (ctl.motCommand == arFrame.Control.MotCommandButton.eCommand.RelativeMove) relative = true; var msg = string.Format("모션의 위치를 변경 하시겠습니까\n" + "축 : {0}\n" + "현재위치 : {1}\n" + "대상위치 : {2}\n" + "이동 시 충돌 가능성이 있는지 반드시 확인 하세요", axis, Pub.mot.dACTPOS[nud.MotionIndex], pos); if (Util.MsgQ(msg) != System.Windows.Forms.DialogResult.Yes) return; if (!Util_Mot.Move(axis, pos, speed, acc, relative)) Pub.log.AddE("MOT:MOVE_:" + axis.ToString() + ",Msg=" + Pub.mot.errorMessage); break; } } void label_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { var ctl = sender as arFrame.Control.MotLinkLabel; Pub.ChangeUIPopup(ctl.motValueControl); } private void __Closed(object sender, FormClosedEventArgs e) { //if (fb != null) fb.Dispose(); this.tmDisplay.Enabled = false; this.ds1.MCModel.TableNewRow -= Model_TableNewRow; //Pub.flag.set(eFlag.JOG, false, "MOTION CONTROL"); } #region "Mouse Form Move" private Boolean fMove = false; private Point MDownPos; private void LbTitle_DoubleClick(object sender, EventArgs e) { if (this.WindowState == FormWindowState.Maximized) this.WindowState = FormWindowState.Normal; else this.WindowState = FormWindowState.Maximized; } private void LbTitle_MouseMove(object sender, MouseEventArgs e) { if (fMove) { Point offset = new Point(e.X - MDownPos.X, e.Y - MDownPos.Y); this.Left += offset.X; this.Top += offset.Y; offset = new Point(0, 0); } } private void LbTitle_MouseUp(object sender, MouseEventArgs e) { fMove = false; } private void LbTitle_MouseDown(object sender, MouseEventArgs e) { MDownPos = new Point(e.X, e.Y); fMove = true; } #endregion void log_RaiseMsg(DateTime LogTime, string TypeStr, string Message) { if (Message.StartsWith("[EO]") || Message.StartsWith("EO")) { return; } this.logTextBox1.AddMsg(LogTime, TypeStr, Message); } Color sbBackColor = Color.FromArgb(200, 200, 200); void Model_TableNewRow(object sender, DataTableNewRowEventArgs e) { // e.Row["SlotCount"] = 20; } private void modelBindingNavigatorSaveItem_Click(object sender, EventArgs e) { } private void bs_CurrentChanged(object sender, EventArgs e) { //z range 을 표시한다. //z position 영역을 문자로 변환한다. //this.list var drv = this.bs.Current as DataRowView; if (drv == null) return; var dr = drv.Row as DataSet1.MCModelRow; } private void tmDisplay_Tick(object sender, EventArgs e) { button7.BackColor = Util_DO.GetIOInput(eDIName.PICKER_SAFE) ? Color.Lime : Color.DimGray; //*210111 if (Pub.joystick.IsOpen) this.lbTitle.Text = "MODEL(MOTION) SETTING - JOYSTICK GROUP:" + Pub.Result.JoystickAxisGroup.ToString(); else this.lbTitle.Text = "MODEL(MOTION) SETTING"; if (Pub.mot.IsInit == false) { if (groupBox3.Enabled == true) groupBox3.Enabled = false; } else { if (groupBox3.Enabled == false) groupBox3.Enabled = true; //각축별 기본 상태를 표시해준다. for (int axis = 0; axis < Pub.system.MotaxisCount; axis++) { this.tblFG.setValue(axis + 1, 0, Pub.mot.isSERVOON[axis] ? "title" : "orange"); this.tblFG.setTitle(axis + 1, 1, string.Format("{0}mm", Pub.mot.dCMDPOS[axis])); this.tblFG.setTitle(axis + 1, 2, string.Format("{0}mm", Pub.mot.dACTPOS[axis])); this.tblFG.setValue(axis + 1, 3, Pub.mot.isOrg[axis] ? "blue" : "gray"); //MotStatus_Home[axis].BackColor = Pub.mot.isOrg[axis] ? Color.Lime : sbBackColor; this.tblFG.setValue(axis + 1, 4, Pub.mot.isLimitN[axis] ? "red" : "gray"); //MotStatus_NLIM[axis].BackColor = Pub.mot.isLimitN[axis] ? Color.Red : sbBackColor; this.tblFG.setValue(axis + 1, 5, Pub.mot.isLimitP[axis] ? "red" : "gray"); //MotStatus_PLIM[axis].BackColor = Pub.mot.isLimitP[axis] ? Color.Red : sbBackColor; this.tblFG.setValue(axis + 1, 6, Pub.mot.isINP[axis] ? "blue" : "gray"); //MotStatus_INP[axis].BackColor = Pub.mot.isINP[axis] ? Color.Lime : sbBackColor; this.tblFG.setValue(axis + 1, 7, Pub.mot.isSERVOAlarm[axis] ? "red" : "gray"); //MotStatus_ALM[axis].BackColor = Pub.mot.isSERVOAlarm[axis] ? Color.Lime : sbBackColor; this.tblFG.setValue(axis + 1, 8, Pub.mot.isHomeSet[axis] ? "green" : "gray"); //MotStatus_SVON[axis].BackColor = Pub.mot.isHomeSet[axis] ? Color.Lime : Color.Magenta; } } this.tblFG.Invalidate(); } private void dv_DataError(object sender, DataGridViewDataErrorEventArgs e) { } private void btSelect_Click(object sender, EventArgs e) { } #region "jog function" private void button1_Click(object sender, EventArgs e) { //절대값 이동 var pos = (double)nudPosAbs.Value; var vel = (double)nudJogVel.Value; Util_Mot.Move(this.axis, pos, vel, 500, false, !chkJogMoveForce.Checked,!chkJogMoveForce.Checked); Pub.log.AddI(string.Format("{0}번 축 수동이동(ABS) {1}mm", axisIndex, pos)); } private void button3_Click_1(object sender, EventArgs e) { //상대값 이동 var pos = (double)nudPosRel.Value; var vel = (double)nudJogVel.Value; Util_Mot.Move(this.axis, pos, vel, 500, true, !chkJogMoveForce.Checked, !chkJogMoveForce.Checked); Pub.log.AddI(string.Format("{0}번 축 수동이동(REL) {1}mm", axisIndex, pos)); } private void btJogHome_Click(object sender, EventArgs e) { //jog-home var dlg = Util.MsgQ(string.Format("{0} 축의 홈 검색을 실행하시겠습니까?", this.axis)); if (dlg != System.Windows.Forms.DialogResult.Yes) return; var rlt = Util_Mot.Home("Model(UserControl)", this.axis); if (rlt == false) { Util.MsgE(Pub.mot.errorMessage); return; } Pub.log.Add(string.Format("user click : home ({0})", axisIndex)); } private void btJogPClear_Click(object sender, EventArgs e) { var dlg = Util.MsgQ("위치값을 초기화 하시겠습니까?\n" + "실 사용전에는 반드시 홈 작업을 진행하세요"); if (dlg != System.Windows.Forms.DialogResult.Yes) return; //jog pos-clear Pub.mot.ClearPosition((short)axisIndex); Pub.mot.isHomeSet[axisIndex] = false; //홈셋도 풀어야한다 201222 Pub.log.Add(string.Format("user click : pos clear ({0})", axisIndex)); } private void btJogAClear_Click(object sender, EventArgs e) { //jog-alaram clear Pub.mot.SetAlarmClearOn(this.axisIndex); System.Threading.Thread.Sleep(200); Pub.mot.SetAlarmClearOff(this.axisIndex); Pub.log.Add(string.Format("user click : alarm clear ({0})", axisIndex)); } private void btJogBrake_Click(object sender, EventArgs e) { //jog-brake //var curstate = Util_DO.GetIOOutput(eDOName.BRAKE_OFF); //Util_DO.SetBrake(!curstate); //Pub.log.Add(string.Format("user click : set brake ({0})", axisIndex)); } private void btJogSVon_Click(object sender, EventArgs e) { //jog-svon var curstate = Pub.mot.isSERVOON[axisIndex]; Pub.mot.SetSVON((short)axisIndex, !curstate); Pub.log.Add(string.Format("user click : servo on ({0})", axisIndex)); } private void btJogStop_Click(object sender, EventArgs e) { //jog-stop Pub.mot.MoveStop("JOG", this.axisIndex); Pub.log.Add(string.Format("user click : move stop ({0})", axisIndex)); } private void btJogDown_Click(object sender, MouseEventArgs e) { //jog-moouse down var bt = sender as Button; var tag = bt.Tag.ToString(); var vel1 = (double)this.nudJogVel.Value; var acc1 = (double)1000.0; arDev.AzinAxt.eMotionDirection motDir = arDev.AzinAxt.eMotionDirection.Positive; if (tag == "CCW") motDir = arDev.AzinAxt.eMotionDirection.Negative; Boolean jogMoveForce = this.chkJogMoveForce.Checked; if (!Pub.mot.JOG(this.axisIndex, motDir, vel1, acc1, acc1, false, !jogMoveForce)) Pub.log.AddE("MOT:JOG:" + tag + ":" + Pub.mot.errorMessage); Pub.log.Add(string.Format("user click : jog start ({0}) - {1}", axisIndex, tag)); } private void btJogUp_Click(object sender, MouseEventArgs e) { //jog-mouseup var bt = sender as Button; var tag = bt.Tag.ToString(); Pub.mot.MoveStop("JOG", this.axisIndex); //선택된 축을 멈춘다. Pub.log.Add(string.Format("user click : jog stop ({0})", axisIndex)); } #endregion //void ChangeUIPopup(NumericUpDown valueCtl) //{ // var value = valueCtl.Value.ToString(); // Dialog.fInput f = new Dialog.fInput(value); // if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK) // valueCtl.Value = decimal.Parse(f.tbInput.Text); //} void ChangeCurrentPosition(int Axis, NumericUpDown valueCtl) { valueCtl.Value = (decimal)Pub.mot.dACTPOS[Axis]; } private void toolStripButton2_Click_1(object sender, EventArgs e) { //iocontrol var f = new Dialog.QuickControl(); f.TopMost = true; f.Opacity = 0.95; f.Show(); } private void bindingNavigatorDeleteItem_Click(object sender, EventArgs e) { } private void radClick_MotAxisSelect(object sender, EventArgs e) { var rad = sender as RadioButton; this.axisIndex = short.Parse(rad.Tag.ToString()); this.axis = (eAxis)this.axisIndex; var axisTitle = rad.Text.Substring(3).Trim(); //.Substring(rad.Text.Substring(3)); var drv = this.bs.Current as DataRowView; if (drv == null) return; var dr = drv.Row as DataSet1.MCModelRow; //모든 라디오 박스의 색상을 원복한다 foreach (RadioButton rd in this.flowLayoutPanel1.Controls) rd.ForeColor = Color.White; rad.ForeColor = Color.Yellow; //선택된 것은 라임색으로 변경 // this.tabControl1.SelectedIndex = axisIndex; //탭메뉴를 변경해준다. //선택된 축에따라서 조그모드 성격을 변경한다 if (axisTitle.StartsWith("Z_")) { // nudJogVel.Value = this.nudSpdLoaderSlow.Value; btJogLeft.Visible = false; btJogRight.Visible = false; btJogUp.Text = "UP(-)"; btJogUp.Visible = true; btJogUp.Tag = "CCW"; btJogDn.Text = "DOWN(+)"; btJogDn.Visible = true; btJogDn.Tag = "CW"; } else if (axisTitle.StartsWith("X_")) { // nudJogVel.Value = nudSpdIndex1Slow.Value; btJogUp.Visible = false; btJogDn.Visible = false; btJogLeft.Text = "LEFT(-)"; btJogLeft.Visible = true; btJogLeft.Tag = "CCW"; btJogRight.Text = "RIGHT(+)"; btJogRight.Visible = true; btJogRight.Tag = "CW"; } else if (axisTitle.StartsWith("Y_")) { // nudJogVel.Value = nudSpdVision.Value; btJogLeft.Visible = false; btJogRight.Visible = false; btJogUp.Text = "FAR(+)"; btJogUp.Visible = true; btJogUp.Tag = "CW"; btJogDn.Text = "NEAR(-)"; btJogDn.Visible = true; btJogDn.Tag = "CCW"; } RefreshMotorPosition(); } private void toolStripButton2_Click(object sender, EventArgs e) { } private void tbClose_Click(object sender, EventArgs e) { this.Close(); } private void bs_CurrentChanged_1(object sender, EventArgs e) { //BindingData(); } void RefreshMotorPosition() { var drv = this.bs.Current as DataRowView; if (drv == null) { bsPosData.Filter = string.Format("pidx={0}", -1); //아무것도 보이지 않게 한다 } else { //해당 선택된 모터의 값을 체크한다 var dr = drv.Row as DataSet1.MCModelRow; //위치정보 표시 bsPosData.Filter = string.Format("pidx={0} and motindex = {1}", dr.idx, this.axisIndex); //(위치정보) 데이터수량이 맞지 않으면 재 생성한다 string[] list = null; Array val = null; Type axType = null; if (this.axisIndex == (int)eAxis.X_PICKER) axType = typeof(eAxisPXPos); else if (this.axisIndex == (int)eAxis.Z_PICKER) axType = typeof(eAxisPZPos); else if (this.axisIndex == (int)eAxis.Z_THETA) axType = typeof(eAxisPTPos); else if (this.axisIndex == (int)eAxis.PL_MOVE) axType = typeof(eAxisPLMovePos); else if (this.axisIndex == (int)eAxis.PL_UPDN) axType = typeof(eAxisPLUPDNPos); else if (this.axisIndex == (int)eAxis.PR_MOVE) axType = typeof(eAxisPRMovePos); else if (this.axisIndex == (int)eAxis.PR_UPDN) axType = typeof(eAxisPRUPDNPos); list = Enum.GetNames(axType); val = Enum.GetValues(axType); var sb = new System.Text.StringBuilder(); var cntI = 0; var cntE = 0; var cntD = 0; //posidx == -1인 데이터는 모두 소거한다 var dellist = ds1.MCModel.Where(t => t.pidx == dr.idx && t.MotIndex == this.axisIndex && t.PosIndex == -1).ToList(); //메인목록은 남겨둔다 cntD += dellist.Count(); foreach (var item in dellist) item.Delete(); ds1.MCModel.AcceptChanges(); //모든데이터의 체크상태를 off한다. var alllist = this.ds1.MCModel.Where(t => t.pidx == dr.idx && t.MotIndex == this.axisIndex); foreach (var item in alllist) item.Check = false; ds1.MCModel.AcceptChanges(); for (int i = 0; i < list.Length; i++) { var arrTitle = list[i]; var arrIndex = (short)((eAxis)(val.GetValue(i))); //이 값이 데이터가 없다면 추가하고, 있다면 이름을 검사해서 결과를 안내한다 var pDr = this.ds1.MCModel.Where(t => t.pidx == dr.idx && t.PosIndex == arrIndex && t.MotIndex == axisIndex).FirstOrDefault(); if (pDr == null) { cntI += 1; var newdr = this.ds1.MCModel.NewMCModelRow(); if (ds1.MCModel.Rows.Count == 0) newdr.idx = 1; else newdr.idx = ds1.MCModel.Max(t => t.idx) + 1; newdr.pidx = dr.idx; newdr.MotIndex = this.axisIndex; newdr.PosIndex = arrIndex; newdr.PosTitle = arrTitle; newdr.Position = 0.0; newdr.Speed = 50; newdr.SpeedAcc = 100; newdr.Check = true; this.ds1.MCModel.AddMCModelRow(newdr); newdr.EndEdit(); sb.AppendLine("항목 추가 : " + arrTitle); } else { //이름이 다르다면 추가해준다. if (pDr.PosTitle != arrTitle) { sb.AppendLine("(위치)항목 변경 : " + pDr.PosTitle + " => " + arrTitle); cntE += 1; pDr.PosTitle = arrTitle; pDr.EndEdit(); } pDr.Check = true; } } //미사용개체 삭제한다 var NotUseList = this.ds1.MCModel.Where(t => t.pidx == dr.idx && t.MotIndex == this.axisIndex && t.Check == false).ToList(); cntD += NotUseList.Count(); foreach (var item in NotUseList) item.Delete(); ds1.MCModel.AcceptChanges(); if (cntI > 0) sb.AppendLine("추가수량 : " + cntI.ToString()); if (cntE > 0) sb.AppendLine("변경수량 : " + cntE.ToString()); if (cntD > 0) sb.AppendLine("삭제수량 : " + cntD.ToString()); //최종 확정 this.ds1.MCModel.AcceptChanges(); if (sb.Length > 0) { Util.MsgI(sb.ToString()); } } } private void chkJogMoveForce_Click(object sender, EventArgs e) { if (chkJogMoveForce.Checked) { Util.MsgI( "조그 강제 이동시에는 충돌 조건을 검사하지 않습니다\n" + "셔틀 이동 시 주변 장애물을 반드시 확인하시기 바랍니다\n" + "'강제이동' 은 티칭작업시에만 사용하세요"); } } private void button10_Click(object sender, EventArgs e) { } private void toolStripButton3_Click(object sender, EventArgs e) { } private void button31_Click(object sender, EventArgs e) { this.Close(); } private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e) { } private void btCapture_Click(object sender, EventArgs e) { } private void btAdd_Click(object sender, EventArgs e) { var newdr = this.ds1.MCModel.NewMCModelRow();// this.bs.AddNew() as DataRowView; newdr["Title"] = DateTime.Now.ToShortDateString(); newdr["pidx"] = -1; newdr.PosIndex = -1; newdr["idx"] = this.ds1.MCModel.Rows.Count + 1; this.ds1.MCModel.AddMCModelRow(newdr); this.bs.Position = this.bs.Count - 1; //모터축을 자동 선택해줌 radClick_MotAxisSelect(this.flowLayoutPanel1.Controls[0], null); } private void btDel_Click(object sender, EventArgs e) { var drv = this.bs.Current as DataRowView; if (drv == null) return; var dlg = Util.MsgQ("현재 선택된 자료를 삭제하시겠습니까?"); if (dlg != System.Windows.Forms.DialogResult.Yes) return; bs.RemoveCurrent(); this.ds1.MCModel.AcceptChanges(); } private void btSave_Click(object sender, EventArgs e) { //button - save this.dv.Focus(); this.Validate(); this.bs.EndEdit(); this.bsPosData.EndEdit(); this.Validate(); //numeric number validation (마지막 아이템이 저장안되는 현상이 있었음) //var EventConnectControls = new List(); //EventConnectControls.Add(groupBox4); ////foreach (TabPage page in this.tabControl1.TabPages) //// EventConnectControls.Add(page); ////linklabel 과 button 에 클릭 이벤트 생성 //foreach (Control page in EventConnectControls) //{ // //var ctl = page as ContainerControl; // // ctl.Validate(); // foreach (var ctl in page.Controls) // { // if (ctl.GetType() == typeof(arFrame.Control.MotLinkLabel)) // { // var label = ctl as arFrame.Control.MotLinkLabel;// arFrame.Control.MotLinkLabel; // // label.Validate(); // } // else if (ctl.GetType() == typeof(LinkLabel)) // { // var link = ctl as LinkLabel;//LinkLabel; // //link.Validate(); // } // } //} //z position 영역을 문자로 변환한다. //var drv = this.bs.Current as DataRowView; //if (drv == null) return; //var dr = drv.Row as DataSet1.MCModelRow; //dr.EndEdit(); //this.ds1.AcceptChanges(); Dialog.fPassword f = new Dialog.fPassword(); if (f.ShowDialog() != DialogResult.OK) return; if (f.tbInput.Text != Pub.setting.Password_Setup) { Util.MsgE("Password incorrect"); return; } Pub.mdm.dataSet.MCModel.Clear(); Pub.mdm.dataSet.MCModel.Merge(this.ds1.MCModel); Pub.mdm.dataSet.AcceptChanges(); Pub.mdm.SaveModelM(); } private void button2_Click(object sender, EventArgs e) { //select this.Invalidate(); this.bs.EndEdit(); var drv = this.bs.Current as DataRowView; if (drv == null) return; var dr = drv.Row as DataSet1.MCModelRow; if (dr.Title == "") return; this.Value = dr.Title; DialogResult = System.Windows.Forms.DialogResult.OK; } private void button6_Click(object sender, EventArgs e) { //적용 this.bs.EndEdit(); this.bsPosData.EndEdit(); this.Validate(); var drv = this.bs.Current as DataRowView; if (drv == null) return; var dr = drv.Row as DataSet1.MCModelRow; this.Value = dr.Title; Pub.Result.mModel.ReadValue(dr.Title, this.ds1.MCModel); if (Pub.Result.mModel.isSet) { Pub.log.AddAT("모션모델선택완료 : " + Pub.Result.mModel.Title); } else Util.MsgE("적용 실패\n\n대상 모델 명이 없습니다"); } private void button4_Click(object sender, EventArgs e) { var drv = this.bs.Current as DataRowView; if (drv == null) return; var dr = drv.Row as DataSet1.MCModelRow; var dlg = Util.MsgQ(string.Format("다음 모델 정보를 복사하시겠습니까?\n\n모델명 : {0}", dr.Title)); if (dlg != System.Windows.Forms.DialogResult.Yes) return; var newdr = this.ds1.MCModel.NewMCModelRow(); Util.CopyData(dr, newdr); newdr.Title += "-copy-"; newdr.idx = this.ds1.MCModel.OrderByDescending(t => t.idx).FirstOrDefault().idx + 1; newdr.EndEdit(); this.ds1.MCModel.AddMCModelRow(newdr); if (this.bs.Count > 0) this.bs.Position = this.bs.Count - 1; } private void arDatagridView2_CellClick(object sender, DataGridViewCellEventArgs e) { //position click var dv = sender as DataGridView; var col = this.dvPosition.Columns[e.ColumnIndex]; var colName = col.Name.ToLower(); if (colName == "btgo") { //현재값으로 모터를 이동 //현재위치값으로 설정 var cell = dv.Rows[e.RowIndex].Cells["btpos"]; var value = (double)cell.Value; var drv = this.bsPosData.Current as DataRowView; var drParent = drv.Row as DataSet1.MCModelRow; //일반 속도값을 찾는다 //var speedDr = drParent.Speed;// this.ds1.MCModel.Where(t => t.pidx == drParent.idx && t.MotIndex == axisIndex && t.PosIndex == -1 && t.SpdIndex == (int)eAxisSpeed.Normal).FirstOrDefault(); var speed = drParent.Speed;// speedDr.Speed;// (double)this.nudJogVel.Value; var acc = drParent.SpeedAcc;// speedDr.SpeedAcc;// ; (double)nudAcc.Value; var relative = false; //if (ctl.motCommand == arFrame.Control.MotCommandButton.eCommand.RelativeMove) // relative = true; var msg = string.Format("모션의 위치를 변경 하시겠습니까\n" + "축 : {0}\n" + "현재위치 : {1}\n" + "대상위치 : {2}\n" + "이동속도 : {3}(가속도:{4})\n" + "이동 시 충돌 가능성이 있는지 반드시 확인 하세요", axis, Pub.mot.dACTPOS[axisIndex], value, speed, acc); if (Util.MsgQ(msg) != System.Windows.Forms.DialogResult.Yes) return; if (!Util_Mot.Move(axis, value, speed, acc, relative, !chkJogMoveForce.Checked, !chkJogMoveForce.Checked)) Pub.log.AddE("MOT:MOVE_:" + axis.ToString() + ",Msg=" + Pub.mot.errorMessage); } else if (colName == "btset") { //현재위치값으로 설정 var cell = dv.Rows[e.RowIndex].Cells["btpos"]; var value = (double)cell.Value; var nValue = Pub.mot.dACTPOS[this.axisIndex]; var msg1 = string.Format("모션의 설정값을 변경 하시겠습니까\n" + "축 : {0}\n" + "변경전 : {1}\n" + "변경후 : {2}\n" + "변경 후 '저장'을 눌러야 영구 기록 됩니다", this.axis, value, nValue); if (Util.MsgQ(msg1) != System.Windows.Forms.DialogResult.Yes) return; cell.Value = nValue; } else if (colName == "btpos") { //현재값 변경 팝업 var cell = dv.Rows[e.RowIndex].Cells[e.ColumnIndex]; var value = (double)cell.Value; value = Pub.ChangeValuePopup(value, "위치 입력"); cell.Value = value; } else if (colName == "btspeed") { //현재값 변경 팝업 var cell = dv.Rows[e.RowIndex].Cells[e.ColumnIndex]; var value = (double)cell.Value; value = Pub.ChangeValuePopup(value, "속도 입력"); cell.Value = value; } else if (colName == "btacc") { //현재값 변경 팝업 var cell = dv.Rows[e.RowIndex].Cells[e.ColumnIndex]; var value = (double)cell.Value; value = Pub.ChangeValuePopup(value, "가속도 입력"); cell.Value = value; } else if (colName == "btdcc") { //현재값 변경 팝업 var cell = dv.Rows[e.RowIndex].Cells[e.ColumnIndex]; if (cell.Value.ToString().isEmpty()) cell.Value = "0"; var value = (double)cell.Value; value = Pub.ChangeValuePopup(value, "감속도 입력"); cell.Value = value; } } private void lbTitle_Click(object sender, EventArgs e) { } private void lbTitle_DoubleClick_1(object sender, EventArgs e) { //if (fb != null) fb.Hide(); } private void linkLabel8_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { //jopgspeed var value = (double)nudJogVel.Value; value = Pub.ChangeValuePopup(value, "속도 입력"); nudJogVel.Value = (decimal)value; } private void linkLabel10_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { //absvalue var value = (double)this.nudPosAbs.Value; value = Pub.ChangeValuePopup(value, "속도 입력"); nudPosAbs.Value = (decimal)value; } private void linkLabel11_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { //reelvalu var value = (double)nudPosRel.Value; value = Pub.ChangeValuePopup(value, "속도 입력"); nudPosRel.Value = (decimal)value; } private void toolStripButton1_Click(object sender, EventArgs e) { var dlg = Util.MsgQ("모든 이동좌표의 속도를 일괄 변경하시겠습니까?"); if (dlg != System.Windows.Forms.DialogResult.Yes) return; var value = Pub.ChangeValuePopup(100.0, "일괄 속도 변경"); for (int i = 0; i < this.bsPosData.Count; i++) { this.bsPosData.Position = i; var drv = this.bsPosData.Current as DataRowView; if (drv == null) return; var dr = drv.Row as DataSet1.MCModelRow; dr.Speed = value; dr.EndEdit(); } } private void toolStripButton2_Click_2(object sender, EventArgs e) { var dlg = Util.MsgQ("모든 이동좌표의 가(감)속도를 일괄 변경하시겠습니까?"); if (dlg != System.Windows.Forms.DialogResult.Yes) return; var value = Pub.ChangeValuePopup(100.0, "일괄 가(감)속도 변경"); for (int i = 0; i < this.bsPosData.Count; i++) { this.bsPosData.Position = i; var drv = this.bsPosData.Current as DataRowView; if (drv == null) return; var dr = drv.Row as DataSet1.MCModelRow; dr.SpeedAcc = value; dr.EndEdit(); } } private void toolStripButton3_Click_1(object sender, EventArgs e) { var dlg = Util.MsgQ("모든 이동좌표의 감속도를 일괄 변경하시겠습니까?"); if (dlg != System.Windows.Forms.DialogResult.Yes) return; var value = Pub.ChangeValuePopup(0, "일괄 감속도 변경"); for (int i = 0; i < this.bsPosData.Count; i++) { this.bsPosData.Position = i; var drv = this.bsPosData.Current as DataRowView; if (drv == null) return; var dr = drv.Row as DataSet1.MCModelRow; dr.SpeedDcc = value; dr.EndEdit(); } } } }