..
This commit is contained in:
@@ -39,178 +39,189 @@ namespace Project
|
||||
bool _charging = false;
|
||||
private void AGV_DataReceive(object sender, arDev.Narumi.DataEventArgs e)
|
||||
{
|
||||
if (PUB.mapctl != null)
|
||||
PUB.mapctl.PredictNextAction();
|
||||
|
||||
switch (e.DataType)
|
||||
try
|
||||
{
|
||||
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);
|
||||
//if (chg_run && PUB.AGV.system1.agv_run) PUB.Speak("이동을 시작 합니다");
|
||||
VAR.BOOL[eVarBool.AGVDIR_UP] = PUB.AGV.data.Direction == 'B';
|
||||
// PUB.AGV.signal.mark_sensor = PUB.AGV.signal.mark_sensor;
|
||||
VAR.BOOL[eVarBool.AGV_ERROR] = PUB.AGV.error.Value > 0;
|
||||
VAR.BOOL[eVarBool.EMERGENCY] = PUB.AGV.error.Emergency;
|
||||
|
||||
//모터방향 입력
|
||||
if (PUB.AGV.data.Direction == 'B')
|
||||
PUB.mapctl.agv.CurrentMOTDirection = AGVControl.Models.Direction.Backward;
|
||||
else
|
||||
PUB.mapctl.agv.CurrentMOTDirection = AGVControl.Models.Direction.Forward;
|
||||
|
||||
if (PUB.AGV.signal.mark_sensor == false)
|
||||
if (PUB.mapctl != null)
|
||||
PUB.mapctl.PredictNextAction();
|
||||
|
||||
switch (e.DataType)
|
||||
{
|
||||
case arDev.Narumi.DataType.STS:
|
||||
{
|
||||
if (VAR.BOOL[eVarBool.MARK_SENSOROFF] == false)
|
||||
//마크센서 확인
|
||||
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);
|
||||
//if (chg_run && PUB.AGV.system1.agv_run) PUB.Speak("이동을 시작 합니다");
|
||||
VAR.BOOL[eVarBool.AGVDIR_UP] = PUB.AGV.data.Direction == 'B';
|
||||
// PUB.AGV.signal.mark_sensor = PUB.AGV.signal.mark_sensor;
|
||||
VAR.BOOL[eVarBool.AGV_ERROR] = PUB.AGV.error.Value > 0;
|
||||
VAR.BOOL[eVarBool.EMERGENCY] = PUB.AGV.error.Emergency;
|
||||
|
||||
//모터방향 입력
|
||||
if (PUB.AGV.data.Direction == 'B')
|
||||
PUB.mapctl.agv.CurrentMOTDirection = AGVControl.Models.Direction.Backward;
|
||||
else
|
||||
PUB.mapctl.agv.CurrentMOTDirection = AGVControl.Models.Direction.Forward;
|
||||
|
||||
PUB.mapctl.agv.IsMoving = PUB.AGV.system1.agv_run;
|
||||
PUB.mapctl.agv.IsMarkCheck = PUB.AGV.system1.Mark1_check || PUB.AGV.system1.Mark2_check;
|
||||
|
||||
if (PUB.AGV.signal.mark_sensor == false)
|
||||
{
|
||||
VAR.BOOL[eVarBool.MARK_SENSOROFF] = true;
|
||||
VAR.TIME[eVarTime.MarkSensorOff] = DateTime.Now;
|
||||
PUB.log.Add($"마크센서off를 설정");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (VAR.BOOL[eVarBool.MARK_SENSOROFF] == true)
|
||||
{
|
||||
VAR.BOOL[eVarBool.MARK_SENSOROFF] = false;
|
||||
VAR.TIME[eVarTime.MarkSensorOff] = DateTime.Now;
|
||||
PUB.log.Add($"마크센서off를 해제");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//차징상태변경
|
||||
if (_charging != PUB.AGV.system1.Battery_charging)
|
||||
{
|
||||
if (PUB.AGV.system1.Battery_charging)
|
||||
{
|
||||
VAR.TIME[eVarTime.ChargeStart] = DateTime.Now;
|
||||
PUB.logagv.Add($"충전시작:{VAR.TIME[eVarTime.ChargeStart]}");
|
||||
}
|
||||
_charging = PUB.AGV.system1.Battery_charging;
|
||||
}
|
||||
|
||||
//배터리충전상태
|
||||
if (VAR.BOOL[eVarBool.FLAG_CHARGEONA] != PUB.AGV.system1.Battery_charging)
|
||||
{
|
||||
PUB.log.Add($"충전상태전환 {PUB.AGV.system1.Battery_charging}");
|
||||
VAR.BOOL[eVarBool.FLAG_CHARGEONA] = PUB.AGV.system1.Battery_charging;
|
||||
}
|
||||
//자동충전해제시 곧바로 수동 충전되는 경우가 있어 자동 상태를 BMS에 넣는다 230118
|
||||
PUB.BMS.AutoCharge = PUB.AGV.system1.Battery_charging;
|
||||
|
||||
if (PUB.AGV.error.Charger_pos_error != VAR.BOOL[eVarBool.CHG_POSERR])
|
||||
{
|
||||
if (PUB.AGV.error.Charger_pos_error)
|
||||
{
|
||||
PUB.Speak(Lang.충전기위치오류);
|
||||
}
|
||||
VAR.BOOL[eVarBool.CHG_POSERR] = PUB.AGV.error.Charger_pos_error;
|
||||
}
|
||||
|
||||
if (VAR.BOOL[eVarBool.MARK_SENSOROFF] == true && PUB.AGV.signal.mark_sensor == false)
|
||||
{
|
||||
//현재 활성화된 위치를 꺼준다
|
||||
if (this.ctlPos1.GetPositionActive(PUB.Result.CurrentPos))
|
||||
{
|
||||
var ts = VAR.TIME.RUN(eVarTime.MarkSensorOff);
|
||||
if (ts.TotalSeconds >= 2)
|
||||
if (VAR.BOOL[eVarBool.MARK_SENSOROFF] == false)
|
||||
{
|
||||
ctlPos1.SetPositionDeActive();
|
||||
PUB.log.Add($"현재 활성위치를 해제 함");
|
||||
VAR.BOOL[eVarBool.MARK_SENSOROFF] = true;
|
||||
VAR.TIME[eVarTime.MarkSensorOff] = DateTime.Now;
|
||||
PUB.log.Add($"마크센서off를 설정");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (VAR.BOOL[eVarBool.MARK_SENSOROFF] == true)
|
||||
{
|
||||
VAR.BOOL[eVarBool.MARK_SENSOROFF] = false;
|
||||
VAR.TIME[eVarTime.MarkSensorOff] = DateTime.Now;
|
||||
PUB.log.Add($"마크센서off를 해제");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//나르미가 멈췄다면 다음 마크 이동 기능이 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)
|
||||
//차징상태변경
|
||||
if (_charging != PUB.AGV.system1.Battery_charging)
|
||||
{
|
||||
//현재위치를 확정한다
|
||||
var curact = ctlPos1.GetPositionActive(PUB.Result.CurrentPos);
|
||||
if (curact == false)
|
||||
if (PUB.AGV.system1.Battery_charging)
|
||||
{
|
||||
PUB.log.Add($"마크센서로인해 현재위치 설정완료:{PUB.Result.CurrentPos}");
|
||||
ctlPos1.SetPositionActive(PUB.Result.CurrentPos);
|
||||
ctlPos1.SetDirection("");
|
||||
ctlPos1.Invalidate();
|
||||
VAR.TIME[eVarTime.ChargeStart] = DateTime.Now;
|
||||
PUB.logagv.Add($"충전시작:{VAR.TIME[eVarTime.ChargeStart]}");
|
||||
}
|
||||
_charging = PUB.AGV.system1.Battery_charging;
|
||||
}
|
||||
VAR.BOOL[eVarBool.MARK_SENSOR] = PUB.AGV.signal.mark_sensor;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case arDev.Narumi.DataType.TAG:
|
||||
{
|
||||
//자동 실행 중이다.
|
||||
PUB.log.Add($"AGV 태그수신 : {PUB.AGV.data.TagNo}");
|
||||
PUB.Result.LastTAG = PUB.AGV.data.TagNo.ToString();
|
||||
|
||||
//POT/NOT 보면 일단 바로 멈추게한다
|
||||
if (PUB.Result.CurrentPos == ePosition.POT || PUB.Result.CurrentPos == ePosition.NOT)
|
||||
//배터리충전상태
|
||||
if (VAR.BOOL[eVarBool.FLAG_CHARGEONA] != PUB.AGV.system1.Battery_charging)
|
||||
{
|
||||
PUB.log.Add($"충전상태전환 {PUB.AGV.system1.Battery_charging}");
|
||||
VAR.BOOL[eVarBool.FLAG_CHARGEONA] = PUB.AGV.system1.Battery_charging;
|
||||
}
|
||||
//자동충전해제시 곧바로 수동 충전되는 경우가 있어 자동 상태를 BMS에 넣는다 230118
|
||||
PUB.BMS.AutoCharge = PUB.AGV.system1.Battery_charging;
|
||||
|
||||
if (PUB.AGV.error.Charger_pos_error != VAR.BOOL[eVarBool.CHG_POSERR])
|
||||
{
|
||||
if (PUB.AGV.error.Charger_pos_error)
|
||||
{
|
||||
PUB.Speak(Lang.충전기위치오류);
|
||||
}
|
||||
VAR.BOOL[eVarBool.CHG_POSERR] = PUB.AGV.error.Charger_pos_error;
|
||||
}
|
||||
|
||||
if (VAR.BOOL[eVarBool.MARK_SENSOROFF] == true && PUB.AGV.signal.mark_sensor == false)
|
||||
{
|
||||
//현재 활성화된 위치를 꺼준다
|
||||
if (this.ctlPos1.GetPositionActive(PUB.Result.CurrentPos))
|
||||
{
|
||||
var ts = VAR.TIME.RUN(eVarTime.MarkSensorOff);
|
||||
if (ts.TotalSeconds >= 2)
|
||||
{
|
||||
ctlPos1.SetPositionDeActive();
|
||||
PUB.log.Add($"현재 활성위치를 해제 함");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//나르미가 멈췄다면 다음 마크 이동 기능이 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();
|
||||
}
|
||||
}
|
||||
VAR.BOOL[eVarBool.MARK_SENSOR] = PUB.AGV.signal.mark_sensor;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case arDev.Narumi.DataType.TAG:
|
||||
{
|
||||
var logEMsg = $"Stop by [POT/NOT]";
|
||||
PUB.AGV.AGVMoveStop(logEMsg);
|
||||
PUB.log.AddE(logEMsg);
|
||||
}
|
||||
//자동 실행 중이다.
|
||||
PUB.log.Add($"AGV 태그수신 : {PUB.AGV.data.TagNo}");
|
||||
PUB.Result.LastTAG = PUB.AGV.data.TagNo.ToString();
|
||||
|
||||
//맵데이터에서 현재 위치를 찾는다
|
||||
if (PUB.mapctl.SetCurrentPosition(PUB.AGV.data.TagNo) == false)
|
||||
{
|
||||
if (VAR.BOOL[eVarBool.FLAG_AUTORUN] && PUB.AGV.system1.agv_run)
|
||||
PUB.AGV.AGVMoveStop("unknown tag no");
|
||||
//POT/NOT 보면 일단 바로 멈추게한다
|
||||
if (PUB.Result.CurrentPos == ePosition.POT || PUB.Result.CurrentPos == ePosition.NOT)
|
||||
{
|
||||
var logEMsg = $"Stop by [POT/NOT]";
|
||||
PUB.AGV.AGVMoveStop(logEMsg);
|
||||
PUB.log.AddE(logEMsg);
|
||||
}
|
||||
|
||||
//존재하지 않는 태그가 읽히면 관련 오류를 표시한다.
|
||||
}
|
||||
else
|
||||
{
|
||||
//위치는 찾았다 해당 위치가 내 목적지라면 mark stop기능으로 전환한다
|
||||
//맵데이터에서 현재 위치를 찾는다
|
||||
if (PUB.mapctl.SetCurrentPosition(PUB.AGV.data.TagNo) == false)
|
||||
{
|
||||
if (VAR.BOOL[eVarBool.FLAG_AUTORUN] && PUB.AGV.system1.agv_run)
|
||||
PUB.AGV.AGVMoveStop("unknown tag no");
|
||||
|
||||
//존재하지 않는 태그가 읽히면 관련 오류를 표시한다.
|
||||
}
|
||||
else
|
||||
{
|
||||
//위치는 찾았다 해당 위치가 내 목적지라면 mark stop기능으로 전환한다
|
||||
|
||||
}
|
||||
|
||||
|
||||
////자동, 상하차 모드일때 RFID 가 타겟위치에 올때는 - 멈춤을 설정해준다
|
||||
//if (VAR.BOOL[eVarBool.FLAG_AUTORUN] == true &&
|
||||
// PUB.Result.CurrentPos == PUB.Result.TargetPos &&
|
||||
// PUB.Result.TargetPos != ePosition.NONE &&
|
||||
// (PUB.sm.RunStep == ERunStep.GODOWN ||
|
||||
// PUB.sm.RunStep == ERunStep.GOUP ||
|
||||
// PUB.sm.RunStep == ERunStep.GOHOME ||
|
||||
// PUB.sm.RunStep == ERunStep.GOCHARGE))
|
||||
//{
|
||||
// if (PUB.AGV.data.Sts == 'F' && dirForward == "0") //아래로 내려오고있음
|
||||
// {
|
||||
// PUB.AGV.AGVMoveStop("AGV_DataReceive", arDev.Narumi.eStopOpt.MarkStop);
|
||||
// PUB.Speak( Lang.다음마크위치에서정지합니다);
|
||||
// }
|
||||
// else if (PUB.AGV.data.Sts == 'B' && dirForward == "1")
|
||||
// {
|
||||
// //VAR.BOOL[eVarBool.FLAG_NEXTSTOP_MARK] = true;
|
||||
// PUB.AGV.AGVMoveStop("AGV_DataReceive", arDev.Narumi.eStopOpt.MarkStop);
|
||||
// PUB.Speak(Lang.다음마크위치에서정지합니다);
|
||||
// }
|
||||
//}
|
||||
|
||||
}
|
||||
break;
|
||||
case arDev.Narumi.DataType.ACK:
|
||||
PUB.logagv.Add($"AGV_[ACK]Receive : {PUB.AGV.ACKData}");
|
||||
break;
|
||||
default:
|
||||
PUB.logagv.Add($"AGV_DataReceive : {e.DataType}");
|
||||
break;
|
||||
|
||||
|
||||
////자동, 상하차 모드일때 RFID 가 타겟위치에 올때는 - 멈춤을 설정해준다
|
||||
//if (VAR.BOOL[eVarBool.FLAG_AUTORUN] == true &&
|
||||
// PUB.Result.CurrentPos == PUB.Result.TargetPos &&
|
||||
// PUB.Result.TargetPos != ePosition.NONE &&
|
||||
// (PUB.sm.RunStep == ERunStep.GODOWN ||
|
||||
// PUB.sm.RunStep == ERunStep.GOUP ||
|
||||
// PUB.sm.RunStep == ERunStep.GOHOME ||
|
||||
// PUB.sm.RunStep == ERunStep.GOCHARGE))
|
||||
//{
|
||||
// if (PUB.AGV.data.Sts == 'F' && dirForward == "0") //아래로 내려오고있음
|
||||
// {
|
||||
// PUB.AGV.AGVMoveStop("AGV_DataReceive", arDev.Narumi.eStopOpt.MarkStop);
|
||||
// PUB.Speak( Lang.다음마크위치에서정지합니다);
|
||||
// }
|
||||
// else if (PUB.AGV.data.Sts == 'B' && dirForward == "1")
|
||||
// {
|
||||
// //VAR.BOOL[eVarBool.FLAG_NEXTSTOP_MARK] = true;
|
||||
// PUB.AGV.AGVMoveStop("AGV_DataReceive", arDev.Narumi.eStopOpt.MarkStop);
|
||||
// PUB.Speak(Lang.다음마크위치에서정지합니다);
|
||||
// }
|
||||
//}
|
||||
|
||||
}
|
||||
break;
|
||||
case arDev.Narumi.DataType.ACK:
|
||||
PUB.logagv.Add($"AGV_[ACK]Receive : {PUB.AGV.ACKData}");
|
||||
break;
|
||||
default:
|
||||
PUB.logagv.Add($"AGV_DataReceive : {e.DataType}");
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"[AGV_DataReceive] {ex.Message}");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Media.Animation;
|
||||
using AR;
|
||||
using arCtl;
|
||||
using COMM;
|
||||
@@ -113,9 +114,29 @@ namespace Project
|
||||
var ts = VAR.TIME.RUN(eVarTime.LastConn_BAT);
|
||||
if (ts.TotalSeconds > 3)
|
||||
{
|
||||
Console.WriteLine($"bms connect to {PUB.setting.Port_BAT}");
|
||||
PUB.BMS.PortName = PUB.setting.Port_BAT;
|
||||
PUB.BMS.Open();
|
||||
|
||||
PUB.BMS.BMSDataReceive += Bms_BMSDataReceive;
|
||||
PUB.BMS.Message += Bms_Message;
|
||||
PUB.BMS.ChargeDetect += BMS_ChargeDetect;
|
||||
|
||||
VAR.TIME.Update(eVarTime.LastConn_BAT);
|
||||
VAR.TIME.Update(eVarTime.LastConnTry_BAT);
|
||||
}
|
||||
}
|
||||
else if (PUB.BMS.IsValid == false)
|
||||
{
|
||||
var ts = VAR.TIME.RUN(eVarTime.LastConnTry_BAT);
|
||||
if (ts.TotalSeconds > 10)
|
||||
{
|
||||
Console.WriteLine("bms auto disconnect");
|
||||
PUB.BMS.BMSDataReceive -= Bms_BMSDataReceive;
|
||||
PUB.BMS.Message -= Bms_Message;
|
||||
PUB.BMS.ChargeDetect -= BMS_ChargeDetect;
|
||||
PUB.BMS.Close();
|
||||
VAR.TIME.Set(eVarTime.LastConn_BAT,DateTime.Now.AddSeconds(5));
|
||||
}
|
||||
}
|
||||
//ConnectSerialPort(PUB.BMS, PUB.setting.Port_BAT, PUB.setting.Baud_BAT,
|
||||
|
||||
@@ -35,7 +35,7 @@ namespace Project
|
||||
var targID = dataStr.Substring(0, 2);
|
||||
var targstr = dataStr.Substring(2);
|
||||
|
||||
if(byte.TryParse(targID,out byte tID))
|
||||
if (byte.TryParse(targID, out byte tID))
|
||||
{
|
||||
if (PUB.setting.XBE_ID == tID)
|
||||
{
|
||||
@@ -61,13 +61,10 @@ namespace Project
|
||||
if (uint.TryParse(dataStr, out uint tagno2))
|
||||
{
|
||||
var currPos = PUB.mapctl.agv.CurrentRFID;///.AGVMoveToRFID(;
|
||||
if (currPos == 0) currPos = 10;
|
||||
var pathRlt = PUB.mapctl.CalculatePath(currPos, tagno2);
|
||||
if (pathRlt.Success == true)
|
||||
{
|
||||
PUB.log.AddI($"New Target:{tagno2}");
|
||||
}
|
||||
else PUB.log.AddE($"Path Error {pathRlt.Message} : {tagno2}");
|
||||
if (PUB.mapctl.SetTargetPosition(tagno2))
|
||||
PUB.log.AddI($"New Target {tagno2}");
|
||||
else
|
||||
PUB.log.AddE($"Path Error {tagno2}");
|
||||
}
|
||||
else PUB.log.AddE($"Path Param Error :{dataStr}");
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user