Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
张东亮
/
AGV_3D_Line
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit c0fb8714
由
张东亮
编写于
2021-06-08 11:23:29 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
日志记录格式变更
1 个父辈
810d0935
显示空白字符变更
内嵌
并排
正在显示
13 个修改的文件
包含
755 行增加
和
449 行删除
DeviceLibrary/Control.cs
DeviceLibrary/bean/Agv_Info.cs
DeviceLibrary/bean/Job.cs
DeviceLibrary/bean/JobStep.cs
DeviceLibrary/bean/job/ChargeJob.cs
DeviceLibrary/bean/job/EmptyAGVBackJob.cs
DeviceLibrary/bean/job/EmptyShelfBackJob.cs
DeviceLibrary/bean/job/EnterLeaveShelfJob.cs
DeviceLibrary/bean/job/GoEmptyShelfLineJob.cs
DeviceLibrary/bean/job/GoFullShelfStationJob.cs
DeviceLibrary/bean/job/SendFullShelfToLineJob.cs
DeviceLibrary/bean/job/StandyJob.cs
DeviceLibrary/manager/AGVManager.cs
DeviceLibrary/Control.cs
查看文件 @
c0fb871
...
...
@@ -14,7 +14,6 @@ namespace DeviceLibrary
public
class
Control
{
private
static
log4net
.
ILog
log
=
log4net
.
LogManager
.
GetLogger
(
"Control"
);
static
log4net
.
ILog
runLog
=
log4net
.
LogManager
.
GetLogger
(
"RunLog"
);
static
Dictionary
<
string
,
RunInfo
>
runInfoMap
=
new
Dictionary
<
string
,
RunInfo
>();
private
System
.
Timers
.
Timer
AgvCallTimer
;
...
...
@@ -124,7 +123,7 @@ namespace DeviceLibrary
bool
rtn
;
if
(
AgvStateInProcess
)
return
;
AgvStateInProcess
=
true
;
List
<
AlarmMsg
>
msglist
=
new
List
<
AlarmMsg
>();
//
List<AlarmMsg> msglist = new List<AlarmMsg>();
for
(
int
i
=
0
;
i
<
AGVManager
.
agvInfo
.
Count
;
i
++)
{
//上报异常
...
...
@@ -144,44 +143,6 @@ namespace DeviceLibrary
{
AgvChanged
?.
Invoke
(
i
);
}
Thread
.
Sleep
(
50
);
if
(
stateText
.
Equals
(
"Error"
)
||
stateText
.
Equals
(
"EmergencyStop"
)
||
stateText
.
Equals
(
"Pause"
))
{
isAlarm
=
true
;
msglist
.
Add
(
new
AlarmMsg
(
AGVManager
.
agvInfo
[
i
].
Name
,
"lineAgv."
+
AGVManager
.
agvInfo
[
i
].
Name
+
".Msg"
,
"状态:"
+
stateText
+
""
));
}
if
(!
isAlarm
&&
AGVManager
.
agvInfo
[
i
].
StandTimeOut
)
{
isAlarm
=
true
;
msglist
.
Add
(
new
AlarmMsg
(
AGVManager
.
agvInfo
[
i
].
Name
,
"lineAgv."
+
AGVManager
.
agvInfo
[
i
].
Name
+
".Msg"
,
"在"
+
AGVManager
.
agvInfo
[
i
].
PlaceAliceName
+
"停留超时"
+
(
DateTime
.
Now
-
AGVManager
.
agvInfo
[
i
].
StandStartTime
).
TotalMinutes
.
ToString
(
"f2"
)
+
"分钟"
));
}
if
(!
isAlarm
)
{
try
{
if
(!
AGVManager
.
agvInfo
[
i
].
Msg
.
Equals
(
""
))
{
RunLogInfo
(
new
RunInfo
(
AGVManager
.
agvInfo
[
i
].
Name
,
AGVManager
.
agvInfo
[
i
].
Msg
));
msglist
.
Add
(
new
AlarmMsg
(
AGVManager
.
agvInfo
[
i
].
Name
,
"lineAgv."
+
AGVManager
.
agvInfo
[
i
].
Name
+
".Msg"
,
AGVManager
.
agvInfo
[
i
].
Msg
,
1
));
}
else
{
if
((
AGVManager
.
agvInfo
[
i
].
Place
.
Contains
(
SettingString
.
AutoCharge
)
||
AGVManager
.
agvInfo
[
i
].
Place
.
Contains
(
SettingString
.
Standby
)))
{
msglist
.
Add
(
new
AlarmMsg
(
AGVManager
.
agvInfo
[
i
].
Name
,
"lineAgv."
+
AGVManager
.
agvInfo
[
i
].
Name
+
".Place"
,
AGVManager
.
agvInfo
[
i
].
Place
,
1
));
}
}
}
catch
(
Exception
ex
)
{
log
.
Error
(
AGVManager
.
agvInfo
[
i
].
Name
+
"上报小车运行步骤失败"
+
ex
.
Message
+
ex
.
StackTrace
);
}
}
HttpManager
.
updateDeviceAlarmMsg
(
msglist
);
}
catch
(
Exception
ex
)
{
...
...
@@ -191,23 +152,6 @@ namespace DeviceLibrary
AgvStateInProcess
=
false
;
}
public
static
void
RunLogInfo
(
RunInfo
info
)
{
if
(
runInfoMap
==
null
)
return
;
if
(
runInfoMap
.
Keys
.
Contains
(
info
.
AGVNum
))
{
if
(!
runInfoMap
[
info
.
AGVNum
].
Equals
(
info
))
{
runLog
.
Info
(
info
.
ToString
());
}
}
else
{
runInfoMap
.
Add
(
info
.
AGVNum
,
info
);
runLog
.
Info
(
info
.
ToString
());
}
}
/// <summary>
/// 从节点获取任务
/// </summary>
...
...
DeviceLibrary/bean/Agv_Info.cs
查看文件 @
c0fb871
...
...
@@ -144,7 +144,30 @@ namespace DeviceLibrary
/// 当前料架的工单信息
/// </summary>
public
string
BoxDestInfo
{
get
;
set
;
}
=
""
;
/// <summary>
/// 错误消息
/// </summary>
public
string
ErrorMsg
{
get
;
set
;
}
=
""
;
public
string
ErrorLastTime
{
get
;
set
;
}
=
""
;
/// <summary>
/// 任务期间是否有错误
/// </summary>
public
bool
HasError
{
get
;
set
;
}
=
false
;
public
DateTime
errStartTime
=
DateTime
.
Now
;
public
void
SetErrorMsg
(
string
msg
,
string
lastTime
)
{
if
(
ErrorMsg
.
Equals
(
""
))
{
ErrorMsg
=
msg
;
ErrorLastTime
=
lastTime
;
errStartTime
=
DateTime
.
Now
;
}
}
public
void
ClearErrorMsg
()
{
ErrorLastTime
=
""
;
ErrorMsg
=
""
;
}
/// <summary>
/// 任务重发
/// </summary>
...
...
@@ -266,10 +289,68 @@ namespace DeviceLibrary
MissionText
=
missionText
;
StateKanban
.
ShowInfo
(
"AGV运行信息"
,
missionText
);
}
CheckErrorState
();
CheckOfflineTimeOut
();
CheckStandTimeOut
(
position
);
UpdateDisplayBoard
();
return
isChange
;
}
DateTime
agvErrorStartTime
=
DateTime
.
MaxValue
;
DateTime
offlineStartTime
=
DateTime
.
MaxValue
;
bool
errorState
=
false
;
int
OfflineLastTimeSeconds
=
30
;
/// <summary>
/// 检查小车是否报错
/// </summary>
/// <returns></returns>
private
void
CheckErrorState
()
{
if
(
StateID
.
Equals
(
eAGVState
.
Error
)
||
StateID
.
Equals
(
eAGVState
.
EmergencyStop
)
||
StateID
.
Equals
(
eAGVState
.
Pause
))
{
//满足条件,计算持续时间
if
(
agvErrorStartTime
==
DateTime
.
MaxValue
)
{
agvErrorStartTime
=
DateTime
.
Now
;
}
TimeSpan
lastTimeSpan
=
DateTime
.
Now
-
agvErrorStartTime
;
errorState
=
(
lastTimeSpan
.
TotalSeconds
>=
OfflineLastTimeSeconds
);
}
else
{
errorState
=
false
;
if
((
DateTime
.
Now
-
agvErrorStartTime
).
TotalSeconds
>
OfflineLastTimeSeconds
)
agvErrorStartTime
=
DateTime
.
Now
;
}
}
/// <summary>
/// 离线超时
/// </summary>
private
bool
offlineTimeOut
=
false
;
/// <summary>
/// 检查小车是否离线超时
/// </summary>
/// <returns></returns>
private
void
CheckOfflineTimeOut
()
{
if
(
CurJob
!=
null
&&
!(
CurJob
is
ChargeJob
)
&&
!
IsCon
)
{
//满足条件,计算持续时间
if
(
offlineStartTime
==
DateTime
.
MaxValue
)
{
offlineStartTime
=
DateTime
.
Now
;
}
TimeSpan
lastTimeSpan
=
DateTime
.
Now
-
offlineStartTime
;
offlineTimeOut
=
(
lastTimeSpan
.
TotalSeconds
>=
OfflineLastTimeSeconds
);
}
else
{
offlineTimeOut
=
false
;
if
((
DateTime
.
Now
-
offlineStartTime
).
TotalSeconds
>
OfflineLastTimeSeconds
)
//LogUtil.error(string.Format("{0} 在{1}离线{2}秒", Name, PlaceAliceName, (DateTime.Now - offlineStartTime).TotalSeconds.ToString("f2")));
offlineStartTime
=
DateTime
.
Now
;
}
}
/// <summary>
/// 检查小车是否在原地停留超时
/// </summary>
...
...
@@ -309,6 +390,70 @@ namespace DeviceLibrary
}
Position
=
position
;
}
private
void
UpdateDisplayBoard
()
{
bool
isAlarm
=
false
;
List
<
AlarmMsg
>
msglist
=
new
List
<
AlarmMsg
>();
try
{
if
(
offlineTimeOut
)
{
isAlarm
=
true
;
SetErrorMsg
(
"在"
+
PlaceAliceName
+
"离线"
,
(
DateTime
.
Now
-
offlineStartTime
).
TotalMinutes
.
ToString
(
"f2"
));
msglist
.
Add
(
new
AlarmMsg
(
Name
,
"lineAgv."
+
Name
+
".Msg"
,
"在"
+
PlaceAliceName
+
"离线"
+
(
DateTime
.
Now
-
offlineStartTime
).
TotalSeconds
.
ToString
(
"f2"
)
+
"秒"
));
}
if
(!
isAlarm
&&
errorState
)
{
isAlarm
=
true
;
SetErrorMsg
(
"状态:"
+
StateID
.
ToString
(),
(
DateTime
.
Now
-
offlineStartTime
).
TotalMinutes
.
ToString
(
"f2"
));
msglist
.
Add
(
new
AlarmMsg
(
Name
,
"lineAgv."
+
Name
+
".Msg"
,
"状态:"
+
StateID
.
ToString
()));
}
if
(!
isAlarm
&&
StandTimeOut
)
{
isAlarm
=
true
;
msglist
.
Add
(
new
AlarmMsg
(
Name
,
"lineAgv."
+
Name
+
".Msg"
,
"在"
+
PlaceAliceName
+
"停留超时"
+
(
DateTime
.
Now
-
StandStartTime
).
TotalMinutes
.
ToString
(
"f2"
)
+
"分钟"
));
}
else
if
(!
isAlarm
&&
HasError
)
{
isAlarm
=
true
;
msglist
.
Add
(
new
AlarmMsg
(
Name
,
"lineAgv."
+
Name
+
".Msg"
,
Msg
));
}
if
(!
isAlarm
)
{
try
{
if
(!
ErrorMsg
.
Equals
(
""
))
//异常消除后正常,打印异常
{
AGVManager
.
ErrorLogRecord
(
new
ErrorInfo
(
this
));
ClearErrorMsg
();
}
if
(!
Msg
.
Equals
(
""
))
{
msglist
.
Add
(
new
AlarmMsg
(
Name
,
"lineAgv."
+
Name
+
".Msg"
,
Msg
,
1
));
}
else
{
if
((
Place
.
Contains
(
SettingString
.
AutoCharge
)
||
Place
.
Contains
(
SettingString
.
Standby
)))
{
msglist
.
Add
(
new
AlarmMsg
(
Name
,
"lineAgv."
+
Name
+
".Place"
,
Place
,
1
));
}
}
}
catch
(
Exception
ex
)
{
Common
.
LogUtil
.
error
(
Name
+
"上报小车运行步骤失败"
+
ex
.
Message
+
ex
.
StackTrace
);
}
}
HttpManager
.
updateDeviceAlarmMsg
(
msglist
);
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
Name
+
"上报小车信息失败"
+
ex
.
Message
+
ex
.
StackTrace
);
}
}
}
}
DeviceLibrary/bean/Job.cs
查看文件 @
c0fb871
using
Common
;
using
System
;
namespace
DeviceLibrary
{
public
abstract
class
Job
...
...
@@ -12,6 +14,7 @@ namespace DeviceLibrary
/// 运行信息
/// </summary>
public
abstract
string
RunInfo
{
get
;
}
public
string
runInfo
=
""
;
/// <summary>
/// 根据任务状态继续执行任务
/// </summary>
...
...
@@ -27,7 +30,19 @@ namespace DeviceLibrary
/// 当前任务的执行状态
/// </summary>
public
string
CurTaskState
{
get
;
set
;
}
=
"Wait"
;
/// <summary>
/// Job开始时间
/// </summary>
public
DateTime
StartJobTime
{
get
;
set
;
}
=
DateTime
.
Now
;
/// <summary>
/// Job名称
/// </summary>
public
string
JobName
{
get
;
set
;
}
=
""
;
protected
void
RecordRunLog
(
Agv_Info
agv
,
string
JobStep
,
string
runInfo
,
string
targetPlace
)
{
AGVManager
.
RunLogInfo
(
new
RunInfo
(
agv
.
Name
.
PadLeft
(
4
,
'0'
),
JobName
,
targetPlace
,
JobStep
,
runInfo
,
StartJobTime
));
}
/// <summary>
/// 更新任务信息
/// </summary>
...
...
DeviceLibrary/bean/JobStep.cs
查看文件 @
c0fb871
...
...
@@ -22,7 +22,7 @@ namespace DeviceLibrary
//不为空,且与上一个消息不一样才打印
if
(!
value
.
Equals
(
msg
))
{
LogUtil
.
info
(
value
);
//
LogUtil.info(value);
}
}
msg
=
value
;
...
...
@@ -53,13 +53,12 @@ namespace DeviceLibrary
/// </summary>
/// <param name="timeOutMilliseconds"></param>
/// <returns></returns>
public
bool
IsTimeOut
(
int
timeOutMilliseconds
,
out
double
timeOutValue
)
public
bool
IsTimeOut
(
int
timeOutMilliseconds
,
out
TimeSpan
timeOutValue
)
{
timeOutValue
=
0
;
TimeSpan
span
=
DateTime
.
Now
-
startTime
;
timeOutValue
=
span
;
if
(
span
.
TotalMilliseconds
>
timeOutMilliseconds
)
{
timeOutValue
=
span
.
TotalSeconds
;
return
true
;
}
return
false
;
...
...
DeviceLibrary/bean/job/ChargeJob.cs
查看文件 @
c0fb871
...
...
@@ -14,6 +14,7 @@ namespace DeviceLibrary
public
ChargeJob
(
string
agvPlae
)
{
this
.
agvPlace
=
agvPlae
;
JobName
=
"充电任务"
;
}
...
...
@@ -22,7 +23,6 @@ namespace DeviceLibrary
/// </summary>
private
string
agvPlace
=
SettingString
.
Standby
;
private
string
runInfo
=
""
;
/// <summary>
/// 运行信息
/// </summary>
...
...
@@ -31,7 +31,7 @@ namespace DeviceLibrary
get
{
return
string
.
Format
(
"充电任务[{0}]:{1} "
,
CurTaskID
,
runInfo
);}
}
private
JobStep
<
CHARGE_STEP
>
j
obStep
=
new
JobStep
<
CHARGE_STEP
>(
CHARGE_STEP
.
NONE
);
private
JobStep
<
CHARGE_STEP
>
curJ
obStep
=
new
JobStep
<
CHARGE_STEP
>(
CHARGE_STEP
.
NONE
);
/// <summary>
/// 充电任务
...
...
@@ -42,43 +42,43 @@ namespace DeviceLibrary
string
msg
=
string
.
Format
(
"{0} 充电任务: "
,
agv
.
Name
);
//bool rtn = false;
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
j
obStep
.
IsStep
(
CHARGE_STEP
.
NONE
))
if
(
curJ
obStep
.
IsStep
(
CHARGE_STEP
.
NONE
))
{
if
(
agv
.
Battery
>
AGVManager
.
Charge
.
BatteryMax
)
{
if
(
agvPlace
.
Equals
(
SettingString
.
Standby
)
||
agvPlace
.
Equals
(
""
))
//在待机位
{
j
obStep
.
ToNextStep
(
CHARGE_STEP
.
END
);
curJ
obStep
.
ToNextStep
(
CHARGE_STEP
.
END
);
runInfo
=
"在待机位,电量充足["
+
agv
.
Battery
+
"%],等待任务"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
Standby
);
UpdateJobTaskInfo
(
agv
);
}
else
if
(
agvPlace
.
StartsWith
(
SettingString
.
RoomC_Name_Prefix
)
&&
AGVManager
.
CheckIsInAirDoor
(
agvPlace
))
{
j
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_AGV_REACH_AIR_DOOR
);
curJ
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_AGV_REACH_AIR_DOOR
);
runInfo
=
string
.
Format
(
"电量充足{0}%,从当前位置{1}回到待机位,先过{2}风淋门"
,
agv
.
Battery
,
agvPlace
,
SettingString
.
RoomC_Name
);
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorAirOut
);
UpdateJobTaskInfo
(
agv
);
}
else
if
(
agvPlace
.
StartsWith
(
SettingString
.
RoomC_Name_Prefix
))
{
j
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_AGV_REACH_ROOMD_DOOR
);
curJ
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_AGV_REACH_ROOMD_DOOR
);
runInfo
=
string
.
Format
(
"电量充足{0}%,从当前位置{1}回到待机位,先过{2}门"
,
agv
.
Battery
,
agvPlace
,
SettingString
.
RoomC_Name
);
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorCToD
);
UpdateJobTaskInfo
(
agv
);
}
else
{
j
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_REACH_STANDBY
);
curJ
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_REACH_STANDBY
);
runInfo
=
"电量充足["
+
agv
.
Battery
+
"%],从当前位置"
+
agvPlace
+
"回到待机位"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
Standby
);
UpdateJobTaskInfo
(
agv
);
...
...
@@ -88,20 +88,20 @@ namespace DeviceLibrary
{
if
(
agvPlace
.
StartsWith
(
SettingString
.
RoomC_Name_Prefix
)
&&
AGVManager
.
CheckIsInAirDoor
(
agvPlace
))
{
j
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_AGV_REACH_AIR_DOOR
);
curJ
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_AGV_REACH_AIR_DOOR
);
runInfo
=
string
.
Format
(
"电量{0}%小于最大电量{1}%,从当前位置{2}回到充电位,先过{3}风淋门"
,
agv
.
Battery
,
AGVManager
.
Charge
.
BatteryMax
,
agvPlace
,
SettingString
.
RoomC_Name
);
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorAirOut
);
UpdateJobTaskInfo
(
agv
);
}
else
if
(
agvPlace
.
StartsWith
(
SettingString
.
RoomC_Name_Prefix
))
{
j
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_AGV_REACH_ROOMD_DOOR
);
curJ
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_AGV_REACH_ROOMD_DOOR
);
runInfo
=
string
.
Format
(
"电量{0}%小于最大电量{1}%,从当前位置{2}回到充电位,先过{3}门"
,
agv
.
Battery
,
AGVManager
.
Charge
.
BatteryMax
,
agvPlace
,
SettingString
.
RoomC_Name
);
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorCToD
);
UpdateJobTaskInfo
(
agv
);
...
...
@@ -111,47 +111,47 @@ namespace DeviceLibrary
if
(!
AGVManager
.
Charge
.
StartCharge
(
agv
))
{
j
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_REACH_STANDBY
);
curJ
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_REACH_STANDBY
);
runInfo
=
"电量"
+
agv
.
Battery
+
"%小于最大电量"
+
AGVManager
.
Charge
.
BatteryMax
+
"%,充电桩有小车,从当前位置"
+
agvPlace
+
"回到待机位"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
Standby
);
UpdateJobTaskInfo
(
agv
);
}
else
{
j
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_REACH_CHARGE_STATION
);
curJ
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_REACH_CHARGE_STATION
);
runInfo
=
"电量"
+
agv
.
Battery
+
"%小于最大电量"
+
AGVManager
.
Charge
.
BatteryMax
+
"%,从当前位置"
+
agvPlace
+
"去充电位"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
UpdateJobTaskInfo
(
agv
);
}
}
}
}
else
if
(
j
obStep
.
IsStep
(
CHARGE_STEP
.
WAIT_AGV_REACH_AIR_DOOR
))
else
if
(
curJ
obStep
.
IsStep
(
CHARGE_STEP
.
WAIT_AGV_REACH_AIR_DOOR
))
{
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
DoorAirOut
,
CurTaskState
))
{
j
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_AGV_REACH_ROOMD_DOOR
);
curJ
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_AGV_REACH_ROOMD_DOOR
);
runInfo
=
string
.
Format
(
"电量充足{0}%,从当前位置{1}回到待机位,先过{2}门"
,
agv
.
Battery
,
agvPlace
,
SettingString
.
RoomC_Name
);
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorCToD
);
UpdateJobTaskInfo
(
agv
);
}
}
else
if
(
j
obStep
.
IsStep
(
CHARGE_STEP
.
WAIT_AGV_REACH_ROOMD_DOOR
))
else
if
(
curJ
obStep
.
IsStep
(
CHARGE_STEP
.
WAIT_AGV_REACH_ROOMD_DOOR
))
{
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
DoorCToD
,
CurTaskState
))
{
if
(
agv
.
Battery
>
AGVManager
.
Charge
.
BatteryMax
)
{
j
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_REACH_STANDBY
);
curJ
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_REACH_STANDBY
);
runInfo
=
"电量充足"
+
agv
.
Battery
+
"%,从当前位置"
+
agvPlace
+
"回到待机位"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
Standby
);
UpdateJobTaskInfo
(
agv
);
}
...
...
@@ -159,46 +159,46 @@ namespace DeviceLibrary
{
if
(!
AGVManager
.
Charge
.
StartCharge
(
agv
))
{
j
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_REACH_STANDBY
);
curJ
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_REACH_STANDBY
);
runInfo
=
"电量"
+
agv
.
Battery
+
"%小于最大电量"
+
AGVManager
.
Charge
.
BatteryMax
+
"%,充电桩有小车,从当前位置"
+
agvPlace
+
"回到待机位"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
Standby
);
UpdateJobTaskInfo
(
agv
);
}
else
{
j
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_REACH_CHARGE_STATION
);
curJ
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_REACH_CHARGE_STATION
);
runInfo
=
"电量"
+
agv
.
Battery
+
"%小于最大电量"
+
AGVManager
.
Charge
.
BatteryMax
+
"%,从当前位置"
+
agvPlace
+
"回到充电位"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
UpdateJobTaskInfo
(
agv
);
}
}
}
}
else
if
(
j
obStep
.
IsStep
(
CHARGE_STEP
.
WAIT_REACH_CHARGE_STATION
))
else
if
(
curJ
obStep
.
IsStep
(
CHARGE_STEP
.
WAIT_REACH_CHARGE_STATION
))
{
if
(
MissionSys
.
CheckTaskIsOK
(
agv
,
CurTarName
,
CurTaskState
))
{
j
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_REACH_CHARGE_OK
);
curJ
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_REACH_CHARGE_OK
);
runInfo
=
"开始充电任务"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
}
}
else
if
(
j
obStep
.
IsStep
(
CHARGE_STEP
.
WAIT_REACH_CHARGE_OK
))
else
if
(
curJ
obStep
.
IsStep
(
CHARGE_STEP
.
WAIT_REACH_CHARGE_OK
))
{
if
(
CheckRandomCharge
(
agv
))
{
if
(
agv
.
Battery
>=
AGVManager
.
Charge
.
BatteryMax
)
{
j
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_REACH_STANDBY
);
curJ
obStep
.
ToNextStep
(
CHARGE_STEP
.
WAIT_REACH_STANDBY
);
runInfo
=
"电量充足,回待机位"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
AGVManager
.
Charge
.
DelOccupyInfo
(
agv
);
MissionSys
.
AssignMission
(
agv
,
SettingString
.
Standby
);
UpdateJobTaskInfo
(
agv
);
...
...
@@ -210,8 +210,9 @@ namespace DeviceLibrary
{
AGVManager
.
Charge
.
DelOccupyInfo
(
agv
);
runInfo
=
"充电过程检测到任务,电量"
+
agv
.
Battery
+
"%大于最小电量"
+
AGVManager
.
Charge
.
BatteryMin
+
"%,中断充电执行任务"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
jobStep
.
CurStep
(),
runInfo
);
jobStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJobStep
.
CurStep
(),
runInfo
);
curJobStep
.
Msg
=
msg
;
RecordRunLog
(
agv
,
curJobStep
.
CurStep
(),
runInfo
,
agv
.
Place
);
return
job
;
}
...
...
@@ -221,10 +222,10 @@ namespace DeviceLibrary
{
if
(
agv
.
Battery
>=
AGVManager
.
Charge
.
BatteryMax
)
{
j
obStep
.
ToNextStep
(
CHARGE_STEP
.
END
);
curJ
obStep
.
ToNextStep
(
CHARGE_STEP
.
END
);
runInfo
=
"充电完成"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
}
else
if
(
agv
.
Battery
>=
AGVManager
.
Charge
.
BatteryMin
)
{
...
...
@@ -232,9 +233,10 @@ namespace DeviceLibrary
if
(
job
!=
null
&&
!(
job
is
ChargeJob
))
{
runInfo
=
"充电过程中检测到任务,电量"
+
agv
.
Battery
+
"%大于最小电量"
+
AGVManager
.
Charge
.
BatteryMin
+
"%,中断充电执行任务"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
AGVManager
.
Charge
.
DelOccupyInfo
(
agv
);
RecordRunLog
(
agv
,
curJobStep
.
CurStep
(),
runInfo
,
agv
.
Place
);
return
job
;
}
}
...
...
@@ -242,37 +244,39 @@ namespace DeviceLibrary
}
else
if
(
j
obStep
.
IsStep
(
CHARGE_STEP
.
WAIT_REACH_STANDBY
))
else
if
(
curJ
obStep
.
IsStep
(
CHARGE_STEP
.
WAIT_REACH_STANDBY
))
{
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
Standby
,
CurTaskState
))
{
j
obStep
.
ToNextStep
(
CHARGE_STEP
.
END
);
curJ
obStep
.
ToNextStep
(
CHARGE_STEP
.
END
);
runInfo
=
"充电完成,到达待机位"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
}
}
else
if
(
j
obStep
.
IsStep
(
CHARGE_STEP
.
END
))
else
if
(
curJ
obStep
.
IsStep
(
CHARGE_STEP
.
END
))
{
runInfo
=
"等待任务"
;
Job
job
=
AGVManager
.
control
.
GetJob
(
agv
);
if
(
job
!=
null
&&
!(
job
is
ChargeJob
))
{
runInfo
=
"在待机位检测到任务,执行任务"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
AGVManager
.
Charge
.
DelOccupyInfo
(
agv
);
RecordRunLog
(
agv
,
curJobStep
.
CurStep
(),
runInfo
,
agv
.
Place
);
return
job
;
}
else
if
(
job
==
null
&&
agv
.
Battery
<
AGVManager
.
Charge
.
BatteryMax
/
2
)
{
j
obStep
.
ToNextStep
(
CHARGE_STEP
.
NONE
);
curJ
obStep
.
ToNextStep
(
CHARGE_STEP
.
NONE
);
runInfo
=
"在待机位暂无任务,且当前电量小于"
+
AGVManager
.
Charge
.
BatteryMax
/
2
+
"%,去充电位"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
AGVManager
.
Charge
.
DelOccupyInfo
(
agv
);
}
}
RecordRunLog
(
agv
,
curJobStep
.
CurStep
(),
runInfo
,
agv
.
Place
);
return
this
;
}
...
...
DeviceLibrary/bean/job/EmptyAGVBackJob.cs
查看文件 @
c0fb871
...
...
@@ -22,6 +22,7 @@ namespace DeviceLibrary
public
EmptyAGVBackJob
(
string
agvPlae
)
{
this
.
agvPlace
=
agvPlae
;
JobName
=
"返回任务"
;
}
...
...
@@ -40,7 +41,7 @@ namespace DeviceLibrary
}
private
JobStep
<
EMPTY_AGV_BACK_STEP
>
j
obStep
=
new
JobStep
<
EMPTY_AGV_BACK_STEP
>(
EMPTY_AGV_BACK_STEP
.
NONE
);
private
JobStep
<
EMPTY_AGV_BACK_STEP
>
curJ
obStep
=
new
JobStep
<
EMPTY_AGV_BACK_STEP
>(
EMPTY_AGV_BACK_STEP
.
NONE
);
/// <summary>
/// 空车返回执行
...
...
@@ -51,7 +52,7 @@ namespace DeviceLibrary
string
msg
=
string
.
Format
(
"{0} 返回任务: "
,
agv
.
Name
);
//bool rtn = false;
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
j
obStep
.
IsStep
(
EMPTY_AGV_BACK_STEP
.
NONE
))
if
(
curJ
obStep
.
IsStep
(
EMPTY_AGV_BACK_STEP
.
NONE
))
{
if
(
AGVManager
.
FindEmptyShelfNode
(
agv
,
out
string
nodeName
,
true
))
{
...
...
@@ -62,36 +63,37 @@ namespace DeviceLibrary
if
(
AGVManager
.
CheckStationState
(
clientNode
,
out
string
rfid
))
{
runInfo
=
"小车在产线 "
+
agvPlace
+
" 准备返回时检测到 "
+
nodeName
+
" 有空料架"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
jobStep
.
CurStep
(),
runInfo
);
jobStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJobStep
.
CurStep
(),
runInfo
);
curJobStep
.
Msg
=
msg
;
RecordRunLog
(
agv
,
curJobStep
.
CurStep
(),
runInfo
,
agv
.
Place
);
return
new
GoEmptyShelfLineJob
(
agvPlace
,
nodeName
,
rfid
);
}
else
{
if
(
AGVManager
.
CheckIsInAirDoor
(
agvPlace
))
{
j
obStep
.
ToNextStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_AGV_REACH_RoomC_AIR_DOOR
);
curJ
obStep
.
ToNextStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_AGV_REACH_RoomC_AIR_DOOR
);
runInfo
=
string
.
Format
(
"从产线{0}回待机位,先过{1}风淋门"
,
agvPlace
,
SettingString
.
RoomC_Name
);
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorAirOut
);
UpdateJobTaskInfo
(
agv
);
}
else
if
(
agvPlace
.
StartsWith
(
SettingString
.
RoomC_Name_Prefix
))
{
j
obStep
.
ToNextStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_AGV_REACH_RoomD_DOOR
);
curJ
obStep
.
ToNextStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_AGV_REACH_RoomD_DOOR
);
runInfo
=
string
.
Format
(
"从产线{0}回待机位,先过{1}门"
,
agvPlace
,
SettingString
.
RoomC_Name
);
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorCToD
);
UpdateJobTaskInfo
(
agv
);
}
else
{
j
obStep
.
ToNextStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_REACH_STANDBY
);
curJ
obStep
.
ToNextStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_REACH_STANDBY
);
runInfo
=
"从产线"
+
agvPlace
+
"回待机位"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
Standby
);
UpdateJobTaskInfo
(
agv
);
}
...
...
@@ -101,28 +103,28 @@ namespace DeviceLibrary
{
if
(
AGVManager
.
CheckIsInAirDoor
(
agvPlace
))
{
j
obStep
.
ToNextStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_AGV_REACH_RoomC_AIR_DOOR
);
curJ
obStep
.
ToNextStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_AGV_REACH_RoomC_AIR_DOOR
);
runInfo
=
string
.
Format
(
"从产线{0}回待机位,先过{1}风淋门"
,
agvPlace
,
SettingString
.
RoomC_Name
);
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorAirOut
);
UpdateJobTaskInfo
(
agv
);
}
else
if
(
agvPlace
.
StartsWith
(
SettingString
.
RoomC_Name_Prefix
))
{
j
obStep
.
ToNextStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_AGV_REACH_RoomD_DOOR
);
curJ
obStep
.
ToNextStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_AGV_REACH_RoomD_DOOR
);
runInfo
=
string
.
Format
(
"从产线{0}回待机位,先过{1}门"
,
agvPlace
,
SettingString
.
RoomC_Name
);
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorCToD
);
UpdateJobTaskInfo
(
agv
);
}
else
{
j
obStep
.
ToNextStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_REACH_STANDBY
);
curJ
obStep
.
ToNextStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_REACH_STANDBY
);
runInfo
=
"从产线"
+
agvPlace
+
"回待机位"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
Standby
);
UpdateJobTaskInfo
(
agv
);
}
...
...
@@ -133,34 +135,34 @@ namespace DeviceLibrary
{
if
(
AGVManager
.
CheckIsInAirDoor
(
agvPlace
))
{
j
obStep
.
ToNextStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_AGV_REACH_RoomC_AIR_DOOR
);
curJ
obStep
.
ToNextStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_AGV_REACH_RoomC_AIR_DOOR
);
runInfo
=
string
.
Format
(
"从产线{0}回待机位,先过{1}风淋门"
,
agvPlace
,
SettingString
.
RoomC_Name
);
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorAirOut
);
UpdateJobTaskInfo
(
agv
);
}
else
if
(
agvPlace
.
StartsWith
(
SettingString
.
RoomC_Name_Prefix
))
{
j
obStep
.
ToNextStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_AGV_REACH_RoomD_DOOR
);
curJ
obStep
.
ToNextStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_AGV_REACH_RoomD_DOOR
);
runInfo
=
string
.
Format
(
"从产线{0}回待机位,先过{1}门"
,
agvPlace
,
SettingString
.
RoomC_Name
);
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorCToD
);
UpdateJobTaskInfo
(
agv
);
}
else
{
j
obStep
.
ToNextStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_REACH_STANDBY
);
curJ
obStep
.
ToNextStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_REACH_STANDBY
);
runInfo
=
"从产线"
+
agvPlace
+
"回待机位"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
Standby
);
UpdateJobTaskInfo
(
agv
);
}
}
}
else
if
(
j
obStep
.
IsStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_REACH_STANDBY
))
else
if
(
curJ
obStep
.
IsStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_REACH_STANDBY
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
Standby
,
CurTaskState
))
...
...
@@ -169,15 +171,17 @@ namespace DeviceLibrary
if
(
job
==
null
&&
agv
.
Battery
<
AGVManager
.
Charge
.
BatteryMax
)
{
runInfo
=
"到达待机位,电量"
+
agv
.
Battery
+
"小于最大电量"
+
AGVManager
.
Charge
.
BatteryMax
+
",暂无任务,去充电"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
jobStep
.
CurStep
(),
runInfo
);
jobStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJobStep
.
CurStep
(),
runInfo
);
curJobStep
.
Msg
=
msg
;
RecordRunLog
(
agv
,
curJobStep
.
CurStep
(),
runInfo
,
agv
.
Place
);
return
new
ChargeJob
(
SettingString
.
Standby
);
}
else
{
runInfo
=
"到达待机位,检测到新任务,执行任务"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
jobStep
.
CurStep
(),
runInfo
);
jobStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJobStep
.
CurStep
(),
runInfo
);
curJobStep
.
Msg
=
msg
;
RecordRunLog
(
agv
,
curJobStep
.
CurStep
(),
runInfo
,
agv
.
Place
);
return
job
;
}
...
...
@@ -187,27 +191,28 @@ namespace DeviceLibrary
if
(
AGVManager
.
FindFullShelfTask
(
agv
))
{
runInfo
=
"从产线"
+
agvPlace
+
"回待机位过程中,检测到A6出满料,去A6"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
jobStep
.
CurStep
(),
runInfo
);
jobStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJobStep
.
CurStep
(),
runInfo
);
curJobStep
.
Msg
=
msg
;
RecordRunLog
(
agv
,
curJobStep
.
CurStep
(),
runInfo
,
agv
.
Place
);
return
new
GoFullShelfStationJob
(
SettingString
.
Standby
);
}
}
}
else
if
(
j
obStep
.
IsStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_AGV_REACH_RoomC_AIR_DOOR
))
else
if
(
curJ
obStep
.
IsStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_AGV_REACH_RoomC_AIR_DOOR
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
DoorAirOut
,
CurTaskState
))
{
j
obStep
.
ToNextStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_AGV_REACH_RoomD_DOOR
);
curJ
obStep
.
ToNextStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_AGV_REACH_RoomD_DOOR
);
runInfo
=
string
.
Format
(
"从产线{0}回待机位,先过{1}门"
,
agvPlace
,
SettingString
.
RoomC_Name
);
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorCToD
);
UpdateJobTaskInfo
(
agv
);
}
}
else
if
(
j
obStep
.
IsStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_AGV_REACH_RoomD_DOOR
))
else
if
(
curJ
obStep
.
IsStep
(
EMPTY_AGV_BACK_STEP
.
WAIT_AGV_REACH_RoomD_DOOR
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
DoorCToD
,
CurTaskState
))
...
...
@@ -215,19 +220,22 @@ namespace DeviceLibrary
if
(
AGVManager
.
FindFullShelfTask
(
agv
))
{
runInfo
=
string
.
Format
(
"从产线{0}到达{1}门,检测到A6出满料,去A6"
,
agvPlace
,
SettingString
.
RoomD_Name
);
msg
+=
string
.
Format
(
"[{0}] {1}"
,
jobStep
.
CurStep
(),
runInfo
);
jobStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJobStep
.
CurStep
(),
runInfo
);
curJobStep
.
Msg
=
msg
;
RecordRunLog
(
agv
,
curJobStep
.
CurStep
(),
runInfo
,
agv
.
Place
);
return
new
GoFullShelfStationJob
(
SettingString
.
DoorCToD
);
}
else
{
runInfo
=
string
.
Format
(
"从产线{0}到达{1}门,暂无任务,去充电位"
,
agvPlace
,
SettingString
.
RoomD_Name
);
msg
+=
string
.
Format
(
"[{0}] {1}"
,
jobStep
.
CurStep
(),
runInfo
);
jobStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJobStep
.
CurStep
(),
runInfo
);
curJobStep
.
Msg
=
msg
;
RecordRunLog
(
agv
,
curJobStep
.
CurStep
(),
runInfo
,
agv
.
Place
);
return
new
ChargeJob
(
SettingString
.
DoorCToD
);
}
}
}
RecordRunLog
(
agv
,
curJobStep
.
CurStep
(),
runInfo
,
agv
.
Place
);
return
this
;
}
/// <summary>
...
...
DeviceLibrary/bean/job/EmptyShelfBackJob.cs
查看文件 @
c0fb871
...
...
@@ -23,6 +23,7 @@ namespace DeviceLibrary
{
EmptyShelfPlace
=
lineName
;
this
.
shelfType
=
shelfType
;
JobName
=
$
"空料架{shelfType.ToString()}返回任务"
;
}
/// <summary>
...
...
@@ -46,7 +47,7 @@ namespace DeviceLibrary
}
private
JobStep
<
EMPTY_SHELF_BACK_STEP
>
j
obStep
=
new
JobStep
<
EMPTY_SHELF_BACK_STEP
>(
EMPTY_SHELF_BACK_STEP
.
NONE
);
private
JobStep
<
EMPTY_SHELF_BACK_STEP
>
curJ
obStep
=
new
JobStep
<
EMPTY_SHELF_BACK_STEP
>(
EMPTY_SHELF_BACK_STEP
.
NONE
);
/// <summary>
/// 空架任务执行
...
...
@@ -57,23 +58,23 @@ namespace DeviceLibrary
string
msg
=
string
.
Format
(
"{0} 空料架[{1}]返回: "
,
agv
.
Name
,
shelfType
.
ToString
());
//bool rtn = false;
//runInfo = "空料架返回:";
if
(
j
obStep
.
IsStep
(
EMPTY_SHELF_BACK_STEP
.
NONE
))
if
(
curJ
obStep
.
IsStep
(
EMPTY_SHELF_BACK_STEP
.
NONE
))
{
if
(
AGVManager
.
CheckIsInAirDoor
(
EmptyShelfPlace
))
//C车间风淋门
{
j
obStep
.
ToNextStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_AIR_DOOR
);
curJ
obStep
.
ToNextStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_AIR_DOOR
);
runInfo
=
string
.
Format
(
"从产线{0}过{1}风淋门"
,
EmptyShelfPlace
,
SettingString
.
RoomC_Name
);
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorAirOut
);
UpdateJobTaskInfo
(
agv
);
}
else
if
(
EmptyShelfPlace
.
StartsWith
(
SettingString
.
RoomC_Name_Prefix
))
//C车间
{
j
obStep
.
ToNextStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_DOOR
);
curJ
obStep
.
ToNextStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_DOOR
);
runInfo
=
string
.
Format
(
"从产线{0}前往{1}门"
,
EmptyShelfPlace
,
SettingString
.
RoomD_Name
);
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorCToD
);
UpdateJobTaskInfo
(
agv
);
}
...
...
@@ -82,10 +83,10 @@ namespace DeviceLibrary
if
(
AGVManager
.
CheckA5A6State
(
agv
,
shelfType
,
out
string
nodeName
))
{
EmptyShelfTargetPlace
=
nodeName
;
j
obStep
.
ToNextStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_A5A6
);
curJ
obStep
.
ToNextStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_A5A6
);
runInfo
=
"从产线 ["
+
EmptyShelfPlace
+
"]送往双层线"
+
EmptyShelfTargetPlace
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
if
(!
EmptyShelfTargetPlace
.
Equals
(
""
))
{
MissionSys
.
AssignMission
(
agv
,
EmptyShelfTargetPlace
);
...
...
@@ -95,29 +96,29 @@ namespace DeviceLibrary
}
else
{
j
obStep
.
ToNextStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_STANDBY
);
curJ
obStep
.
ToNextStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_STANDBY
);
runInfo
=
"双层线暂不需要空料架,从产线["
+
EmptyShelfPlace
+
"]到待机位"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
Standby
);
UpdateJobTaskInfo
(
agv
);
}
}
}
else
if
(
j
obStep
.
IsStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_AIR_DOOR
))
else
if
(
curJ
obStep
.
IsStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_AIR_DOOR
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
DoorAirOut
,
CurTaskState
))
{
j
obStep
.
ToNextStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_DOOR
);
curJ
obStep
.
ToNextStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_DOOR
);
runInfo
=
string
.
Format
(
"出风淋门,前往{0}门"
,
SettingString
.
RoomD_Name
);
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorCToD
);
UpdateJobTaskInfo
(
agv
);
}
}
else
if
(
j
obStep
.
IsStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_DOOR
))
else
if
(
curJ
obStep
.
IsStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_DOOR
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
DoorCToD
,
CurTaskState
))
...
...
@@ -125,52 +126,52 @@ namespace DeviceLibrary
if
(
AGVManager
.
CheckA5A6State
(
agv
,
shelfType
,
out
string
nodeName
))
{
EmptyShelfTargetPlace
=
nodeName
;
j
obStep
.
ToNextStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_A5A6
);
curJ
obStep
.
ToNextStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_A5A6
);
runInfo
=
string
.
Format
(
"进{0}门,送往双层线{1}"
,
SettingString
.
RoomD_Name
,
EmptyShelfTargetPlace
);
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
EmptyShelfTargetPlace
);
UpdateJobTaskInfo
(
agv
);
}
else
{
j
obStep
.
ToNextStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_STANDBY
);
curJ
obStep
.
ToNextStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_STANDBY
);
runInfo
=
string
.
Format
(
"进{0}门,双层线暂不需要空料架,到待机位"
,
SettingString
.
RoomD_Name
);
runInfo
=
"进4D门,双层线暂不需要空料架,到待机位"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
Standby
);
UpdateJobTaskInfo
(
agv
);
}
}
}
else
if
(
j
obStep
.
IsStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_STANDBY
))
else
if
(
curJ
obStep
.
IsStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_STANDBY
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
AGVManager
.
CheckA5A6State
(
agv
,
shelfType
,
out
string
nodeName
))
{
EmptyShelfTargetPlace
=
nodeName
;
j
obStep
.
ToNextStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_A5A6
);
curJ
obStep
.
ToNextStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_A5A6
);
runInfo
=
"待机位检测到双层线需要料架,送往双层线 "
+
EmptyShelfTargetPlace
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
EmptyShelfTargetPlace
);
UpdateJobTaskInfo
(
agv
);
}
}
else
if
(
j
obStep
.
IsStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_A5A6
))
else
if
(
curJ
obStep
.
IsStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_A5A6
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
EmptyShelfTargetPlace
,
CurTaskState
)
&&
EmptyShelfTargetPlace
.
StartsWith
(
SettingString
.
DoubleLine_Name_Prefix
))
{
j
obStep
.
ToNextStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_DOUBLE_LINE_RESPONSE
);
curJ
obStep
.
ToNextStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_DOUBLE_LINE_RESPONSE
);
runInfo
=
"AGV到达 "
+
EmptyShelfTargetPlace
+
",并发送入料架请求[ReadyEnter]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
AGVManager
.
server
.
ReadyEnter
(
EmptyShelfTargetPlace
);
}
}
else
if
(
j
obStep
.
IsStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_DOUBLE_LINE_RESPONSE
))
else
if
(
curJ
obStep
.
IsStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_DOUBLE_LINE_RESPONSE
))
{
int
id
=
AGVManager
.
FindNode
(
EmptyShelfTargetPlace
);
ClientNode
node
=
AGVManager
.
nodeInfo
[
id
];
...
...
@@ -178,64 +179,69 @@ namespace DeviceLibrary
{
if
(!
agv
.
CurTarName
.
Equals
(
SettingString
.
Leave
))
{
j
obStep
.
ToNextStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT__EMPTY_SHELF_IN_DOUBLE_LINE
);
curJ
obStep
.
ToNextStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT__EMPTY_SHELF_IN_DOUBLE_LINE
);
runInfo
=
"收到双层线入料架请求[ReadyEnter]的响应 "
+
EmptyShelfTargetPlace
+
"入料架,小车链条运行"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
Leave
);
UpdateJobTaskInfo
(
agv
);
}
}
else
if
(
jobStep
.
IsTimeOut
(
15000
,
out
double
timeOutValue
))
else
if
(
curJobStep
.
IsTimeOut
(
15000
,
out
TimeSpan
timeOutValue
))
{
tryTimes
++;
if
(
tryTimes
<
3
)
return
this
;
tryTimes
=
0
;
j
obStep
.
ToNextStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_STANDBY
);
curJ
obStep
.
ToNextStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT_AGV_REACH_STANDBY
);
runInfo
=
"双层线"
+
EmptyShelfTargetPlace
+
"暂不需要空料架,从["
+
EmptyShelfTargetPlace
+
"]到待机位"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
Standby
);
UpdateJobTaskInfo
(
agv
);
}
}
else
if
(
j
obStep
.
IsStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT__EMPTY_SHELF_IN_DOUBLE_LINE
))
else
if
(
curJ
obStep
.
IsStep
(
EMPTY_SHELF_BACK_STEP
.
WAIT__EMPTY_SHELF_IN_DOUBLE_LINE
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
Leave
,
CurTaskState
))
{
agv
.
RFID
=
""
;
agv
.
HasError
=
false
;
Job
job
=
AGVManager
.
control
.
GetJob
(
agv
);
if
(
job
!=
null
)
{
runInfo
=
"在双层线检测到任务,执行任务"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
jobStep
.
CurStep
(),
runInfo
);
jobStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJobStep
.
CurStep
(),
runInfo
);
curJobStep
.
Msg
=
msg
;
RecordRunLog
(
agv
,
curJobStep
.
CurStep
(),
runInfo
,
agv
.
Place
);
return
job
;
}
else
{
runInfo
=
"空料架进入"
+
EmptyShelfTargetPlace
+
"完成,暂无任务,回充电位"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
agv
.
RFID
=
""
;
agv
.
BoxDestInfo
=
""
;
RecordRunLog
(
agv
,
curJobStep
.
CurStep
(),
runInfo
,
agv
.
Place
);
return
new
ChargeJob
(
SettingString
.
DoubleLine_Name_Prefix
);
}
}
else
if
(
jobStep
.
IsTimeOut
(
60000
,
out
double
timeOutValue
))
else
if
(
curJobStep
.
IsTimeOut
(
60000
,
out
TimeSpan
timeOutValue1
))
{
runInfo
=
"空料架在["
+
EmptyShelfTargetPlace
+
"]离开小车超时["
+
timeOutValue
.
ToString
(
"f1"
)
+
"秒],请检查料架离开小车的情况"
;
runInfo
=
"空料架在["
+
EmptyShelfTargetPlace
+
"]离开小车超时,请检查料架离开小车的情况"
;
agv
.
HasError
=
true
;
agv
.
SetErrorMsg
(
"空料架在["
+
EmptyShelfTargetPlace
+
"]进入小车超时"
,
timeOutValue1
.
TotalMinutes
.
ToString
(
"f2"
));
}
}
else
if
(
j
obStep
.
IsStep
(
EMPTY_SHELF_BACK_STEP
.
END
))
else
if
(
curJ
obStep
.
IsStep
(
EMPTY_SHELF_BACK_STEP
.
END
))
{
}
RecordRunLog
(
agv
,
curJobStep
.
CurStep
(),
runInfo
,
agv
.
Place
);
return
this
;
}
...
...
DeviceLibrary/bean/job/EnterLeaveShelfJob.cs
查看文件 @
c0fb871
using
Common
;
using
System
;
namespace
DeviceLibrary
{
/// <summary>
...
...
@@ -104,7 +106,7 @@ namespace DeviceLibrary
MissionSys
.
AssignMission
(
agv
,
SettingString
.
Leave
);
UpdateJobTaskInfo
(
agv
);
}
else
if
(
jobStep
.
IsTimeOut
(
15000
,
out
double
timeOutValue
))
else
if
(
jobStep
.
IsTimeOut
(
15000
,
out
TimeSpan
timeOutValue
))
{
jobStep
.
ToNextStep
(
ENTER_LEAVE_SHELF_STEP
.
NONE
);
runInfo
=
"AGV到达 "
+
LineName
+
",15秒后重新向产线发送入料架请求[ReadyEnter]"
;
...
...
@@ -125,7 +127,7 @@ namespace DeviceLibrary
MissionSys
.
AssignMission
(
agv
,
SettingString
.
Enter
);
UpdateJobTaskInfo
(
agv
);
}
else
if
(
jobStep
.
IsTimeOut
(
15000
,
out
double
timeOutValue
))
else
if
(
jobStep
.
IsTimeOut
(
15000
,
out
TimeSpan
timeOutValue
))
{
jobStep
.
ToNextStep
(
ENTER_LEAVE_SHELF_STEP
.
NONE
);
runInfo
=
"AGV到达 "
+
LineName
+
",15秒后重新向产线发送入料架请求[ReadyLeave]"
;
...
...
@@ -147,7 +149,7 @@ namespace DeviceLibrary
return
new
EmptyAGVBackJob
(
LineName
);
}
else
if
(
jobStep
.
IsTimeOut
(
60000
,
out
double
timeOutValue
))
else
if
(
jobStep
.
IsTimeOut
(
60000
,
out
TimeSpan
timeOutValue
))
{
//链条停止
runInfo
=
"料架在["
+
LineName
+
"]离开小车超时["
+
timeOutValue
.
ToString
(
"f1"
)
+
"秒],请检查料架离开小车的情况"
;
...
...
@@ -169,7 +171,7 @@ namespace DeviceLibrary
AGVManager
.
unlockManager
.
DelMission
(
LineName
,
RFID
);
return
new
EmptyShelfBackJob
(
LineName
,
eShelfType
.
BigShelf
);
}
else
if
(
jobStep
.
IsTimeOut
(
60000
,
out
double
timeOutValue
))
else
if
(
jobStep
.
IsTimeOut
(
60000
,
out
TimeSpan
timeOutValue
))
{
//链条停止
runInfo
=
"料架在["
+
LineName
+
"]进入小车超时["
+
timeOutValue
.
ToString
(
"f1"
)
+
"秒],请检查料架进入小车的情况"
;
...
...
DeviceLibrary/bean/job/GoEmptyShelfLineJob.cs
查看文件 @
c0fb871
using
Common
;
using
System
;
namespace
DeviceLibrary
{
...
...
@@ -17,6 +18,7 @@ namespace DeviceLibrary
EmptyShelfPlace
=
palce
;
this
.
agvPlae
=
agvPlae
;
RFID
=
rfid
;
JobName
=
"回收空料架任务"
;
}
public
string
RFID
{
get
;
set
;
}
/// <summary>
...
...
@@ -40,7 +42,7 @@ namespace DeviceLibrary
}
private
JobStep
<
TAKE_EMPTY_STEP
>
j
obStep
=
new
JobStep
<
TAKE_EMPTY_STEP
>(
TAKE_EMPTY_STEP
.
NONE
);
private
JobStep
<
TAKE_EMPTY_STEP
>
curJ
obStep
=
new
JobStep
<
TAKE_EMPTY_STEP
>(
TAKE_EMPTY_STEP
.
NONE
);
/// <summary>
/// 空架任务执行,去目的地
...
...
@@ -51,14 +53,14 @@ namespace DeviceLibrary
string
msg
=
string
.
Format
(
"{0} 回收空料架[RFID={1}]: "
,
agv
.
Name
,
RFID
);
//bool rtn = false;
int
nodeIdx
=
AGVManager
.
FindNode
(
EmptyShelfPlace
);
if
(
j
obStep
.
IsStep
(
TAKE_EMPTY_STEP
.
NONE
))
if
(
curJ
obStep
.
IsStep
(
TAKE_EMPTY_STEP
.
NONE
))
{
if
(
agvPlae
.
StartsWith
(
SettingString
.
RoomC_Name_Prefix
)
&&
AGVManager
.
CheckIsInAirDoor
(
agvPlae
)
&&
!
AGVManager
.
CheckIsInAirDoor
(
EmptyShelfPlace
))
//4C风淋门内->风淋门外
{
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_REACH_AIR_OUT_DOOR
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_REACH_AIR_OUT_DOOR
);
runInfo
=
"去产线"
+
EmptyShelfPlace
+
",先过风淋门["
+
agvPlae
+
"->"
+
EmptyShelfPlace
+
"]"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorAirOut
);
UpdateJobTaskInfo
(
agv
);
}
...
...
@@ -68,19 +70,19 @@ namespace DeviceLibrary
{
if
(
AGVManager
.
CheckRoomCTarget
(
agv
,
EmptyShelfPlace
))
//被占用
{
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_REACH_TEMP_PLACE
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_REACH_TEMP_PLACE
);
runInfo
=
"目的地"
+
EmptyShelfPlace
+
"有小车占用,先到临时待机位"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
AGVManager
.
MoveToRoomCStandy
(
agv
);
UpdateJobTaskInfo
(
agv
);
}
else
{
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_REACH_AIR_IN_DOOR
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_REACH_AIR_IN_DOOR
);
runInfo
=
"去产线"
+
EmptyShelfPlace
+
",先过风淋门["
+
agvPlae
+
"->"
+
EmptyShelfPlace
+
"]"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorAirIn
);
UpdateJobTaskInfo
(
agv
);
}
...
...
@@ -89,10 +91,10 @@ namespace DeviceLibrary
agvPlae
.
Equals
(
SettingString
.
AutoCharge
))
&&
EmptyShelfPlace
.
StartsWith
(
SettingString
.
RoomC_Name_Prefix
))
//4D->4C
{
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_REACH_4C_DOOR
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_REACH_4C_DOOR
);
runInfo
=
"去产线"
+
EmptyShelfPlace
+
",先过4C门["
+
agvPlae
+
"->"
+
EmptyShelfPlace
+
"]"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorDToC
);
UpdateJobTaskInfo
(
agv
);
}
...
...
@@ -103,19 +105,19 @@ namespace DeviceLibrary
{
if
(
AGVManager
.
CheckRoomCTarget
(
agv
,
EmptyShelfPlace
))
//被占用
{
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_REACH_AIR_OUT_DOOR
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_REACH_AIR_OUT_DOOR
);
runInfo
=
"目的地"
+
EmptyShelfPlace
+
"有小车占用,先过风淋门,再到临时待机位"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorAirOut
);
UpdateJobTaskInfo
(
agv
);
}
else
{
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
ASSIGN_AGV_TASK
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
ASSIGN_AGV_TASK
);
runInfo
=
"开始任务["
+
agvPlae
+
"->"
+
EmptyShelfPlace
+
"]"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
}
}
else
if
(
agvPlae
.
Equals
(
""
)
||
(!
AGVManager
.
CheckIsInAirDoor
(
agvPlae
))
&&
!
AGVManager
.
CheckIsInAirDoor
(
EmptyShelfPlace
))
//都在风淋门外
...
...
@@ -124,27 +126,27 @@ namespace DeviceLibrary
{
if
(
AGVManager
.
CheckRoomCTarget
(
agv
,
EmptyShelfPlace
))
//被占用
{
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_REACH_TEMP_PLACE
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_REACH_TEMP_PLACE
);
runInfo
=
"目的地"
+
EmptyShelfPlace
+
"有小车占用,先到临时待机位"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
AGVManager
.
MoveToRoomCStandy
(
agv
);
UpdateJobTaskInfo
(
agv
);
}
else
{
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
ASSIGN_AGV_TASK
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
ASSIGN_AGV_TASK
);
runInfo
=
"开始任务["
+
agvPlae
+
"->"
+
EmptyShelfPlace
+
"]"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
}
}
else
if
(
agvPlae
.
StartsWith
(
SettingString
.
RoomC_Name_Prefix
)
&&
EmptyShelfPlace
.
StartsWith
(
SettingString
.
RoomD_Name_Prefix
))
//4C->4D
{
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_REACH_4D_DOOR
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_REACH_4D_DOOR
);
runInfo
=
"去产线"
+
EmptyShelfPlace
+
",先过4D门["
+
agvPlae
+
"->"
+
EmptyShelfPlace
+
"]"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorCToD
);
UpdateJobTaskInfo
(
agv
);
}
...
...
@@ -152,27 +154,27 @@ namespace DeviceLibrary
agvPlae
.
Equals
(
SettingString
.
AutoCharge
))
&&
EmptyShelfPlace
.
StartsWith
(
SettingString
.
RoomC_Name_Prefix
))
//4D->4C
{
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_REACH_4C_DOOR
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_REACH_4C_DOOR
);
runInfo
=
"去产线"
+
EmptyShelfPlace
+
",先过4C门["
+
agvPlae
+
"->"
+
EmptyShelfPlace
+
"]"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorDToC
);
UpdateJobTaskInfo
(
agv
);
}
else
//4D->4D
{
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
ASSIGN_AGV_TASK
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
ASSIGN_AGV_TASK
);
runInfo
=
"开始任务["
+
agvPlae
+
"->"
+
EmptyShelfPlace
+
"]"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
}
}
}
}
else
if
(
j
obStep
.
IsStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_REACH_AIR_OUT_DOOR
))
else
if
(
curJ
obStep
.
IsStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_REACH_AIR_OUT_DOOR
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
DoorAirOut
,
CurTaskState
))
...
...
@@ -182,65 +184,65 @@ namespace DeviceLibrary
{
if
(
AGVManager
.
CheckRoomCTarget
(
agv
,
EmptyShelfPlace
))
//被占用
{
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_REACH_TEMP_PLACE
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_REACH_TEMP_PLACE
);
runInfo
=
"到风淋门外,目的地"
+
EmptyShelfPlace
+
"有小车占用,先到临时待机位"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
AGVManager
.
MoveToRoomCStandy
(
agv
);
UpdateJobTaskInfo
(
agv
);
}
else
{
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
ASSIGN_AGV_TASK
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
ASSIGN_AGV_TASK
);
runInfo
=
"到风淋门外,开始任务["
+
agvPlae
+
"->"
+
EmptyShelfPlace
+
"]"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
}
}
else
if
(
agvPlae
.
StartsWith
(
SettingString
.
RoomC_Name_Prefix
)
&&
EmptyShelfPlace
.
StartsWith
(
SettingString
.
RoomD_Name_Prefix
))
//4C->4D
{
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_REACH_4D_DOOR
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_REACH_4D_DOOR
);
runInfo
=
"到风淋门外,去产线"
+
EmptyShelfPlace
+
",先过4D门["
+
agvPlae
+
"->"
+
EmptyShelfPlace
+
"]"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorCToD
);
UpdateJobTaskInfo
(
agv
);
}
//都在风淋门内,到达风淋门外
else
{
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_REACH_TEMP_PLACE
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_REACH_TEMP_PLACE
);
runInfo
=
"到风淋门外,目的地"
+
EmptyShelfPlace
+
"有小车占用,先到临时待机位"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
AGVManager
.
MoveToRoomCStandy
(
agv
);
UpdateJobTaskInfo
(
agv
);
}
}
}
else
if
(
j
obStep
.
IsStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_REACH_AIR_IN_DOOR
))
else
if
(
curJ
obStep
.
IsStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_REACH_AIR_IN_DOOR
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
DoorAirIn
,
CurTaskState
))
{
//4C风淋门外->风淋门内
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
ASSIGN_AGV_TASK
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
ASSIGN_AGV_TASK
);
runInfo
=
"到达风淋门内,开始任务["
+
agvPlae
+
"->"
+
EmptyShelfPlace
+
"]"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
}
}
else
if
(
j
obStep
.
IsStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_REACH_4C_DOOR
))
else
if
(
curJ
obStep
.
IsStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_REACH_4C_DOOR
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
DoorDToC
,
CurTaskState
))
{
if
(
AGVManager
.
CheckRoomCTarget
(
agv
,
EmptyShelfPlace
))
//被占用
{
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_REACH_TEMP_PLACE
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_REACH_TEMP_PLACE
);
runInfo
=
"目的地"
+
EmptyShelfPlace
+
"有小车占用,先到临时待机位"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
AGVManager
.
MoveToRoomCStandy
(
agv
);
UpdateJobTaskInfo
(
agv
);
}
...
...
@@ -248,80 +250,80 @@ namespace DeviceLibrary
{
if
(
AGVManager
.
CheckIsInAirDoor
(
EmptyShelfPlace
))
{
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_REACH_AIR_IN_DOOR
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_REACH_AIR_IN_DOOR
);
runInfo
=
"去产线"
+
EmptyShelfPlace
+
",先过风淋门["
+
agvPlae
+
"->"
+
EmptyShelfPlace
+
"]"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorAirIn
);
UpdateJobTaskInfo
(
agv
);
}
else
{
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
ASSIGN_AGV_TASK
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
ASSIGN_AGV_TASK
);
runInfo
=
"开始任务["
+
agvPlae
+
"->"
+
EmptyShelfPlace
+
"]"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
}
}
}
}
else
if
(
j
obStep
.
IsStep
(
TAKE_EMPTY_STEP
.
WAIT_REACH_TEMP_PLACE
))
else
if
(
curJ
obStep
.
IsStep
(
TAKE_EMPTY_STEP
.
WAIT_REACH_TEMP_PLACE
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
C4_STANDBY1
,
CurTaskState
)
||
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
C4_STANDBY2
,
CurTaskState
))
{
if
(!
AGVManager
.
CheckRoomCTarget
(
agv
,
EmptyShelfPlace
))
//未占用
{
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
ASSIGN_AGV_TASK
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
ASSIGN_AGV_TASK
);
runInfo
=
"开始执行回收空料架任务["
+
agvPlae
+
"->"
+
EmptyShelfPlace
+
"]"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
//AGVManager.DeleteStandyInfo(agv);
}
}
}
else
if
(
j
obStep
.
IsStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_REACH_4D_DOOR
))
else
if
(
curJ
obStep
.
IsStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_REACH_4D_DOOR
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
DoorCToD
,
CurTaskState
))
{
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
ASSIGN_AGV_TASK
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
ASSIGN_AGV_TASK
);
runInfo
=
"开始执行回收空料架任务["
+
agvPlae
+
"->"
+
EmptyShelfPlace
+
"]"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
}
}
else
if
(
j
obStep
.
IsStep
(
TAKE_EMPTY_STEP
.
ASSIGN_AGV_TASK
))
else
if
(
curJ
obStep
.
IsStep
(
TAKE_EMPTY_STEP
.
ASSIGN_AGV_TASK
))
{
if
(
nodeIdx
>
-
1
)
{
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_START_TASK
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_START_TASK
);
runInfo
=
"AGV 添加任务:移动到"
+
EmptyShelfPlace
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
EmptyShelfPlace
);
UpdateJobTaskInfo
(
agv
);
}
else
{
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
ASSIGN_AGV_TASK
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
ASSIGN_AGV_TASK
);
runInfo
=
EmptyShelfPlace
+
" 不存在或未开启调用"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
}
}
else
if
(
j
obStep
.
IsStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_START_TASK
))
else
if
(
curJ
obStep
.
IsStep
(
TAKE_EMPTY_STEP
.
WAIT_AGV_START_TASK
))
{
if
(
agv
.
CurTaskState
.
Equals
(
SettingString
.
Executing
))
{
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_REACH_PLACE
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_REACH_PLACE
);
runInfo
=
"AGV开始向目的地["
+
EmptyShelfPlace
+
"]移动"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
}
}
else
if
(
j
obStep
.
IsStep
(
TAKE_EMPTY_STEP
.
WAIT_REACH_PLACE
))
else
if
(
curJ
obStep
.
IsStep
(
TAKE_EMPTY_STEP
.
WAIT_REACH_PLACE
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
EmptyShelfPlace
,
CurTaskState
))
...
...
@@ -335,15 +337,15 @@ namespace DeviceLibrary
//}
//else
{
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_LINE_RESPONSE
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_LINE_RESPONSE
);
runInfo
=
"AGV到达 "
+
EmptyShelfPlace
+
" 向产线发送出料架请求[ReadyLeave]"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
if
(
nodeIdx
==
-
1
)
{
runInfo
=
EmptyShelfPlace
+
" 未开启调用"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
return
this
;
}
ClientNode
node
=
AGVManager
.
nodeInfo
[
nodeIdx
];
...
...
@@ -353,52 +355,57 @@ namespace DeviceLibrary
}
}
else
if
(
j
obStep
.
IsStep
(
TAKE_EMPTY_STEP
.
WAIT_LINE_RESPONSE
))
else
if
(
curJ
obStep
.
IsStep
(
TAKE_EMPTY_STEP
.
WAIT_LINE_RESPONSE
))
{
if
(
nodeIdx
==
-
1
)
{
runInfo
=
EmptyShelfPlace
+
" 未开启调用"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
return
this
;
}
ClientNode
node
=
AGVManager
.
nodeInfo
[
nodeIdx
];
agv
.
RFID
=
node
.
RFID
;
if
(
node
.
StateEquals
(
eNodeStatus
.
MayLeave
))
{
agv
.
HasError
=
false
;
if
(!
agv
.
CurTarName
.
Equals
(
"Enter"
))
{
j
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_TAKE_EMPTY_SHELF
);
curJ
obStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_TAKE_EMPTY_SHELF
);
runInfo
=
"收到产线出料请求[ReadyLeave]的响应 "
+
EmptyShelfPlace
+
"出料架,小车链条运行"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
//agv.RFID = node.RFID;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
Enter
);
UpdateJobTaskInfo
(
agv
);
}
}
else
if
(
jobStep
.
IsTimeOut
(
15000
,
out
double
timeOutValue
))
else
if
(
curJobStep
.
IsTimeOut
(
15000
,
out
TimeSpan
timeOutValue
))
{
jobStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_REACH_PLACE
);
curJobStep
.
ToNextStep
(
TAKE_EMPTY_STEP
.
WAIT_REACH_PLACE
);
agv
.
HasError
=
true
;
}
}
else
if
(
j
obStep
.
IsStep
(
TAKE_EMPTY_STEP
.
WAIT_TAKE_EMPTY_SHELF
))
else
if
(
curJ
obStep
.
IsStep
(
TAKE_EMPTY_STEP
.
WAIT_TAKE_EMPTY_SHELF
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
Enter
,
CurTaskState
))
{
agv
.
HasError
=
false
;
ClientNode
node
=
AGVManager
.
nodeInfo
[
nodeIdx
];
//回收空料架数量减少1
AGVManager
.
unlockManager
.
DelMission
(
EmptyShelfPlace
,
RFID
);
if
(!
agvPlae
.
Equals
(
SettingString
.
RoomDFeederOut
)
&&
!
agvPlae
.
Equals
(
SettingString
.
RoomCFeederOut
))
HttpManager
.
ClearRFID
(
EmptyShelfPlace
,
RFID
);
runInfo
=
"空料架在["
+
EmptyShelfPlace
+
"]进入小车完成"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
//4DfeederOut默认大料架
// if (agv.Place.Equals(SettingString.RoomDFeederOut))
// return new EmptyShelfBackJob(EmptyShelfPlace, eShelfType.BigShelf);
RecordRunLog
(
agv
,
curJobStep
.
CurStep
(),
runInfo
,
agv
.
Place
);
if
(
agv
.
RFID
.
StartsWith
(
"D"
))
return
new
EmptyShelfBackJob
(
EmptyShelfPlace
,
eShelfType
.
SmallShelf
);
...
...
@@ -410,20 +417,19 @@ namespace DeviceLibrary
return
new
EmptyShelfBackJob
(
EmptyShelfPlace
,
eShelfType
.
SmallShelf
);
}
else
if
(
jobStep
.
IsTimeOut
(
60000
,
out
double
timeOutValue
))
else
if
(
curJobStep
.
IsTimeOut
(
60000
,
out
TimeSpan
timeOutValue
))
{
//链条停止
runInfo
=
"空料架在["
+
EmptyShelfPlace
+
"]进入小车超时[
"
+
timeOutValue
.
ToString
(
"f1"
)
+
"秒],请检查料架进入小车的情况"
+
"[
RFID="
+
RFID
+
"]"
;
// msg += string.Format("[{0}] {1}", jobStep.CurStep(),runInfo)
;
//TakeEmptyStep.Msg = msg
;
runInfo
=
"空料架在["
+
EmptyShelfPlace
+
"]进入小车超时[RFID="
+
RFID
+
"]"
;
agv
.
HasError
=
true
;
agv
.
SetErrorMsg
(
"空料架在["
+
EmptyShelfPlace
+
"]进入小车超时"
,
timeOutValue
.
TotalMinutes
.
ToString
(
"f2"
))
;
}
}
else
if
(
j
obStep
.
IsStep
(
TAKE_EMPTY_STEP
.
END
))
else
if
(
curJ
obStep
.
IsStep
(
TAKE_EMPTY_STEP
.
END
))
{
}
RecordRunLog
(
agv
,
curJobStep
.
CurStep
(),
runInfo
,
agv
.
Place
);
return
this
;
}
...
...
DeviceLibrary/bean/job/GoFullShelfStationJob.cs
查看文件 @
c0fb871
using
Common
;
using
System
;
namespace
DeviceLibrary
{
/// <summary>
...
...
@@ -15,6 +17,7 @@ namespace DeviceLibrary
{
FullShelfStationPlace
=
palce
;
agvPlace
=
agvCurPlace
;
JobName
=
"接满料任务"
;
}
/// <summary>
...
...
@@ -42,69 +45,69 @@ namespace DeviceLibrary
public
HttpManager
.
BoxDestInfo
FullShelfDestInfo
=
null
;
private
JobStep
<
GO_FULL_SHELF_STATION_STEP
>
j
obStep
=
new
JobStep
<
GO_FULL_SHELF_STATION_STEP
>(
GO_FULL_SHELF_STATION_STEP
.
NONE
);
private
JobStep
<
GO_FULL_SHELF_STATION_STEP
>
curJ
obStep
=
new
JobStep
<
GO_FULL_SHELF_STATION_STEP
>(
GO_FULL_SHELF_STATION_STEP
.
NONE
);
public
override
Job
Execute
(
Agv_Info
agv
)
{
string
msg
=
string
.
Format
(
"{0} 接满料任务: "
,
agv
.
Name
);
//bool rtn = false;
if
(
j
obStep
.
IsStep
(
GO_FULL_SHELF_STATION_STEP
.
NONE
))
if
(
curJ
obStep
.
IsStep
(
GO_FULL_SHELF_STATION_STEP
.
NONE
))
{
j
obStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_CHECK_RESULT
);
curJ
obStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_CHECK_RESULT
);
runInfo
=
"检查AGV负载情况"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
CheckShelf
);
UpdateJobTaskInfo
(
agv
);
}
else
if
(
j
obStep
.
IsStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_CHECK_RESULT
))
else
if
(
curJ
obStep
.
IsStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_CHECK_RESULT
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
CheckShelf
,
CurTaskState
))
{
if
(
agv
.
IsExistShelf
)
{
j
obStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
END
);
curJ
obStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
END
);
runInfo
=
"车上有料架,无法去入料口出料"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
IsLoadOnAGV
=
true
;
}
else
if
(!
agv
.
IsExistShelf
)
{
if
(
agvPlace
.
Equals
(
""
)
||
agvPlace
.
Equals
(
SettingString
.
Standby
)
||
agvPlace
.
StartsWith
(
SettingString
.
AutoCharge
))
//待机位/充电位接到任务
{
j
obStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_AGV_REACH_A6
);
curJ
obStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_AGV_REACH_A6
);
runInfo
=
"无负载,准备运动到入料口"
+
FullShelfStationPlace
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
FullShelfStationPlace
);
UpdateJobTaskInfo
(
agv
);
}
else
if
(
AGVManager
.
CheckIsInAirDoor
(
agvPlace
))
{
j
obStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_AGV_REACH_AIR_DOOR
);
curJ
obStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_AGV_REACH_AIR_DOOR
);
runInfo
=
"在风淋门内,先过风淋门"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorAirOut
);
UpdateJobTaskInfo
(
agv
);
}
else
if
(
agvPlace
.
StartsWith
(
SettingString
.
RoomC_Name_Prefix
))
//4C车间
{
j
obStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_AGV_REACH_DOOR
);
curJ
obStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_AGV_REACH_DOOR
);
runInfo
=
string
.
Format
(
"在{0}车间,向{1}门运行,再到双层线入料口"
,
SettingString
.
RoomC_Name
,
SettingString
.
RoomD_Name
);
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorCToD
);
UpdateJobTaskInfo
(
agv
);
}
else
{
j
obStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_AGV_REACH_A6
);
curJ
obStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_AGV_REACH_A6
);
runInfo
=
"无负载,准备运动到入料口"
+
FullShelfStationPlace
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
FullShelfStationPlace
);
UpdateJobTaskInfo
(
agv
);
}
...
...
@@ -113,35 +116,35 @@ namespace DeviceLibrary
}
}
else
if
(
j
obStep
.
IsStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_AGV_REACH_AIR_DOOR
))
else
if
(
curJ
obStep
.
IsStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_AGV_REACH_AIR_DOOR
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
DoorAirOut
,
CurTaskState
))
{
j
obStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_AGV_REACH_DOOR
);
curJ
obStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_AGV_REACH_DOOR
);
runInfo
=
string
.
Format
(
"过风淋门,向{0}门运行,再到双层线入料口{1}"
,
SettingString
.
RoomD_Name
,
FullShelfStationPlace
);
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorCToD
);
UpdateJobTaskInfo
(
agv
);
}
}
else
if
(
j
obStep
.
IsStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_AGV_REACH_DOOR
))
else
if
(
curJ
obStep
.
IsStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_AGV_REACH_DOOR
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
DoorCToD
,
CurTaskState
))
{
j
obStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_AGV_REACH_A6
);
curJ
obStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_AGV_REACH_A6
);
runInfo
=
string
.
Format
(
"到达{0}门,准备运动到双层线入料口{1}"
,
SettingString
.
RoomD_Name
,
FullShelfStationPlace
);
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
FullShelfStationPlace
);
UpdateJobTaskInfo
(
agv
);
}
}
else
if
(
j
obStep
.
IsStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_AGV_REACH_A6
))
else
if
(
curJ
obStep
.
IsStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_AGV_REACH_A6
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
FullShelfStationPlace
,
CurTaskState
))
...
...
@@ -152,15 +155,15 @@ namespace DeviceLibrary
{
if
(
HttpManager
.
FindFullShelfTarget
(
node
.
RFID
,
out
FullShelfDestInfo
))
{
j
obStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_DOUBLE_LINE_RESPONSE
);
curJ
obStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_DOUBLE_LINE_RESPONSE
);
if
(
FullShelfDestInfo
!=
null
)
{
AGVManager
.
GetLineNameByNodeName
(
FullShelfDestInfo
.
location
,
out
string
line
);
agv
.
BoxDestInfo
=
FullShelfDestInfo
.
ShowInfo
(
line
);
}
runInfo
=
"AGV到达 "
+
FullShelfStationPlace
+
",并发送出料架请求[ReadyLeave]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
AGVManager
.
server
.
ReadyLeave
(
FullShelfStationPlace
);
}
else
...
...
@@ -169,16 +172,16 @@ namespace DeviceLibrary
{
AGVManager
.
GetLineNameByNodeName
(
FullShelfDestInfo
.
location
,
out
string
line
);
runInfo
=
"AGV到达 "
+
FullShelfStationPlace
+
",查询满料架目的地:"
+
FullShelfDestInfo
.
ShowInfo
(
line
);
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
;
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
;
curJ
obStep
.
Msg
=
msg
;
}
else
{
//[{"msg":"0料车已解绑或未发新料"}]
j
obStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_REACH_STANDBY
);
curJ
obStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_REACH_STANDBY
);
runInfo
=
"从产线"
+
agvPlace
+
"回到待机位"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
Standby
);
UpdateJobTaskInfo
(
agv
);
}
...
...
@@ -188,70 +191,76 @@ namespace DeviceLibrary
}
}
else
if
(
j
obStep
.
IsStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_REACH_STANDBY
))
else
if
(
curJ
obStep
.
IsStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_REACH_STANDBY
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
Standby
,
CurTaskState
))
{
j
obStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
END
);
curJ
obStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
END
);
runInfo
=
"到达待机位"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
}
}
else
if
(
j
obStep
.
IsStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_DOUBLE_LINE_RESPONSE
))
else
if
(
curJ
obStep
.
IsStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_DOUBLE_LINE_RESPONSE
))
{
int
id
=
AGVManager
.
FindNode
(
FullShelfStationPlace
);
if
(
id
==
-
1
)
{
runInfo
=
"未找到节点:"
+
FullShelfStationPlace
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
return
this
;
}
ClientNode
node
=
AGVManager
.
nodeInfo
[
id
];
if
(
node
.
StateEquals
(
eNodeStatus
.
MayLeave
))
{
agv
.
HasError
=
false
;
if
(!
agv
.
CurTarName
.
Equals
(
"Enter"
))
{
j
obStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT__FULL_SHELF_IN_AGV
);
curJ
obStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT__FULL_SHELF_IN_AGV
);
runInfo
=
"收到双层线出料架请求[ReadyLeave]的响应 "
+
FullShelfStationPlace
+
"出料架,小车链条运行"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
Enter
);
UpdateJobTaskInfo
(
agv
);
}
}
else
if
(
jobStep
.
IsTimeOut
(
15000
,
out
double
timeOutValue
))
else
if
(
curJobStep
.
IsTimeOut
(
15000
,
out
TimeSpan
timeOutValue
))
{
jobStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_AGV_REACH_A6
);
curJobStep
.
ToNextStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT_AGV_REACH_A6
);
agv
.
HasError
=
true
;
agv
.
SetErrorMsg
(
$
"{FullShelfStationPlace}回复出料请求超时"
,
timeOutValue
.
TotalMinutes
.
ToString
(
"f2"
));
}
}
else
if
(
j
obStep
.
IsStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT__FULL_SHELF_IN_AGV
))
else
if
(
curJ
obStep
.
IsStep
(
GO_FULL_SHELF_STATION_STEP
.
WAIT__FULL_SHELF_IN_AGV
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
Enter
,
CurTaskState
))
{
agv
.
HasError
=
false
;
//GoFullShelfStationStep.ToNextStep(GO_FULL_SHELF_STATION_STEP.END);
runInfo
=
FullShelfStationPlace
+
"满料架进入小车完成"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
jobStep
.
CurStep
(),
runInfo
);
jobStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJobStep
.
CurStep
(),
runInfo
);
curJobStep
.
Msg
=
msg
;
RecordRunLog
(
agv
,
curJobStep
.
CurStep
(),
runInfo
,
agv
.
Place
);
return
new
SendFullShelfToLineJob
(
FullShelfDestInfo
);
}
else
if
(
jobStep
.
IsTimeOut
(
60000
,
out
double
timeOutValue
))
else
if
(
curJobStep
.
IsTimeOut
(
60000
,
out
TimeSpan
timeOutValue
))
{
//链条停止
runInfo
=
"满料架在["
+
FullShelfStationPlace
+
"]进入小车超时
["
+
timeOutValue
.
ToString
(
"f1"
)
+
"秒]
,请检查料架进入小车的情况"
;
runInfo
=
"满料架在["
+
FullShelfStationPlace
+
"]进入小车超时,请检查料架进入小车的情况"
;
//msg +=runInfo;
//GoFullShelfStationStep.Msg = msg;
agv
.
HasError
=
true
;
agv
.
SetErrorMsg
(
"满料架在["
+
FullShelfStationPlace
+
"]进入小车超时"
,
timeOutValue
.
TotalMinutes
.
ToString
(
"f2"
));
}
}
RecordRunLog
(
agv
,
curJobStep
.
CurStep
(),
runInfo
,
agv
.
Place
);
return
this
;
}
...
...
DeviceLibrary/bean/job/SendFullShelfToLineJob.cs
查看文件 @
c0fb871
using
Common
;
using
System
;
namespace
DeviceLibrary
{
/// <summary>
...
...
@@ -18,6 +20,7 @@ namespace DeviceLibrary
RFID
=
boxDestInfo
.
id
;
BoxDestInfo
=
boxDestInfo
;
IsIgnoreBigShelf
=
isIgNoreBigShelf
;
JobName
=
"送满料任务"
;
}
/// <summary>
...
...
@@ -44,47 +47,47 @@ namespace DeviceLibrary
}
private
JobStep
<
SEND_FULL_SHELF_STEP
>
j
obStep
=
new
JobStep
<
SEND_FULL_SHELF_STEP
>(
SEND_FULL_SHELF_STEP
.
NONE
);
private
JobStep
<
SEND_FULL_SHELF_STEP
>
curJ
obStep
=
new
JobStep
<
SEND_FULL_SHELF_STEP
>(
SEND_FULL_SHELF_STEP
.
NONE
);
public
override
Job
Execute
(
Agv_Info
agv
)
{
string
msg
=
string
.
Format
(
"{0} 送满料任务[RFID={1}]: "
,
agv
.
Name
,
RFID
);
//bool rtn = false;
agv
.
RFID
=
RFID
;
if
(
j
obStep
.
IsStep
(
SEND_FULL_SHELF_STEP
.
NONE
))
if
(
curJ
obStep
.
IsStep
(
SEND_FULL_SHELF_STEP
.
NONE
))
{
HttpManager
.
AgvRemoveRfid
(
RFID
);
if
(
FullShelfPlace
.
StartsWith
(
SettingString
.
RoomC_Name_Prefix
))
{
j
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT_AGV_REACH_DOOR
);
curJ
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT_AGV_REACH_DOOR
);
runInfo
=
string
.
Format
(
"前往{0}门,从双层线A6送往{1}"
,
SettingString
.
RoomD_Name
,
FullShelfPlace
);
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorDToC
);
UpdateJobTaskInfo
(
agv
);
}
else
{
j
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT_AGV_REACH_LINE
);
curJ
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT_AGV_REACH_LINE
);
runInfo
=
"从双层线A6送往["
+
FullShelfPlace
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
FullShelfPlace
);
UpdateJobTaskInfo
(
agv
);
}
}
else
if
(
j
obStep
.
IsStep
(
SEND_FULL_SHELF_STEP
.
WAIT_AGV_REACH_DOOR
))
else
if
(
curJ
obStep
.
IsStep
(
SEND_FULL_SHELF_STEP
.
WAIT_AGV_REACH_DOOR
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
DoorDToC
,
CurTaskState
))
{
if
(
AGVManager
.
CheckRoomCTarget
(
agv
,
FullShelfPlace
))
//被占用
{
j
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT_REACH_TEMP_PLACE
);
curJ
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT_REACH_TEMP_PLACE
);
runInfo
=
"目的地"
+
FullShelfPlace
+
"有小车占用,先到临时待机位"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
AGVManager
.
MoveToRoomCStandy
(
agv
);
UpdateJobTaskInfo
(
agv
);
}
...
...
@@ -92,19 +95,19 @@ namespace DeviceLibrary
{
if
(
AGVManager
.
CheckIsInAirDoor
(
FullShelfPlace
))
{
j
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT_AGV_REACH_AIR_DOOR
);
curJ
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT_AGV_REACH_AIR_DOOR
);
runInfo
=
"到达"
+
SettingString
.
RoomC_Name
+
"门,过风淋门["
+
FullShelfPlace
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorAirIn
);
UpdateJobTaskInfo
(
agv
);
}
else
{
j
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT_AGV_REACH_LINE
);
curJ
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT_AGV_REACH_LINE
);
runInfo
=
"从双层线A6送往["
+
FullShelfPlace
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
FullShelfPlace
);
UpdateJobTaskInfo
(
agv
);
}
...
...
@@ -112,20 +115,20 @@ namespace DeviceLibrary
}
}
else
if
(
j
obStep
.
IsStep
(
SEND_FULL_SHELF_STEP
.
WAIT_AGV_REACH_AIR_DOOR
))
else
if
(
curJ
obStep
.
IsStep
(
SEND_FULL_SHELF_STEP
.
WAIT_AGV_REACH_AIR_DOOR
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
DoorAirIn
,
CurTaskState
))
{
j
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT_AGV_REACH_LINE
);
curJ
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT_AGV_REACH_LINE
);
runInfo
=
"送往["
+
FullShelfPlace
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
FullShelfPlace
);
UpdateJobTaskInfo
(
agv
);
}
}
else
if
(
j
obStep
.
IsStep
(
SEND_FULL_SHELF_STEP
.
WAIT_REACH_TEMP_PLACE
))
else
if
(
curJ
obStep
.
IsStep
(
SEND_FULL_SHELF_STEP
.
WAIT_REACH_TEMP_PLACE
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
C4_STANDBY1
,
CurTaskState
)
||
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
C4_STANDBY2
,
CurTaskState
))
...
...
@@ -134,26 +137,26 @@ namespace DeviceLibrary
{
if
(
AGVManager
.
CheckIsInAirDoor
(
FullShelfPlace
))
{
j
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT_AGV_REACH_AIR_DOOR
);
curJ
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT_AGV_REACH_AIR_DOOR
);
runInfo
=
"到临时待机位,去产线先过风淋门["
+
FullShelfPlace
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
DoorAirIn
);
UpdateJobTaskInfo
(
agv
);
}
else
{
j
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT_AGV_REACH_LINE
);
curJ
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT_AGV_REACH_LINE
);
runInfo
=
"从临时待机位送往["
+
FullShelfPlace
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
FullShelfPlace
);
UpdateJobTaskInfo
(
agv
);
}
}
}
}
else
if
(
j
obStep
.
IsStep
(
SEND_FULL_SHELF_STEP
.
WAIT_AGV_REACH_LINE
))
else
if
(
curJ
obStep
.
IsStep
(
SEND_FULL_SHELF_STEP
.
WAIT_AGV_REACH_LINE
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
FullShelfPlace
,
CurTaskState
))
...
...
@@ -167,34 +170,34 @@ namespace DeviceLibrary
//}
if
(
IsIgnoreBigShelf
)
{
j
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT_LINE_RESPONSE
);
curJ
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT_LINE_RESPONSE
);
runInfo
=
"AGV到达 "
+
FullShelfPlace
+
",并发送入料架请求[ReadyEnter]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
AGVManager
.
server
.
ReadyEnter
(
FullShelfPlace
);
}
else
{
if
(
RFID
.
StartsWith
(
SettingString
.
BigShelf_Prefix
)
&&
!
FullShelfPlace
.
Equals
(
SettingString
.
RoomDFeederIn
)
&&
!
FullShelfPlace
.
Equals
(
SettingString
.
RoomCFeederIn
))
{
j
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT_BIG_SHELF_UNLOCK
);
curJ
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT_BIG_SHELF_UNLOCK
);
runInfo
=
"AGV到达 "
+
FullShelfPlace
+
",并等待大料架移库操作"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
}
else
{
j
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT_LINE_RESPONSE
);
curJ
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT_LINE_RESPONSE
);
runInfo
=
"AGV到达 "
+
FullShelfPlace
+
",并发送入料架请求[ReadyEnter]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
AGVManager
.
server
.
ReadyEnter
(
FullShelfPlace
);
}
}
}
}
else
if
(
j
obStep
.
IsStep
(
SEND_FULL_SHELF_STEP
.
WAIT_BIG_SHELF_UNLOCK
))
else
if
(
curJ
obStep
.
IsStep
(
SEND_FULL_SHELF_STEP
.
WAIT_BIG_SHELF_UNLOCK
))
{
MiR_API
.
Get_IO_Status
(
agv
,
out
bool
[]
input
,
out
bool
[]
output
);
System
.
Threading
.
Thread
.
Sleep
(
50
);
...
...
@@ -202,12 +205,13 @@ namespace DeviceLibrary
{
runInfo
=
"大料架在"
+
FullShelfPlace
+
"移库完成["
+
agv
.
BoxDestInfo
+
"]"
;
agv
.
BoxDestInfo
=
""
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
jobStep
.
CurStep
(),
runInfo
);
jobStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJobStep
.
CurStep
(),
runInfo
);
curJobStep
.
Msg
=
msg
;
RecordRunLog
(
agv
,
curJobStep
.
CurStep
(),
runInfo
,
agv
.
Place
);
return
new
EmptyShelfBackJob
(
FullShelfPlace
,
eShelfType
.
BigShelf
);
}
}
else
if
(
j
obStep
.
IsStep
(
SEND_FULL_SHELF_STEP
.
WAIT_LINE_RESPONSE
))
else
if
(
curJ
obStep
.
IsStep
(
SEND_FULL_SHELF_STEP
.
WAIT_LINE_RESPONSE
))
{
int
id
=
AGVManager
.
FindNode
(
FullShelfPlace
);
ClientNode
node
=
AGVManager
.
nodeInfo
[
id
];
...
...
@@ -217,10 +221,10 @@ namespace DeviceLibrary
{
if
(!
agv
.
CurTarName
.
Equals
(
SettingString
.
Leave
))
{
j
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT__SHELF_IN_LINE
);
curJ
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT__SHELF_IN_LINE
);
runInfo
=
"收到产线入料架请求[ReadyEnter]的响应 "
+
FullShelfPlace
+
"入料架,小车链条运行"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
MissionSys
.
AssignMission
(
agv
,
SettingString
.
Leave
);
UpdateJobTaskInfo
(
agv
);
}
...
...
@@ -228,41 +232,49 @@ namespace DeviceLibrary
}
else
if
(
input
!=
null
&&
!
input
[
3
]
&&
input
[
0
])
{
agv
.
HasError
=
false
;
runInfo
=
"手动操作:满料架进入"
+
FullShelfPlace
+
"完成["
+
agv
.
BoxDestInfo
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
agv
.
RFID
=
""
;
agv
.
BoxDestInfo
=
""
;
HttpManager
.
UpdateStatus
(
RFID
,
FullShelfPlace
);
RecordRunLog
(
agv
,
curJobStep
.
CurStep
(),
runInfo
,
agv
.
Place
);
return
new
EmptyAGVBackJob
(
FullShelfPlace
);
}
else
if
(
jobStep
.
IsTimeOut
(
15000
,
out
double
timeOutValue
))
else
if
(
curJobStep
.
IsTimeOut
(
15000
,
out
TimeSpan
timeOutValue
))
{
j
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT_AGV_REACH_LINE
);
curJ
obStep
.
ToNextStep
(
SEND_FULL_SHELF_STEP
.
WAIT_AGV_REACH_LINE
);
runInfo
=
"AGV到达 "
+
FullShelfPlace
+
",15秒后重新向产线发送入料架请求[ReadyEnter]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
jobStep
.
CurStep
(),
runInfo
);
jobStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJobStep
.
CurStep
(),
runInfo
);
curJobStep
.
Msg
=
msg
;
agv
.
HasError
=
true
;
agv
.
SetErrorMsg
(
"AGV到达 "
+
FullShelfPlace
+
",向产线发送入料架请求[ReadyEnter]异常"
,
timeOutValue
.
TotalMinutes
.
ToString
(
"f2"
));
}
}
else
if
(
j
obStep
.
IsStep
(
SEND_FULL_SHELF_STEP
.
WAIT__SHELF_IN_LINE
))
else
if
(
curJ
obStep
.
IsStep
(
SEND_FULL_SHELF_STEP
.
WAIT__SHELF_IN_LINE
))
{
CurTaskState
=
MissionSys
.
GetTakJobState
(
agv
);
if
(
MissionSys
.
CheckTaskFinished
(
agv
,
SettingString
.
Leave
,
CurTaskState
))
{
agv
.
HasError
=
false
;
runInfo
=
"满料进入"
+
FullShelfPlace
+
"完成["
+
agv
.
BoxDestInfo
+
"]"
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
j
obStep
.
CurStep
(),
runInfo
);
j
obStep
.
Msg
=
msg
;
msg
+=
string
.
Format
(
"[{0}] {1}"
,
curJ
obStep
.
CurStep
(),
runInfo
);
curJ
obStep
.
Msg
=
msg
;
agv
.
RFID
=
""
;
agv
.
BoxDestInfo
=
""
;
HttpManager
.
UpdateStatus
(
RFID
,
FullShelfPlace
);
RecordRunLog
(
agv
,
curJobStep
.
CurStep
(),
runInfo
,
agv
.
Place
);
return
new
EmptyAGVBackJob
(
FullShelfPlace
);
}
else
if
(
jobStep
.
IsTimeOut
(
60000
,
out
double
timeOutValue
))
else
if
(
curJobStep
.
IsTimeOut
(
60000
,
out
TimeSpan
timeOutValue
))
{
//链条停止
runInfo
=
"满料在["
+
FullShelfPlace
+
"]离开小车超时
["
+
timeOutValue
.
ToString
(
"f1"
)
+
"秒]
,请检查料架离开小车的情况"
;
runInfo
=
"满料在["
+
FullShelfPlace
+
"]离开小车超时,请检查料架离开小车的情况"
;
//msg += string.Format("[{0}] {1}", jobStep.CurStep(),runInfo);
//SendFullShelfStep.Msg = msg;
agv
.
HasError
=
true
;
agv
.
SetErrorMsg
(
"满料架在["
+
FullShelfPlace
+
"]离开小车超时"
,
timeOutValue
.
TotalMinutes
.
ToString
(
"f2"
));
}
}
...
...
@@ -270,7 +282,7 @@ namespace DeviceLibrary
//{
//}
RecordRunLog
(
agv
,
curJobStep
.
CurStep
(),
runInfo
,
agv
.
Place
);
return
this
;
}
...
...
DeviceLibrary/bean/job/StandyJob.cs
查看文件 @
c0fb871
...
...
@@ -14,6 +14,7 @@ namespace DeviceLibrary
public
StandyJob
(
string
agvPlae
)
{
this
.
agvPlace
=
agvPlae
;
JobName
=
"待机任务"
;
}
...
...
@@ -107,9 +108,11 @@ namespace DeviceLibrary
runInfo
=
"在待机位检测到任务,执行任务"
;
msg
+=
runInfo
;
curJobStep
.
Msg
=
msg
;
RecordRunLog
(
agv
,
curJobStep
.
CurStep
(),
runInfo
,
agv
.
Place
);
return
job
;
}
}
RecordRunLog
(
agv
,
curJobStep
.
CurStep
(),
runInfo
,
agv
.
Place
);
return
this
;
}
...
...
DeviceLibrary/manager/AGVManager.cs
查看文件 @
c0fb871
using
System
;
using
System.Collections.Generic
;
using
System.IO
;
using
System.Linq
;
using
System.Net.Sockets
;
using
System.Runtime.InteropServices
;
using
System.Text
;
...
...
@@ -31,7 +32,33 @@ namespace DeviceLibrary
//public static StandbyManager Standby;
public
static
List
<
JobType
>
jobTypes
;
public
static
readonly
string
CONFIG_PATH
=
AppDomain
.
CurrentDomain
.
BaseDirectory
+
"Config\\"
;
#
region
任务日志
static
log4net
.
ILog
runLog
=
log4net
.
LogManager
.
GetLogger
(
"RunLog"
);
static
Dictionary
<
string
,
RunInfo
>
runInfoMap
=
new
Dictionary
<
string
,
RunInfo
>();
public
static
void
RunLogInfo
(
RunInfo
info
)
{
if
(
runInfoMap
==
null
)
return
;
if
(
runInfoMap
.
Keys
.
Contains
(
info
.
AGVNum
))
{
if
(!
runInfoMap
[
info
.
AGVNum
].
Equals
(
info
))
{
runLog
.
Info
(
info
.
ToString
());
}
}
else
{
runInfoMap
.
Add
(
info
.
AGVNum
,
info
);
runLog
.
Info
(
info
.
ToString
());
}
}
public
static
void
ErrorLogRecord
(
ErrorInfo
errorInfo
)
{
runLog
.
Info
(
errorInfo
.
ToString
());
}
#
endregion
/// <summary>
/// 初始化配置
/// </summary>
...
...
@@ -833,6 +860,132 @@ namespace DeviceLibrary
}
}
public
class
RunInfo
{
/// <summary>
/// AGV编号
/// </summary>
public
string
AGVNum
{
get
;
set
;
}
=
""
;
/// <summary>
/// 任务名称
/// </summary>
public
string
TaskName
{
get
;
set
;
}
=
""
;
/// <summary>
/// 目的地
/// </summary>
public
string
TargetPlace
{
get
;
set
;
}
=
""
;
/// <summary>
/// 任务步骤
/// </summary>
public
string
TaskStep
{
get
;
set
;
}
=
""
;
/// <summary>
/// 任务内容
/// </summary>
public
string
MissionInfo
{
get
;
set
;
}
=
""
;
/// <summary>
/// 开始时间
/// </summary>
public
string
DateTime
{
get
;
set
;
}
=
""
;
/// <summary>
/// 结束时间
/// </summary>
public
string
EndDateTime
{
get
;
set
;
}
=
""
;
/// <summary>
/// 任务运行时长
/// </summary>
public
string
TaskRunTime
{
get
;
set
;
}
=
""
;
/// <summary>
/// 类型
/// </summary>
public
string
Type
{
get
;
set
;
}
=
"Task"
;
public
RunInfo
(
string
AGVNum
,
string
taskName
,
string
targetPlace
,
string
taskStep
,
string
missionInfo
,
DateTime
startTime
)
{
//开始时间 2006-01-02 15:04:05
DateTime
=
startTime
.
ToString
(
"yyyy-MM-dd HH:mm:ss"
);
EndDateTime
=
System
.
DateTime
.
Now
.
ToString
(
"yyyy-MM-dd HH:mm:ss"
);
this
.
AGVNum
=
AGVNum
;
MissionInfo
=
missionInfo
;
TaskName
=
taskName
;
TaskRunTime
=
(
System
.
DateTime
.
Now
-
startTime
).
TotalMinutes
.
ToString
(
"f2"
);
TargetPlace
=
targetPlace
;
TaskStep
=
taskStep
;
}
public
RunInfo
()
{
}
public
override
bool
Equals
(
object
obj
)
{
if
(
obj
is
RunInfo
)
{
RunInfo
info
=
(
RunInfo
)
obj
;
if
(
this
.
MissionInfo
.
Equals
(
info
.
MissionInfo
))
return
true
;
this
.
MissionInfo
=
info
.
MissionInfo
;
}
return
false
;
}
public
override
string
ToString
()
{
return
JsonHelper
.
SerializeObject
(
this
);
}
}
public
class
ErrorInfo
{
/// <summary>
/// AGV编号
/// </summary>
public
string
AGVNum
{
get
;
set
;
}
=
""
;
/// <summary>
/// 开始时间
/// </summary>
public
string
DateTime
{
get
;
set
;
}
=
""
;
/// <summary>
/// 结束时间
/// </summary>
public
string
EndDateTime
{
get
;
set
;
}
=
""
;
/// <summary>
/// 异常信息
/// </summary>
public
string
ErrorMsg
{
get
;
set
;
}
=
""
;
public
string
ErrorLastTime
{
get
;
set
;
}
=
""
;
/// <summary>
/// 任务名称
/// </summary>
public
string
TaskName
{
get
;
set
;
}
=
""
;
/// <summary>
/// AGV的当前任务
/// </summary>
public
string
AGVMissionName
{
get
;
set
;
}
=
""
;
public
string
MissionInfo
{
get
;
set
;
}
=
""
;
/// <summary>
/// 目的地
/// </summary>
public
string
TargetPlace
{
get
;
set
;
}
=
""
;
/// <summary>
/// 类型
/// </summary>
public
string
Type
{
get
;
set
;
}
=
"Error"
;
public
ErrorInfo
(
Agv_Info
agv
)
{
DateTime
=
agv
.
errStartTime
.
ToString
(
"yyyy-MM-dd HH:mm:ss"
);
AGVNum
=
agv
.
Name
;
EndDateTime
=
System
.
DateTime
.
Now
.
ToString
(
"yyyy-MM-dd HH:mm:ss"
);
ErrorMsg
=
agv
.
ErrorMsg
;
ErrorLastTime
=
(
System
.
DateTime
.
Now
-
agv
.
errStartTime
).
TotalMinutes
.
ToString
(
"f2"
);
if
(
agv
.
CurJob
!=
null
)
{
TaskName
=
agv
.
CurJob
.
JobName
;
MissionInfo
=
agv
.
CurJob
.
runInfo
;
}
AGVMissionName
=
agv
.
CurTarName
;
TargetPlace
=
agv
.
Place
;
}
public
override
string
ToString
()
{
return
JsonHelper
.
SerializeObject
(
this
);
}
}
public
static
class
Window_API
{
[
DllImport
(
"user32.dll"
,
EntryPoint
=
"ShowWindow"
,
CharSet
=
CharSet
.
Auto
)]
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论