Files
ENIG/Cs_HMI/Project/ViewForm/fManual.cs
2025-01-07 16:08:02 +09:00

373 lines
13 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.Threading.Tasks;
using System.Windows.Forms;
using arDev;
using COMM;
namespace Project.ViewForm
{
public partial class fManual : Form
{
public fManual()
{
InitializeComponent();
this.FormClosed += FIO_FormClosed;
}
private void fManual_Load(object sender, EventArgs e)
{
if (PUB.AGV.data.Direction == 'F') radforward.Checked = true;
else radbackward.Checked = false;
//if (PUB.AGV.data.Sts == 'L') radleft.Checked = true;
//else if (PUB.AGV.data.Sts == 'R') radright.Checked = true;
//else
radstrai.Checked = true;
if (PUB.AGV.data.Speed == 'H') radspdh.Checked = true;
else if (PUB.AGV.data.Speed == 'L') radspdl.Checked = true;
else radspdm.Checked = true;
this.timer1.Start();
}
private void FIO_FormClosed(object sender, FormClosedEventArgs e)
{
timer1.Stop();
}
#region "Z축 커버"
private void arLabel10_Click(object sender, EventArgs e)
{
}
private void arLabel8_Click(object sender, EventArgs e)
{
}
private void arLabel7_Click(object sender, EventArgs e)
{
}
#endregion
#region "AGV 수동 이동"
private void arLabel1_Click(object sender, EventArgs e)
{
//후진
if (VAR.BOOL[eVarBool.FLAG_CHARGEONA])
{
Util.MsgE("자동 충전 중입니다\n충전을 해제 하세요");
return;
}
else if (VAR.BOOL[eVarBool.FLAG_CHARGEONM])
{
Util.MsgE("수동 충전 중입니다\b충전을 해제 하세요");
return;
}
if (PUB.CheckManualChargeMode() == false) return;
arDev.Narumi.Speed spd = arDev.Narumi.Speed.Low;
if (radspdh.Checked) spd = arDev.Narumi.Speed.High;
else if (radspdl.Checked) spd = arDev.Narumi.Speed.Mid;
arDev.Narumi.Sensor ss = arDev.Narumi.Sensor.PBSOff;
if (radpbs0.Checked) ss = arDev.Narumi.Sensor.PBSOn;
PUB.AGV.AGVMoveManual(arDev.Narumi.ManulOpt.BS, spd, ss);
PUB.sm.SetNewStep(StateMachine.eSMStep.IDLE);
}
private void arLabel2_Click(object sender, EventArgs e)
{
//전진
if (VAR.BOOL[eVarBool.FLAG_CHARGEONA])
{
Util.MsgE("자동 충전 중입니다\n충전을 해제 하세요");
return;
}
else if (VAR.BOOL[eVarBool.FLAG_CHARGEONM])
{
Util.MsgE("수동 충전 중입니다\b충전을 해제 하세요");
return;
}
if (PUB.CheckManualChargeMode() == false) return;
arDev.Narumi.Speed spd = arDev.Narumi.Speed.Low;
if (radspdh.Checked) spd = arDev.Narumi.Speed.High;
else if (radspdl.Checked) spd = arDev.Narumi.Speed.Mid;
arDev.Narumi.Sensor ss = arDev.Narumi.Sensor.PBSOff;
if (radpbs0.Checked) ss = arDev.Narumi.Sensor.PBSOn;
PUB.AGV.AGVMoveManual(arDev.Narumi.ManulOpt.FS, spd, ss);
PUB.sm.SetNewStep(StateMachine.eSMStep.IDLE);
}
private void arLabel3_Click(object sender, EventArgs e)
{
//우회전
if (VAR.BOOL[eVarBool.FLAG_CHARGEONA])
{
Util.MsgE("자동 충전 중입니다\n충전을 해제 하세요");
return;
}
else if (VAR.BOOL[eVarBool.FLAG_CHARGEONM])
{
Util.MsgE("수동 충전 중입니다\b충전을 해제 하세요");
return;
}
if (PUB.CheckManualChargeMode() == false) return;
arDev.Narumi.Speed spd = arDev.Narumi.Speed.Low;
if (radspdh.Checked) spd = arDev.Narumi.Speed.High;
else if (radspdl.Checked) spd = arDev.Narumi.Speed.Mid;
arDev.Narumi.Sensor ss = arDev.Narumi.Sensor.PBSOff;
if (radpbs0.Checked) ss = arDev.Narumi.Sensor.PBSOn;
PUB.AGV.AGVMoveManual(arDev.Narumi.ManulOpt.RT, spd, ss);
PUB.sm.SetNewStep(StateMachine.eSMStep.IDLE);
}
private void arLabel4_Click(object sender, EventArgs e)
{
//좌회전
if (VAR.BOOL[eVarBool.FLAG_CHARGEONA])
{
Util.MsgE("자동 충전 중입니다\n충전을 해제 하세요");
return;
}
else if (VAR.BOOL[eVarBool.FLAG_CHARGEONM])
{
Util.MsgE("수동 충전 중입니다\b충전을 해제 하세요");
return;
}
if (PUB.CheckManualChargeMode() == false) return;
arDev.Narumi.Speed spd = arDev.Narumi.Speed.Low;
if (radspdh.Checked) spd = arDev.Narumi.Speed.High;
else if (radspdl.Checked) spd = arDev.Narumi.Speed.Mid;
arDev.Narumi.Sensor ss = arDev.Narumi.Sensor.PBSOff;
if (radpbs0.Checked) ss = arDev.Narumi.Sensor.PBSOn;
PUB.AGV.AGVMoveManual(arDev.Narumi.ManulOpt.LT, spd, ss);
PUB.sm.SetNewStep(StateMachine.eSMStep.IDLE);
}
private void arLabel11_Click(object sender, EventArgs e)
{
if (VAR.BOOL[eVarBool.FLAG_CHARGEONA])
{
Util.MsgE("자동 충전 중입니다\n충전을 해제 하세요");
return;
}
else if (VAR.BOOL[eVarBool.FLAG_CHARGEONM])
{
Util.MsgE("수동 충전 중입니다\b충전을 해제 하세요");
return;
}
if (PUB.CheckManualChargeMode() == false) return;
PUB.sm.SetNewStep(StateMachine.eSMStep.IDLE);
if (PUB.AGV.system1.agv_run == false && PUB.AGV.system1.agv_run_manual == false)
{
var dlg = Util.MsgQ("자동 진행을 시작할까요?\n우측 옵션을 확인 하세요");
if (dlg != DialogResult.Yes) return;
var opt = makeopt();
PUB.AGV.AGVMoveSet(opt);
PUB.AGV.AGVMoveRun();
}
else
{
PUB.AGV.AGVMoveStop("fmanual arlabel11_Clcik", arDev.Narumi.eStopOpt.Stop);
}
}
#endregion
bool tmrun = false;
private void timer1_Tick(object sender, EventArgs e)
{
if (this.Visible == false) return;
if (tmrun == true) return;
tmrun = true;
//충전중이면 수동버튼을 누를수없게한다
if (VAR.BOOL[eVarBool.FLAG_CHARGEONA] || VAR.BOOL[eVarBool.FLAG_CHARGEONM]) btLeft.Enabled = false;
else btLeft.Enabled = true;
btRight.Enabled = btLeft.Enabled;
btStart.Enabled = btLeft.Enabled;
btBack.Enabled = btLeft.Enabled;
btForward.Enabled = btLeft.Enabled;
//상태메세지
label1.Text = VAR.STR[eVarString.StatusMessage];
//마크정보
guideSensor1.SensorValue = PUB.AGV.data.guidesensor;
guideSensor1.LMark = PUB.AGV.signal.mark_sensor_1;
guideSensor1.RMark = PUB.AGV.signal.mark_sensor_2;
guideSensor1.Invalidate();
if (PUB.AGV.system1.agv_run || PUB.AGV.system1.agv_run_manual)
{
btStart.Text = "동작\n멈춤";
btStart.BackColor = Color.Tomato;
btStart.BackColor2 = Color.Orange;
}
else
{
btStart.Text = "자돟\n진행";
btStart.BackColor = Color.DimGray;
btStart.BackColor2 = Color.Gray;
}
//모터전원상태에따라서 배경색상을 변경해준다.
//var Mot_Dir_Backward = PUB.AGV.data.Direction == 'B';// PUB.flag.get(EFlag.FLAG_DIR_CW);// PUB.flag.get(EFlag.FLAG_DIR_CW);
//if (Mot_Dir_Backward == true)
//{
// btBack.BackColor = Color.Lime;
// btBack.BackColor2 = Color.Green;
// btForward.BackColor = Color.FromArgb(23, 55, 93);
// btForward.BackColor2 = Color.FromArgb(12, 36, 64);
//}
//else
//{
// btForward.BackColor = Color.Lime;
// btForward.BackColor2 = Color.Green;
// btBack.BackColor = Color.FromArgb(23, 55, 93);
// btBack.BackColor2 = Color.FromArgb(12, 36, 64);
//}
tmrun = false;
}
private void button1_Click(object sender, EventArgs e)
{
PUB.AGV.AGVMoveStop("fmanual button1_click", arDev.Narumi.eStopOpt.MarkStop);
//VAR.BOOL[eVarBool.FLAG_NEXTSTOP_MARK] = true;
}
private void fManual_VisibleChanged(object sender, EventArgs e)
{
this.timer1.Enabled = this.Visible;
if (timer1.Enabled) timer1.Start();
else timer1.Stop();
}
private void button3_Click(object sender, EventArgs e)
{
PUB.AGV.AGVErrorReset();
}
private void panel2_Paint(object sender, PaintEventArgs e)
{
}
arDev.Narumi.BunkiData makeopt()
{
var p = new arDev.Narumi.BunkiData();
if (radbackward.Checked) p.Direction = arDev.Narumi.eMoveDir.Backward;
else p.Direction = arDev.Narumi.eMoveDir.Forward;
if (radleft.Checked) p.Bunki = arDev.Narumi.eBunki.Left;
else if (radright.Checked) p.Bunki = arDev.Narumi.eBunki.Right;
else p.Bunki = arDev.Narumi.eBunki.Strate;
if (radspdh.Checked) p.Speed = arDev.Narumi.eMoveSpd.High;
else if (radspdl.Checked) p.Speed = arDev.Narumi.eMoveSpd.Low;
else p.Speed = arDev.Narumi.eMoveSpd.Middle;
if (radpbs1.Checked) p.PBSSensor = 2;
else if (radpbs2.Checked) p.PBSSensor = 2;
else p.PBSSensor = 0;
return p;
}
private void btchargeOff_Click(object sender, EventArgs e)
{
if (Util.MsgQ("충전 해제 명령을 전송 할까요?") == DialogResult.Yes)
PUB.AGV.AGVCharge(PUB.setting.ChargerID, false);
}
private void btChargeOn_Click(object sender, EventArgs e)
{
if (PUB.AGV.signal.mark_sensor == false)
{
Util.MsgE("마크센서가 확인되지 않아 충전을 시작할 수 없습니다");
return;
}
var dlg = Util.MsgQ("충전 시작 명령을 전송 할까요?");
if (dlg != DialogResult.Yes) return;
PUB.AGV.AGVCharge(PUB.setting.ChargerID, true);
}
arDev.Narumi.BunkiData bunkiopt = null;
private void button1_Click_2(object sender, EventArgs e)
{
bunkiopt = makeopt();
PUB.AGV.AGVMoveSet(bunkiopt);
PUB.log.Add($"사용자 설정 : {bunkiopt}");
if (PUB.DriveSpeed)
{
if (PUB.AGV.AGVCommand("SSH", PUB.setting.SPD_H.ToString("0000")) == true)
PUB.DriveSpeed = false;
}
}
private void button2_Click(object sender, EventArgs e)
{
PUB.AGV.AGVCommand("SCK", "0010");
}
private void button2_Click_1(object sender, EventArgs e)
{
PUB.PLC.ZMot(arDev.FakePLC.ZMotDirection.Stop);
}
private void button3_Click_1(object sender, EventArgs e)
{
PUB.PLC.ZMot(arDev.FakePLC.ZMotDirection.Up);
}
private void button4_Click_1(object sender, EventArgs e)
{
PUB.PLC.ZMot(arDev.FakePLC.ZMotDirection.Down);
}
private void arLabel1_Click_1(object sender, EventArgs e)
{
if (PUB.AGV.AGVCommand("SSH", PUB.setting.SPD_DRIVE.ToString("0000")) == false)
{
AR.UTIL.MsgE("고속속도에 주행속도 연결 실패\n잠시 후 다시 시도하세요");
return;
}
if (this.bunkiopt == null) bunkiopt = makeopt();
bunkiopt.Speed = arDev.Narumi.eMoveSpd.High;
PUB.AGV.AGVMoveSet(bunkiopt);
PUB.log.Add($"고속주행설정 : {bunkiopt}");
PUB.DriveSpeed = true;
AR.UTIL.MsgI($"주행속도({PUB.setting.SPD_DRIVE})가 '고속' 속도에 연결되었습니다.\n" +
$"창을 이동하거나 '설정적용'을 누르면 원래속도({PUB.setting.SPD_H})로 변경 됩니다");
}
}
}