Files
ATV_STDLabelAttach/Handler/Project_form2/fModelM.cs
2025-07-17 16:11:46 +09:00

1036 lines
40 KiB
C#

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<ushort>();
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<Control>();
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<Control>();
//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();
}
}
}
}