에뮬레이터 개발 전.

This commit is contained in:
backuppc
2025-12-12 14:29:06 +09:00
parent ee2a6f04bb
commit 07ddc0425f
35 changed files with 952 additions and 1242 deletions

View File

@@ -284,6 +284,15 @@
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="PUB.cs" />
<Compile Include="CSetting.cs" />
<Compile Include="StateMachine\Step\_Util.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\Step\_SM_RUN_BUFFER_IN.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\Step\_SM_RUN_BUFFER_OUT.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\Step\_SM_RUN_CHGOFF.cs">
<SubType>Form</SubType>
</Compile>
@@ -305,12 +314,6 @@
<Compile Include="StateMachine\Step\_SM_RUN_GOHOME.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\Step\_SM_RUN_BUFFER_OUT.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\Step\_SM_RUN_BUFFER_IN.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\Step\_SM_RUN_SYNC.cs">
<SubType>Form</SubType>
</Compile>

View File

@@ -254,20 +254,10 @@ namespace Project
[Browsable(false)]
public string musicfile { get; set; }
/// <summary>
/// FVI로 가능 방향이 Backward 인가?
/// Forward 방향이라면 false 를 한다
/// </summary>
[Browsable(false)]
public Boolean AGV_Direction_FVI_Backward { get; set; }
[Browsable(false)]
public Boolean Enable_Speak { get; set; }
//public Boolean Disable_BMS { get; set; }
//public Boolean Log_BMS_Tx { get; set; }
//public Boolean Log_BMS_Rx { get; set; }
//public double ChargeLimitLow { get; set; }
//public double ChargeLimitHigh { get; set; }
[Browsable(false)]
public string AGV_PANID { get; set; }
@@ -338,7 +328,7 @@ namespace Project
/// 스피커출력 간격
/// </summary>
[DisplayName("Speak Term")]
public int doorSoundTerm { get; set; }
public int alarmSoundTerm { get; set; }
[Browsable(false)]
public int musicvol { get; set; }
@@ -346,6 +336,16 @@ namespace Project
public bool Enable_Music { get; set; }
#endregion
#region "Node Mapping"
[Category("Node Mapping"),DisplayName("Charger")]
public string NodeMAP_RFID_Charger { get; set; }
[Category("Node Mapping"), DisplayName("Home")]
public string NodeMAP_RFID_Home { get; set; }
#endregion
[Browsable(false)]
public string LastMapFile { get; set; }
@@ -429,7 +429,7 @@ namespace Project
//충전은 10분간격으로 재시도 한다
if (ChargeRetryTerm == 0) ChargeRetryTerm = 600;
if (doorSoundTerm == 0) doorSoundTerm = 15; //기본 15초
if (alarmSoundTerm == 0) alarmSoundTerm = 15; //기본 15초
if (ChargeSearchTime == 0) ChargeSearchTime = 25;
//최대 충전진행 시간(기본 1시간)
if (ChargeMaxTime == 0) ChargeMaxTime = 3600;

View File

@@ -67,8 +67,7 @@ namespace Project
/// </summary>
private ePosition _targetPos = ePosition.NONE;
public event EventHandler TargetPosSet;
public string result_message = "";
public double result_progressmax = 0;
public double result_progressvalue = 0;
@@ -91,8 +90,6 @@ namespace Project
set
{
_targetPos = value;
TargetPosSet?.Invoke(this, null);
PUB.log.Add(string.Format("대상위치설정:{0}", value));
}
}

View File

@@ -94,7 +94,14 @@ namespace Project
else return false;
}
public static void Speak(string m, Boolean force = false, bool addlog = true)
/// <summary>
/// 스피커를 통한 음성을 출력합니다
/// 출력되는 음성은 기본로그에도 자동 포함됩니다
/// </summary>
/// <param name="m"></param>
/// <param name="force"></param>
/// <param name="addlog">로그에도 출력 합니다</param>
public static void Speak(string m, Boolean force = false, bool addlog = true,string logcate="")
{
if (force == false && PUB.setting.Enable_Speak == false)
{
@@ -105,7 +112,11 @@ namespace Project
voice.SpeakAsyncCancelAll();
if (voice.State == SynthesizerState.Ready)
voice.SpeakAsync(m);
if (addlog) PUB.log.Add("SPEAK", m);
if (addlog)
{
if (logcate.isEmpty()) logcate = "SPEAK";
PUB.log.Add(logcate, m);
}
}
/// <summary>
@@ -150,7 +161,7 @@ namespace Project
public static AR.Log log, logagv, logplc, logbms, logxbee;
public static Boolean bPlayMusic = false;
/// <summary>
/// 사용자 인풋 감지 시간
@@ -382,6 +393,9 @@ namespace Project
return Lang.AGV연결실패;
case eECode.PLCCONN:
return Lang.PLC통신실패;
case eECode.MESSAGE_ERROR:
if (values.Length > 0) return values[0].ToString();
return "Message Error";
default:
return err.ToString();
@@ -582,7 +596,33 @@ namespace Project
}
#region VirtualAGV
public static MapNode FindByNodeID(string nodeidx)
{
if (_mapNodes == null || _mapNodes.Any() == false) return null;
if (nodeidx.isEmpty()) return null;
return _mapNodes.Where(t => t.NodeId.Equals(nodeidx)).FirstOrDefault();
}
public static MapNode FindByRFID(string rfidValue)
{
if (_mapNodes == null || _mapNodes.Any() == false) return null;
if (rfidValue.isEmpty()) return null;
return _mapNodes.Where(t => t.RfidId.Equals(rfidValue)).FirstOrDefault();
}
public static List<MapNode> FindByNodeAlias(string alias)
{
if (_mapNodes == null || _mapNodes.Any() == false) return null;
if (alias.isEmpty()) return null;
var lst = _mapNodes.Where(t => t.NodeAlias.Equals(alias));
if (lst.Any() == false) return null;
return lst.ToList();
}
public static List<MapNode> FindByNodeType(AGVNavigationCore.Models.MapNode type)
{
if (_mapNodes == null || _mapNodes.Any() == false) return null;
var lst = _mapNodes.Where(t => t.Type.Equals(type));
if (lst.Any() == false) return null;
return lst.ToList();
}
/// <summary>
/// RFID 읽기 시 해당 노드 위치로 AGV 업데이트
/// </summary>

View File

@@ -84,7 +84,7 @@ namespace Project
if (PUB.AGV.system1.stop_by_front_detect == true)
{
var tsSpeak = DateTime.Now - LastSpeakTime;
if (tsSpeak.TotalSeconds >= PUB.setting.doorSoundTerm)
if (tsSpeak.TotalSeconds >= PUB.setting.alarmSoundTerm)
{
PUB.Speak(Lang.);
LastSpeakTime = DateTime.Now;
@@ -96,7 +96,7 @@ namespace Project
if (PUB.AGV.error.runerror_by_no_magent_line == true)
{
var tsSpeak = DateTime.Now - LastSpeakTime;
if (tsSpeak.TotalSeconds >= PUB.setting.doorSoundTerm)
if (tsSpeak.TotalSeconds >= PUB.setting.alarmSoundTerm)
{
PUB.Speak(Lang.);
LastSpeakTime = DateTime.Now;
@@ -105,45 +105,18 @@ namespace Project
}
//현재위치를 모르는 상태라면 이동하여 현재 위치를 찾는다
if (PUB._virtualAGV.CurrentNodeId.isEmpty())// .cur. . CurrentPos == ePosition.NONE)
{
//이동중이지 않거나 홈이동상태가 아니라면?
if (PUB.AGV.system1.agv_run == false || PUB.sm.RunStep != ERunStep.GOHOME)
{
//현재위치를 검색해야함
PUB.sm.ClearRunStep();
PUB.sm.SetNewRunStep(ERunStep.GOHOME);
PUB.AddEEDB($"READY상태에서 현재위치를 몰라 홈으로 이동 백업스텝:{PUB.sm.RunStep}");
PUB.sm.BackupRunStep.Push(PUB.sm.RunStep); //현재 상태를 백업
return;
}
VAR.STR[eVarString.ChargeCheckMsg] = "현재 위치 모름";
}
if (_SM_RUN_POSCHK(isFirst, stepTime) == false) return;
//나머지 상황체크
switch (PUB.sm.RunStep)
{
case ERunStep.GOHOME:
if (runStepisFirst)
if (_SM_RUN_GOHOME(runStepisFirst, PUB.sm.GetRunSteptime) == true)
{
PUB.Speak(Lang.FindCurrentPisition);
}
else if (_SM_RUN_GOHOME(runStepisFirst, PUB.sm.GetRunSteptime))
{
//230601
PUB.Speak(Lang.);
VAR.TIME.Update(eVarTime.ChargeTry);
ERunStep NextStep = ERunStep.READY;
if (PUB.sm.BackupRunStep.Count > 0)
NextStep = PUB.sm.BackupRunStep.Pop();
PUB.log.Add($"현재위치 검색완료로 {NextStep} 으로 RUNSTEP값을 변경 합니다");
PUB.sm.SetNewRunStep(NextStep); //대기상태로 전환한다
return;
PUB.log.Add($"홈 이동이 완료되어 준비상태로 전환합니다");
PUB.sm.SetNewRunStep(ERunStep.READY);
}
break;
case ERunStep.GOTO: //목적지까지 이동하는 경우
if (_SM_RUN_GOTO(runStepisFirst, PUB.sm.GetRunSteptime) == true)
{
@@ -152,27 +125,27 @@ namespace Project
PUB.log.Add($"목적지({target.RfidId}) 도착완료 타입:{target.Type}, 출발지:{PUB._virtualAGV.StartNode.RfidId}");
if (target.Type == AGVNavigationCore.Models.NodeType.Buffer)
{
//현재위치가 마지막경로의 NODEID와 일치해야한다
var lastPath = PUB._virtualAGV.CurrentPath.DetailedPath.LastOrDefault();
if(lastPath.NodeId.Equals(PUB._virtualAGV.CurrentNodeId))
if (lastPath.NodeId.Equals(PUB._virtualAGV.CurrentNodeId))
{
//버퍼진입전 노드에 도착완료했따
PUB.XBE.BufferInReady = true;
PUB.XBE.BufferReadyError = false;
PUB.XBE.BufferReadyError = false;
}
else
{
//마지막위치가 아닌 다른 위치에 있으니 버퍼 작업을 할 수없다
PUB.log.AddAT("목적지 버퍼이동완료 했지만 마지막 노드가 아닙니다");
PUB.XBE.BufferInReady = false;
PUB.XBE.BufferReadyError = true;
PUB.XBE.BufferReadyError = true;
}
PUB.XBE.BufferInComplete = false;
PUB.XBE.BufferOutComplete = false;
}
else if(target.Type == AGVNavigationCore.Models.NodeType.Charging)
else if (target.Type == AGVNavigationCore.Models.NodeType.Charging)
{
}
@@ -191,7 +164,7 @@ namespace Project
else
{
//목적지다 다른 형태이다
}
PUB._virtualAGV.Turn = AGVNavigationCore.Models.AGVTurn.None;
PUB.sm.SetNewRunStep(ERunStep.READY);
@@ -271,8 +244,8 @@ namespace Project
PUB.Result.TargetPos = ePosition.QC;
}
PUB.Result.CurrentPosCW = "1";
PUB.sm.SetNewRunStep(ERunStep.GOHOME);
PUB.log.AddAT("충전 해제로 홈으로 이동");
PUB.sm.SetNewRunStep(ERunStep.READY);
PUB.log.AddAT("충전 해제로 대기상태로 전환 합니다");
}
}
break;
@@ -313,342 +286,5 @@ namespace Project
}
bool CheckStopCondition()
{
return true;
}
void CheckAGVMoveTo(eGoDir dir)
{
//계속내려간다
if (dir == eGoDir.Down)
{
var tsCmd = DateTime.Now - LastCommandTime;
if (tsCmd.TotalMilliseconds >= 1999)
{
//현재 동작중인상태에서 방향이 맞지 않다면 일단 움직임을 멈춘다
if (PUB.AGV.system1.agv_run)
{
if (PUB.AGV.data.Direction == 'B')
{
PUB.log.Add($"방향이 맞지 않아 정지 합니다({dir})");
PUB.AGV.AGVMoveStop("CheckAGVMoveTo");
}
else if (PUB.AGV.data.Speed == 'S')
{
PUB.log.Add($"마크정지를 해제하기 위해 장비를 멈춥니다");
}
}
else
{
//움직이지 않으므로 전진하도록 한다
PUB.log.Add($"AGV 기동 방향(DOWN):{dir}");
PUB.AGV.AGVMoveRun(arDev.Narumi.eRunOpt.Forward);
}
LastCommandTime = DateTime.Now;
}
}
else
{
var tsCmd = DateTime.Now - LastCommandTime;
if (tsCmd.TotalMilliseconds >= 1999)
{
if (PUB.AGV.system1.agv_run)
{
if (PUB.AGV.data.Direction == 'F')
{
PUB.log.Add($"방향이 맞지 않아 정지 합니다({dir})");
PUB.AGV.AGVMoveStop("CheckAGVMoveTo");
}
else if (PUB.AGV.data.Speed == 'S')
{
PUB.log.Add($"마크정지를 해제하기 위해 장비를 멈춥니다");
}
}
else
{
PUB.log.Add($"AGV 기동 방향(UP):{dir}");
PUB.AGV.AGVMoveRun(arDev.Narumi.eRunOpt.Backward);
}
LastCommandTime = DateTime.Now;
}
}
}
void CheckAGVStopbyMARK(string sender)
{
//계속내려간다
var tsCmd = DateTime.Now - LastCommandTime;
if (VAR.BOOL[eVarBool.NEXTSTOP_MARK] == false || tsCmd.TotalMilliseconds >= 1500)
{
PUB.AGV.AGVMoveStop("CheckAGVStopbyMARK", arDev.Narumi.eStopOpt.MarkStop);
LastCommandTime = DateTime.Now;
PUB.log.Add($"[{sender}] MARK신호에 멈춤 설정");
}
}
Boolean UpdateMotionPositionForMark(string sender)
{
//이머전시상태에서는 처리하지 않는다.
if (VAR.BOOL[eVarBool.EMERGENCY]) return false;
//DOWN 작업
// if (goDIR == eGoDir.Down)
{
//1. 현재위치 > 대상위치
if (PUB.Result.CurrentPos > PUB.Result.TargetPos)
{
//계속내려간다
if (PUB.setting.AGV_Direction_FVI_Backward)
CheckAGVMoveTo(eGoDir.Down);
else
CheckAGVMoveTo(eGoDir.Up);
}
//2. 현재위치 < 대상위치
else if (PUB.Result.CurrentPos < PUB.Result.TargetPos)
{
//올라가야한다
if (PUB.setting.AGV_Direction_FVI_Backward)
CheckAGVMoveTo(eGoDir.Up);
else
CheckAGVMoveTo(eGoDir.Down);
}
//3. 현재위치 = 대상위치
else
{
//현재위치가 확정되었는가?
var actpos = ctlPos1.GetPositionActive(PUB.Result.CurrentPos);
if (actpos == false && PUB.AGV.system1.agv_stop == true)
{
//위치확정이되지 않았다면 AGV멈춤시에 기동하게 한다.
var lastcom = DateTime.Now - LastCommandTime;
if (lastcom.TotalSeconds > 3)
{
if (PUB.Result.CurrentPosCW == "1")
{
if (PUB.setting.AGV_Direction_FVI_Backward)
PUB.AGV.AGVMoveRun(arDev.Narumi.eRunOpt.Forward);
else
PUB.AGV.AGVMoveRun(arDev.Narumi.eRunOpt.Backward);
}
else
{
if (PUB.setting.AGV_Direction_FVI_Backward)
PUB.AGV.AGVMoveRun(arDev.Narumi.eRunOpt.Backward);
else
PUB.AGV.AGVMoveRun(arDev.Narumi.eRunOpt.Forward);
}
LastCommandTime = DateTime.Now;
PUB.logagv.Add($"AGV가 멈춰있다 동작을 재개 합니다");
}
}
else
{
//마크센서가 들어와잇고, 위치가 act 되어있다면 해당 위치에 있는 것이다
if (PUB.AGV.error.Emergency == false &&
PUB.AGV.system1.agv_stop &&
PUB.AGV.signal.mark_sensor && actpos &&
PUB.Result.CurrentPos == PUB.Result.TargetPos)
{
//PUB.AGV.AGVMoveStop();
return true;
}
if (PUB.AGV.system1.agv_stop == true && PUB.AGV.system1.agv_run == false)
{
PUB.log.Add($"멈춰있으므로 이동을 시작 합니다");
if (PUB.Result.CurrentPosCW == "1")
{
if (PUB.setting.AGV_Direction_FVI_Backward)
PUB.AGV.AGVMoveRun(arDev.Narumi.eRunOpt.Backward);
else
PUB.AGV.AGVMoveRun(arDev.Narumi.eRunOpt.Forward);
}
else
{
if (PUB.setting.AGV_Direction_FVI_Backward)
PUB.AGV.AGVMoveRun(arDev.Narumi.eRunOpt.Forward);
else
PUB.AGV.AGVMoveRun(arDev.Narumi.eRunOpt.Backward);
}
}
//AGV는 아래로 FVI방향으로 내려가고 있다
if (VAR.BOOL[eVarBool.AGVDIR_UP] == false)
{
if (PUB.Result.CurrentPosCW == "0")
{
//장비가 마크센서에의해 멈췃다면 완료이다
if (PUB.AGV.error.Emergency == false && PUB.AGV.signal.mark_sensor)
{
PUB.AGV.AGVMoveStop("UPdateMotionPositionForMark");
return true;
}
else CheckAGVStopbyMARK(sender);
}
else if (PUB.Result.CurrentPosCW == "1")
{
//내려가는 작업이고 AGV는 올라가고 있는데 RFID는 위졲이 감지되었다면 아래로 내려가야한다
CheckAGVMoveTo(eGoDir.Up);
}
else
{
PUB.Result.CurrentPosCW = "1";
CheckAGVMoveTo(eGoDir.Up);
}
}
//AGV는 Qc방향으로 올라가고 있다
else
{
if (PUB.Result.CurrentPosCW == "1")
{
//네려가는 방향에서 내려가는 위치가 인식되었다면 마크에서 멈춰야 한다
if (PUB.AGV.error.Emergency == false && PUB.AGV.signal.mark_sensor)
{
PUB.AGV.AGVMoveStop("UPdateMotionPositionForMark");
return true;
}
else CheckAGVStopbyMARK(sender);
}
else if (PUB.Result.CurrentPosCW == "0")
{
//내려가는 작업이고 AGV는 올라가고 있는데 RFID는 위졲이 감지되었다면 아래로 내려가야한다
CheckAGVMoveTo(eGoDir.Down);
}
else
{
PUB.Result.CurrentPosCW = "0";
CheckAGVMoveTo(eGoDir.Down);
}
}
}
}
}
//UP 작업
//else
//{
// //1. 현재위치 > 대상위치
// if (PUB.Result.CurrentPos > PUB.Result.TargetPos)
// {
// //계속내려간다
// CheckAGVMoveTo(eGoDir.Down);
// }
// //2. 현재위치 < 대상위치
// else if (PUB.Result.CurrentPos < PUB.Result.TargetPos)
// {
// //올라가야한다
// CheckAGVMoveTo(eGoDir.Up);
// }
// //3. 현재위치 = 대상위치
// else
// {
// //AGV는 위로가고 있다
// if (VAR.BOOL[eVarBool.AGVDIR_UP] == true)
// {
// if (PUB.Result.CurrentPosCW == "0")
// {
// //장비가 마크센서에의해 멈췃다면 완료이다
// if (PUB.AGV.system1.agv_stop && PUB.AGV.system1.stop_by_front_detect == false && PUB.AGV.error.Emergency == false && PUB.AGV.signal.mark_sensor)
// {
// return true;
// }
// else CheckAGVStopbyMARK();
// }
// else if (PUB.Result.CurrentPosCW == "1")
// {
// //내려가는 작업이고 AGV는 올라가고 있는데 RFID는 위졲이 감지되었다면 아래로 내려가야한다
// CheckAGVMoveTo(eGoDir.Down);
// }
// }
// //AGV는 내려가고 있다
// else if (VAR.BOOL[eVarBool.AGVDIR_UP] == false)
// {
// if (PUB.Result.CurrentPosCW == "1")
// {
// //네려가는 방향에서 내려가는 위치가 인식되었다면 마크에서 멈춰야 한다
// if (PUB.AGV.system1.agv_stop && PUB.AGV.system1.stop_by_front_detect == false && PUB.AGV.error.Emergency == false && PUB.AGV.signal.mark_sensor)
// {
// return true;
// }
// else CheckAGVStopbyMARK();
// }
// else if (PUB.Result.CurrentPosCW == "0")
// {
// //내려가는 작업이고 AGV는 올라가고 있는데 RFID는 위졲이 감지되었다면 아래로 내려가야한다
// CheckAGVMoveTo(eGoDir.Up);
// }
// }
// }
//}
return false;
}
Boolean UpdateMotionPositionForCharger(string sender)
{
if (VAR.BOOL[eVarBool.AGVDIR_UP] == false)// PUB.flag.get(EFlag.FLAG_DIR_BW) == true)
{
//충전기 검색은 항상 뒤로 검색한다
var tsCmd = DateTime.Now - tm_gocharge_command;
if (tsCmd.TotalMilliseconds >= 1999 &&
PUB.AGV.error.Emergency == false &&
PUB.AGV.system1.agv_run == false)
{
//PUB.PLC.Move(Device.PLC.Rundirection.Backward, "UpdateMotionPosition(" + sender + ")");
PUB.AGV.AGVMoveRun(arDev.Narumi.eRunOpt.Backward);//
tm_gocharge_command = DateTime.Now;
}
}
else
{
//CCW (역방향 )
//if (Pub.Result.RFIDPos < ePosition.CHARGE || Pub.Result.RFIDPos > ePosition.QC)
//{
// //정상적이라면 RFID값은 QC + 혹은 QC - 에 있어야 하므로 항상 차저보다 높이 있다
// //그렇지 않다면 초기화해서 QC검색부터 다시 실행하게 한다
// //여기는 비정상 위치 값이다.
// Pub.sm.SetStepSeq(1);
//}
//else
//{
//현재위치가 충전위치이고, 움직이지 않았다면 완료된 경우라 할수 있따
if (PUB.Result.CurrentPos == ePosition.CHARGE &&
PUB.AGV.signal.mark_sensor == true)
{
PUB.log.AddI("충전위치 검색 완료");
return true;
}
else
{
//이동중이지 않다면 항상 이동을 해줘야한다
var tsCmd = DateTime.Now - LastCommandTime;
if (tsCmd.TotalMilliseconds >= 1999 &&
PUB.AGV.error.Emergency == false &&
PUB.AGV.system1.agv_run == false)
{
//PUB.PLC.Move(Device.PLC.Rundirection.Backward, "UpdateMotionPosition #1(" + sender + ")");
PUB.AGV.AGVMoveRun(arDev.Narumi.eRunOpt.Backward);//
LastCommandTime = DateTime.Now;
}
}
//}
}
return false;
}
}//cvass
}

View File

@@ -45,7 +45,7 @@ namespace Project
if (PUB.AGV.system1.stop_by_front_detect == true)
{
var tsSpeak = DateTime.Now - LastSpeakTime;
if (tsSpeak.TotalSeconds >= PUB.setting.doorSoundTerm)
if (tsSpeak.TotalSeconds >= PUB.setting.alarmSoundTerm)
{
PUB.Speak(Lang.);
LastSpeakTime = DateTime.Now;
@@ -214,7 +214,7 @@ namespace Project
else if (PUB.sm.RunStepSeq == idx++)
{
//마크스탑신호가 3초이내로 들어와야 한다
if (PUB.AGV.signal.mark_sensor == false)
if (VAR.BOOL[eVarBool.NEXTSTOP_MARK] == false)
{
var ts = VAR.TIME.RUN(eVarTime.LastTurnCommandTime);
if (ts.TotalSeconds > 3)

View File

@@ -34,7 +34,7 @@ namespace Project
if (PUB.AGV.system1.stop_by_front_detect == true)
{
var tsSpeak = DateTime.Now - LastSpeakTime;
if (tsSpeak.TotalSeconds >= PUB.setting.doorSoundTerm)
if (tsSpeak.TotalSeconds >= PUB.setting.alarmSoundTerm)
{
PUB.Speak(Lang.);
LastSpeakTime = DateTime.Now;

View File

@@ -14,6 +14,8 @@ namespace Project
public Boolean _SM_RUN_CHGOFF(bool isFirst, TimeSpan stepTime)
{
//충전중인지 확인한다.
if (VAR.BOOL[eVarBool.FLAG_CHARGEONA] == true || PUB.AGV.system1.Battery_charging == true)
{
@@ -25,7 +27,7 @@ namespace Project
PUB.Speak(Lang.);
}
}
//AGV는 충전을 해제한 상태이다
if (PUB.AGV.system1.Battery_charging == false)
{
@@ -47,6 +49,17 @@ namespace Project
PUB.AGV.AGVCharge(PUB.setting.ChargerID, false);
VAR.TIME.Update(eVarTime.SendChargeOff);
}
// 1분 타임아웃 체크
if (stepTime.TotalMinutes >= 1)
{
PUB.XBE.errorMessage = $"충전해제가 실패되었습니다(1분)";
PUB.log.AddE(PUB.XBE.errorMessage);
PUB.sm.SetNewStep(eSMStep.IDLE);
return false;
}
}
return false;
}

View File

@@ -38,7 +38,7 @@ namespace Project
if (PUB.AGV.system1.stop_by_front_detect == true)
{
var tsSpeak = DateTime.Now - LastSpeakTime;
if (tsSpeak.TotalSeconds >= PUB.setting.doorSoundTerm)
if (tsSpeak.TotalSeconds >= PUB.setting.alarmSoundTerm)
{
PUB.Speak(Lang.);
LastSpeakTime = DateTime.Now;
@@ -63,8 +63,16 @@ namespace Project
var idx = 1;
if (PUB.sm.RunStepSeq == idx++)
{
PUB.Speak(Lang.);
PUB.Result.TargetPos = ePosition.QC;
var targetnode = PUB.FindByRFID(PUB.setting.NodeMAP_RFID_Charger);
if(targetnode == null)
{
PUB.log.AddE($"충전기 노드가 설정되지 않았습니다");
PUB.sm.SetNewRunStep(ERunStep.READY);
return false;
}
//충전기로 대상을 설정한다
PUB._virtualAGV.TargetNode = targetnode;
VAR.TIME.Update(eVarTime.ChargeSearch);
PUB.sm.UpdateRunStepSeq();
PUB.log.Add($"충전:대상위치 QC 시작");
@@ -73,7 +81,7 @@ namespace Project
else if (PUB.sm.RunStepSeq == idx++)
{
//모션 전후진 제어
if (UpdateMotionPositionForMark("GOCHARGE #1") == true)
if ( UpdateMotionPositionForCharger("GOCHARGE #1") == true)
{
PUB.log.Add($"충전:충전기 검색 전 QC위치 확인 완료");
PUB.sm.UpdateRunStepSeq();
@@ -200,9 +208,6 @@ namespace Project
PUB.Result.CurrentPos = ePosition.CHARGE; //현재위치를 충전기로 한다
PUB.Result.TargetPos = ePosition.CHARGE;
PUB.Result.CurrentPosCW = "1";
ctlPos1.SetPosition(ePosition.CHARGE);
ctlPos1.SetPositionActive(ePosition.CHARGE);
ctlPos1.Invalidate();
PUB.sm.UpdateRunStepSeq();
return false;
}

View File

@@ -13,27 +13,18 @@ namespace Project
{
public Boolean _SM_RUN_GOHOME(bool isFirst, TimeSpan stepTime)
{
var funcName = "_SM_RUN_GOHOME";
if (runStepisFirst)
{
// PUB.flag.set(EFlag.FLAG_NEXTSTOP_ALIGN, false);
//VAR.BOOL[eVarBool.FLAG_NEXTSTOP_MARK] = false;//);
VAR.BOOL[eVarBool.FLAG_NEXTSTOP_ALIGN] = false;//);
}
//220629
// if(PUB.flag.get(EFlag.FLAG_GO_CHAGER_TEMP))
//{
// PUB.flag.set(EFlag.FLAG_GO_CHAGER_TEMP, false);
//}
//HW 연결오류
if (PUB.AGV.IsOpen == false)
{
PUB.Result.SetResultMessage(eResult.Hardware, eECode.AGVCONN, eNextStep.ERROR);
return false;
}
//충전 상태가 OFF되어야 동작하게한다
if (_SM_RUN_CHGOFF(isFirst, stepTime) == false)
@@ -43,7 +34,7 @@ namespace Project
if (PUB.AGV.system1.stop_by_front_detect == true)
{
var tsSpeak = DateTime.Now - LastSpeakTime;
if (tsSpeak.TotalSeconds >= PUB.setting.doorSoundTerm)
if (tsSpeak.TotalSeconds >= PUB.setting.alarmSoundTerm)
{
PUB.Speak(Lang.);
LastSpeakTime = DateTime.Now;
@@ -51,27 +42,29 @@ namespace Project
return false;
}
//현재 위치가 결정되어있는지 체크한다
if (_SM_RUN_POSCHK(isFirst, stepTime) == false)
return false;
var idx = 1;
if (PUB.sm.RunStepSeq == idx++)
{
PUB.Speak(Lang.);
//홈은 무조건 QC위치로 간다
PUB.AddEEDB($"홈검색시작({PUB.Result.TargetPos})");
PUB.Result.TargetPos = ePosition.QC;
var homenode = PUB.FindByRFID(PUB.setting.NodeMAP_RFID_Home);
if (homenode == null)
{
PUB.log.Add($"홈위치의 노드맵핑(환경설정)이 없습니다");
PUB.sm.SetNewRunStep(ERunStep.READY);
return false;
}
PUB._virtualAGV.TargetNode = homenode;
PUB.AddEEDB($"홈검색시작({homenode.RfidId})");
PUB.sm.UpdateRunStepSeq();
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
//모션 전후진 제어
if (UpdateMotionPositionForMark("GOHOME"))
if (UpdateMotionPositionForMark(funcName))
{
PUB.AGV.AGVMoveStop("SM_RUN_GOHOME");
PUB.AGV.AGVMoveStop(funcName);
PUB.sm.UpdateRunStepSeq();
}
return false;
@@ -79,7 +72,7 @@ namespace Project
else if (PUB.sm.RunStepSeq == idx++)
{
//QC까지 모두 완료되었다.(완전히 정차할때까지 기다린다)
PUB.Speak(Lang., true);
PUB.Speak(Lang., true);
PUB.AddEEDB($"홈검색완료({PUB.Result.TargetPos})");
PUB.sm.UpdateRunStepSeq();
return false;

View File

@@ -3,6 +3,8 @@ using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using AR;
using COMM;
namespace Project
{
@@ -10,45 +12,30 @@ namespace Project
{
public Boolean _SM_RUN_POSCHK(bool isFirst, TimeSpan stepTime)
{
//현재 위치가 찾아지지 않았다면. 먼저 위치를 찾는다. 위로 이동시켜서 찾는다.
if (PUB.Result.CurrentPos == ePosition.NONE)
//현재위치가 설정되어있는지 확인한다, 현재위치값이 있는 경우 True 를 반환
var currentnode = PUB.FindByNodeID(PUB._virtualAGV.CurrentNodeId);
if (currentnode != null) return true;
//이동을 하지 않고있다면 전진을 진행한다
if (PUB.AGV.system1.agv_run == false)
{
if (isFirst)
var ts = VAR.TIME.RUN(eVarTime.LastRunCommandTime);
if (ts.TotalSeconds > 5)
{
PUB.Speak( Lang.);
}
if (PUB.AGV.system1.agv_run)
{
//방향을 체크한다
var basedir = PUB.setting.AGV_Direction_FVI_Backward ? 'F' : 'B';
if (PUB.AGV.data.Direction == basedir)
PUB.log.Add($"현재위치를 몰라 전진 이동 합니다");
PUB.AGV.AGVMoveSet(new arDev.Narumi.BunkiData
{
var ts = DateTime.Now - LastCommandTime;
if (ts.TotalMilliseconds >= 1999)
{
PUB.AGV.AGVMoveStop("SM_RUN_POSCHK",arDev.Narumi.eStopOpt.Stop);
LastCommandTime = DateTime.Now;
}
}
Bunki = arDev.Narumi.eBunki.Strate,
Direction = arDev.Narumi.eMoveDir.Forward,
PBSSensor = 1,
Speed = arDev.Narumi.eMoveSpd.Low,
});
PUB.AGV.AGVMoveRun();
VAR.TIME.Update(eVarTime.LastRunCommandTime);
}
else if (PUB.AGV.system1.agv_run == false)
{
//전진이동한다
var ts = DateTime.Now - LastCommandTime;
if (ts.TotalMilliseconds >= 1999)
{
if (PUB.setting.AGV_Direction_FVI_Backward)
PUB.AGV.AGVMoveRun(arDev.Narumi.eRunOpt.Backward);//
else
PUB.AGV.AGVMoveRun(arDev.Narumi.eRunOpt.Forward);//
LastCommandTime = DateTime.Now;
}
}
return false;
}
else return true;
VAR.STR[eVarString.StatusMessage] = "현재 위치를 알 수 없습니다";
return false;
}
}
}

View File

@@ -83,11 +83,6 @@ namespace Project
PUB.Result.TargetPos = ePosition.NONE;
PUB.Result.CurrentPos = ePosition.NONE;
PUB.Result.CurrentPosCW = "0";
ctlPos1.SetPositionDeActive();
ctlPos1.SetPosition(ePosition.NONE);
ctlPos1.SetDirection("0");
ctlPos1.Invalidate();
PUB.sm.UpdateRunStepSeq();
return false;
}

View File

@@ -80,7 +80,7 @@ namespace Project
//synlist.Add("SBN", PUB.setting.ChargerID.ToString("0000"));
synlist.Add("SGS", PUB.setting.GDSValue.ToString("0000"));
VAR.I32[eVarInt32.SyncItemCount] = synlist.Count;
PUB.AddEEDB($"SYNC시작({PUB.Result.TargetPos})");
@@ -101,7 +101,7 @@ namespace Project
}
else if (PUB.sm.RunStepSeq == idx++)
{
//통신 확인되었으므로 스피드를 전송한다.
//통신 확인되었으므로 설정값들을
if (synidx < synlist.Count)
{
var item = synlist.ElementAt(synidx);
@@ -111,7 +111,7 @@ namespace Project
// 캔버스에 동기화 상태 표시
if (PUB._mapCanvas != null)
{
float progress = (float)synidx / synlist.Count;
float progress = (float)synidx / VAR.I32[eVarInt32.SyncItemCount];
PUB._mapCanvas.SetSyncStatus("장비 설정 동기화 중...", progress, $"항목: {item.Key} ({synidx + 1}/{synlist.Count})");
}
}

View File

@@ -0,0 +1,228 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using Project.StateMachine;
using COMM;
using AR;
namespace Project
{
public partial class fMain
{
bool CheckStopCondition()
{
return true;
}
/// <summary>
/// 설정된 목적지까지 이동을 완료 한 후 True를 반환합니다.
/// 목적지 : PUB._virtualAGV.TargetNode
///
/// </summary>
/// <param name="sender"></param>
/// <returns></returns>
Boolean UpdateMotionPositionForMark(string sender)
{
//현재위치를 모르는 상태라면 이동하여 현재 위치를 찾는다
if (_SM_RUN_POSCHK(false, new TimeSpan()) == false) return false;
//현재위치노드 오류
var currentNode = PUB.FindByNodeID(PUB._virtualAGV.CurrentNodeId);
if (currentNode == null)
{
PUB.log.AddE($"현재위치노드가 없습니다");
PUB.sm.SetNewRunStep(ERunStep.READY);
return false;
}
//시작노드값이 없다면 현재위치를 노드로 결정한다
if (PUB._virtualAGV.StartNode == null)
PUB._virtualAGV.StartNode = PUB.FindByNodeID(PUB._virtualAGV.CurrentNodeId);
//시작노드가없다면 오류
if (PUB._virtualAGV.StartNode == null)
{
PUB.log.AddE($"경로시작노드가 없습니다");
PUB.sm.SetNewRunStep(ERunStep.READY);
return false;
}
//대상노드가 없다면 오류
if (PUB._virtualAGV.TargetNode == null)
{
PUB.log.AddE($"경로종료노드가 없습니다");
PUB.sm.SetNewRunStep(ERunStep.READY);
return false;
}
//경로 생성(경로정보가 없거나 현재노드가 경로에 없는경우)
if (PUB._virtualAGV.CurrentPath == null ||
PUB._virtualAGV.CurrentPath.DetailedPath.Any() == false ||
PUB._virtualAGV.CurrentPath.DetailedPath.Where(t => t.NodeId.Equals(currentNode.NodeId)).Any() == false)
{
if (PUB.AGV.system1.agv_run)
{
PUB.log.Add($"경로 재생성으로 인해 구동을 멈춥니다");
PUB.AGV.AGVMoveStop("경로재생성");
}
var PathResult = CalcPath(PUB._virtualAGV.StartNode, PUB._virtualAGV.TargetNode);
if (PathResult.result == null)
{
PUB.log.AddE($"경로가 계산되지 않았습니다");
PUB.sm.SetNewRunStep(ERunStep.READY);
return false;
}
PUB.log.AddI($"경로생성 {PUB._virtualAGV.StartNode.RfidId} -> {PUB._virtualAGV.TargetNode.RfidId}");
}
//predict 를 이용하여 다음 이동을 모두 확인한다.
var nextAction = PUB._virtualAGV.Predict();
var message = $"[다음 행동 예측]\n\n" +
$"모터: {nextAction.Motor}\n" +
$"마그넷: {nextAction.Magnet}\n" +
$"속도: {nextAction.Speed}\n" +
$"이유: {nextAction.Message}\n\n" +
$"---\n" +
$"현재 상태: {PUB._virtualAGV.CurrentState}\n" +
$"현재 방향: {PUB._virtualAGV.CurrentDirection}\n" +
$"위치 확정: {PUB._virtualAGV.IsPositionConfirmed} (RFID {PUB._virtualAGV.DetectedRfidCount}개)\n" +
$"현재 노드: {PUB._virtualAGV.CurrentNodeId ?? ""}";
//모터에서 정지를 요청했다
if (nextAction.Motor == AGVNavigationCore.Models.MotorCommand.Stop)
{
if (PUB.AGV.system1.agv_run)
{
// 완료(Complete) 상태라면 MarkStop 전송
if (nextAction.Reason == AGVNavigationCore.Models.eAGVCommandReason.MarkStop)
{
PUB.log.Add("다음행동예측에서 MARK STOP이 확인되었습니다");
PUB.AGV.AGVMoveStop(nextAction.Message, arDev.Narumi.eStopOpt.MarkStop);
}
else
{
PUB.log.Add("다음행동예측에서 장비 멈춤이 확인되었습니다");
PUB.AGV.AGVMoveStop(nextAction.Message);
}
}
// 목적지 도착 여부 확인
// 현재 노드가 타겟 노드와 같고, 위치가 확정된 상태라면 도착으로 간주
// 단, AGV가 실제로 멈췄는지 확인 (agv_run == false)
if (PUB._virtualAGV.IsPositionConfirmed &&
PUB._virtualAGV.CurrentNodeId == PUB._virtualAGV.TargetNode.NodeId)
{
if (PUB.AGV.system1.agv_run == false)
{
return true;
}
}
return false;
}
else
{
// 이동 명령 변환 (AGVNavigationCore -> arDev.Narumi)
var bunki = arDev.Narumi.eBunki.Strate;
if (nextAction.Magnet == AGVNavigationCore.Models.MagnetPosition.L) bunki = arDev.Narumi.eBunki.Left;
else if (nextAction.Magnet == AGVNavigationCore.Models.MagnetPosition.R) bunki = arDev.Narumi.eBunki.Right;
var dir = arDev.Narumi.eMoveDir.Forward;
if (nextAction.Motor == AGVNavigationCore.Models.MotorCommand.Backward) dir = arDev.Narumi.eMoveDir.Backward;
var spd = arDev.Narumi.eMoveSpd.Low;
if (nextAction.Speed == AGVNavigationCore.Models.SpeedLevel.M) spd = arDev.Narumi.eMoveSpd.Mid;
else if (nextAction.Speed == AGVNavigationCore.Models.SpeedLevel.H) spd = arDev.Narumi.eMoveSpd.High;
// 명령 설정
// 현재 상태와 다를 때만 전송 (불필요한 통신 부하 방지)
if (PUB.AGV.data.Sts != bunki.ToString()[0] ||
PUB.AGV.data.Direction != dir.ToString()[0] ||
PUB.AGV.data.Speed != spd.ToString()[0])
{
PUB.AGV.AGVMoveSet(new arDev.Narumi.BunkiData
{
Bunki = bunki,
Direction = dir,
PBSSensor = 1,
Speed = spd,
});
PUB.log.Add($"Predict Run Setting = bunki:{bunki},dir:{dir},pbs:1,spd:{spd}");
}
// AGV가 정지 상태라면 구동 시작
if (PUB.AGV.system1.agv_run == false)
{
var runOpt = (dir == arDev.Narumi.eMoveDir.Forward) ? arDev.Narumi.eRunOpt.Forward : arDev.Narumi.eRunOpt.Backward;
PUB.AGV.AGVMoveRun(runOpt);
}
return false;
}
}
/// <summary>
/// 충전기검색시퀀스
/// </summary>
/// <param name="sender"></param>
/// <returns></returns>
Boolean UpdateMotionPositionForCharger(string sender)
{
if (VAR.BOOL[eVarBool.AGVDIR_BACK] == false)// PUB.flag.get(EFlag.FLAG_DIR_BW) == true)
{
//충전기 검색은 항상 앞으로 검색한다
var tsCmd = DateTime.Now - tm_gocharge_command;
if (tsCmd.TotalMilliseconds >= 1999 &&
PUB.AGV.error.Emergency == false &&
PUB.AGV.system1.agv_run == false)
{
PUB.AGV.AGVMoveSet(new arDev.Narumi.BunkiData
{
Bunki = arDev.Narumi.eBunki.Strate,
Direction = arDev.Narumi.eMoveDir.Forward,
PBSSensor = 1,
Speed = arDev.Narumi.eMoveSpd.Low,
});
PUB.AGV.AGVMoveRun();//
tm_gocharge_command = DateTime.Now;
}
}
else
{
//현재위치가 충전위치이고, 움직이지 않았다면 완료된 경우라 할수 있따
if (PUB._virtualAGV.CurrentNodeId.Equals(PUB.setting.NodeMAP_RFID_Charger) &&
VAR.BOOL[eVarBool.MARK_SENSOR] == true)
{
PUB.log.AddI("충전위치 검색 완료");
return true;
}
else
{
//이동중이지 않다면 항상 이동을 해줘야한다
var tsCmd = DateTime.Now - LastCommandTime;
if (tsCmd.TotalMilliseconds >= 1999 &&
PUB.AGV.error.Emergency == false &&
PUB.AGV.system1.agv_run == false)
{
//PUB.PLC.Move(Device.PLC.Rundirection.Backward, "UpdateMotionPosition #1(" + sender + ")");
PUB.AGV.AGVMoveRun(arDev.Narumi.eRunOpt.Backward);//
LastCommandTime = DateTime.Now;
}
}
//}
}
return false;
}
}//cvass
}

View File

@@ -49,82 +49,48 @@ namespace Project
case arDev.Narumi.DataType.STS:
{
//마크센서 확인
var chg_mark1 = PUB.AGV.signal.GetChanged(arDev.Narumi.Signal.eflag.mark_sensor_1);
var chg_mark2 = PUB.AGV.signal.GetChanged(arDev.Narumi.Signal.eflag.mark_sensor_1);
var chg_run = PUB.AGV.system1.GetChanged(arDev.Narumi.SystemFlag1.eflag.agv_run);
var chg_stop = PUB.AGV.system1.GetChanged(arDev.Narumi.SystemFlag1.eflag.agv_stop);
var agv_err = PUB.AGV.error.Value;
var agv_emg = PUB.AGV.error.Emergency;
var agv_chg = PUB.AGV.system1.Battery_charging;
var agv_stp = PUB.AGV.system1.agv_stop;
var agv_run = PUB.AGV.system1.agv_run;
var agv_mrk = PUB.AGV.signal.mark_sensor;
//if (chg_run && PUB.AGV.system1.agv_run) PUB.Speak("이동을 시작 합니다");
VAR.BOOL[eVarBool.AGVDIR_UP] = PUB.AGV.data.Direction == 'B';
VAR.BOOL[eVarBool.AGV_ERROR] = PUB.AGV.error.Value > 0;
VAR.BOOL[eVarBool.EMERGENCY] = PUB.AGV.error.Emergency;
VAR.BOOL[eVarBool.AGVDIR_BACK] = PUB.AGV.data.Direction == 'B';
////모터방향 입력
//if (PUB.AGV.data.Direction == 'B')
// PUB.mapctl.Manager.agv.Current_Motor_Direction = AGVControl.AgvDir.Backward;
//else
// PUB.mapctl.Manager.agv.Current_Motor_Direction = AGVControl.AgvDir.Forward;
////현재 속도
//if (PUB.AGV.data.Speed == 'H')
// PUB.mapctl.Manager.agv.CurrentSpeed = AGVControl.AgvSpeed.High;
//else if (PUB.AGV.data.Speed == 'M')
// PUB.mapctl.Manager.agv.CurrentSpeed = AGVControl.AgvSpeed.Middle;
//else if (PUB.AGV.data.Speed == 'L')
// PUB.mapctl.Manager.agv.CurrentSpeed = AGVControl.AgvSpeed.Low;
//else if (PUB.AGV.data.Speed == 'S')
// PUB.mapctl.Manager.agv.CurrentSpeed = AGVControl.AgvSpeed.MarkStop;
////이동방향
//if (PUB.AGV.data.Sts == 'S')
// PUB.mapctl.Manager.agv.CurrentSTS = AGVControl.AgvSts.Straight;
//else if (PUB.AGV.data.Sts == 'L')
// PUB.mapctl.Manager.agv.CurrentSTS = AGVControl.AgvSts.Left;
//else if (PUB.AGV.data.Sts == 'R')
// PUB.mapctl.Manager.agv.CurrentSTS = AGVControl.AgvSts.Right;
//PUB.mapctl.Manager.agv.IsMoving = PUB.AGV.system1.agv_run;
//PUB.mapctl.Manager.agv.IsMarkCheck = PUB.AGV.system1.Mark1_check || PUB.AGV.system1.Mark2_check;
if (PUB.AGV.signal.mark_sensor == false)
if (VAR.BOOL[eVarBool.AGV_ERROR] != (agv_err > 0))
{
if (VAR.BOOL[eVarBool.MARK_SENSOROFF] == false)
{
VAR.BOOL[eVarBool.MARK_SENSOROFF] = true;
VAR.TIME[eVarTime.MarkSensorOff] = DateTime.Now;
PUB.log.Add($"마크센서off를 설정");
}
VAR.BOOL[eVarBool.AGV_ERROR] = (agv_err > 0);
PUB.logagv.Add($"new AGV_ERROR ({PUB.AGV.error.Value})");
}
else
if (VAR.BOOL[eVarBool.EMERGENCY] != agv_emg)
{
if (VAR.BOOL[eVarBool.MARK_SENSOROFF] == true)
{
VAR.BOOL[eVarBool.MARK_SENSOROFF] = false;
VAR.TIME[eVarTime.MarkSensorOff] = DateTime.Now;
PUB.log.Add($"마크센서off를 해제");
}
VAR.BOOL[eVarBool.EMERGENCY] = agv_emg;
PUB.logagv.Add($"new EMERGENCY ({VAR.BOOL[eVarBool.EMERGENCY]})");
}
//차징상태변경
if (_charging != PUB.AGV.system1.Battery_charging)
if (_charging != agv_chg)
{
if (PUB.AGV.system1.Battery_charging)
if (agv_chg)
{
VAR.TIME[eVarTime.ChargeStart] = DateTime.Now;
PUB.logagv.Add($"충전시작:{VAR.TIME[eVarTime.ChargeStart]}");
}
_charging = PUB.AGV.system1.Battery_charging;
_charging = agv_chg;
}
//배터리충전상태
if (VAR.BOOL[eVarBool.FLAG_CHARGEONA] != PUB.AGV.system1.Battery_charging)
if (VAR.BOOL[eVarBool.FLAG_CHARGEONA] != agv_chg)
{
PUB.log.Add($"충전상태전환 {PUB.AGV.system1.Battery_charging}");
VAR.BOOL[eVarBool.FLAG_CHARGEONA] = PUB.AGV.system1.Battery_charging;
PUB.log.Add($"충전상태전환 {agv_chg}");
VAR.BOOL[eVarBool.FLAG_CHARGEONA] = agv_chg;
}
//자동충전해제시 곧바로 수동 충전되는 경우가 있어 자동 상태를 BMS에 넣는다 230118
PUB.BMS.AutoCharge = PUB.AGV.system1.Battery_charging;
PUB.BMS.AutoCharge = agv_chg;
if (PUB.AGV.error.Charger_pos_error != VAR.BOOL[eVarBool.CHG_POSERR])
{
@@ -135,41 +101,41 @@ namespace Project
VAR.BOOL[eVarBool.CHG_POSERR] = PUB.AGV.error.Charger_pos_error;
}
if (VAR.BOOL[eVarBool.MARK_SENSOROFF] == true && PUB.AGV.signal.mark_sensor == false)
//나르미가 멈췄다면 다음 마크 이동 기능이 OFF 된다
if (agv_stp)
{
//현재 활성화된 위치를 꺼준다
if (this.ctlPos1.GetPositionActive(PUB.Result.CurrentPos))
if (VAR.BOOL[eVarBool.NEXTSTOP_MARK])
{
var ts = VAR.TIME.RUN(eVarTime.MarkSensorOff);
if (ts.TotalSeconds >= 2)
{
ctlPos1.SetPositionDeActive();
PUB.log.Add($"현재 활성위치를 해제 함");
}
VAR.BOOL[eVarBool.NEXTSTOP_MARK] = false;
PUB.logagv.Add($"NEXTSTOP_MARK 변경({VAR.BOOL[eVarBool.NEXTSTOP_MARK]})");
}
}
//나르미가 멈췄다면 다음 마크 이동 기능이 OFF 된다
if (PUB.AGV.system1.agv_stop)
VAR.BOOL[eVarBool.NEXTSTOP_MARK] = false;
//마크센서 상태가 변경이 되었다면
if (VAR.BOOL[eVarBool.MARK_SENSOR] != PUB.AGV.signal.mark_sensor)
{
if (PUB.AGV.signal.mark_sensor)
{
//현재위치를 확정한다
var curact = ctlPos1.GetPositionActive(PUB.Result.CurrentPos);
if (curact == false)
{
PUB.log.Add($"마크센서로인해 현재위치 설정완료:{PUB.Result.CurrentPos}");
ctlPos1.SetPositionActive(PUB.Result.CurrentPos);
ctlPos1.SetDirection("");
ctlPos1.Invalidate();
}
}
PUB.logagv.Add($"MARK_SENSOR 변경({PUB.AGV.signal.mark_sensor})");
VAR.BOOL[eVarBool.MARK_SENSOR] = PUB.AGV.signal.mark_sensor;
//AGV가 멈췄고 마크센서가 ON되었다면 마지막 RFID 위치가 확정된경우이다
if (agv_stp && VAR.BOOL[eVarBool.MARK_SENSOR])
{
PUB.log.Add("마크스탑이 확인되어 최종위치를 PASS 처리 합니다");
var curnode = PUB._virtualAGV.SetCurrentNodeMarkStop();
if (curnode == true)
{
PUB.log.Add($"마크스탑으로 해당노드의 이동을 확정합니다");
}
else PUB.log.AddAT($"마크스탑이 확인되었으나 현재 노드가없어 PASS를 설정하지 못함");
}
}
if (VAR.BOOL[eVarBool.MARK_SENSOROFF] != VAR.BOOL[eVarBool.MARK_SENSOR])
{
VAR.BOOL[eVarBool.MARK_SENSOROFF] = !VAR.BOOL[eVarBool.MARK_SENSOR];
VAR.TIME[eVarTime.MarkSensorOff] = DateTime.Now;
PUB.log.Add($"MARK_SENSOROFF 변경({VAR.BOOL[eVarBool.MARK_SENSOROFF]})");
}
}
break;
case arDev.Narumi.DataType.TAG:
@@ -197,7 +163,7 @@ namespace Project
NodeId = newNodeId,
RfidId = PUB.Result.LastTAG,
Name = $"자동추가_{PUB.Result.LastTAG}",
Type = NodeType.Normal,
Type = NodeType.Normal,
Position = new Point(100, 100), // 기본 위치
IsActive = true,
DisplayColor = Color.Orange, // 자동 추가된 노드는 오렌지색으로 표시
@@ -239,8 +205,23 @@ namespace Project
}
//이 후 상황을 예측한다
var command = PUB._virtualAGV.Predict();
var preditMSG = $"Motor:{command.Motor},Magnet:{command.Magnet},Speed:{command.Speed} : {command.Reason}";
if (PUB._mapCanvas != null)
{
var nextAction = PUB._virtualAGV.Predict();
var message = $"[다음 행동 예측]\n\n" +
$"모터: {nextAction.Motor}\n" +
$"마그넷: {nextAction.Magnet}\n" +
$"속도: {nextAction.Speed}\n" +
$"이유: {nextAction.Message}\n\n" +
$"---\n" +
$"현재 상태: {PUB._virtualAGV.CurrentState}\n" +
$"현재 방향: {PUB._virtualAGV.CurrentDirection}\n" +
$"위치 확정: {PUB._virtualAGV.IsPositionConfirmed} (RFID {PUB._virtualAGV.DetectedRfidCount}개)\n" +
$"현재 노드: {PUB._virtualAGV.CurrentNodeId ?? ""}";
PUB._mapCanvas.PredictMessage = message;
}
}
catch (Exception ex)
{

View File

@@ -159,7 +159,12 @@ namespace Project
// 동기화 모드 종료 (혹시 남아있을 경우)
if (PUB._mapCanvas != null)
PUB._mapCanvas.ExitSyncMode();
{
this.Invoke(new Action(() => {
PUB._mapCanvas.ExitSyncMode();
}));
}
}
//자동소거기능
@@ -183,6 +188,12 @@ namespace Project
break;
case eSMStep.SYNC:
if(e.isFirst)
{
// 동기화 완료 시 캔버스 모드 복귀
if (PUB._mapCanvas != null)
PUB._mapCanvas.SetSyncStatus("설정 동기화", 0f, "환경설정 값으로 AGV컨트롤러를 설정 합니다");
}
if (_SM_RUN_SYNC(runStepisFirst, PUB.sm.GetRunSteptime))
{
var b1 = PUB.XBE.IsOpen;

View File

@@ -241,6 +241,7 @@ namespace Project
var bCharge =
(PUB.sm.RunStep == ERunStep.GOCHARGE || PUB.sm.RunStep == ERunStep.CHARGECHECK || VAR.BOOL[eVarBool.FLAG_CHARGEONA] == true);
//가동, 목적지가 충전기라면 홈 이동이다
var bHome = PUB.sm.Step == eSMStep.RUN && (PUB.sm.RunStep == ERunStep.GOHOME);
//var bChargeM = PUB.flag.get(EFlag.FLAG_CHARGEONM);
var bAuto = VAR.BOOL[eVarBool.FLAG_AUTORUN];
@@ -368,7 +369,7 @@ namespace Project
}
IOState.setTitle(inputrow, inputcol, "RUN"); IOState.setValue(inputrow, inputcol++, (PUB.AGV.system1.agv_run ? 1 : 0));
IOState.setTitle(inputrow, inputcol, "MARK"); IOState.setValue(inputrow, inputcol++, (PUB.AGV.signal.mark_sensor ? 1 : (VAR.BOOL[eVarBool.NEXTSTOP_MARK] ? 2 : 0)));
IOState.setTitle(inputrow, inputcol, "MARK"); IOState.setValue(inputrow, inputcol++, (VAR.BOOL[eVarBool.MARK_SENSOR] ? 1 : (VAR.BOOL[eVarBool.NEXTSTOP_MARK] ? 2 : 0)));
IOState.setTitle(inputrow, inputcol, "CHG"); IOState.setValue(inputrow, inputcol++, (PUB.AGV.system1.Battery_charging ? 1 : 0));
IOState.setTitle(inputrow, inputcol, "ITM"); IOState.setValue(inputrow, inputcol++, (VAR.BOOL[eVarBool.ITEMON] ? 1 : 0));
IOState.Invalidate();

View File

@@ -160,7 +160,7 @@ namespace Project
var bunkidata = new arDev.Narumi.BunkiData();
//speed;
if (AutSpeed == 1) bunkidata.Speed = arDev.Narumi.eMoveSpd.Middle;
if (AutSpeed == 1) bunkidata.Speed = arDev.Narumi.eMoveSpd.Mid;
else if (AutSpeed == 2) bunkidata.Speed = arDev.Narumi.eMoveSpd.High;
else bunkidata.Speed = arDev.Narumi.eMoveSpd.Low;

View File

@@ -291,7 +291,7 @@ namespace Project.ViewForm
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;
else p.Speed = arDev.Narumi.eMoveSpd.Mid;
if (radpbs1.Checked) p.PBSSensor = 2;
else if (radpbs2.Checked) p.PBSSensor = 2;
@@ -307,7 +307,7 @@ namespace Project.ViewForm
private void btChargeOn_Click(object sender, EventArgs e)
{
if (PUB.AGV.signal.mark_sensor == false)
if (VAR.BOOL[eVarBool.MARK_SENSOR] == false)
{
UTIL.MsgE("마크센서가 확인되지 않아 충전을 시작할 수 없습니다");
return;

View File

@@ -44,22 +44,6 @@ namespace Project
arFrame.Control.ColorListItem colorListItem9 = new arFrame.Control.ColorListItem();
arFrame.Control.ColorListItem colorListItem10 = new arFrame.Control.ColorListItem();
arFrame.Control.ColorListItem colorListItem11 = new arFrame.Control.ColorListItem();
Project.CtlPos.item item1 = new Project.CtlPos.item();
Project.CtlPos.item item2 = new Project.CtlPos.item();
Project.CtlPos.item item3 = new Project.CtlPos.item();
Project.CtlPos.item item4 = new Project.CtlPos.item();
Project.CtlPos.item item5 = new Project.CtlPos.item();
Project.CtlPos.item item6 = new Project.CtlPos.item();
Project.CtlPos.item item7 = new Project.CtlPos.item();
Project.CtlPos.item item8 = new Project.CtlPos.item();
Project.CtlPos.item item9 = new Project.CtlPos.item();
Project.CtlPos.item item10 = new Project.CtlPos.item();
Project.CtlPos.item item11 = new Project.CtlPos.item();
Project.CtlPos.item item12 = new Project.CtlPos.item();
Project.CtlPos.item item13 = new Project.CtlPos.item();
Project.CtlPos.item item14 = new Project.CtlPos.item();
Project.CtlPos.item item15 = new Project.CtlPos.item();
Project.CtlPos.item item16 = new Project.CtlPos.item();
this.tmDisplay = new System.Windows.Forms.Timer(this.components);
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.MenuLift = new System.Windows.Forms.Button();
@@ -125,7 +109,6 @@ namespace Project
this.lbIDLE = new arCtl.arLabel();
this.lbStStep = new arCtl.arLabel();
this.panTopMenu = new System.Windows.Forms.Panel();
this.lbBat = new AGVControl.BatteryLevelGauge();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.cmDebug = new System.Windows.Forms.ContextMenuStrip(this.components);
this.mapFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -138,12 +121,12 @@ namespace Project
this.debugtestToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.pandBottomDIO = new System.Windows.Forms.Panel();
this.panel9 = new System.Windows.Forms.Panel();
this.IOState = new arFrame.Control.GridView();
this.SSInfo = new arFrame.Control.GridView();
this.panDlg = new System.Windows.Forms.Panel();
this.arPanel2 = new arCtl.arPanel();
this.arPanel1 = new arCtl.arPanel();
this.ctlPos1 = new Project.CtlPos();
this.IOState = new arFrame.Control.GridView();
this.SSInfo = new arFrame.Control.GridView();
this.lbBat = new AGVControl.BatteryLevelGauge();
this.panRight.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout();
this.panel4.SuspendLayout();
@@ -299,7 +282,7 @@ namespace Project
this.btAutoRun.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.btAutoRun.GradientRepeatBG = false;
this.btAutoRun.isButton = true;
this.btAutoRun.Location = new System.Drawing.Point(0, 300);
this.btAutoRun.Location = new System.Drawing.Point(0, 360);
this.btAutoRun.Margin = new System.Windows.Forms.Padding(0);
this.btAutoRun.MouseDownColor = System.Drawing.Color.Empty;
this.btAutoRun.MouseOverColor = System.Drawing.Color.Empty;
@@ -320,7 +303,7 @@ namespace Project
this.btAutoRun.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.btAutoRun.SignColor = System.Drawing.Color.Yellow;
this.btAutoRun.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.btAutoRun.Size = new System.Drawing.Size(259, 152);
this.btAutoRun.Size = new System.Drawing.Size(259, 180);
this.btAutoRun.TabIndex = 22;
this.btAutoRun.Text = "수동";
this.btAutoRun.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
@@ -367,7 +350,7 @@ namespace Project
this.btChargeA.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.btChargeA.SignColor = System.Drawing.Color.Yellow;
this.btChargeA.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.btChargeA.Size = new System.Drawing.Size(143, 150);
this.btChargeA.Size = new System.Drawing.Size(143, 180);
this.btChargeA.TabIndex = 141;
this.btChargeA.Text = "자동충전";
this.btChargeA.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
@@ -393,7 +376,7 @@ namespace Project
this.lbTime.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.lbTime.GradientRepeatBG = false;
this.lbTime.isButton = false;
this.lbTime.Location = new System.Drawing.Point(5, 593);
this.lbTime.Location = new System.Drawing.Point(5, 681);
this.lbTime.Margin = new System.Windows.Forms.Padding(0);
this.lbTime.MouseDownColor = System.Drawing.Color.Yellow;
this.lbTime.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
@@ -979,10 +962,10 @@ namespace Project
this.panRight.Controls.Add(this.panel3);
this.panRight.Controls.Add(this.panel1);
this.panRight.Dock = System.Windows.Forms.DockStyle.Right;
this.panRight.Location = new System.Drawing.Point(1015, 146);
this.panRight.Location = new System.Drawing.Point(1015, 58);
this.panRight.Name = "panRight";
this.panRight.Padding = new System.Windows.Forms.Padding(5, 0, 0, 0);
this.panRight.Size = new System.Drawing.Size(264, 618);
this.panRight.Size = new System.Drawing.Size(264, 706);
this.panRight.TabIndex = 131;
//
// tableLayoutPanel1
@@ -1001,7 +984,7 @@ namespace Project
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(259, 452);
this.tableLayoutPanel1.Size = new System.Drawing.Size(259, 540);
this.tableLayoutPanel1.TabIndex = 0;
//
// btHome
@@ -1043,7 +1026,7 @@ namespace Project
this.btHome.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.btHome.SignColor = System.Drawing.Color.Yellow;
this.btHome.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.btHome.Size = new System.Drawing.Size(116, 300);
this.btHome.Size = new System.Drawing.Size(116, 360);
this.btHome.TabIndex = 141;
this.btHome.Text = "홈";
this.btHome.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
@@ -1068,7 +1051,7 @@ namespace Project
this.btChargeM.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.btChargeM.GradientRepeatBG = false;
this.btChargeM.isButton = true;
this.btChargeM.Location = new System.Drawing.Point(116, 150);
this.btChargeM.Location = new System.Drawing.Point(116, 180);
this.btChargeM.Margin = new System.Windows.Forms.Padding(0);
this.btChargeM.MouseDownColor = System.Drawing.Color.Yellow;
this.btChargeM.MouseOverColor = System.Drawing.Color.Lime;
@@ -1089,7 +1072,7 @@ namespace Project
this.btChargeM.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.btChargeM.SignColor = System.Drawing.Color.Yellow;
this.btChargeM.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.btChargeM.Size = new System.Drawing.Size(143, 150);
this.btChargeM.Size = new System.Drawing.Size(143, 180);
this.btChargeM.TabIndex = 141;
this.btChargeM.Text = "수동충전";
this.btChargeM.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
@@ -1130,13 +1113,13 @@ namespace Project
this.lbCntQA.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lbCntQA.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lbCntQA.Dock = System.Windows.Forms.DockStyle.Left;
this.lbCntQA.Font = new System.Drawing.Font("Consolas", 25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbCntQA.Font = new System.Drawing.Font("Consolas", 20F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbCntQA.ForeColor = System.Drawing.Color.Gray;
this.lbCntQA.GradientEnable = true;
this.lbCntQA.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lbCntQA.GradientRepeatBG = false;
this.lbCntQA.isButton = false;
this.lbCntQA.Location = new System.Drawing.Point(161, 0);
this.lbCntQA.Location = new System.Drawing.Point(180, 0);
this.lbCntQA.Margin = new System.Windows.Forms.Padding(0);
this.lbCntQA.MouseDownColor = System.Drawing.Color.Yellow;
this.lbCntQA.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
@@ -1157,7 +1140,7 @@ namespace Project
this.lbCntQA.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lbCntQA.SignColor = System.Drawing.Color.Yellow;
this.lbCntQA.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lbCntQA.Size = new System.Drawing.Size(93, 49);
this.lbCntQA.Size = new System.Drawing.Size(78, 49);
this.lbCntQA.TabIndex = 6;
this.lbCntQA.Text = "0000";
this.lbCntQA.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
@@ -1175,13 +1158,13 @@ namespace Project
this.arLabel4.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.arLabel4.Cursor = System.Windows.Forms.Cursors.Arrow;
this.arLabel4.Dock = System.Windows.Forms.DockStyle.Left;
this.arLabel4.Font = new System.Drawing.Font("Consolas", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.arLabel4.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
this.arLabel4.Font = new System.Drawing.Font("Bahnschrift Condensed", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.arLabel4.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
this.arLabel4.GradientEnable = true;
this.arLabel4.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.arLabel4.GradientRepeatBG = false;
this.arLabel4.isButton = false;
this.arLabel4.Location = new System.Drawing.Point(127, 0);
this.arLabel4.Location = new System.Drawing.Point(129, 0);
this.arLabel4.Margin = new System.Windows.Forms.Padding(0);
this.arLabel4.MouseDownColor = System.Drawing.Color.Yellow;
this.arLabel4.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
@@ -1201,10 +1184,10 @@ namespace Project
this.arLabel4.Sign = "";
this.arLabel4.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.arLabel4.SignColor = System.Drawing.Color.Yellow;
this.arLabel4.SignFont = new System.Drawing.Font("Consolas", 15F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))));
this.arLabel4.Size = new System.Drawing.Size(34, 49);
this.arLabel4.SignFont = new System.Drawing.Font("Consolas", 12F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))));
this.arLabel4.Size = new System.Drawing.Size(51, 49);
this.arLabel4.TabIndex = 5;
this.arLabel4.Text = "QA";
this.arLabel4.Text = "CHARGER";
this.arLabel4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.arLabel4.TextShadow = true;
this.arLabel4.TextVisible = true;
@@ -1220,13 +1203,13 @@ namespace Project
this.lbCntQC.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lbCntQC.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lbCntQC.Dock = System.Windows.Forms.DockStyle.Left;
this.lbCntQC.Font = new System.Drawing.Font("Consolas", 25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbCntQC.Font = new System.Drawing.Font("Consolas", 20F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbCntQC.ForeColor = System.Drawing.Color.Gray;
this.lbCntQC.GradientEnable = true;
this.lbCntQC.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lbCntQC.GradientRepeatBG = false;
this.lbCntQC.isButton = false;
this.lbCntQC.Location = new System.Drawing.Point(34, 0);
this.lbCntQC.Location = new System.Drawing.Point(51, 0);
this.lbCntQC.Margin = new System.Windows.Forms.Padding(0);
this.lbCntQC.MouseDownColor = System.Drawing.Color.Yellow;
this.lbCntQC.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
@@ -1247,7 +1230,7 @@ namespace Project
this.lbCntQC.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lbCntQC.SignColor = System.Drawing.Color.Yellow;
this.lbCntQC.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lbCntQC.Size = new System.Drawing.Size(93, 49);
this.lbCntQC.Size = new System.Drawing.Size(78, 49);
this.lbCntQC.TabIndex = 4;
this.lbCntQC.Text = "0000";
this.lbCntQC.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
@@ -1265,7 +1248,7 @@ namespace Project
this.arLabel9.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.arLabel9.Cursor = System.Windows.Forms.Cursors.Arrow;
this.arLabel9.Dock = System.Windows.Forms.DockStyle.Left;
this.arLabel9.Font = new System.Drawing.Font("Consolas", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.arLabel9.Font = new System.Drawing.Font("Bahnschrift Condensed", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.arLabel9.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
this.arLabel9.GradientEnable = true;
this.arLabel9.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
@@ -1291,10 +1274,10 @@ namespace Project
this.arLabel9.Sign = "";
this.arLabel9.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.arLabel9.SignColor = System.Drawing.Color.Yellow;
this.arLabel9.SignFont = new System.Drawing.Font("Consolas", 15F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))));
this.arLabel9.Size = new System.Drawing.Size(34, 49);
this.arLabel9.SignFont = new System.Drawing.Font("Consolas", 12F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))));
this.arLabel9.Size = new System.Drawing.Size(51, 49);
this.arLabel9.TabIndex = 4;
this.arLabel9.Text = "QC";
this.arLabel9.Text = "UNLOADER";
this.arLabel9.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.arLabel9.TextShadow = true;
this.arLabel9.TextVisible = true;
@@ -1323,13 +1306,13 @@ namespace Project
this.lbCntDN.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lbCntDN.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lbCntDN.Dock = System.Windows.Forms.DockStyle.Left;
this.lbCntDN.Font = new System.Drawing.Font("Consolas", 25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbCntDN.Font = new System.Drawing.Font("Consolas", 20F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbCntDN.ForeColor = System.Drawing.Color.Gray;
this.lbCntDN.GradientEnable = true;
this.lbCntDN.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lbCntDN.GradientRepeatBG = false;
this.lbCntDN.isButton = false;
this.lbCntDN.Location = new System.Drawing.Point(161, 0);
this.lbCntDN.Location = new System.Drawing.Point(180, 0);
this.lbCntDN.Margin = new System.Windows.Forms.Padding(0);
this.lbCntDN.MouseDownColor = System.Drawing.Color.Yellow;
this.lbCntDN.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
@@ -1350,7 +1333,7 @@ namespace Project
this.lbCntDN.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lbCntDN.SignColor = System.Drawing.Color.Yellow;
this.lbCntDN.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lbCntDN.Size = new System.Drawing.Size(93, 49);
this.lbCntDN.Size = new System.Drawing.Size(78, 49);
this.lbCntDN.TabIndex = 4;
this.lbCntDN.Text = "0000";
this.lbCntDN.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
@@ -1369,13 +1352,13 @@ namespace Project
this.arLabel7.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.arLabel7.Cursor = System.Windows.Forms.Cursors.Arrow;
this.arLabel7.Dock = System.Windows.Forms.DockStyle.Left;
this.arLabel7.Font = new System.Drawing.Font("Consolas", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.arLabel7.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
this.arLabel7.Font = new System.Drawing.Font("Bahnschrift Condensed", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.arLabel7.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(192)))), ((int)(((byte)(255)))));
this.arLabel7.GradientEnable = true;
this.arLabel7.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.arLabel7.GradientRepeatBG = false;
this.arLabel7.isButton = false;
this.arLabel7.Location = new System.Drawing.Point(127, 0);
this.arLabel7.Location = new System.Drawing.Point(129, 0);
this.arLabel7.Margin = new System.Windows.Forms.Padding(0);
this.arLabel7.MouseDownColor = System.Drawing.Color.Yellow;
this.arLabel7.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
@@ -1395,10 +1378,10 @@ namespace Project
this.arLabel7.Sign = "";
this.arLabel7.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.arLabel7.SignColor = System.Drawing.Color.Yellow;
this.arLabel7.SignFont = new System.Drawing.Font("Consolas", 15F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))));
this.arLabel7.Size = new System.Drawing.Size(34, 49);
this.arLabel7.SignFont = new System.Drawing.Font("Consolas", 12F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))));
this.arLabel7.Size = new System.Drawing.Size(51, 49);
this.arLabel7.TabIndex = 4;
this.arLabel7.Text = "DN";
this.arLabel7.Text = "CLEANNER";
this.arLabel7.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.arLabel7.TextShadow = true;
this.arLabel7.TextVisible = true;
@@ -1414,13 +1397,13 @@ namespace Project
this.lbCNtUP.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lbCNtUP.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lbCNtUP.Dock = System.Windows.Forms.DockStyle.Left;
this.lbCNtUP.Font = new System.Drawing.Font("Consolas", 25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbCNtUP.Font = new System.Drawing.Font("Consolas", 20F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbCNtUP.ForeColor = System.Drawing.Color.Gray;
this.lbCNtUP.GradientEnable = true;
this.lbCNtUP.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lbCNtUP.GradientRepeatBG = false;
this.lbCNtUP.isButton = false;
this.lbCNtUP.Location = new System.Drawing.Point(34, 0);
this.lbCNtUP.Location = new System.Drawing.Point(51, 0);
this.lbCNtUP.Margin = new System.Windows.Forms.Padding(0);
this.lbCNtUP.MouseDownColor = System.Drawing.Color.Yellow;
this.lbCNtUP.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
@@ -1441,7 +1424,7 @@ namespace Project
this.lbCNtUP.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lbCNtUP.SignColor = System.Drawing.Color.Yellow;
this.lbCNtUP.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lbCNtUP.Size = new System.Drawing.Size(93, 49);
this.lbCNtUP.Size = new System.Drawing.Size(78, 49);
this.lbCNtUP.TabIndex = 4;
this.lbCNtUP.Text = "0000";
this.lbCNtUP.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
@@ -1460,7 +1443,7 @@ namespace Project
this.arLabel8.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.arLabel8.Cursor = System.Windows.Forms.Cursors.Arrow;
this.arLabel8.Dock = System.Windows.Forms.DockStyle.Left;
this.arLabel8.Font = new System.Drawing.Font("Consolas", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.arLabel8.Font = new System.Drawing.Font("Bahnschrift Condensed", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.arLabel8.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(192)))), ((int)(((byte)(255)))));
this.arLabel8.GradientEnable = true;
this.arLabel8.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
@@ -1486,10 +1469,10 @@ namespace Project
this.arLabel8.Sign = "";
this.arLabel8.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.arLabel8.SignColor = System.Drawing.Color.Yellow;
this.arLabel8.SignFont = new System.Drawing.Font("Consolas", 15F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))));
this.arLabel8.Size = new System.Drawing.Size(34, 49);
this.arLabel8.SignFont = new System.Drawing.Font("Consolas", 12F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))));
this.arLabel8.Size = new System.Drawing.Size(51, 49);
this.arLabel8.TabIndex = 4;
this.arLabel8.Text = "UP";
this.arLabel8.Text = "LOADER";
this.arLabel8.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.arLabel8.TextShadow = true;
this.arLabel8.TextVisible = true;
@@ -1498,7 +1481,7 @@ namespace Project
//
this.panel5.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(18)))), ((int)(((byte)(18)))), ((int)(((byte)(18)))));
this.panel5.Dock = System.Windows.Forms.DockStyle.Bottom;
this.panel5.Location = new System.Drawing.Point(5, 588);
this.panel5.Location = new System.Drawing.Point(5, 676);
this.panel5.Name = "panel5";
this.panel5.Size = new System.Drawing.Size(259, 5);
this.panel5.TabIndex = 142;
@@ -1639,26 +1622,6 @@ namespace Project
this.panTopMenu.Size = new System.Drawing.Size(1278, 50);
this.panTopMenu.TabIndex = 134;
//
// lbBat
//
this.lbBat.BorderColor = System.Drawing.Color.DimGray;
this.lbBat.CurA = 0F;
this.lbBat.Dock = System.Windows.Forms.DockStyle.Right;
this.lbBat.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbBat.ForeColor = System.Drawing.Color.Gray;
this.lbBat.IsOpen = true;
this.lbBat.Location = new System.Drawing.Point(830, 0);
this.lbBat.MaxA = 0F;
this.lbBat.Name = "lbBat";
this.lbBat.Padding = new System.Windows.Forms.Padding(0, 12, 0, 12);
this.lbBat.sign = "%";
this.lbBat.Size = new System.Drawing.Size(48, 50);
this.lbBat.TabIndex = 23;
this.lbBat.Text = "12";
this.lbBat.VLevel = 50F;
this.lbBat.Volt = 0F;
this.lbBat.Click += new System.EventHandler(this.lbBat_Click);
//
// pictureBox1
//
this.pictureBox1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
@@ -1769,6 +1732,70 @@ namespace Project
this.panel9.Size = new System.Drawing.Size(1278, 35);
this.panel9.TabIndex = 0;
//
// panDlg
//
this.panDlg.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(64)))));
this.panDlg.Dock = System.Windows.Forms.DockStyle.Fill;
this.panDlg.Location = new System.Drawing.Point(1, 58);
this.panDlg.Margin = new System.Windows.Forms.Padding(0);
this.panDlg.Name = "panDlg";
this.panDlg.Size = new System.Drawing.Size(1014, 706);
this.panDlg.TabIndex = 146;
//
// arPanel2
//
this.arPanel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(5)))), ((int)(((byte)(5)))), ((int)(((byte)(5)))));
this.arPanel2.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.arPanel2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.arPanel2.BorderSize = new System.Windows.Forms.Padding(0, 0, 0, 5);
this.arPanel2.Dock = System.Windows.Forms.DockStyle.Top;
this.arPanel2.Font = new System.Drawing.Font("Consolas", 10F, System.Drawing.FontStyle.Italic);
this.arPanel2.ForeColor = System.Drawing.Color.Khaki;
this.arPanel2.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.arPanel2.GradientRepeatBG = false;
this.arPanel2.Location = new System.Drawing.Point(1, 55);
this.arPanel2.Name = "arPanel2";
this.arPanel2.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.arPanel2.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.arPanel2.ProgressMax = 100F;
this.arPanel2.ProgressMin = 0F;
this.arPanel2.ProgressPadding = new System.Windows.Forms.Padding(0);
this.arPanel2.ProgressValue = 0F;
this.arPanel2.ShadowColor = System.Drawing.Color.Black;
this.arPanel2.ShowBorder = true;
this.arPanel2.Size = new System.Drawing.Size(1278, 3);
this.arPanel2.TabIndex = 145;
this.arPanel2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
this.arPanel2.TextShadow = false;
this.arPanel2.UseProgressBar = false;
//
// arPanel1
//
this.arPanel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(5)))), ((int)(((byte)(5)))), ((int)(((byte)(5)))));
this.arPanel1.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.arPanel1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.arPanel1.BorderSize = new System.Windows.Forms.Padding(0, 0, 0, 5);
this.arPanel1.Dock = System.Windows.Forms.DockStyle.Top;
this.arPanel1.Font = new System.Drawing.Font("Consolas", 10F, System.Drawing.FontStyle.Italic);
this.arPanel1.ForeColor = System.Drawing.Color.Khaki;
this.arPanel1.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.arPanel1.GradientRepeatBG = false;
this.arPanel1.Location = new System.Drawing.Point(1, 51);
this.arPanel1.Name = "arPanel1";
this.arPanel1.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.arPanel1.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.arPanel1.ProgressMax = 100F;
this.arPanel1.ProgressMin = 0F;
this.arPanel1.ProgressPadding = new System.Windows.Forms.Padding(0);
this.arPanel1.ProgressValue = 0F;
this.arPanel1.ShadowColor = System.Drawing.Color.Black;
this.arPanel1.ShowBorder = true;
this.arPanel1.Size = new System.Drawing.Size(1278, 4);
this.arPanel1.TabIndex = 135;
this.arPanel1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
this.arPanel1.TextShadow = false;
this.arPanel1.UseProgressBar = false;
//
// IOState
//
this.IOState.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50)))));
@@ -1921,280 +1948,25 @@ namespace Project
((ushort)(0))};
this.SSInfo.Click += new System.EventHandler(this.SSInfo_Click);
//
// panDlg
// lbBat
//
this.panDlg.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(64)))));
this.panDlg.Dock = System.Windows.Forms.DockStyle.Fill;
this.panDlg.Location = new System.Drawing.Point(1, 146);
this.panDlg.Margin = new System.Windows.Forms.Padding(0);
this.panDlg.Name = "panDlg";
this.panDlg.Size = new System.Drawing.Size(1014, 618);
this.panDlg.TabIndex = 146;
//
// arPanel2
//
this.arPanel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(5)))), ((int)(((byte)(5)))), ((int)(((byte)(5)))));
this.arPanel2.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.arPanel2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.arPanel2.BorderSize = new System.Windows.Forms.Padding(0, 0, 0, 5);
this.arPanel2.Dock = System.Windows.Forms.DockStyle.Top;
this.arPanel2.Font = new System.Drawing.Font("Consolas", 10F, System.Drawing.FontStyle.Italic);
this.arPanel2.ForeColor = System.Drawing.Color.Khaki;
this.arPanel2.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.arPanel2.GradientRepeatBG = false;
this.arPanel2.Location = new System.Drawing.Point(1, 143);
this.arPanel2.Name = "arPanel2";
this.arPanel2.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.arPanel2.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.arPanel2.ProgressMax = 100F;
this.arPanel2.ProgressMin = 0F;
this.arPanel2.ProgressPadding = new System.Windows.Forms.Padding(0);
this.arPanel2.ProgressValue = 0F;
this.arPanel2.ShadowColor = System.Drawing.Color.Black;
this.arPanel2.ShowBorder = true;
this.arPanel2.Size = new System.Drawing.Size(1278, 3);
this.arPanel2.TabIndex = 145;
this.arPanel2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
this.arPanel2.TextShadow = false;
this.arPanel2.UseProgressBar = false;
//
// arPanel1
//
this.arPanel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(5)))), ((int)(((byte)(5)))), ((int)(((byte)(5)))));
this.arPanel1.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.arPanel1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.arPanel1.BorderSize = new System.Windows.Forms.Padding(0, 0, 0, 5);
this.arPanel1.Dock = System.Windows.Forms.DockStyle.Top;
this.arPanel1.Font = new System.Drawing.Font("Consolas", 10F, System.Drawing.FontStyle.Italic);
this.arPanel1.ForeColor = System.Drawing.Color.Khaki;
this.arPanel1.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.arPanel1.GradientRepeatBG = false;
this.arPanel1.Location = new System.Drawing.Point(1, 51);
this.arPanel1.Name = "arPanel1";
this.arPanel1.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.arPanel1.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.arPanel1.ProgressMax = 100F;
this.arPanel1.ProgressMin = 0F;
this.arPanel1.ProgressPadding = new System.Windows.Forms.Padding(0);
this.arPanel1.ProgressValue = 0F;
this.arPanel1.ShadowColor = System.Drawing.Color.Black;
this.arPanel1.ShowBorder = true;
this.arPanel1.Size = new System.Drawing.Size(1278, 4);
this.arPanel1.TabIndex = 135;
this.arPanel1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
this.arPanel1.TextShadow = false;
this.arPanel1.UseProgressBar = false;
//
// ctlPos1
//
this.ctlPos1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32)))));
this.ctlPos1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.ctlPos1.Dock = System.Windows.Forms.DockStyle.Top;
this.ctlPos1.Font = new System.Drawing.Font("맑은 고딕", 30F, System.Drawing.FontStyle.Bold);
this.ctlPos1.ForeColor = System.Drawing.Color.White;
this.ctlPos1.ItemGap = 5;
item1.Active = true;
item1.Direction = '1';
item1.Enable_Direction = true;
item1.Focus = false;
item1.fullrect = new System.Drawing.Rectangle(8, 8, 10, 75);
item1.ItemType = Project.CtlPos.itemtype.NLimit;
item1.leftrect = new System.Drawing.Rectangle(0, 0, 0, 0);
item1.Position = Project.ePosition.NOT;
item1.rightrect = new System.Drawing.Rectangle(0, 0, 0, 0);
item1.Target = false;
item1.Title = "N";
item2.Active = false;
item2.Direction = '1';
item2.Enable_Direction = true;
item2.Focus = false;
item2.fullrect = new System.Drawing.Rectangle(23, 8, 138, 58);
item2.ItemType = Project.CtlPos.itemtype.Item;
item2.leftrect = new System.Drawing.Rectangle(23, 70, 67, 13);
item2.Position = Project.ePosition.QA;
item2.rightrect = new System.Drawing.Rectangle(94, 70, 67, 13);
item2.Target = false;
item2.Title = "QC";
item3.Active = false;
item3.Direction = '0';
item3.Enable_Direction = true;
item3.Focus = false;
item3.fullrect = new System.Drawing.Rectangle(166, 8, 10, 75);
item3.ItemType = Project.CtlPos.itemtype.Spacer;
item3.leftrect = new System.Drawing.Rectangle(0, 0, 0, 0);
item3.Position = Project.ePosition.QA_QC;
item3.rightrect = new System.Drawing.Rectangle(0, 0, 0, 0);
item3.Target = false;
item3.Title = null;
item4.Active = false;
item4.Direction = '1';
item4.Enable_Direction = true;
item4.Focus = false;
item4.fullrect = new System.Drawing.Rectangle(181, 8, 138, 58);
item4.ItemType = Project.CtlPos.itemtype.Item;
item4.leftrect = new System.Drawing.Rectangle(181, 70, 67, 13);
item4.Position = Project.ePosition.QC;
item4.rightrect = new System.Drawing.Rectangle(252, 70, 67, 13);
item4.Target = true;
item4.Title = "QA";
item5.Active = true;
item5.Direction = '0';
item5.Enable_Direction = false;
item5.Focus = true;
item5.fullrect = new System.Drawing.Rectangle(324, 8, 138, 75);
item5.ItemType = Project.CtlPos.itemtype.Item;
item5.leftrect = new System.Drawing.Rectangle(0, 0, 0, 0);
item5.Position = Project.ePosition.CHARGE;
item5.rightrect = new System.Drawing.Rectangle(0, 0, 0, 0);
item5.Target = false;
item5.Title = "BAT";
item6.Active = false;
item6.Direction = '0';
item6.Enable_Direction = true;
item6.Focus = false;
item6.fullrect = new System.Drawing.Rectangle(467, 8, 10, 75);
item6.ItemType = Project.CtlPos.itemtype.Spacer;
item6.leftrect = new System.Drawing.Rectangle(0, 0, 0, 0);
item6.Position = Project.ePosition.QC_F1;
item6.rightrect = new System.Drawing.Rectangle(0, 0, 0, 0);
item6.Target = false;
item6.Title = null;
item7.Active = false;
item7.Direction = '2';
item7.Enable_Direction = true;
item7.Focus = false;
item7.fullrect = new System.Drawing.Rectangle(482, 8, 138, 58);
item7.ItemType = Project.CtlPos.itemtype.Item;
item7.leftrect = new System.Drawing.Rectangle(482, 70, 67, 13);
item7.Position = Project.ePosition.F1;
item7.rightrect = new System.Drawing.Rectangle(553, 70, 67, 13);
item7.Target = false;
item7.Title = "#1";
item8.Active = false;
item8.Direction = '0';
item8.Enable_Direction = true;
item8.Focus = false;
item8.fullrect = new System.Drawing.Rectangle(625, 8, 10, 75);
item8.ItemType = Project.CtlPos.itemtype.Spacer;
item8.leftrect = new System.Drawing.Rectangle(0, 0, 0, 0);
item8.Position = Project.ePosition.F1_F2;
item8.rightrect = new System.Drawing.Rectangle(0, 0, 0, 0);
item8.Target = false;
item8.Title = null;
item9.Active = false;
item9.Direction = '0';
item9.Enable_Direction = true;
item9.Focus = false;
item9.fullrect = new System.Drawing.Rectangle(640, 8, 138, 58);
item9.ItemType = Project.CtlPos.itemtype.Item;
item9.leftrect = new System.Drawing.Rectangle(640, 70, 67, 13);
item9.Position = Project.ePosition.F2;
item9.rightrect = new System.Drawing.Rectangle(711, 70, 67, 13);
item9.Target = false;
item9.Title = "#2";
item10.Active = false;
item10.Direction = '0';
item10.Enable_Direction = true;
item10.Focus = false;
item10.fullrect = new System.Drawing.Rectangle(783, 8, 10, 75);
item10.ItemType = Project.CtlPos.itemtype.Spacer;
item10.leftrect = new System.Drawing.Rectangle(0, 0, 0, 0);
item10.Position = Project.ePosition.F2_F3;
item10.rightrect = new System.Drawing.Rectangle(0, 0, 0, 0);
item10.Target = false;
item10.Title = null;
item11.Active = false;
item11.Direction = '1';
item11.Enable_Direction = true;
item11.Focus = false;
item11.fullrect = new System.Drawing.Rectangle(798, 8, 138, 58);
item11.ItemType = Project.CtlPos.itemtype.Item;
item11.leftrect = new System.Drawing.Rectangle(798, 70, 67, 13);
item11.Position = Project.ePosition.F3;
item11.rightrect = new System.Drawing.Rectangle(869, 70, 67, 13);
item11.Target = false;
item11.Title = "#3";
item12.Active = false;
item12.Direction = '0';
item12.Enable_Direction = true;
item12.Focus = false;
item12.fullrect = new System.Drawing.Rectangle(941, 8, 10, 75);
item12.ItemType = Project.CtlPos.itemtype.Spacer;
item12.leftrect = new System.Drawing.Rectangle(0, 0, 0, 0);
item12.Position = Project.ePosition.F3_F4;
item12.rightrect = new System.Drawing.Rectangle(0, 0, 0, 0);
item12.Target = false;
item12.Title = null;
item13.Active = false;
item13.Direction = '2';
item13.Enable_Direction = true;
item13.Focus = false;
item13.fullrect = new System.Drawing.Rectangle(956, 8, 138, 58);
item13.ItemType = Project.CtlPos.itemtype.Item;
item13.leftrect = new System.Drawing.Rectangle(956, 70, 67, 13);
item13.Position = Project.ePosition.F4;
item13.rightrect = new System.Drawing.Rectangle(1027, 70, 67, 13);
item13.Target = false;
item13.Title = "#4";
item14.Active = false;
item14.Direction = '0';
item14.Enable_Direction = true;
item14.Focus = false;
item14.fullrect = new System.Drawing.Rectangle(1099, 8, 10, 75);
item14.ItemType = Project.CtlPos.itemtype.Spacer;
item14.leftrect = new System.Drawing.Rectangle(0, 0, 0, 0);
item14.Position = Project.ePosition.F4_F5;
item14.rightrect = new System.Drawing.Rectangle(0, 0, 0, 0);
item14.Target = false;
item14.Title = null;
item15.Active = false;
item15.Direction = '2';
item15.Enable_Direction = true;
item15.Focus = false;
item15.fullrect = new System.Drawing.Rectangle(1114, 8, 138, 58);
item15.ItemType = Project.CtlPos.itemtype.Item;
item15.leftrect = new System.Drawing.Rectangle(1114, 70, 67, 13);
item15.Position = Project.ePosition.F5;
item15.rightrect = new System.Drawing.Rectangle(1185, 70, 67, 13);
item15.Target = false;
item15.Title = "#5";
item16.Active = true;
item16.Direction = '1';
item16.Enable_Direction = true;
item16.Focus = false;
item16.fullrect = new System.Drawing.Rectangle(1257, 8, 10, 75);
item16.ItemType = Project.CtlPos.itemtype.PLimit;
item16.leftrect = new System.Drawing.Rectangle(0, 0, 0, 0);
item16.Position = Project.ePosition.POT;
item16.rightrect = new System.Drawing.Rectangle(0, 0, 0, 0);
item16.Target = false;
item16.Title = "P";
this.ctlPos1.Items = new Project.CtlPos.item[] {
item1,
item2,
item3,
item4,
item5,
item6,
item7,
item8,
item9,
item10,
item11,
item12,
item13,
item14,
item15,
item16};
this.ctlPos1.Location = new System.Drawing.Point(1, 55);
this.ctlPos1.MinimumSize = new System.Drawing.Size(100, 30);
this.ctlPos1.msg = null;
this.ctlPos1.Name = "ctlPos1";
this.ctlPos1.Padding = new System.Windows.Forms.Padding(8);
this.ctlPos1.Size = new System.Drawing.Size(1278, 88);
this.ctlPos1.TabIndex = 0;
this.ctlPos1.Text = "ctlPos1";
this.ctlPos1.Visible = false;
this.lbBat.BorderColor = System.Drawing.Color.DimGray;
this.lbBat.CurA = 0F;
this.lbBat.Dock = System.Windows.Forms.DockStyle.Right;
this.lbBat.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbBat.ForeColor = System.Drawing.Color.Gray;
this.lbBat.IsOpen = true;
this.lbBat.Location = new System.Drawing.Point(830, 0);
this.lbBat.MaxA = 0F;
this.lbBat.Name = "lbBat";
this.lbBat.Padding = new System.Windows.Forms.Padding(0, 12, 0, 12);
this.lbBat.sign = "%";
this.lbBat.Size = new System.Drawing.Size(48, 50);
this.lbBat.TabIndex = 23;
this.lbBat.Text = "12";
this.lbBat.VLevel = 50F;
this.lbBat.Volt = 0F;
this.lbBat.Click += new System.EventHandler(this.lbBat_Click);
//
// fMain
//
@@ -2205,7 +1977,6 @@ namespace Project
this.Controls.Add(this.panRight);
this.Controls.Add(this.arPanel2);
this.Controls.Add(this.pandBottomDIO);
this.Controls.Add(this.ctlPos1);
this.Controls.Add(this.arPanel1);
this.Controls.Add(this.panTopMenu);
this.DoubleBuffered = true;
@@ -2297,7 +2068,6 @@ namespace Project
private System.Windows.Forms.Button MenuAuto;
private System.Windows.Forms.Panel panDlg;
private System.Windows.Forms.Button MenuLog;
private CtlPos ctlPos1;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private arCtl.arLabel btHome;
private arCtl.arLabel btTopMenu_Volume;

View File

@@ -66,7 +66,6 @@ namespace Project
this.panTopMenu.MouseDown += LbTitle_MouseDown;
this.panTopMenu.DoubleClick += LbTitle_DoubleClick;
this.ctlPos1.ItemClick += CtlPos1_ItemClick;
this.MouseMove += (s1, e1) => { if (DateTime.Now > PUB.LastInputTime) PUB.LastInputTime = DateTime.Now; };
this.FormClosing += __Closing;
@@ -101,19 +100,6 @@ namespace Project
}
}
/// <summary>
/// 상단 위치 표시기의 대상 위치값을 표시 합니다
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Display_Position_TargetPosSet(object sender, EventArgs e)
{
//대상위치가 설정되었다x
this.ctlPos1.SetTargetPosition(PUB.Result.TargetPos);
this.ctlPos1.Invalidate();
}
private void __Closing(object sender, FormClosingEventArgs e)
{
// 장치 관리 태스크는 _STEP_CLOSING_START에서 종료됨
@@ -176,50 +162,31 @@ namespace Project
private void __Load(object sender, EventArgs e)
{
this.Text = Application.ProductName + " ver " + Application.ProductVersion;
//this.lbTitle.Text = this.Text;
PUB.init(); //public initialize
if (PUB.setting.FullScreen) this.WindowState = FormWindowState.Maximized;
// PUB.log.RaiseMsg += log_RaiseMsg;
PUB.init();
if (PUB.setting.FullScreen)
{
this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;
}
this.Show();
PUB.Result.TargetPosSet += Display_Position_TargetPosSet;
this.ctlPos1.ClearData();
this.ctlPos1.Invalidate();
//lbDM1.Text = "";
//sbBatteryLv.Text = "";
btHome.Text = "홈";
btChargeA.Text = "자동충전";
VAR.STR[eVarString.SWVersion] = Application.ProductVersion;
Application.DoEvents();
//setting dio events
VAR.STR[eVarString.SWVersion] = Application.ProductVersion;
//SETTING H/W
this.IOState.ItemClick += gridView2_ItemClick;
//PUB.flag.ValueChanged += Flag_ValueChagned;
VAR.BOOL.PropertyChanged += BOOL_PropertyChanged;
/////모터용 pLC
//PUB.PLC = new arDev.FakePLC();
//PUB.PLC.ValueChanged += PLC_DioChanged;
//PUB.PLC.FlagChanged += PLC_FlagChanged;
//PUB.PLC.Message += PLC_Message;
//지그비통신
PUB.XBE = new Device.Xbee();
PUB.XBE.MessageReceived += XBE_MessageReceived;
PUB.XBE.ProtocReceived += XBE_ProtocReceived;
//HWState.setTitle(1, 3, Pub.setting.Port_Xbee);
//HWState.setTitle(1, 0, Pub.setting.Address_RFID);
//AGV
PUB.AGV = new arDev.Narumi();
PUB.AGV.Message += AGV_Message;
PUB.AGV.DataReceive += AGV_DataReceive;
//배터리관리시스템
PUB.BMS = new arDev.BMS();
PUB.BMS.BMSDataReceive += Bms_BMSDataReceive;
@@ -266,19 +233,11 @@ namespace Project
}
PUB.sm.StepChanged += sm_StepChanged;
PUB.log.Add("StateMachine", "StepChanged 이벤트 등록 완료");
PUB.sm.Message += sm_Message;
PUB.log.Add("StateMachine", "Message 이벤트 등록 완료");
PUB.sm.Running += sm_Running;
PUB.log.Add("StateMachine", "Running 이벤트 등록 완료");
PUB.sm.SPS += sm_SPS;
PUB.log.Add("StateMachine", "SPS 이벤트 등록 완료");
PUB.sm.Start();
PUB.log.Add("StateMachine", $"Start() 호출 완료 - IsThreadRun:{PUB.sm.IsThreadRun}");
PUB.log.Add("StateMachine", "SM 이벤트 등록 완료");
// 스레드 시작 대기 (최대 3초)
for (int i = 0; i < 30; i++)
@@ -307,10 +266,8 @@ namespace Project
PUB.log.Add("Display", "Display Timer 시작 완료");
this.btDebug.Visible = System.Diagnostics.Debugger.IsAttached || PUB.setting.UseDebugMode;
PUB.log.Add("Program Start");
//수량표시
PUB.counter.PropertyChanged += (s1, e1) => Update_Count();
Update_Count();
@@ -322,11 +279,8 @@ namespace Project
MenuLog.PerformClick();
PUB.AddEEDB("프로그램 시작");
}
#region "Mouse Form Move"
private Boolean fMove = false;
@@ -417,12 +371,12 @@ namespace Project
void func_sw_start(bool Prompt = false)
{
if (PUB.sm.Step < eSMStep.IDLE)
if (PUB.sm.Step == eSMStep.SYNC)
{
UTIL.MsgE("초기화 중에는 사용할 수 없습니다\n초기화가 완료 된 후 시도하세요");
return;
}
if (VAR.BOOL[eVarBool.FLAG_AUTORUN] == false || PUB.sm.Step != eSMStep.RUN) //자동상태가 아니라면
if (VAR.BOOL[eVarBool.FLAG_AUTORUN] == false) //자동상태가 아니라면
{
PUB.AGV.AGVErrorReset();
if (Prompt)
@@ -433,9 +387,13 @@ namespace Project
//충전상태확인
if (PUB.CheckManualChargeMode() == false) return;
PUB.popup.needClose = true;
PUB.sm.bPause = false;
//PUB.sm.bPause = false;
//PUB.sm.ClearRunStep();
//PUB.sm.SetNewRunStep(ERunStep.READY);
PUB.sm.SetNewStep(eSMStep.RUN);
PUB.Speak(Lang.);
PUB.Speak(Lang., addlog: false);
PUB.log.Add($"자동전환 이전스텝:{PUB.sm.RunStep},IDX:{PUB.sm.RunStepSeq}]");
}
else
{
@@ -489,31 +447,6 @@ namespace Project
}
private void CtlPos1_ItemClick(object sender, CtlPos.ItemClickEventArgs e)
{
if (VAR.BOOL[eVarBool.FLAG_CHARGEONM] == true)
{
UTIL.MsgE("수동 충전 상태이므로 진행 할 수 없습니다");
return;
}
if (VAR.BOOL[eVarBool.EMERGENCY] == true)
{
var dlgE = UTIL.MsgQ("비상정지 상태입니다.\n오류를 먼저 소거하고 실행 할까요?");
if (dlgE == DialogResult.Yes) PUB.AGV.AGVErrorReset();
else return;
}
//위치표시 컨트롤에서 아이템을 클릭했다
var dlg = new Dialog.fJobSelect();
PUB.log.Add("사용자 임의 위치 클릭 : " + e.Item.Title);
switch (e.Item.Position)
{
}
if (dlg != null) dlg.Dispose();
}
private void demoRunToolStripMenuItem_Click(object sender, EventArgs e)
{
PUB.Result.JobEndTime = DateTime.Now;
@@ -577,6 +510,7 @@ namespace Project
}
VAR.BOOL[eVarBool.FLAG_SETUP] = false;// VAR.BOOL[eVarBool.FLAG_SETUP] = false;//VAR.BOOL[eVarBool.FLAG_SETUP] = false;
if (popmsg) PUB.popup.Visible = true;
}
@@ -681,7 +615,10 @@ namespace Project
if (dlg == DialogResult.Yes)
{
PUB.sm.ClearRunStep();
PUB.sm.SetNewRunStep(ERunStep.GOHOME);
//대상노드를 충전기로하고
PUB._virtualAGV.StartNode = null;
PUB._virtualAGV.TargetNode = null;
PUB.sm.SetNewRunStep(ERunStep.GOTO);
PUB.sm.SetNewStep(eSMStep.RUN);
PUB.log.Add("사용자 충전 해제");
}
@@ -720,26 +657,23 @@ namespace Project
}
private void brHome_Click(object sender, EventArgs e)
{
var bCharge = PUB.sm.Step == eSMStep.RUN &&
(PUB.sm.RunStep == ERunStep.GOHOME);
if (PUB.CheckManualChargeMode() == false) return;
if (bCharge == true)
var bHome = PUB.sm.Step == eSMStep.RUN && (PUB.sm.RunStep == ERunStep.GOHOME);
if (bHome == true)
{
var dlg = UTIL.MsgQ("홈(QC) 이동을 취소 할까요?");
var dlg = UTIL.MsgQ("홈 이동을 취소 할까요?");
if (dlg == DialogResult.Yes)
{
PUB.sm.ClearRunStep();
PUB.sm.SetNewStep(eSMStep.IDLE);
PUB.AGV.AGVMoveStop("user home cancle", arDev.Narumi.eStopOpt.Stop);
//PUB.AGV.AddCommand(arDev.Narumi.eAgvCmd.MoveStop);//.Move(Device.PLC.Rundirection.Stop, "사용자 홈 이동 취소");
PUB.log.Add("사용자 홈 이동 취소");
}
}
else
{
var dlg = UTIL.MsgQ("홈(QC) 이동을 실행 할까요?");
var dlg = UTIL.MsgQ("홈 이동을 실행 할까요?");
if (dlg == DialogResult.Yes)
{
PUB.sm.ClearRunStep();
@@ -748,7 +682,6 @@ namespace Project
PUB.log.Add("사용자 홈 이동 실행");
}
}
}
@@ -869,6 +802,7 @@ namespace Project
{
var _mapCanvas = PUB._mapCanvas;
PUB._mapNodes = result.Nodes;
PUB.log.Add($"Set _mapNodes");
// 맵 캔버스에 데이터 설정
_mapCanvas.Nodes = result.Nodes;

View File

@@ -175,7 +175,6 @@
this.tbMCID = new System.Windows.Forms.TextBox();
this.label4 = new System.Windows.Forms.Label();
this.chkDetectManualCharge = new System.Windows.Forms.CheckBox();
this.chkAGVDirBack = new System.Windows.Forms.CheckBox();
this.chkFullScreen = new System.Windows.Forms.CheckBox();
this.nudMusicVol = new System.Windows.Forms.NumericUpDown();
this.label22 = new System.Windows.Forms.Label();
@@ -251,7 +250,7 @@
this.tabControl1.Multiline = true;
this.tabControl1.Name = "tabControl1";
this.tabControl1.SelectedIndex = 0;
this.tabControl1.Size = new System.Drawing.Size(1270, 598);
this.tabControl1.Size = new System.Drawing.Size(1270, 578);
this.tabControl1.TabIndex = 14;
//
// tabPage6
@@ -259,7 +258,7 @@
this.tabPage6.Controls.Add(this.panel1);
this.tabPage6.Location = new System.Drawing.Point(4, 4);
this.tabPage6.Name = "tabPage6";
this.tabPage6.Size = new System.Drawing.Size(1244, 590);
this.tabPage6.Size = new System.Drawing.Size(1244, 570);
this.tabPage6.TabIndex = 6;
this.tabPage6.Text = "일반";
this.tabPage6.UseVisualStyleBackColor = true;
@@ -276,19 +275,21 @@
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tableLayoutPanel1.ColumnCount = 2;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.Controls.Add(this.btMusic, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.btAutoCharge, 1, 0);
this.tableLayoutPanel1.Controls.Add(this.btSpeaker, 0, 0);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 0);
this.tableLayoutPanel1.Controls.Add(this.btMusic, 0, 1);
this.tableLayoutPanel1.Location = new System.Drawing.Point(17, 17);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 2;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(1238, 648);
this.tableLayoutPanel1.Size = new System.Drawing.Size(1227, 550);
this.tableLayoutPanel1.TabIndex = 24;
//
// btMusic
@@ -308,7 +309,7 @@
this.btMusic.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.btMusic.GradientRepeatBG = false;
this.btMusic.isButton = true;
this.btMusic.Location = new System.Drawing.Point(3, 327);
this.btMusic.Location = new System.Drawing.Point(3, 278);
this.btMusic.MouseDownColor = System.Drawing.Color.Yellow;
this.btMusic.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.btMusic.msg = null;
@@ -328,7 +329,7 @@
this.btMusic.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.btMusic.SignColor = System.Drawing.Color.Yellow;
this.btMusic.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.btMusic.Size = new System.Drawing.Size(613, 318);
this.btMusic.Size = new System.Drawing.Size(607, 269);
this.btMusic.TabIndex = 23;
this.btMusic.Tag = "2";
this.btMusic.Text = "배경음악";
@@ -354,7 +355,7 @@
this.btAutoCharge.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.btAutoCharge.GradientRepeatBG = false;
this.btAutoCharge.isButton = true;
this.btAutoCharge.Location = new System.Drawing.Point(622, 3);
this.btAutoCharge.Location = new System.Drawing.Point(616, 3);
this.btAutoCharge.MouseDownColor = System.Drawing.Color.Yellow;
this.btAutoCharge.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.btAutoCharge.msg = null;
@@ -374,7 +375,7 @@
this.btAutoCharge.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.btAutoCharge.SignColor = System.Drawing.Color.Yellow;
this.btAutoCharge.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.btAutoCharge.Size = new System.Drawing.Size(613, 318);
this.btAutoCharge.Size = new System.Drawing.Size(608, 269);
this.btAutoCharge.TabIndex = 20;
this.btAutoCharge.Tag = "1";
this.btAutoCharge.Text = "자동충전";
@@ -420,7 +421,7 @@
this.btSpeaker.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.btSpeaker.SignColor = System.Drawing.Color.Yellow;
this.btSpeaker.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.btSpeaker.Size = new System.Drawing.Size(613, 318);
this.btSpeaker.Size = new System.Drawing.Size(607, 269);
this.btSpeaker.TabIndex = 11;
this.btSpeaker.Tag = "0";
this.btSpeaker.Text = "음성지원";
@@ -481,7 +482,7 @@
this.tabPage1.Location = new System.Drawing.Point(4, 4);
this.tabPage1.Name = "tabPage1";
this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
this.tabPage1.Size = new System.Drawing.Size(1244, 590);
this.tabPage1.Size = new System.Drawing.Size(1244, 570);
this.tabPage1.TabIndex = 0;
this.tabPage1.Text = "AGV";
//
@@ -1640,7 +1641,7 @@
this.label44.AutoSize = true;
this.label44.Font = new System.Drawing.Font("궁서체", 18F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.label44.ForeColor = System.Drawing.Color.WhiteSmoke;
this.label44.Location = new System.Drawing.Point(473, 546);
this.label44.Location = new System.Drawing.Point(1152, 201);
this.label44.Name = "label44";
this.label44.Size = new System.Drawing.Size(49, 24);
this.label44.TabIndex = 64;
@@ -1651,7 +1652,7 @@
this.label29.AutoSize = true;
this.label29.Font = new System.Drawing.Font("궁서체", 18F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.label29.ForeColor = System.Drawing.Color.SkyBlue;
this.label29.Location = new System.Drawing.Point(51, 546);
this.label29.Location = new System.Drawing.Point(730, 201);
this.label29.Name = "label29";
this.label29.Size = new System.Drawing.Size(211, 24);
this.label29.TabIndex = 62;
@@ -1706,7 +1707,7 @@
this.label28.AutoSize = true;
this.label28.Font = new System.Drawing.Font("궁서체", 18F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.label28.ForeColor = System.Drawing.Color.SkyBlue;
this.label28.Location = new System.Drawing.Point(138, 503);
this.label28.Location = new System.Drawing.Point(817, 158);
this.label28.Name = "label28";
this.label28.Size = new System.Drawing.Size(124, 24);
this.label28.TabIndex = 29;
@@ -1913,7 +1914,7 @@
this.vcChargeWaitSec.FontSideButton = new System.Drawing.Font("Consolas", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.vcChargeWaitSec.ForeColor = System.Drawing.Color.WhiteSmoke;
this.vcChargeWaitSec.ForeColorButton = System.Drawing.Color.Black;
this.vcChargeWaitSec.Location = new System.Drawing.Point(270, 540);
this.vcChargeWaitSec.Location = new System.Drawing.Point(949, 195);
this.vcChargeWaitSec.MaxValue = 999999D;
this.vcChargeWaitSec.MinValue = 0D;
this.vcChargeWaitSec.Name = "vcChargeWaitSec";
@@ -1937,7 +1938,7 @@
this.tbChargerID.FontSideButton = new System.Drawing.Font("Consolas", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.tbChargerID.ForeColor = System.Drawing.Color.WhiteSmoke;
this.tbChargerID.ForeColorButton = System.Drawing.Color.Black;
this.tbChargerID.Location = new System.Drawing.Point(270, 497);
this.tbChargerID.Location = new System.Drawing.Point(949, 152);
this.tbChargerID.MaxValue = 999999D;
this.tbChargerID.MinValue = 0D;
this.tbChargerID.Name = "tbChargerID";
@@ -2729,7 +2730,6 @@
this.groupBox3.Controls.Add(this.propertyGrid1);
this.groupBox3.Controls.Add(this.groupBox1);
this.groupBox3.Controls.Add(this.chkDetectManualCharge);
this.groupBox3.Controls.Add(this.chkAGVDirBack);
this.groupBox3.Controls.Add(this.chkFullScreen);
this.groupBox3.Controls.Add(this.nudMusicVol);
this.groupBox3.Controls.Add(this.label22);
@@ -2765,7 +2765,7 @@
this.propertyGrid1.Font = new System.Drawing.Font("맑은 고딕", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.propertyGrid1.Location = new System.Drawing.Point(678, 109);
this.propertyGrid1.Name = "propertyGrid1";
this.propertyGrid1.Size = new System.Drawing.Size(538, 448);
this.propertyGrid1.Size = new System.Drawing.Size(538, 426);
this.propertyGrid1.TabIndex = 11;
//
// groupBox1
@@ -2806,18 +2806,6 @@
this.chkDetectManualCharge.Text = "수동 충전 감지";
this.chkDetectManualCharge.UseVisualStyleBackColor = true;
//
// chkAGVDirBack
//
this.chkAGVDirBack.AutoSize = true;
this.chkAGVDirBack.Font = new System.Drawing.Font("궁서체", 20F, System.Drawing.FontStyle.Bold);
this.chkAGVDirBack.ForeColor = System.Drawing.Color.Red;
this.chkAGVDirBack.Location = new System.Drawing.Point(27, 72);
this.chkAGVDirBack.Name = "chkAGVDirBack";
this.chkAGVDirBack.Size = new System.Drawing.Size(619, 31);
this.chkAGVDirBack.TabIndex = 8;
this.chkAGVDirBack.Text = "FVI 이동시 Backward 방향으로 이동 합니다";
this.chkAGVDirBack.UseVisualStyleBackColor = true;
//
// chkFullScreen
//
this.chkFullScreen.AutoSize = true;
@@ -3374,13 +3362,13 @@
this.btSave.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.btSave.Cursor = System.Windows.Forms.Cursors.Hand;
this.btSave.Dock = System.Windows.Forms.DockStyle.Bottom;
this.btSave.Font = new System.Drawing.Font("궁서체", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.btSave.Font = new System.Drawing.Font("궁서체", 30F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.btSave.ForeColor = System.Drawing.Color.White;
this.btSave.GradientEnable = true;
this.btSave.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.btSave.GradientRepeatBG = false;
this.btSave.isButton = true;
this.btSave.Location = new System.Drawing.Point(5, 740);
this.btSave.Location = new System.Drawing.Point(5, 720);
this.btSave.MouseDownColor = System.Drawing.Color.Yellow;
this.btSave.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.btSave.msg = null;
@@ -3400,7 +3388,7 @@
this.btSave.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.btSave.SignColor = System.Drawing.Color.Yellow;
this.btSave.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.btSave.Size = new System.Drawing.Size(1270, 55);
this.btSave.Size = new System.Drawing.Size(1270, 75);
this.btSave.TabIndex = 8;
this.btSave.Text = "저장";
this.btSave.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
@@ -3569,7 +3557,6 @@
private AGVControl.ValueSelect vcChargeStartLevel;
private AGVControl.ValueSelect vcChargeMaxLevel;
private System.Windows.Forms.GroupBox groupBox3;
private System.Windows.Forms.CheckBox chkAGVDirBack;
private System.Windows.Forms.CheckBox chkFullScreen;
private System.Windows.Forms.NumericUpDown nudMusicVol;
private System.Windows.Forms.Label label22;

View File

@@ -116,10 +116,7 @@ namespace Project
SetColorValue(btSpeaker, PUB.setting.Enable_Speak);
SetColorValue(btAutoCharge, PUB.setting.Enable_AutoCharge);
SetColorValue(btMusic, PUB.setting.Enable_Music);
nudDoorSoundTerm.Value = PUB.setting.doorSoundTerm;
chkAGVDirBack.Checked = PUB.setting.AGV_Direction_FVI_Backward;
nudDoorSoundTerm.Value = PUB.setting.alarmSoundTerm;
chkClear1.Checked = PUB.setting.datetime_Check_1;
chkClear2.Checked = PUB.setting.datetime_Check_2;
cleartime1.Value = DateTime.Parse("1982-11-23 " + PUB.setting.datetime_Reset_1 + ":00");
@@ -299,7 +296,6 @@ namespace Project
PUB.setting.ChargeMaxTime = (int)vcChargeMaxTime.Value;
//Pub.setting.ChargeIdleInterval = (int)nudChargeIdleInterval.Value;
PUB.setting.ChargeRetryTerm = (int)vcChargeRetryTerm.Value;
PUB.setting.AGV_Direction_FVI_Backward = chkAGVDirBack.Checked;
//초기화시간
PUB.setting.datetime_Check_1 = chkClear1.Checked;
@@ -340,8 +336,8 @@ namespace Project
PUB.SetVolume((int)nudMusicVol.Value);
PUB.setting.ChargeSearchTime = (int)vcChargeSearchTime.Value;
PUB.setting.doorSoundTerm = (int)nudDoorSoundTerm.Value;
if (PUB.setting.doorSoundTerm < 1) PUB.setting.doorSoundTerm = 15; //기본값 15초
PUB.setting.alarmSoundTerm = (int)nudDoorSoundTerm.Value;
if (PUB.setting.alarmSoundTerm < 1) PUB.setting.alarmSoundTerm = 15; //기본값 15초
////핀설정
//var baL = new System.Collections.BitArray(new byte[] { PUB.setting.PinReverse_DI_Low });