에뮬레이터 개발 전.
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user