..
This commit is contained in:
@@ -26,16 +26,11 @@ namespace Project
|
||||
return;
|
||||
}
|
||||
|
||||
//사용자 스텝처리가 아닌경우에만 검사
|
||||
//if (Pub.flag.get(eFlag.UserStepCheck) == false)
|
||||
//가동불가 조건 확인
|
||||
if (CheckStopCondition() == false)
|
||||
{
|
||||
|
||||
//가동불가 조건 확인
|
||||
if (CheckStopCondition() == false)
|
||||
{
|
||||
PUB.sm.SetNewStep(eSMStep.PAUSE);
|
||||
return;
|
||||
}
|
||||
PUB.sm.SetNewStep(eSMStep.PAUSE);
|
||||
return;
|
||||
}
|
||||
|
||||
//이머전시상태라면 stop 처리한다.
|
||||
@@ -46,13 +41,6 @@ namespace Project
|
||||
PUB.sm.SetNewStep(eSMStep.IDLE);
|
||||
}
|
||||
|
||||
//실행스텝보정
|
||||
//if (Pub.sm.runStep == eRunStep.NOTSET && Pub.sm.runStepNew == eRunStep.NOTSET)
|
||||
//{
|
||||
// Pub.sm.setNewRunStep(eRunStep.IDLE);
|
||||
// Pub.log.Add("RUnStep Initialize");
|
||||
//}
|
||||
|
||||
//스텝이 변경되었다면?
|
||||
if (PUB.sm.RunStep != PUB.sm.RunStepNew)
|
||||
{
|
||||
@@ -88,7 +76,7 @@ namespace Project
|
||||
//if (PUB.Result != null && PUB.sm != null)
|
||||
// EEMStatus.AddEEDBSQL(PUB.sm.Step, PUB.sm.RunStep.ToString(), PUB.Result.TargetPos.ToString());
|
||||
|
||||
PUB.Speak(Lang.충전을시작합니다) ;
|
||||
PUB.Speak(Lang.충전을시작합니다);
|
||||
PUB.sm.SetNewRunStep(ERunStep.CHARGECHECK);
|
||||
return;
|
||||
}
|
||||
@@ -143,8 +131,8 @@ namespace Project
|
||||
PUB.Speak(Lang.상차작업이완료되었습니다);
|
||||
|
||||
//230601
|
||||
// if (PUB.Result != null && PUB.sm != null)
|
||||
// EEMStatus.AddEEDBSQL(PUB.sm.Step, PUB.sm.RunStep.ToString(), PUB.Result.TargetPos.ToString());
|
||||
// if (PUB.Result != null && PUB.sm != null)
|
||||
// EEMStatus.AddEEDBSQL(PUB.sm.Step, PUB.sm.RunStep.ToString(), PUB.Result.TargetPos.ToString());
|
||||
|
||||
//QA를 제외한 경우에는 기본 QC로 이동한다
|
||||
if (PUB.Result.NextPos == ePosition.QA)
|
||||
@@ -184,7 +172,7 @@ namespace Project
|
||||
PUB.sm.ClearRunStep();
|
||||
PUB.Result.TargetPos = ePosition.QC;
|
||||
PUB.sm.SetNewRunStep(ERunStep.GOHOME);
|
||||
PUB.Speak( Lang.홈위치로이동합니다);
|
||||
PUB.Speak(Lang.홈위치로이동합니다);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -198,7 +186,7 @@ namespace Project
|
||||
else if (_SM_RUN_GOHOME(runStepisFirst, PUB.sm.GetRunSteptime))
|
||||
{
|
||||
//230601
|
||||
// if (PUB.Result != null && PUB.sm != null)
|
||||
// if (PUB.Result != null && PUB.sm != null)
|
||||
// EEMStatus.AddEEDBSQL(PUB.sm.Step, PUB.sm.RunStep.ToString(), PUB.Result.TargetPos.ToString());
|
||||
|
||||
PUB.Speak(Lang.홈이동완료대기상태로전환합니다);
|
||||
@@ -215,7 +203,7 @@ namespace Project
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void CheckAGVMoveTo(eGoDir dir)
|
||||
{
|
||||
//계속내려간다
|
||||
@@ -545,7 +533,7 @@ namespace Project
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}//cvass
|
||||
}
|
||||
|
||||
@@ -13,12 +13,12 @@ namespace Project
|
||||
{
|
||||
public Boolean _SM_RUN_READY(bool isFirst, TimeSpan stepTime)
|
||||
{
|
||||
//이동 불가 조건이 걸려있다면 충전을 하지 못하게 한다.
|
||||
Boolean bAutoChageOn = true;
|
||||
if (PUB.AGV.system1.stop_by_front_detect) bAutoChageOn = false;
|
||||
else if (PUB.AGV.error.Emergency) bAutoChageOn = false;
|
||||
else if (VAR.BOOL[eVarBool.FLAG_CHARGEONA]) bAutoChageOn = false;
|
||||
else if (VAR.BOOL[eVarBool.FLAG_CHARGEONM]) bAutoChageOn = false;
|
||||
////이동 불가 조건이 걸려있다면 충전을 하지 못하게 한다.
|
||||
//Boolean bAutoChageOn = true;
|
||||
//if (PUB.AGV.system1.stop_by_front_detect) bAutoChageOn = false;
|
||||
//else if (PUB.AGV.error.Emergency) bAutoChageOn = false;
|
||||
//else if (VAR.BOOL[eVarBool.FLAG_CHARGEONA]) bAutoChageOn = false;
|
||||
//else if (VAR.BOOL[eVarBool.FLAG_CHARGEONM]) bAutoChageOn = false;
|
||||
|
||||
|
||||
//자동 충전 중이라면 최대 충전시간과 레벨을 체크한다
|
||||
@@ -73,58 +73,58 @@ namespace Project
|
||||
}
|
||||
VAR.STR[eVarString.ChargeCheckMsg] = "현재 위치 모름";
|
||||
}
|
||||
else if (PUB.setting.Enable_AutoCharge == true )
|
||||
{
|
||||
if(bAutoChageOn)
|
||||
{
|
||||
VAR.BOOL[eVarBool.CHARGE_READY] = true;
|
||||
if (PUB.BMS.Current_Level < PUB.setting.ChargeStartLevel)
|
||||
{
|
||||
//레벨에 의한 자동 충전간격은
|
||||
var ts = VAR.TIME.RUN(eVarTime.ChargeTry);
|
||||
if (ts.TotalSeconds >= PUB.setting.ChargeRetryTerm)
|
||||
{
|
||||
VAR.I32[eVarInt32.ChargeWaitSec] = 0;
|
||||
VAR.BOOL[eVarBool.CHARGE_WAIT] = false;
|
||||
PUB.log.Add($"자동충전레벨시작 {PUB.BMS.Current_Level}/{PUB.setting.ChargeStartLevel}");
|
||||
PUB.sm.ClearRunStep();
|
||||
PUB.sm.SetNewRunStep(ERunStep.GOCHARGE);
|
||||
PUB.sm.SetNewStep(eSMStep.RUN);
|
||||
PUB.AddEEDB($"자동충전레벨시작 {PUB.BMS.Current_Level}/{PUB.setting.ChargeStartLevel}");
|
||||
}
|
||||
else
|
||||
{
|
||||
VAR.I32[eVarInt32.ChargeWaitSec] = (int)(PUB.setting.ChargeRetryTerm - ts.TotalSeconds);
|
||||
VAR.BOOL[eVarBool.CHARGE_WAIT] = true;
|
||||
}
|
||||
VAR.STR[eVarString.ChargeCheckMsg] = "배터리 충전 레벨 필요";
|
||||
}
|
||||
else
|
||||
{
|
||||
//아직 레벨이 높다
|
||||
VAR.BOOL[eVarBool.CHARGE_READY] = false;
|
||||
VAR.I32[eVarInt32.ChargeWaitSec] = 0;
|
||||
VAR.BOOL[eVarBool.CHARGE_WAIT] = false;
|
||||
VAR.STR[eVarString.ChargeCheckMsg] = "배터리 레벨상 충전 불필요";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
VAR.BOOL[eVarBool.CHARGE_READY] = false;
|
||||
VAR.I32[eVarInt32.ChargeWaitSec] = 0;
|
||||
VAR.BOOL[eVarBool.CHARGE_WAIT] = false;
|
||||
VAR.STR[eVarString.ChargeCheckMsg] = "충전 불가 조건";
|
||||
//충전조건이 맞지 않는다
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
VAR.BOOL[eVarBool.CHARGE_READY] = false;
|
||||
VAR.I32[eVarInt32.ChargeWaitSec] = 0;
|
||||
VAR.BOOL[eVarBool.CHARGE_WAIT] = false;
|
||||
//자동충전이 해제된 상태이므로 처리하지 않는다
|
||||
VAR.STR[eVarString.ChargeCheckMsg] = "자동 충전 해제 됨";
|
||||
}
|
||||
//else if (PUB.setting.Enable_AutoCharge == true )
|
||||
//{
|
||||
// if(bAutoChageOn)
|
||||
// {
|
||||
// VAR.BOOL[eVarBool.CHARGE_READY] = true;
|
||||
// if (PUB.BMS.Current_Level < PUB.setting.ChargeStartLevel)
|
||||
// {
|
||||
// //레벨에 의한 자동 충전간격은
|
||||
// var ts = VAR.TIME.RUN(eVarTime.ChargeTry);
|
||||
// if (ts.TotalSeconds >= PUB.setting.ChargeRetryTerm)
|
||||
// {
|
||||
// VAR.I32[eVarInt32.ChargeWaitSec] = 0;
|
||||
// VAR.BOOL[eVarBool.CHARGE_WAIT] = false;
|
||||
// PUB.log.Add($"자동충전레벨시작 {PUB.BMS.Current_Level}/{PUB.setting.ChargeStartLevel}");
|
||||
// PUB.sm.ClearRunStep();
|
||||
// PUB.sm.SetNewRunStep(ERunStep.GOCHARGE);
|
||||
// PUB.sm.SetNewStep(eSMStep.RUN);
|
||||
// PUB.AddEEDB($"자동충전레벨시작 {PUB.BMS.Current_Level}/{PUB.setting.ChargeStartLevel}");
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// VAR.I32[eVarInt32.ChargeWaitSec] = (int)(PUB.setting.ChargeRetryTerm - ts.TotalSeconds);
|
||||
// VAR.BOOL[eVarBool.CHARGE_WAIT] = true;
|
||||
// }
|
||||
// VAR.STR[eVarString.ChargeCheckMsg] = "배터리 충전 레벨 필요";
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// //아직 레벨이 높다
|
||||
// VAR.BOOL[eVarBool.CHARGE_READY] = false;
|
||||
// VAR.I32[eVarInt32.ChargeWaitSec] = 0;
|
||||
// VAR.BOOL[eVarBool.CHARGE_WAIT] = false;
|
||||
// VAR.STR[eVarString.ChargeCheckMsg] = "배터리 레벨상 충전 불필요";
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// VAR.BOOL[eVarBool.CHARGE_READY] = false;
|
||||
// VAR.I32[eVarInt32.ChargeWaitSec] = 0;
|
||||
// VAR.BOOL[eVarBool.CHARGE_WAIT] = false;
|
||||
// VAR.STR[eVarString.ChargeCheckMsg] = "충전 불가 조건";
|
||||
// //충전조건이 맞지 않는다
|
||||
// }
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// VAR.BOOL[eVarBool.CHARGE_READY] = false;
|
||||
// VAR.I32[eVarInt32.ChargeWaitSec] = 0;
|
||||
// VAR.BOOL[eVarBool.CHARGE_WAIT] = false;
|
||||
// //자동충전이 해제된 상태이므로 처리하지 않는다
|
||||
// VAR.STR[eVarString.ChargeCheckMsg] = "자동 충전 해제 됨";
|
||||
//}
|
||||
|
||||
//대기모드에서는 움직이지 않게 한다
|
||||
if(PUB.AGV.system1.agv_run)
|
||||
|
||||
@@ -41,31 +41,7 @@ namespace Project
|
||||
{
|
||||
try
|
||||
{
|
||||
if (PUB.mapctl != null)
|
||||
{
|
||||
var rlt = AGVControl.MapControlManager.PredictNextAction();
|
||||
|
||||
if (rlt.ReasonCode == AGVControl.AGVActionReasonCode.busy)
|
||||
{
|
||||
//var premsg = $"이전 예측작업이 완료되지 않았습니다";
|
||||
//PUB.log.AddE(premsg);
|
||||
//PUB.log.AddE(premsg);
|
||||
//Console.WriteLine(premsg);
|
||||
|
||||
//predicterr += 1;
|
||||
//if (predicterr > 10)
|
||||
//{
|
||||
// var premsg = $"행동예측 오류카운트 초과";
|
||||
// PUB.AGV.AGVMoveStop(premsg);
|
||||
// PUB.log.AddE(premsg);
|
||||
// PUB.logagv.AddE(premsg);
|
||||
// Console.WriteLine(premsg);
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//데이터 파싱
|
||||
switch (e.DataType)
|
||||
{
|
||||
case arDev.Narumi.DataType.STS:
|
||||
@@ -83,12 +59,12 @@ namespace Project
|
||||
|
||||
//모터방향 입력
|
||||
if (PUB.AGV.data.Direction == 'B')
|
||||
AGVControl.MapControlManager.agv.CurrentMOTDirection = AGVControl.Models.Direction.Backward;
|
||||
PUB.mapctl.Manager.agv.CurrentMOTDirection = AGVControl.Direction.Backward;
|
||||
else
|
||||
AGVControl.MapControlManager.agv.CurrentMOTDirection = AGVControl.Models.Direction.Forward;
|
||||
PUB.mapctl.Manager.agv.CurrentMOTDirection = AGVControl.Direction.Forward;
|
||||
|
||||
AGVControl.MapControlManager.agv.IsMoving = PUB.AGV.system1.agv_run;
|
||||
AGVControl.MapControlManager.agv.IsMarkCheck = PUB.AGV.system1.Mark1_check || PUB.AGV.system1.Mark2_check;
|
||||
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)
|
||||
{
|
||||
@@ -201,10 +177,8 @@ namespace Project
|
||||
else
|
||||
{
|
||||
//위치는 찾았다 해당 위치가 내 목적지라면 mark stop기능으로 전환한다
|
||||
|
||||
}
|
||||
|
||||
|
||||
////자동, 상하차 모드일때 RFID 가 타겟위치에 올때는 - 멈춤을 설정해준다
|
||||
//if (VAR.BOOL[eVarBool.FLAG_AUTORUN] == true &&
|
||||
// PUB.Result.CurrentPos == PUB.Result.TargetPos &&
|
||||
@@ -237,12 +211,19 @@ namespace Project
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
//이 후 상황을 예측한다
|
||||
if (PUB.mapctl != null)
|
||||
{
|
||||
var rlt = PUB.mapctl.Manager.PredictNextAction();
|
||||
if (rlt.Changed)
|
||||
Console.WriteLine($"[new] predict idx:{rlt.Idx}");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"[AGV_DataReceive] {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -158,9 +158,10 @@ namespace Project
|
||||
|
||||
private void Bms_BMSDataReceive(object sender, EventArgs e)
|
||||
{
|
||||
AGVControl.MapControlManager.agv.BatteryLevel = PUB.BMS.Current_Level;
|
||||
AGVControl.MapControlManager.agv.BatteryTemp1 = PUB.BMS.Current_temp1;
|
||||
AGVControl.MapControlManager.agv.BatteryTemp2 = PUB.BMS.Current_temp2;
|
||||
|
||||
PUB.mapctl.Manager.agv.BatteryLevel = PUB.BMS.Current_Level;
|
||||
PUB.mapctl.Manager.agv.BatteryTemp1 = PUB.BMS.Current_temp1;
|
||||
PUB.mapctl.Manager.agv.BatteryTemp2 = PUB.BMS.Current_temp2;
|
||||
if (PUB.BMS.Current_Level <= PUB.setting.ChargeStartLevel)
|
||||
{
|
||||
//배터리 레벨이 기준보다 낮다면 경고를 활성화 한다
|
||||
|
||||
@@ -163,10 +163,7 @@ namespace Project
|
||||
{
|
||||
PUB.BMS.SendQuery();
|
||||
}
|
||||
|
||||
|
||||
Update_BatteryWarnSpeak();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,25 @@ namespace Project
|
||||
var data = e.ReceivedPacket.Data;
|
||||
var dataStr = System.Text.Encoding.Default.GetString(data);
|
||||
var cmd = (ENIGProtocol.AGVCommands)e.ReceivedPacket.Command;
|
||||
var TargetID = 0;
|
||||
if (dataStr.Length >= 2)
|
||||
{
|
||||
//대상디바이스
|
||||
TargetID = Convert.ToByte(dataStr.Substring(0, 2), 16);
|
||||
|
||||
//데이터영역을 다시 설정
|
||||
if (dataStr.Length > 2) dataStr = dataStr.Substring(2);
|
||||
else dataStr = string.Empty;
|
||||
}
|
||||
else
|
||||
{
|
||||
PUB.log.Add($"ACS 데이터에서 TARGET ID가 없습니다(data : first byte)");
|
||||
}
|
||||
|
||||
|
||||
if (PUB.setting.XBE_ID != TargetID)
|
||||
return;
|
||||
|
||||
switch (cmd)
|
||||
{
|
||||
|
||||
@@ -60,7 +79,7 @@ namespace Project
|
||||
case ENIGProtocol.AGVCommands.Goto: //move to tag
|
||||
if (uint.TryParse(dataStr, out uint tagno2))
|
||||
{
|
||||
var currPos = AGVControl.MapControlManager.agv.CurrentRFID;///.AGVMoveToRFID(;
|
||||
var currPos = PUB.mapctl.Manager.agv.CurrentRFID;///.AGVMoveToRFID(;
|
||||
if (PUB.mapctl.SetTargetPosition(tagno2))
|
||||
PUB.log.AddI($"New Target {tagno2}");
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user