Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
张东亮
/
Qisda-SO1037-AGVDispatch
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 4ee65acf
由
张东亮
编写于
2022-12-06 11:29:40 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
二期基本逻辑ok
1 个父辈
315a5150
隐藏空白字符变更
内嵌
并排
正在显示
34 个修改的文件
包含
1832 行增加
和
704 行删除
AGVDispatch/FrmMain.Designer.cs
AGVDispatch/FrmMain.cs
AGVDispatch/Manual.cs
Common/SettingString.cs
Common/util/HttpHelper.cs
DeviceLibrary/DeviceLibrary.csproj
DeviceLibrary/bean/JobParam.cs
DeviceLibrary/bean/RunStep.cs
DeviceLibrary/bean/job/ChargeJob.cs
DeviceLibrary/bean/job/CrossDoorJob.cs
DeviceLibrary/bean/job/F1LiftC1ToLiftD2Job.cs
DeviceLibrary/bean/job/F1LiftD2ToLiftC1Job.cs
DeviceLibrary/bean/job/Job.cs
DeviceLibrary/bean/job/LiftToLinesJob.cs
DeviceLibrary/bean/job/LineToLiftJob.cs
DeviceLibrary/bean/job/ShelfBackLiftToStoreJob.cs
DeviceLibrary/bean/job/StandyJob.cs
DeviceLibrary/bean/job/SteelLiftToStorageJob.cs
DeviceLibrary/bean/job/SteelLineToLiftJob.cs
DeviceLibrary/bean/job/SwitchShelfJob.cs
DeviceLibrary/bean/jobType/BackLiftToLineJobType.cs
DeviceLibrary/bean/jobType/F1LiftC1ToLiftD2JobType.cs
DeviceLibrary/bean/jobType/F1LiftD2ToLiftC1JobType.cs
DeviceLibrary/bean/jobType/JobType.cs
DeviceLibrary/bean/jobType/LiftToLinesJobType.cs
DeviceLibrary/bean/jobType/LineToLiftJobType.cs
DeviceLibrary/bean/jobType/ShelfBuffToLiftJobType.cs
DeviceLibrary/lift/LiftContext.cs
DeviceLibrary/lift/LiftInfo.cs
DeviceLibrary/manager/AGVManager.cs
DeviceLibrary/manager/MissionManager.cs
DeviceLibrary/service/Service.cs
DeviceLibrary/service/model/MissionInfo.cs
DeviceLibrary/service/model/SendInInfo.cs
AGVDispatch/FrmMain.Designer.cs
查看文件 @
4ee65ac
...
...
@@ -53,6 +53,7 @@
this
.
txtShow
=
new
System
.
Windows
.
Forms
.
TextBox
();
this
.
tableLayoutPanel4
=
new
System
.
Windows
.
Forms
.
TableLayoutPanel
();
this
.
flowLayoutPanel1
=
new
System
.
Windows
.
Forms
.
FlowLayoutPanel
();
this
.
textBox1
=
new
System
.
Windows
.
Forms
.
TextBox
();
this
.
tableLayoutPanel3
.
SuspendLayout
();
this
.
tabControl1
.
SuspendLayout
();
this
.
tabPage2
.
SuspendLayout
();
...
...
@@ -277,6 +278,7 @@
this
.
dgvInfos
.
Size
=
new
System
.
Drawing
.
Size
(
1666
,
287
);
this
.
dgvInfos
.
TabIndex
=
0
;
this
.
dgvInfos
.
CellContentClick
+=
new
System
.
Windows
.
Forms
.
DataGridViewCellEventHandler
(
this
.
dgvInfos_CellContentClick
);
this
.
dgvInfos
.
DataError
+=
new
System
.
Windows
.
Forms
.
DataGridViewDataErrorEventHandler
(
this
.
dgvInfos_DataError
);
//
// tabPage3
//
...
...
@@ -357,6 +359,7 @@
//
// tabPage5
//
this
.
tabPage5
.
Controls
.
Add
(
this
.
textBox1
);
this
.
tabPage5
.
Controls
.
Add
(
this
.
txtShow
);
this
.
tabPage5
.
Location
=
new
System
.
Drawing
.
Point
(
4
,
25
);
this
.
tabPage5
.
Margin
=
new
System
.
Windows
.
Forms
.
Padding
(
4
);
...
...
@@ -368,12 +371,12 @@
//
// txtShow
//
this
.
txtShow
.
Dock
=
System
.
Windows
.
Forms
.
DockStyle
.
Fill
;
this
.
txtShow
.
Dock
=
System
.
Windows
.
Forms
.
DockStyle
.
Top
;
this
.
txtShow
.
Location
=
new
System
.
Drawing
.
Point
(
0
,
0
);
this
.
txtShow
.
Margin
=
new
System
.
Windows
.
Forms
.
Padding
(
4
);
this
.
txtShow
.
Multiline
=
true
;
this
.
txtShow
.
Name
=
"txtShow"
;
this
.
txtShow
.
Size
=
new
System
.
Drawing
.
Size
(
1696
,
356
);
this
.
txtShow
.
Size
=
new
System
.
Drawing
.
Size
(
1696
,
199
);
this
.
txtShow
.
TabIndex
=
0
;
//
// tableLayoutPanel4
...
...
@@ -401,6 +404,16 @@
this
.
flowLayoutPanel1
.
Size
=
new
System
.
Drawing
.
Size
(
1698
,
506
);
this
.
flowLayoutPanel1
.
TabIndex
=
0
;
//
// textBox1
//
this
.
textBox1
.
Dock
=
System
.
Windows
.
Forms
.
DockStyle
.
Top
;
this
.
textBox1
.
Location
=
new
System
.
Drawing
.
Point
(
0
,
199
);
this
.
textBox1
.
Margin
=
new
System
.
Windows
.
Forms
.
Padding
(
4
);
this
.
textBox1
.
Multiline
=
true
;
this
.
textBox1
.
Name
=
"textBox1"
;
this
.
textBox1
.
Size
=
new
System
.
Drawing
.
Size
(
1696
,
151
);
this
.
textBox1
.
TabIndex
=
1
;
//
// FrmMain
//
this
.
AutoScaleDimensions
=
new
System
.
Drawing
.
SizeF
(
8F
,
15F
);
...
...
@@ -462,6 +475,7 @@
private
System
.
Windows
.
Forms
.
TextBox
txtShow
;
private
System
.
Windows
.
Forms
.
CheckBox
checkBox1
;
private
System
.
Windows
.
Forms
.
Button
button1
;
private
System
.
Windows
.
Forms
.
TextBox
textBox1
;
}
}
AGVDispatch/FrmMain.cs
查看文件 @
4ee65ac
...
...
@@ -12,6 +12,7 @@ using System.Threading.Tasks;
using
System.Windows.Forms
;
using
Common
;
using
DeviceLibrary
;
using
DeviceLibrary.lift
;
using
DeviceLibrary.manager
;
using
DeviceLibrary.service.model
;
...
...
@@ -157,6 +158,12 @@ namespace AGVControl
Invoke
(
new
Action
(()
=>
{
txtShow
.
Text
=
DeviceLibrary
.
HttpManager
.
Agvtransinfo
;
try
{
textBox1
.
Text
=
LiftContext
.
GetLiftNodeOccupiedInfo
();
}
catch
{
}
}));
...
...
@@ -228,6 +235,11 @@ namespace AGVControl
AgvTaskManager
.
ReloadAgvTask
();
}
private
void
dgvInfos_DataError
(
object
sender
,
DataGridViewDataErrorEventArgs
e
)
{
LogUtil
.
error
(
$
"表格式异常:{e.RowIndex},{e.ColumnIndex},{e.Exception.Message}"
);
}
private
void
dgvInfos_CellContentClick
(
object
sender
,
DataGridViewCellEventArgs
e
)
{
if
(
e
.
RowIndex
==
-
1
)
...
...
AGVDispatch/Manual.cs
查看文件 @
4ee65ac
...
...
@@ -94,6 +94,7 @@ namespace AGVControl
{
Agv
.
Auto
=
false
;
LiftContext
.
ResetLiftOccupiedAgv
(
Agv
);
LiftContext
.
SetLiftNodeOccupied
(
Agv
);
ChargePileManager
.
StopCharge
(
Agv
);
LogUtil
.
info
(
$
"取消自动任务,当前运行信息是:{Agv.Msg}"
);
try
...
...
Common/SettingString.cs
查看文件 @
4ee65ac
...
...
@@ -70,6 +70,9 @@ namespace Common
public
const
string
Lift_Names
=
"Lift_Names"
;
public
const
string
IsDebug
=
"IsDebug"
;
#
endregion
#
region
点位
public
const
string
ShelfBuff
=
"ShelfBuff"
;
#
endregion
}
}
Common/util/HttpHelper.cs
查看文件 @
4ee65ac
...
...
@@ -142,7 +142,7 @@ namespace Common
}
catch
(
Exception
e
)
{
LogUtil
.
error
(
"POST ERROR:"
+
e
.
ToString
()
);
LogUtil
.
error
(
$
"POST ERROR:【{url}】【{paramData}】"
,
e
);
}
if
(!
result
.
Contains
(
"null"
)
&&
result
.
Length
!=
0
)
{
...
...
@@ -180,7 +180,7 @@ namespace Common
}
catch
(
Exception
e
)
{
LogUtil
.
error
(
"POST ERROR:"
+
e
.
ToString
()
);
LogUtil
.
error
(
$
"POST ERROR:【{url}】【{paramData}】"
,
e
);
}
return
result
;
}
...
...
DeviceLibrary/DeviceLibrary.csproj
查看文件 @
4ee65ac
...
...
@@ -87,6 +87,7 @@
<Compile Include="bean\agv\Mir_Error.cs" />
<Compile Include="bean\agv\Scope.cs" />
<Compile Include="bean\ChargePiles.cs" />
<Compile Include="bean\jobType\ShelfBuffToLiftJobType.cs" />
<Compile Include="bean\jobType\SteelLiftToLinesJobType.cs" />
<Compile Include="bean\jobType\F1LiftC1ToLiftD2JobType.cs" />
<Compile Include="bean\jobType\F1LiftD2ToLiftC1JobType.cs" />
...
...
@@ -97,6 +98,7 @@
<Compile Include="bean\job\ChargeJob.cs" />
<Compile Include="bean\job\F1LiftC1ToLiftD2Job.cs" />
<Compile Include="bean\job\F1LiftD2ToLiftC1Job.cs" />
<Compile Include="bean\job\CrossDoorJob.cs" />
<Compile Include="bean\job\SteelLiftToStorageJob.cs" />
<Compile Include="bean\job\SteelLiftToLinesJob.cs" />
<Compile Include="bean\job\LineOneToManyJob.cs" />
...
...
@@ -108,6 +110,7 @@
<Compile Include="bean\JobParam.cs" />
<Compile Include="bean\jobType\BackLiftToLineJobType.cs" />
<Compile Include="bean\jobType\LineToLiftJobType.cs" />
<Compile Include="bean\job\SwitchShelfJob.cs" />
<Compile Include="bean\TaskRunState.cs" />
<Compile Include="bean\jobType\LiftToLinesJobType.cs" />
<Compile Include="bean\job\StandyJob.cs" />
...
...
DeviceLibrary/bean/JobParam.cs
查看文件 @
4ee65ac
using
Common
;
using
DeviceLibrary.lift
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
using
System.Web.UI.WebControls.WebParts
;
namespace
DeviceLibrary.bean
{
...
...
@@ -26,7 +28,10 @@ namespace DeviceLibrary.bean
{
return
missionInfo
;
}
/// <summary>
/// 电梯内的料架信息
/// </summary>
public
LiftStatus
LiftStatus
;
/// <summary>
/// 任务信息
/// </summary>
...
...
@@ -51,6 +56,10 @@ namespace DeviceLibrary.bean
/// </summary>
public
Shelf
Shelf
{
get
;
set
;
}
public
OpType
OpType
{
get
;
set
;
}
=
OpType
.
ComToLine
;
/// <summary>
/// 回调Job
/// </summary>
public
JobCallBack
CallbackJob
;
public
JobParam
(
Node
srcplace
,
Node
tarplace
=
null
,
Shelf
shelf
=
null
,
service
.
model
.
MissionInfo
MissionInfo
=
null
)
{
SrcNode
=
srcplace
;
...
...
@@ -82,4 +91,15 @@ namespace DeviceLibrary.bean
/// </summary>
MaulAndAPI
,
}
public
class
JobCallBack
{
public
Type
Type
{
get
;
set
;
}
public
Job
Job
{
get
;
set
;
}
public
RunStep
RunStep
{
get
;
set
;
}
public
JobCallBack
(
Type
type
,
RunStep
step
)
{
this
.
Type
=
type
;
this
.
RunStep
=
step
;
}
}
}
DeviceLibrary/bean/RunStep.cs
查看文件 @
4ee65ac
...
...
@@ -34,6 +34,7 @@ namespace DeviceLibrary.bean
#
endregion
#
region
料架返回
电梯到线体
ShelfBack_LiftToStore_01_ToStandby
,
/// <summary>
/// 去电梯口
/// </summary>
...
...
@@ -103,6 +104,8 @@ namespace DeviceLibrary.bean
LineToLift_05_10_ToTemp1
,
LineToLift_05_11_PutTemp1ShelfOn
,
LineToLift_05_12_ToLift
,
LineToLift_05_13_ToShelfPlace
,
LineToLift_05_14_TakeShelfOff
,
#
endregion
#
region
电梯内无料车
...
...
@@ -114,6 +117,7 @@ namespace DeviceLibrary.bean
#
endregion
#
region
电梯到线体
产品分发
最后空料料架返回
SD_LiftToLine_00_ToStandby
,
/// <summary>
/// 去电梯口
/// </summary>
...
...
@@ -363,6 +367,7 @@ namespace DeviceLibrary.bean
#
endregion
#
region
1F
成品空料架从
D2
到
C1
S1F_LiftD2ToLiftC1_00_ToStandby
,
/// <summary>
/// 去电梯口
/// </summary>
...
...
@@ -387,6 +392,7 @@ namespace DeviceLibrary.bean
/// 关闭电梯门
/// </summary>
S1F_LiftD2ToLiftC1_06_CloseLiftDoor
,
S1F_LiftD2ToLiftC1_07_ToStandby
,
S1F_LiftD2ToLiftC1_07_ToLiftC1
,
S1F_LiftD2ToLiftC1_08_CheckC1Status
,
...
...
@@ -412,6 +418,7 @@ namespace DeviceLibrary.bean
S1F_LiftD2ToLiftC1_19_03_ToTemp1
,
S1F_LiftD2ToLiftC1_19_04_PutTemp1ShelfOn
,
S1F_LiftD2ToLiftC1_19_05_ToLift
,
S1F_LiftD2ToLiftC1_19_05_ToStandby
,
#
endregion
#
region
空成品料车
...
...
@@ -434,6 +441,7 @@ namespace DeviceLibrary.bean
#
endregion
#
region
1F
成品入库从
C1
到
D2
S1F_LiftC1ToLiftD2_00_ToStandby
,
/// <summary>
/// 去电梯口
/// </summary>
...
...
@@ -459,6 +467,7 @@ namespace DeviceLibrary.bean
/// </summary>
S1F_LiftC1ToLiftD2_06_CloseLiftDoor
,
S1F_LiftC1ToLiftD2_07_ToLiftD2
,
S1F_LiftC1ToLiftD2_ToStandby
,
S1F_LiftC1ToLiftD2_08_CheckD2Status
,
#
region
电梯内无料车
...
...
@@ -467,9 +476,9 @@ namespace DeviceLibrary.bean
S1F_LiftC1ToLiftD2_11_LeaveLift
,
#
endregion
#
region
电梯内有料车
S1F_LiftC1ToLiftD2_12_ToTemp1
,
S1F_LiftC1ToLiftD2_12_ToStandby
,
S1F_LiftC1ToLiftD2_13_TakeShelfOffAtTemp1
,
S1F_LiftC1ToLiftD2_13_ToShelfBuff
,
S1F_LiftC1ToLiftD2_14_TakeShelfOff
,
S1F_LiftC1ToLiftD2_14_ToLift
,
S1F_LiftC1ToLiftD2_15_EnterLift
,
S1F_LiftC1ToLiftD2_16_PutShelfOn
,
...
...
@@ -504,6 +513,96 @@ namespace DeviceLibrary.bean
#
endregion
#
region
电梯口料架交换
/// <summary>
/// 料架交换:去临时点1
/// </summary>
Switch_01_ToTmp1
,
/// <summary>
/// 料架交换:在临时点1卸下料架
/// </summary>
Switch_02_TakeShelfOffAtTmp1
,
/// <summary>
/// 料架交换:去电梯
/// </summary>
Switch_03_ToLift
,
/// <summary>
/// 料架交换:进入电梯
/// </summary>
Switch_04_EnterLift
,
/// <summary>
/// 料架交换:拾取电梯内的料架
/// </summary>
Switch_05_PutLiftShelfOn
,
/// <summary>
/// 料架交换:离开电梯
/// </summary>
Switch_06_LeaveLift
,
/// <summary>
/// 料架交换:去临时点2
/// </summary>
Switch_07_ToTmp2
,
/// <summary>
/// 料架交换:在临时点2卸下料车
/// </summary>
Switch_08_TakeShelfOffAtTpm2
,
/// <summary>
/// 料架交换:去临时点1
/// </summary>
Switch_09_ReToTmp1
,
/// <summary>
/// 料架交换:在临时点1拾取料架
/// </summary>
Switch_10_PutShelfOnAtTmp1
,
/// <summary>
/// 料架交换:去电梯
/// </summary>
Switch_11_ToLift
,
/// <summary>
/// 料架交换:进入电梯
/// </summary>
Switch_12_EnterLift
,
/// <summary>
/// 料架交换:在电梯放下料车
/// </summary>
Switch_13_TakeLiftShelfOff
,
/// <summary>
/// 料架交换:离开电梯
/// </summary>
Switch_14_LeaveLift
,
/// <summary>
/// 料架交换:关门,并更新送料信息
/// </summary>
Switch_15_CloseDoor
,
Switch_15_WaitDoorClose
,
/// <summary>
/// 料架交换:去临时点2
/// </summary>
Switch_16_ReToTmp2
,
/// <summary>
/// 料架交换:在临时点2拾取料架
/// </summary>
Switch_17_PutShelfOnAtTmp2
,
/// <summary>
/// 根据当前状态送料
/// </summary>
Switch_18_SendShelf
,
/// <summary>
/// 根据当前状态返还料架
/// </summary>
Switch_19_ReturnShelf
,
#
endregion
#
region
过门任务
CrossDoor_01_ToCurDoor
,
CrossDoor_02_OpenCurDoor
,
CrossDoor_03_Enter
,
CrossDoor_04_CloseCurDoor
,
CrossDoor_05_OpenAntherDoor
,
CrossDoor_06_LeaveDoor
,
CrossDoor_07_CloseAntherDoor
,
CrossDoor_08_Finish
,
#
endregion
/// <summary>
/// 结束
/// </summary>
...
...
DeviceLibrary/bean/job/ChargeJob.cs
查看文件 @
4ee65ac
...
...
@@ -34,7 +34,7 @@ namespace DeviceLibrary
})
;
if
(
JobRunStep
.
IsStep
(
RunStep
.
NONE
))
{
ClearLiftNodeOccupied
(
agv
);
if
(!
ChargePileManager
.
HasEmpty
(
agv
,
out
ChargePile
charge
))
{
runInfo
=
$
"无空闲充电桩,从"
+
JobParam
.
SrcNode
+
"回到待机位"
;
...
...
DeviceLibrary/bean/job/CrossDoorJob.cs
0 → 100644
查看文件 @
4ee65ac
using
Common
;
using
DeviceLibrary.bean
;
namespace
DeviceLibrary
{
/// <summary>
/// 过门任务
/// </summary>
public
class
CrossDoorJob
:
Job
{
/// <summary>
/// 待机任务
/// </summary>
/// <param name="agvPlae"></param>
public
CrossDoorJob
(
JobParam
jobParam
)
:
base
(
jobParam
)
{
JobName
=
"过门任务"
;
}
public
CrossDoorJob
():
base
()
{
JobName
=
"过门任务"
;
}
/// <summary>
/// 过门任务
/// </summary>
/// <param name="agv"></param>
public
override
Job
Run
(
AgvInfo
agv
)
{
agv
.
SetJobContext
(
new
bean
.
agv
.
JobContext
()
{
AgvTask
=
agv
.
TaskRunState
.
Task
,
JobFullName
=
this
.
ToString
(),
JobStep
=
JobRunStep
.
PreStep
(),
Name
=
agv
.
Name
,
JobParam
=
JobParam
});
if
(
JobRunStep
.
IsStep
(
RunStep
.
NONE
))
{
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
STANDBY_WAIT_REACH_STANDBY
);
runInfo
=
"从"
+
JobParam
.
SrcNode
+
"回到待机位"
;
JobRunStep
.
Msg
=
runInfo
;
ToStandby
(
agv
);
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
STANDBY_WAIT_REACH_STANDBY
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
END
);
// runInfo = "到达待机位";
//JobRunStep.Msg = runInfo;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
END
))
{
//Job job = AGVManager.control.GetJob(agv);
//if (job != null && !(job is StandyJob))
//{
// if (job is ChargeJob && agv.Battery > BatteryMid)
// return this;
// runInfo = "在待机位检测到任务,执行任务";
// JobRunStep.Msg = runInfo;
// JobRunStep.EndJob();
// return job;
//}
}
return
this
;
}
}
}
DeviceLibrary/bean/job/F1LiftC1ToLiftD2Job.cs
查看文件 @
4ee65ac
using
Common
;
using
DeviceLibrary.lift
;
using
DeviceLibrary.manager
;
using
DeviceLibrary.service.model
;
using
System.Runtime.InteropServices
;
using
System.Security.Cryptography.X509Certificates
;
using
System.Threading
;
...
...
@@ -21,24 +23,48 @@ namespace DeviceLibrary.bean.job
{
}
lift
.
LiftStatus
liftStatus
;
public
override
Job
Run
(
AgvInfo
agv
)
{
agv
.
SetJobContext
(
new
bean
.
agv
.
JobContext
()
Job
job
=
this
;
agv
.
SetJobContext
(
new
agv
.
JobContext
()
{
MissionId
=
JobParam
.
GetMissionInfo
().
missionId
,
AgvTask
=
agv
.
TaskRunState
.
Task
,
JobFullName
=
this
.
ToString
(),
JobFullName
=
ToString
(),
JobStep
=
JobRunStep
.
PreStep
(),
Name
=
agv
.
Name
,
JobParam
=
JobParam
});
if
(
JobRunStep
.
IsStep
(
RunStep
.
NONE
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_01_ToLiftC1
);
runInfo
=
$
"任务开始:去{JobParam.SrcNode.AliceName}"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{JobParam.SrcNode.Name}"
);
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_00_ToStandby
);
runInfo
=
$
"已有小车在{JobParam.SrcNode.AliceName},先去待机点"
;
JobRunStep
.
Msg
=
runInfo
;
MoveToNode
(
agv
,
SettingString
.
Standby
);
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_01_ToLiftC1
);
runInfo
=
$
"任务开始:去{JobParam.SrcNode.AliceName}"
;
JobRunStep
.
Msg
=
runInfo
;
ToLift
(
agv
,
JobParam
.
SrcNode
.
Name
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_00_ToStandby
))
{
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Name
))
{
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_01_ToLiftC1
);
runInfo
=
$
"已空闲,去{JobParam.SrcNode.AliceName}"
;
JobRunStep
.
Msg
=
runInfo
;
ToLift
(
agv
,
JobParam
.
SrcNode
.
Name
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_01_ToLiftC1
))
{
...
...
@@ -46,7 +72,7 @@ namespace DeviceLibrary.bean.job
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_02_WaitDoorOpen
);
//上报状态
manager
.
UploadManager
.
UploadTransportStatus
(
new
service
.
model
.
TransportStatus
(
agv
.
CurJob
.
JobParam
.
GetMissionInfo
().
missionId
,
UploadManager
.
UploadTransportStatus
(
new
service
.
model
.
TransportStatus
(
agv
.
CurJob
.
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
TransportStatus
.
TypeStr
.
status
,
agv
.
Name
,
agv
.
Place
.
Name
,
service
.
model
.
TransportStatus
.
ModeStr
.
auto
,
$
"到达{JobParam.SrcNode.Name}"
));
//lift.LiftContext.Request(JobParam.GetMissionInfo(), agv, false, false);
...
...
@@ -56,7 +82,7 @@ namespace DeviceLibrary.bean.job
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_02_WaitDoorOpen
))
{
if
(
lift
.
LiftContext
.
IsDoorOpen
(
JobParam
.
SrcNode
.
Name
,
JobParam
.
GetMissionInfo
().
destinationFloor
))
if
(
LiftContext
.
IsDoorOpen
(
JobParam
.
SrcNode
.
Name
,
JobParam
.
GetMissionInfo
().
destinationFloor
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_03_EnterLift
);
runInfo
=
$
"{JobParam.SrcNode.AliceName}门已开启,去取料点"
;
...
...
@@ -65,11 +91,11 @@ namespace DeviceLibrary.bean.job
AllocateTask
(
agv
,
$
"{JobParam.SrcNode.Name}_{SettingString.PutShelfOn}"
);
JobRunStep
.
Msg
=
runInfo
;
}
else
if
(
JobRunStep
.
IsTimeOut
(
20
)
&&
!
lift
.
LiftContext
.
CheckIfRequestOk
(
JobParam
.
SrcNode
.
Name
,
JobParam
.
GetMissionInfo
()))
else
if
(
JobRunStep
.
IsTimeOut
(
20
)
&&
!
LiftContext
.
CheckIfRequestOk
(
JobParam
.
SrcNode
.
Name
,
JobParam
.
GetMissionInfo
()))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_02_WaitDoorOpen
);
//请求电梯
lift
.
LiftContext
.
Request
(
JobParam
.
GetMissionInfo
(),
agv
,
true
,
true
);
LiftContext
.
Request
(
JobParam
.
GetMissionInfo
(),
agv
,
true
,
true
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_03_EnterLift
))
...
...
@@ -90,12 +116,12 @@ namespace DeviceLibrary.bean.job
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_05_LeaveLift
);
//上报状态
manager
.
UploadManager
.
UploadTransportStatus
(
new
service
.
model
.
TransportStatus
(
agv
.
CurJob
.
JobParam
.
GetMissionInfo
().
missionId
,
UploadManager
.
UploadTransportStatus
(
new
service
.
model
.
TransportStatus
(
agv
.
CurJob
.
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
TransportStatus
.
TypeStr
.
status
,
agv
.
Name
,
agv
.
Place
.
Name
,
service
.
model
.
TransportStatus
.
ModeStr
.
auto
,
$
"电梯取车"
));
runInfo
=
$
"在{JobParam.SrcNode.AliceName}取料车完成,准备离开"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{SettingString.Leave}_{JobParam.SrcNode.Name}"
);
LeaveLift
(
agv
,
JobParam
.
SrcNode
.
Name
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_05_LeaveLift
))
...
...
@@ -104,19 +130,48 @@ namespace DeviceLibrary.bean.job
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_06_CloseLiftDoor
);
//关门
bool
rtn
=
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
SrcNode
.
Name
,
agv
,
false
);
bool
rtn
=
LiftContext
.
AGVLeave
(
JobParam
.
SrcNode
.
Name
,
agv
,
false
);
runInfo
=
$
"离开{JobParam.SrcNode.AliceName},关闭电梯门:{rtn}"
;
JobRunStep
.
Msg
=
runInfo
;
ClearLiftNodeOccupied
(
agv
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_06_CloseLiftDoor
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_07_ToLiftD2
);
runInfo
=
$
"关闭{JobParam.SrcNode.AliceName}门完成,去{JobParam.CurTargetNode.AliceName}"
;
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
送料
,
out
string
msg
);
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}"
);
JobRunStep
.
Msg
=
runInfo
;
if
(
TargetIsOccupied
(
agv
,
JobParam
.
CurTargetNode
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_ToStandby
);
runInfo
=
$
"已有小车在{JobParam.CurTargetNode.AliceName},先去待机点"
;
JobRunStep
.
Msg
=
runInfo
;
ToStandby
(
agv
);
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_07_ToLiftD2
);
runInfo
=
$
"关闭{JobParam.SrcNode.AliceName}门完成,去{JobParam.CurTargetNode.AliceName}"
;
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
送料
,
out
string
msg
);
//AllocateTask(agv, $"{JobParam.CurTargetNode.Name}");
ToLift
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_ToStandby
))
{
if
(
TargetIsOccupied
(
agv
,
JobParam
.
CurTargetNode
.
Name
))
{
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_07_ToLiftD2
);
runInfo
=
$
"关闭{JobParam.SrcNode.AliceName}门完成,去{JobParam.CurTargetNode.AliceName}"
;
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
送料
,
out
string
msg
);
//AllocateTask(agv, $"{JobParam.CurTargetNode.Name}");
ToLift
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_07_ToLiftD2
))
{
...
...
@@ -124,73 +179,44 @@ namespace DeviceLibrary.bean.job
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_08_CheckD2Status
);
//上报状态
manager
.
UploadManager
.
UploadTransportStatus
(
new
service
.
model
.
TransportStatus
(
agv
.
CurJob
.
JobParam
.
GetMissionInfo
().
missionId
,
UploadManager
.
UploadTransportStatus
(
new
service
.
model
.
TransportStatus
(
agv
.
CurJob
.
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
TransportStatus
.
TypeStr
.
status
,
agv
.
Name
,
agv
.
Place
.
Name
,
service
.
model
.
TransportStatus
.
ModeStr
.
auto
,
$
"到达{JobParam.CurTargetNode.Name}"
));
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName},请求电梯并等待开门"
;
JobRunStep
.
Msg
=
runInfo
;
//开始请求电梯
lift
.
LiftContext
.
FinishedRequest
(
JobParam
.
GetMissionInfo
(),
agv
);
LiftContext
.
FinishedRequest
(
JobParam
.
GetMissionInfo
(),
agv
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_08_CheckD2Status
))
{
if
(
LiftContext
.
CheckHasEmptyFinished
(
agv
,
JobParam
.
CurTargetNode
.
Name
,
out
liftStatus
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_12_ToTemp1
);
SetLiftOccupied
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门。电梯内有成品料车,去临时点1的卸料点,准备卸下车上料车"
;
//
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}_{SettingString.Temp1}_{SettingString.TakeShelfOff}"
);
//service.model.MissionInfo missionInfo = manager.MissionManager.GetMission(liftStatus.missionId);
//if (missionInfo != null)
//{
// //任务状态变更
// MissionManager.SetMissionState(missionInfo.missionId, service.model.MissionState.电梯到达, out string msg);
//}
JobRunStep
.
Msg
=
runInfo
;
}
else
if
(
lift
.
LiftContext
.
IsDoorOpen
(
JobParam
.
CurTargetNode
.
Name
,
JobParam
.
GetMissionInfo
().
destinationFloor
))
{
//if (lift.LiftContext.HasFinishedShelfNeedLeave(SettingString.LIFT_C1, agv.Client, out liftStatus) && (liftStatus?.HasEmptyFinishedShelf ?? false))
//{
// JobRunStep.ToNextStep(RunStep.S1F_LiftC1ToLiftD2_12_ToTemp1);
// //SetLiftOccupied(JobParam.CurTargetNode.Name, agv);
// runInfo = $"{JobParam.CurTargetNode.AliceName}已开门。电梯内有成品料车,去临时点1的卸料点";//准备卸下车上料车
// AllocateTask(agv, $"{JobParam.CurTargetNode.Name}_{SettingString.Temp1}_{SettingString.TakeShelfOff}");
// //service.model.MissionInfo missionInfo = manager.MissionManager.GetMission(liftStatus.missionId);
// //if (missionInfo != null)
// //{
// // //任务状态变更
// // MissionManager.SetMissionState(missionInfo.missionId, service.model.MissionState.电梯到达, out string msg);
// //}
// JobRunStep.Msg = runInfo;
//}
//else
if
(
lift
.
LiftContext
.
HasShelfNeedLeaveFinished
(
JobParam
.
CurTargetNode
.
Name
,
agv
.
Client
,
out
liftStatus
))
if
(
LiftContext
.
CheckHasEmptyFinished
(
agv
,
JobParam
.
CurTargetNode
.
Name
,
out
JobParam
.
LiftStatus
))
{
MissionInfo
missionInfo
=
MissionManager
.
GetMission
(
JobParam
.
LiftStatus
?.
missionId
??
""
);
if
(
missionInfo
!=
null
)
{
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
liftStatus
.
missionId
);
if
(
IsBackShelf
(
missionInfo
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_12_ToTemp1
);
// SetLiftOccupied(JobParam.CurTargetNode.Name, agv);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门。电梯内有料车,去临时点1的卸料点,准备卸下车上料车"
;
//
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}_{SettingString.Temp1}_{SettingString.TakeShelfOff}"
);
if
(
missionInfo
!=
null
)
{
//任务状态变更
MissionManager
.
SetMissionState
(
missionInfo
.
missionId
,
service
.
model
.
MissionState
.
返回电梯到达
,
out
string
msg
);
}
JobRunStep
.
Msg
=
runInfo
;
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_12_ToStandby
);
// SetLiftOccupied(JobParam.CurTargetNode.Name, agv);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门。电梯内有送料的料车,去待机点等待电梯空闲"
;
//
AllocateStandbyTask
(
agv
);
JobRunStep
.
Msg
=
runInfo
;
}
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_13_ToShelfBuff
);
SetLiftOccupied
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门,内有成品空料车{JobParam?.LiftStatus?.missionId},去料架缓存点"
;
//
ToTakeShelfOff
(
agv
,
SettingString
.
ShelfBuff
);
JobRunStep
.
Msg
=
runInfo
;
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_12_ToStandby
);
//设置电梯占用
//SetLiftOccupied(JobParam.CurTargetNode.Name, agv);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门,内有成品空料车但无工单信息,去待机点,需要手动清空电梯缓存并关闭电梯门"
;
//
ToStandby
(
agv
);
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
LiftContext
.
IsDoorOpen
(
JobParam
.
CurTargetNode
.
Name
,
JobParam
.
GetMissionInfo
().
destinationFloor
))
{
if
(
LiftContext
.
HasShelfNeedLeaveFinished
(
JobParam
.
CurTargetNode
.
Name
,
agv
.
Client
,
out
JobParam
.
LiftStatus
))
{
job
=
new
SwitchShelfJob
(
JobParam
);
}
else
//if (!TargetIsOccupied(agv, JobParam.CurTargetNode.Name))
{
...
...
@@ -201,11 +227,11 @@ namespace DeviceLibrary.bean.job
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}_{SettingString.TakeShelfOff}"
);
}
}
else
if
(
JobRunStep
.
IsTimeOut
(
20
)
&&
!
lift
.
LiftContext
.
CheckIfRequestOk
(
JobParam
.
CurTargetNode
.
Name
,
JobParam
.
GetMissionInfo
()))
else
if
(
JobRunStep
.
IsTimeOut
(
20
)
&&
!
LiftContext
.
CheckIfRequestOk
(
JobParam
.
CurTargetNode
.
Name
,
JobParam
.
GetMissionInfo
()))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_08_CheckD2Status
);
//请求电梯
lift
.
LiftContext
.
FinishedRequest
(
JobParam
.
GetMissionInfo
(),
agv
);
LiftContext
.
FinishedRequest
(
JobParam
.
GetMissionInfo
(),
agv
);
}
}
#
region
电梯内无料车
...
...
@@ -226,13 +252,12 @@ namespace DeviceLibrary.bean.job
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_11_LeaveLift
);
//上报状态
manager
.
UploadManager
.
UploadTransportStatus
(
new
service
.
model
.
TransportStatus
(
agv
.
CurJob
.
JobParam
.
GetMissionInfo
().
missionId
,
UploadManager
.
UploadTransportStatus
(
new
service
.
model
.
TransportStatus
(
agv
.
CurJob
.
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
TransportStatus
.
TypeStr
.
status
,
agv
.
Name
,
agv
.
Place
.
Name
,
service
.
model
.
TransportStatus
.
ModeStr
.
auto
,
$
"电梯卸车"
));
runInfo
=
$
"料车在{JobParam.CurTargetNode.AliceName}卸下完成,准备离开"
;
AllocateTask
(
agv
,
$
"{SettingString.Leave}_{JobParam.CurTargetNode.Name}"
);
LeaveLift
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
}
}
...
...
@@ -242,162 +267,97 @@ namespace DeviceLibrary.bean.job
{
JobRunStep
.
ToNextStep
(
RunStep
.
END
);
//发送该料是成品
bool
rtn1
=
lift
.
LiftContext
.
FinishedProduct
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
bool
rtn1
=
LiftContext
.
FinishedProduct
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
Thread
.
Sleep
(
5000
);
//AGV离开
bool
rtn
=
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
,
false
);
bool
rtn
=
LiftContext
.
AGVLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
,
false
);
Thread
.
Sleep
(
2000
);
bool
rtn2
=
lift
.
LiftContext
.
CloseFinishedProduct
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
bool
rtn2
=
LiftContext
.
CloseFinishedProduct
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
runInfo
=
$
"任务结束:离开{JobParam.CurTargetNode.AliceName}完成并发送离开信号和送成品信号:{rtn},{rtn1},{rtn2}"
;
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
等待成品回收
,
out
string
msg
);
JobRunStep
.
Msg
=
runInfo
;
ClearLiftNodeOccupied
(
agv
);
}
}
#
endregion
#
region
电梯内有料车
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_12_ToStandby
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
//
if (agv.TaskRunState.CheckTaskFinished(agv.Name))
{
if
(!
LiftContext
.
CheckLiftOccupied
(
JobParam
.
CurTargetNode
.
Name
)
&&
!
LiftContext
.
IsDoorOpen
(
JobParam
.
CurTargetNode
.
Name
))
if
(!
TargetIsOccupied
(
agv
,
JobParam
.
CurTargetNode
.
Name
)
&&
!
LiftContext
.
IsDoorOpen
(
JobParam
.
CurTargetNode
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_08_CheckD2Status
);
runInfo
=
$
"在{JobParam.CurTargetNode.AliceName}临时点1请求电梯"
;
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_07_ToLiftD2
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}空闲,去目的地"
;
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
送料
,
out
string
msg
);
//AllocateTask(agv, $"{JobParam.CurTargetNode.Name}");
ToLift
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
//请求电梯
lift
.
LiftContext
.
FinishedRequest
(
JobParam
.
GetMissionInfo
(),
agv
);
System
.
Threading
.
Thread
.
Sleep
(
2000
);
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_12_ToTemp1
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
//if (!TargetIsOccupied(agv, JobParam.CurTargetNode.Name))
//{
// JobRunStep.ToNextStep(RunStep.S1F_LiftC1ToLiftD2_08_CheckD2Status);
// runInfo = $"在{JobParam.CurTargetNode.AliceName}临时点1请求电梯";
// JobRunStep.Msg = runInfo;
// //请求电梯
// lift.LiftContext.FinishedRequest(JobParam.GetMissionInfo(), agv);
// System.Threading.Thread.Sleep(2000);
//}
#
region
电梯内有料车
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_13_TakeShelfOffAtTemp1
);
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName}的临时点1,将车上料车卸下"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{SettingString.TakeShelfOff}"
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_13_TakeShelfOffAtTemp1
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_14_ToLift
);
runInfo
=
$
"在{JobParam.CurTargetNode.AliceName}将车上料车卸在临时点1完成,去电梯口"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}"
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_14_ToLift
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_13_ToShelfBuff
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_1
5_EnterLift
);
runInfo
=
$
"到达
{JobParam.CurTargetNode.AliceName},去取料点
"
;
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_1
4_TakeShelfOff
);
runInfo
=
$
"到达
料架缓存点,将车上料车卸下
"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}_{SettingString.PutShelfOn}"
);
TakeShelfOff
(
agv
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_1
5_EnterLift
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_1
4_TakeShelfOff
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_16_PutShelfOn
);
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName}的取料点,准备拾取料车"
;
JobRunStep
.
Msg
=
runInfo
;
if
(
liftStatus
.
HasEmptyFinishedShelf
)
{
PutYiYuanD2LiftShelfOn
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
}
else
PutLiftShelfOn
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
//AllocateTask(agv, $"{SettingString.PutShelfOn}_{JobParam.CurTargetNode.Name}");
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_16_PutShelfOn
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_17_LeaveLift
);
runInfo
=
$
"拾取{JobParam.CurTargetNode.AliceName}的料车完成,准备离开电梯"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{SettingString.Leave}_{JobParam.CurTargetNode.Name}"
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_17_LeaveLift
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
if
(
liftStatus
.
HasEmptyFinishedShelf
)
//电梯里的是成品回收料
//设置任务状态为料架换缓存
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
料架缓存
,
out
string
msg
);
ResetMissionOccupiedAgv
(
JobParam
.
GetMissionInfo
());
//执行取空成品任务
Node
src
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
LIFT_D2
,
NodeType
.
Lift
);
Node
dest
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
LIFT_C1
,
NodeType
.
Lift
);
MissionInfo
missionInfo
=
MissionManager
.
GetMission
(
JobParam
.
LiftStatus
?.
missionId
);
if
(
missionInfo
!=
null
)
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_20_01_ToTemp2
);
runInfo
=
$
"离开{JobParam.CurTargetNode.AliceName}完成,去临时点2的放料点"
;
//service.model.MissionInfo missionInfo = manager.MissionManager.GetMission(liftStatus.missionId);
//if (missionInfo != null)
//{
// //任务状态变更
// MissionManager.SetMissionState(missionInfo.missionId, service.model.MissionState.离开电梯, out string msg);
//}
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}_{SettingString.Temp2}_{SettingString.TakeShelfOff}"
);
JobRunStep
.
Msg
=
runInfo
;
JobParam
jobParam
=
new
JobParam
(
src
,
dest
,
null
,
missionInfo
);
MissionManager
.
SetMissionOccupied
(
missionInfo
,
agv
);
job
=
new
F1LiftD2ToLiftC1Job
(
jobParam
);
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_18_CloseDoor
);
//AGV离开
bool
rtn
=
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
,
false
);
runInfo
=
$
"离开{JobParam.CurTargetNode.AliceName}完成,发送离开信号:{rtn}"
;
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
liftStatus
.
missionId
);
if
(
missionInfo
!=
null
)
{
//任务状态变更
MissionManager
.
SetMissionState
(
missionInfo
.
missionId
,
service
.
model
.
MissionState
.
返回离开电梯
,
out
string
msg
);
}
JobRunStep
.
ToNextStep
(
RunStep
.
END
);
runInfo
=
$
"未搜索到电梯内的料车任务信息【{JobParam.LiftStatus?.missionId ?? ""}】,结束任务"
;
JobRunStep
.
Msg
=
runInfo
;
}
}
}
}
#
region
送往库房的料车
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_18_CloseDoor
))
{
if
(
lift
.
LiftContext
.
CheckAgvLeaveSig
(
JobParam
.
CurTargetNode
.
Name
))
if
(
LiftContext
.
CheckAgvLeaveSig
(
JobParam
.
CurTargetNode
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_19_01_ToStore
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}关门完成,将料车送到{
l
iftStatus.destinationPoint}的放料点"
;
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
l
iftStatus
.
missionId
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}关门完成,将料车送到{
JobParam.L
iftStatus.destinationPoint}的放料点"
;
service
.
model
.
MissionInfo
missionInfo
=
MissionManager
.
GetMission
(
JobParam
.
L
iftStatus
.
missionId
);
if
(
missionInfo
!=
null
)
{
//任务状态变更
MissionManager
.
SetMissionState
(
missionInfo
.
missionId
,
service
.
model
.
MissionState
.
返回起始地
,
out
string
msg
);
}
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{
l
iftStatus.destinationPoint}_{SettingString.TakeShelfOff}"
);
AllocateTask
(
agv
,
$
"{
JobParam.L
iftStatus.destinationPoint}_{SettingString.TakeShelfOff}"
);
}
else
if
(
JobRunStep
.
IsTimeOut
(
0.5
,
out
double
val
))
{
//AGV离开
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
,
false
);
LiftContext
.
AGVLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
,
false
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}离开信号超时重发"
;
JobRunStep
.
Msg
=
runInfo
;
System
.
Threading
.
Thread
.
Sleep
(
3000
);
Thread
.
Sleep
(
3000
);
}
}
...
...
@@ -407,7 +367,7 @@ namespace DeviceLibrary.bean.job
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_19_02_TakeShelfOff
);
runInfo
=
$
"到达{
l
iftStatus.destinationPoint}的放料点,准备卸下"
;
runInfo
=
$
"到达{
JobParam.L
iftStatus.destinationPoint}的放料点,准备卸下"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{SettingString.TakeShelfOff}"
);
}
...
...
@@ -417,8 +377,8 @@ namespace DeviceLibrary.bean.job
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_19_03_ToTemp1
);
runInfo
=
$
"料车在{
l
iftStatus.destinationPoint}卸下完成, 返回{JobParam.CurTargetNode.AliceName}的临时点1的取料点"
;
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
l
iftStatus
.
missionId
);
runInfo
=
$
"料车在{
JobParam.L
iftStatus.destinationPoint}卸下完成, 返回{JobParam.CurTargetNode.AliceName}的临时点1的取料点"
;
service
.
model
.
MissionInfo
missionInfo
=
MissionManager
.
GetMission
(
JobParam
.
L
iftStatus
.
missionId
);
if
(
missionInfo
!=
null
)
{
//任务状态变更
...
...
@@ -447,7 +407,8 @@ namespace DeviceLibrary.bean.job
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_19_05_ToLift
);
runInfo
=
$
"拾取料架完成,去{JobParam.CurTargetNode.AliceName}"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}"
);
//AllocateTask(agv, $"{JobParam.CurTargetNode.Name}");
ToLift
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_19_05_ToLift
))
...
...
@@ -458,8 +419,8 @@ namespace DeviceLibrary.bean.job
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName},请求电梯"
;
JobRunStep
.
Msg
=
runInfo
;
//请求电梯
lift
.
LiftContext
.
Request
(
JobParam
.
GetMissionInfo
(),
agv
,
false
,
true
);
System
.
Threading
.
Thread
.
Sleep
(
2000
);
LiftContext
.
Request
(
JobParam
.
GetMissionInfo
(),
agv
,
false
,
true
);
Thread
.
Sleep
(
2000
);
}
}
#
endregion
...
...
@@ -482,7 +443,7 @@ namespace DeviceLibrary.bean.job
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_Lift
D2ToLiftC1
_20_03_ToTemp1
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_Lift
C1ToLiftD2
_20_03_ToTemp1
);
runInfo
=
$
"在{JobParam.CurTargetNode.AliceName}临时点2放下料车完成,去临时点1的取料点"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}_{SettingString.Temp1}_{SettingString.PutShelfOn}"
);
...
...
@@ -493,7 +454,7 @@ namespace DeviceLibrary.bean.job
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_Lift
D2ToLiftC1
_20_04_PutShelfOn
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_Lift
C1ToLiftD2
_20_04_PutShelfOn
);
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName}临时点1的取料点,准备取料"
;
JobRunStep
.
Msg
=
runInfo
;
//AllocateTask(agv, $"{SettingString.PutShelfOn}");
...
...
@@ -531,7 +492,7 @@ namespace DeviceLibrary.bean.job
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName}的放料点,准备放下料架"
;
JobRunStep
.
Msg
=
runInfo
;
//AllocateTask(agv, $"{SettingString.TakeShelfOff}");
TakeYiYuanLiftShelfOff
(
agv
,
SettingString
.
TakeShelfOff
);
TakeYiYuanLiftShelfOff
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
}
}
...
...
@@ -542,7 +503,8 @@ namespace DeviceLibrary.bean.job
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_20_08_LeaveLiftC1
);
runInfo
=
$
"在{JobParam.CurTargetNode.AliceName}放下料架完成,准备离开"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{SettingString.Leave}_{JobParam.CurTargetNode.Name}"
);
//AllocateTask(agv, $"{SettingString.Leave}_{JobParam.CurTargetNode.Name}");
LeaveLift
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
}
}
...
...
@@ -551,8 +513,12 @@ namespace DeviceLibrary.bean.job
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_20_09_CloseDoor
);
LiftContext
.
FinishedProduct
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
Thread
.
Sleep
(
2000
);
//AGV离开
bool
rtn
=
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
,
true
);
bool
rtn
=
LiftContext
.
AGVLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
,
true
);
Thread
.
Sleep
(
2000
);
LiftContext
.
CloseFinishedProduct
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
runInfo
=
$
"离开{JobParam.CurTargetNode.AliceName}完成,发送离开信号:{rtn}"
;
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
等待成品回收
,
out
string
msg
);
...
...
@@ -563,7 +529,7 @@ namespace DeviceLibrary.bean.job
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_20_09_CloseDoor
))
{
if
(
lift
.
LiftContext
.
CheckAgvLeaveSig
(
JobParam
.
CurTargetNode
.
Name
))
if
(
LiftContext
.
CheckAgvLeaveSig
(
JobParam
.
CurTargetNode
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_20_10_ToTemp2
);
runInfo
=
$
"去{JobParam.CurTargetNode.AliceName}临时点2的取料点"
;
...
...
@@ -573,17 +539,17 @@ namespace DeviceLibrary.bean.job
else
if
(
JobRunStep
.
IsTimeOut
(
0.5
,
out
double
val
))
{
//AGV离开
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
,
false
);
LiftContext
.
AGVLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
,
false
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}离开信号超时重发"
;
JobRunStep
.
Msg
=
runInfo
;
System
.
Threading
.
Thread
.
Sleep
(
3000
);
Thread
.
Sleep
(
3000
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_20_10_ToTemp2
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_Lift
D2ToLiftC1
_20_11_TakeShelfOn
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_Lift
C1ToLiftD2
_20_11_TakeShelfOn
);
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName}临时点2的取料点,准备取料架"
;
JobRunStep
.
Msg
=
runInfo
;
// AllocateTask(agv, $"{SettingString.PutShelfOn}");
...
...
@@ -606,14 +572,14 @@ namespace DeviceLibrary.bean.job
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
//去C1
Node
src
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
LIFT_D2
,
NodeType
.
Lift
);
Node
dest
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
LIFT_C1
,
NodeType
.
Lift
);
JobParam
jobParam
=
new
JobParam
(
src
,
dest
,
null
,
MissionManager
.
GetMission
(
l
iftStatus
.
missionId
));
Node
src
=
NodeManager
.
GetNode
(
SettingString
.
LIFT_D2
,
NodeType
.
Lift
);
Node
dest
=
NodeManager
.
GetNode
(
SettingString
.
LIFT_C1
,
NodeType
.
Lift
);
JobParam
jobParam
=
new
JobParam
(
src
,
dest
,
null
,
MissionManager
.
GetMission
(
JobParam
.
L
iftStatus
.
missionId
));
F1LiftD2ToLiftC1Job
d2ToLiftC1Job
=
new
F1LiftD2ToLiftC1Job
(
jobParam
);
d2ToLiftC1Job
.
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_07_ToLiftC1
);
runInfo
=
$
"准备去{SettingString.LIFT_C1}送空成品料车"
;
d2ToLiftC1Job
.
JobRunStep
.
Msg
=
runInfo
;
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
l
iftStatus
.
missionId
);
service
.
model
.
MissionInfo
missionInfo
=
MissionManager
.
GetMission
(
JobParam
.
L
iftStatus
.
missionId
);
if
(
missionInfo
!=
null
)
{
//任务状态变更
...
...
@@ -632,7 +598,7 @@ namespace DeviceLibrary.bean.job
JobRunStep
.
EndJob
();
return
null
;
}
return
this
;
return
job
;
}
}
}
DeviceLibrary/bean/job/F1LiftD2ToLiftC1Job.cs
查看文件 @
4ee65ac
...
...
@@ -19,9 +19,9 @@ namespace DeviceLibrary.bean.job
{
}
lift
.
LiftStatus
liftStatus
;
public
override
Job
Run
(
AgvInfo
agv
)
{
Job
job
=
this
;
agv
.
SetJobContext
(
new
bean
.
agv
.
JobContext
()
{
MissionId
=
JobParam
.
GetMissionInfo
().
missionId
,
...
...
@@ -33,10 +33,34 @@ namespace DeviceLibrary.bean.job
});
if
(
JobRunStep
.
IsStep
(
RunStep
.
NONE
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_01_ToLiftD2
);
runInfo
=
$
"任务开始:去{JobParam.SrcNode.AliceName}"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{JobParam.SrcNode.Name}"
);
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_00_ToStandby
);
runInfo
=
$
"在{JobParam.SrcNode.AliceName}小车,先去待机点"
;
JobRunStep
.
Msg
=
runInfo
;
MoveToNode
(
agv
,
SettingString
.
Standby
);
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_01_ToLiftD2
);
runInfo
=
$
"任务开始:去{JobParam.SrcNode.AliceName}"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{JobParam.SrcNode.Name}"
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftD2ToLiftC1_00_ToStandby
))
{
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Name
))
{
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_01_ToLiftD2
);
runInfo
=
$
"任务开始:去{JobParam.SrcNode.AliceName}"
;
JobRunStep
.
Msg
=
runInfo
;
ToLift
(
agv
,
$
"{JobParam.SrcNode.Name}"
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftD2ToLiftC1_01_ToLiftD2
))
{
...
...
@@ -92,7 +116,8 @@ namespace DeviceLibrary.bean.job
$
"电梯取车"
));
runInfo
=
$
"在{JobParam.SrcNode.AliceName}取料车完成,准备离开"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{SettingString.Leave}_{JobParam.SrcNode.Name}"
);
//AllocateTask(agv, $"{SettingString.Leave}_{JobParam.SrcNode.Name}");
LeaveLift
(
agv
,
JobParam
.
SrcNode
.
Name
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftD2ToLiftC1_05_LeaveLift
))
...
...
@@ -104,16 +129,43 @@ namespace DeviceLibrary.bean.job
bool
rtn
=
lift
.
LiftContext
.
EmptyFinishedAGVLeave
(
JobParam
.
SrcNode
.
Name
,
agv
);
//lift.LiftContext.AGVLeave(JobParam.SrcNode.Name, agv, false);
runInfo
=
$
"离开{JobParam.SrcNode.AliceName},关闭电梯门:{rtn}"
;
JobRunStep
.
Msg
=
runInfo
;
ClearLiftNodeOccupied
(
agv
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftD2ToLiftC1_06_CloseLiftDoor
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_07_ToLiftC1
);
runInfo
=
$
"关闭{JobParam.SrcNode.AliceName}门完成,去{JobParam.CurTargetNode.AliceName}"
;
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
返回电梯
,
out
string
msg
);
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}"
);
JobRunStep
.
Msg
=
runInfo
;
if
(
TargetIsOccupied
(
agv
,
JobParam
.
CurTargetNode
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_07_ToStandby
);
runInfo
=
$
"在{JobParam.CurTargetNode.AliceName}有小车,去待机点"
;
MoveToNode
(
agv
,
$
"{SettingString.Standby}"
);
JobRunStep
.
Msg
=
runInfo
;
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_07_ToLiftC1
);
runInfo
=
$
"关闭{JobParam.SrcNode.AliceName}门完成,去{JobParam.CurTargetNode.AliceName}"
;
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
返回电梯
,
out
string
msg
);
ToLift
(
agv
,
$
"{JobParam.CurTargetNode.Name}"
);
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftD2ToLiftC1_07_ToStandby
))
{
if
(
TargetIsOccupied
(
agv
,
JobParam
.
CurTargetNode
.
Name
))
{
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_07_ToLiftC1
);
runInfo
=
$
"关闭{JobParam.SrcNode.AliceName}门完成,去{JobParam.CurTargetNode.AliceName}"
;
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
返回电梯
,
out
string
msg
);
ToLift
(
agv
,
$
"{JobParam.CurTargetNode.Name}"
);
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftD2ToLiftC1_07_ToLiftC1
))
{
...
...
@@ -134,13 +186,13 @@ namespace DeviceLibrary.bean.job
{
if
(
lift
.
LiftContext
.
IsDoorOpen
(
JobParam
.
CurTargetNode
.
Name
,
JobParam
.
GetMissionInfo
().
destinationFloor
))
{
if
(
lift
.
LiftContext
.
HasFinishedShelfNeedLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
.
Client
,
out
l
iftStatus
))
if
(
lift
.
LiftContext
.
HasFinishedShelfNeedLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
.
Client
,
out
JobParam
.
L
iftStatus
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_12_ToTemp1
);
//SetLiftOccupied(JobParam.CurTargetNode.Name, agv);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门。电梯内有成品料车,去临时点1的卸料点,准备卸下车上料车"
;
//
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}_{SettingString.Temp1}_{SettingString.TakeShelfOff}"
);
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
l
iftStatus
.
missionId
);
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
JobParam
.
L
iftStatus
.
missionId
);
if
(
missionInfo
!=
null
)
{
//任务状态变更
...
...
@@ -148,31 +200,32 @@ namespace DeviceLibrary.bean.job
}
JobRunStep
.
Msg
=
runInfo
;
}
else
if
(
lift
.
LiftContext
.
HasShelfNeedLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
.
Client
,
out
l
iftStatus
))
else
if
(
lift
.
LiftContext
.
HasShelfNeedLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
.
Client
,
out
JobParam
.
L
iftStatus
))
{
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
liftStatus
.
missionId
);
if
(
IsBackShelf
(
missionInfo
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_12_ToTemp1
);
SetLiftOccupied
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门。电梯内有料车,去临时点1的卸料点,准备卸下车上料车"
;
//
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}_{SettingString.Temp1}_{SettingString.TakeShelfOff}"
);
job
=
new
SwitchShelfJob
(
JobParam
);
//service.model.MissionInfo missionInfo = manager.MissionManager.GetMission(liftStatus.missionId);
//if (IsBackShelf(missionInfo))
//{
// JobRunStep.ToNextStep(RunStep.S1F_LiftD2ToLiftC1_12_ToTemp1);
// SetLiftOccupied(JobParam.CurTargetNode.Name, agv);
// runInfo = $"{JobParam.CurTargetNode.AliceName}已开门。电梯内有料车,去临时点1的卸料点,准备卸下车上料车";//
// AllocateTask(agv, $"{JobParam.CurTargetNode.Name}_{SettingString.Temp1}_{SettingString.TakeShelfOff}");
if
(
missionInfo
!=
null
)
{
//任务状态变更
MissionManager
.
SetMissionState
(
missionInfo
.
missionId
,
service
.
model
.
MissionState
.
返回电梯到达
,
out
string
msg
);
}
JobRunStep
.
Msg
=
runInfo
;
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_12_ToStandby
);
// SetLiftOccupied(JobParam.CurTargetNode.Name, agv);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门。电梯内有送料的料车,去待机点等待电梯空闲"
;
//
AllocateStandbyTask
(
agv
);
JobRunStep
.
Msg
=
runInfo
;
}
//
if (missionInfo != null)
//
{
//
//任务状态变更
//
MissionManager.SetMissionState(missionInfo.missionId, service.model.MissionState.返回电梯到达, out string msg);
//
}
//
JobRunStep.Msg = runInfo;
//
}
//
else
//
{
//
JobRunStep.ToNextStep(RunStep.S1F_LiftD2ToLiftC1_12_ToStandby);
//
// SetLiftOccupied(JobParam.CurTargetNode.Name, agv);
//
runInfo = $"{JobParam.CurTargetNode.AliceName}已开门。电梯内有送料的料车,去待机点等待电梯空闲";//
//
AllocateStandbyTask(agv);
//
JobRunStep.Msg = runInfo;
//
}
}
else
//if (!TargetIsOccupied(agv, JobParam.CurTargetNode.Name))
{
...
...
@@ -214,7 +267,8 @@ namespace DeviceLibrary.bean.job
ResetMissionOccupiedAgv
(
JobParam
.
GetMissionInfo
());
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
返回到达电梯内
,
out
string
msg
);
AllocateTask
(
agv
,
$
"{SettingString.Leave}_{JobParam.CurTargetNode.Name}"
);
// AllocateTask(agv, $"{SettingString.Leave}_{JobParam.CurTargetNode.Name}");
LeaveLift
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
}
}
...
...
@@ -312,11 +366,11 @@ namespace DeviceLibrary.bean.job
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
if
(
service
.
model
.
MissionInfo
.
IsFinishedProdcut
(
MissionManager
.
GetMission
(
l
iftStatus
.
missionId
)))
//电梯里的是成品入库料
if
(
service
.
model
.
MissionInfo
.
IsFinishedProdcut
(
MissionManager
.
GetMission
(
JobParam
.
L
iftStatus
.
missionId
)))
//电梯里的是成品入库料
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_20_01_ToTemp2
);
runInfo
=
$
"离开{JobParam.CurTargetNode.AliceName}完成,去临时点2的放料点"
;
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
l
iftStatus
.
missionId
);
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
JobParam
.
L
iftStatus
.
missionId
);
if
(
missionInfo
!=
null
)
{
//任务状态变更
...
...
@@ -328,10 +382,11 @@ namespace DeviceLibrary.bean.job
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_18_CloseDoor
);
ClearLiftNodeOccupied
(
agv
);
//AGV离开
bool
rtn
=
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
,
false
);
runInfo
=
$
"离开{JobParam.CurTargetNode.AliceName}完成,发送离开信号:{rtn}"
;
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
l
iftStatus
.
missionId
);
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
JobParam
.
L
iftStatus
.
missionId
);
if
(
missionInfo
!=
null
)
{
//任务状态变更
...
...
@@ -349,15 +404,15 @@ namespace DeviceLibrary.bean.job
if
(
lift
.
LiftContext
.
CheckAgvLeaveSig
(
JobParam
.
CurTargetNode
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_19_01_ToStore
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}关门完成,将料车送到{
l
iftStatus.destinationPoint}的放料点"
;
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
l
iftStatus
.
missionId
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}关门完成,将料车送到{
JobParam.L
iftStatus.destinationPoint}的放料点"
;
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
JobParam
.
L
iftStatus
.
missionId
);
if
(
missionInfo
!=
null
)
{
//任务状态变更
MissionManager
.
SetMissionState
(
missionInfo
.
missionId
,
service
.
model
.
MissionState
.
返回起始地
,
out
string
msg
);
}
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{
l
iftStatus.destinationPoint}_{SettingString.TakeShelfOff}"
);
AllocateTask
(
agv
,
$
"{
JobParam.L
iftStatus.destinationPoint}_{SettingString.TakeShelfOff}"
);
}
else
if
(
JobRunStep
.
IsTimeOut
(
0.5
,
out
double
val
))
{
...
...
@@ -375,7 +430,7 @@ namespace DeviceLibrary.bean.job
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_19_02_TakeShelfOff
);
runInfo
=
$
"到达{
l
iftStatus.destinationPoint}的放料点,准备卸下"
;
runInfo
=
$
"到达{
JobParam.L
iftStatus.destinationPoint}的放料点,准备卸下"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{SettingString.TakeShelfOff}"
);
}
...
...
@@ -385,8 +440,8 @@ namespace DeviceLibrary.bean.job
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_19_03_ToTemp1
);
runInfo
=
$
"料车在{
l
iftStatus.destinationPoint}卸下完成, 返回{JobParam.CurTargetNode.AliceName}的临时点1的取料点"
;
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
l
iftStatus
.
missionId
);
runInfo
=
$
"料车在{
JobParam.L
iftStatus.destinationPoint}卸下完成, 返回{JobParam.CurTargetNode.AliceName}的临时点1的取料点"
;
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
JobParam
.
L
iftStatus
.
missionId
);
if
(
missionInfo
!=
null
)
{
//任务状态变更
...
...
@@ -412,10 +467,35 @@ namespace DeviceLibrary.bean.job
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
if
(
TargetIsOccupied
(
agv
,
JobParam
.
CurTargetNode
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_19_05_ToStandby
);
runInfo
=
$
"在{JobParam.CurTargetNode.AliceName}有小车,去待机点"
;
JobRunStep
.
Msg
=
runInfo
;
MoveToNode
(
agv
,
$
"{SettingString.Standby}"
);
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_19_05_ToLift
);
runInfo
=
$
"拾取料架完成,去{JobParam.CurTargetNode.AliceName}"
;
JobRunStep
.
Msg
=
runInfo
;
ToLift
(
agv
,
$
"{JobParam.CurTargetNode.Name}"
);
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftD2ToLiftC1_19_05_ToStandby
))
{
if
(
TargetIsOccupied
(
agv
,
JobParam
.
CurTargetNode
.
Name
))
{
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_19_05_ToLift
);
runInfo
=
$
"拾取料架完成,去{JobParam.CurTargetNode.AliceName}"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}"
);
ToLift
(
agv
,
$
"{JobParam.CurTargetNode.Name}"
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftD2ToLiftC1_19_05_ToLift
))
...
...
@@ -511,7 +591,8 @@ namespace DeviceLibrary.bean.job
JobRunStep
.
Msg
=
runInfo
;
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
返回到达电梯内
,
out
string
msg
);
AllocateTask
(
agv
,
$
"{SettingString.Leave}_{JobParam.CurTargetNode.Name}"
);
//AllocateTask(agv, $"{SettingString.Leave}_{JobParam.CurTargetNode.Name}");
LeaveLift
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
}
}
...
...
@@ -526,6 +607,7 @@ namespace DeviceLibrary.bean.job
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
返回电梯运行
,
out
string
msg
);
JobRunStep
.
Msg
=
runInfo
;
ClearLiftNodeOccupied
(
agv
);
}
}
...
...
@@ -536,7 +618,8 @@ namespace DeviceLibrary.bean.job
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_20_10_ToTemp2
);
runInfo
=
$
"去{JobParam.CurTargetNode.AliceName}临时点2的取料点"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}_{SettingString.Temp2}_{SettingString.PutShelfOn}"
);
ToTmp2PutOn
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
//AllocateTask(agv, $"{JobParam.CurTargetNode.Name}_{SettingString.Temp2}_{SettingString.PutShelfOn}");
}
else
if
(
JobRunStep
.
IsTimeOut
(
0.5
,
out
double
val
))
{
...
...
@@ -576,12 +659,12 @@ namespace DeviceLibrary.bean.job
//去D2
Node
src
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
LIFT_C1
,
NodeType
.
Lift
);
Node
dest
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
LIFT_D2
,
NodeType
.
Lift
);
JobParam
jobParam
=
new
JobParam
(
src
,
dest
,
null
,
MissionManager
.
GetMission
(
l
iftStatus
.
missionId
));
JobParam
jobParam
=
new
JobParam
(
src
,
dest
,
null
,
MissionManager
.
GetMission
(
JobParam
.
L
iftStatus
.
missionId
));
F1LiftC1ToLiftD2Job
c1ToLiftD2Job
=
new
F1LiftC1ToLiftD2Job
(
jobParam
);
c1ToLiftD2Job
.
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_07_ToLiftD2
);
runInfo
=
$
"准备去{SettingString.LIFT_D2}送成品料车"
;
c1ToLiftD2Job
.
JobRunStep
.
Msg
=
runInfo
;
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
l
iftStatus
.
missionId
);
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
JobParam
.
L
iftStatus
.
missionId
);
if
(
missionInfo
!=
null
)
{
//任务状态变更
...
...
@@ -599,7 +682,7 @@ namespace DeviceLibrary.bean.job
JobRunStep
.
EndJob
();
return
null
;
}
return
this
;
return
job
;
}
}
}
DeviceLibrary/bean/job/Job.cs
查看文件 @
4ee65ac
using
Common
;
using
DeviceLibrary.bean
;
using
DeviceLibrary.lift
;
using
DeviceLibrary.manager
;
using
DeviceLibrary.service.model
;
using
log4net.Util
;
using
System
;
using
System.Web.UI.WebControls.WebParts
;
using
System.Windows.Forms
;
namespace
DeviceLibrary
...
...
@@ -73,6 +75,163 @@ namespace DeviceLibrary
Task
=
AgvTaskManager
.
GetTaskByName
(
taskName
,
agv
);
AgvTaskManager
.
AssignMission
(
agv
,
taskName
);
}
/// <summary>
/// 去电梯,并占用节点
/// </summary>
/// <param name="agv"></param>
/// <param name="liftname"></param>
protected
void
ToLift
(
AgvInfo
agv
,
string
liftname
)
{
LiftContext
.
SetLiftNodeOccupied
(
agv
,
liftname
);
AllocateTask
(
agv
,
$
"{liftname}"
);
}
/// <summary>
/// 离开电梯
/// </summary>
/// <param name="agv"></param>
/// <param name="liftName"></param>
protected
void
LeaveLift
(
AgvInfo
agv
,
string
liftName
)
{
AllocateTask
(
agv
,
$
"{SettingString.Leave}_{liftName}"
);
}
/// <summary>
/// 清除agv占用的电梯点
/// </summary>
/// <param name="agv"></param>
protected
void
ClearLiftNodeOccupied
(
AgvInfo
agv
)
{
LiftContext
.
SetLiftNodeOccupied
(
agv
);
}
/// <summary>
/// 去电梯临时电1放料点
/// </summary>
/// <param name="agvInfo"></param>
protected
void
ToTmp1TakeOff
(
AgvInfo
agv
,
string
liftName
)
{
AllocateTask
(
agv
,
$
"{liftName}_{SettingString.Temp1}_{SettingString.TakeShelfOff}"
);
}
/// <summary>
/// 去电梯临时点1取料点
/// </summary>
/// <param name="agv"></param>
/// <param name="liftName"></param>
protected
void
ToTmp1PutOn
(
AgvInfo
agv
,
string
liftName
)
{
AllocateTask
(
agv
,
$
"{liftName}_{SettingString.Temp1}_{SettingString.PutShelfOn}"
);
}
/// <summary>
/// 去取料点
/// </summary>
/// <param name="agv"></param>
/// <param name="nodeName"></param>
protected
void
ToPutShelfOn
(
AgvInfo
agv
,
string
nodeName
)
{
AllocateTask
(
agv
,
$
"{nodeName}_{SettingString.PutShelfOn}"
);
}
/// <summary>
/// 去放料点
/// </summary>
/// <param name="agv"></param>
/// <param name="nodeName"></param>
protected
void
ToTakeShelfOff
(
AgvInfo
agv
,
string
nodeName
)
{
AllocateTask
(
agv
,
$
"{nodeName}_{SettingString.TakeShelfOff}"
);
}
/// <summary>
/// 去电梯临时电2放料点
/// </summary>
/// <param name="agvInfo"></param>
protected
void
ToTmp2TakeOff
(
AgvInfo
agv
,
string
liftName
)
{
AllocateTask
(
agv
,
$
"{liftName}_{SettingString.Temp2}_{SettingString.TakeShelfOff}"
);
}
/// <summary>
/// 去电梯临时点2取料点
/// </summary>
/// <param name="agv"></param>
/// <param name="liftName"></param>
protected
void
ToTmp2PutOn
(
AgvInfo
agv
,
string
liftName
)
{
AllocateTask
(
agv
,
$
"{liftName}_{SettingString.Temp2}_{SettingString.PutShelfOn}"
);
}
/// <summary>
/// AGV任务是否运行完成
/// </summary>
/// <param name="agv"></param>
/// <returns></returns>
protected
bool
AGVTaskIsFinished
(
AgvInfo
agv
)
{
return
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
);
}
/// <summary>
/// 卸下料架
/// </summary>
/// <param name="agv"></param>
/// <param name="nodeName"></param>
protected
void
TakeShelfOff
(
AgvInfo
agv
,
string
nodeName
=
""
)
{
if
(
string
.
IsNullOrEmpty
(
nodeName
))
{
AllocateTask
(
agv
,
$
"{SettingString.TakeShelfOff}"
);
}
else
{
AllocateTask
(
agv
,
$
"{SettingString.TakeShelfOff}_{nodeName}"
);
}
}
/// <summary>
/// 在电梯内卸下料车
/// </summary>
/// <param name="agv"></param>
/// <param name="liftName"></param>
protected
void
TakeShelfOffAtLift
(
AgvInfo
agv
,
string
liftName
)
{
if
(
agv
.
Scope
.
Workshop
.
Equals
(
"1F"
))
{
if
(
SettingString
.
LIFT_D2
.
Equals
(
liftName
))
{
TakeYiYuanLiftShelfOff
(
agv
,
liftName
);
}
else
{
AllocateTask
(
agv
,
$
"{SettingString.TakeShelfOff}_{liftName}"
);
}
}
else
{
AllocateTask
(
agv
,
$
"{SettingString.TakeShelfOff}_{liftName}"
);
}
}
/// <summary>
/// 移动到节点
/// </summary>
/// <param name="agv"></param>
/// <param name="nodeName"></param>
protected
void
MoveToNode
(
AgvInfo
agv
,
string
nodeName
)
{
AllocateTask
(
agv
,
$
"{nodeName}"
);
}
/// <summary>
/// 移动到节点的取料点
/// </summary>
/// <param name="agv"></param>
/// <param name="nodeName"></param>
protected
void
MoveToNodePutShelf
(
AgvInfo
agv
,
string
nodeName
)
{
AllocateTask
(
agv
,
$
"{nodeName}_{SettingString.PutShelfOn}"
);
}
/// <summary>
/// 移动到节点的放料点
/// </summary>
/// <param name="agv"></param>
/// <param name="nodeName"></param>
protected
void
MoveToNodeTakeOff
(
AgvInfo
agv
,
string
nodeName
)
{
AllocateTask
(
agv
,
$
"{nodeName}_{SettingString.TakeShelfOff}"
);
}
public
void
PutLiftShelfOn
(
AgvInfo
agv
,
string
nodeName
)
{
if
(
JobParam
.
GetMissionInfo
().
projectType
.
Equals
(
ProjectType
.
空台车归还
)
||
...
...
@@ -140,7 +299,7 @@ namespace DeviceLibrary
{
AllocateTask
(
agv
,
$
"{SettingString.PutShelfOn}_{nodeName}{SettingString._Steel}"
);
}
else
if
(
JobParam
.
GetMissionInfo
()
.
projectType
.
Equals
(
ProjectType
.
移远成品入库
))
else
if
(
missionInfo
.
projectType
.
Equals
(
ProjectType
.
移远成品入库
))
{
AllocateTask
(
agv
,
$
"{SettingString.PutShelfOn}_{nodeName}{SettingString._Box}"
);
}
...
...
@@ -171,6 +330,7 @@ namespace DeviceLibrary
AllocateTask
(
agv
,
$
"{SettingString.PutShelfOn}"
);
}
}
public
void
TakeYiYuanLiftShelfOff
(
AgvInfo
agv
,
string
nodeName
)
{
if
(
JobParam
.
GetMissionInfo
().
projectType
.
Equals
(
ProjectType
.
移远成品入库
))
...
...
@@ -179,9 +339,13 @@ namespace DeviceLibrary
}
else
{
AllocateTask
(
agv
,
$
"{SettingString.
PutShelfOn
}_{nodeName}"
);
AllocateTask
(
agv
,
$
"{SettingString.
TakeShelfOff
}_{nodeName}"
);
}
}
/// <summary>
/// 根据当前任务类型拾取料车,非电梯拾取任务
/// </summary>
/// <param name="agv"></param>
public
void
PutShelfOn
(
AgvInfo
agv
)
{
if
(
JobParam
.
GetMissionInfo
().
projectType
.
Equals
(
ProjectType
.
空台车归还
)
||
...
...
@@ -218,12 +382,52 @@ namespace DeviceLibrary
AllocateTask
(
agv
,
$
"{SettingString.PutShelfOn}"
);
}
}
public
void
PutShelfOn
(
AgvInfo
agv
,
MissionInfo
missionInfo
)
{
if
(
missionInfo
!=
null
)
{
if
(
missionInfo
.
projectType
.
Equals
(
ProjectType
.
空台车归还
)
||
missionInfo
.
projectType
.
Equals
(
ProjectType
.
空台车领用
))
{
AllocateTask
(
agv
,
$
"{SettingString.PutShelfOn}{SettingString._Big}"
);
}
else
if
(
missionInfo
.
projectType
.
Equals
(
ProjectType
.
半成品入库与领用
)
&&
!
missionInfo
.
needBack
)
{
AllocateTask
(
agv
,
$
"{SettingString.PutShelfOn}{SettingString._Big}"
);
}
else
if
(
missionInfo
.
projectType
.
Equals
(
ProjectType
.
半成品入库
)
&&
!
missionInfo
.
needBack
)
{
AllocateTask
(
agv
,
$
"{SettingString.PutShelfOn}{SettingString._Big}"
);
}
else
if
(
missionInfo
.
projectType
.
Equals
(
ProjectType
.
半成品领用
)
&&
!
missionInfo
.
needBack
)
{
AllocateTask
(
agv
,
$
"{SettingString.PutShelfOn}{SettingString._Big}"
);
}
else
if
(
missionInfo
.
projectType
.
Equals
(
ProjectType
.
钢网入库
)
||
missionInfo
.
projectType
.
Equals
(
ProjectType
.
钢网领用
))
{
AllocateTask
(
agv
,
$
"{SettingString.PutShelfOn}{SettingString._Steel}"
);
}
else
if
(
missionInfo
.
projectType
.
Equals
(
ProjectType
.
移远成品入库
))
{
AllocateTask
(
agv
,
$
"{SettingString.PutShelfOn}{SettingString._Box}"
);
}
else
{
AllocateTask
(
agv
,
$
"{SettingString.PutShelfOn}"
);
}
}
}
protected
void
AllocateTask
(
AgvInfo
agv
,
ChargePile
chargePile
)
{
Task
=
new
AgvTask
()
{
AliceName
=
chargePile
.
AliceName
,
Name
=
chargePile
.
Name
,
Guid
=
chargePile
.
Guid
};
AgvTaskManager
.
AssignMission
(
agv
,
chargePile
,
Task
);
}
protected
void
AllocateStandbyTask
(
AgvInfo
agv
)
protected
void
ToStandby
(
AgvInfo
agv
)
{
Task
=
AgvTaskManager
.
GetTaskByName
(
$
"{SettingString.Standby}"
,
agv
);
AgvTaskManager
.
AssignMission
(
agv
,
$
"{SettingString.Standby}"
);
...
...
@@ -314,16 +518,16 @@ namespace DeviceLibrary
/// <summary>
/// 是否需要确认
/// </summary>
/// <returns></returns>
/// <returns>
false,不需要确认
</returns>
protected
bool
NeedConfirm
()
{
if
(
JobParam
.
GetMissionInfo
()
!=
null
)
{
MissionInfo
missionInfo
=
JobParam
.
GetMissionInfo
();
service
.
model
.
ProjectType
type
=
JobParam
.
GetMissionInfo
().
projectType
;
if
(
type
.
Equals
(
service
.
model
.
ProjectType
.
空台车领用
)
||
type
.
Equals
(
service
.
model
.
ProjectType
.
空台车归还
)
||
(
type
.
Equals
(
service
.
model
.
ProjectType
.
半成品入库
)
&&
!
missionInfo
.
needBack
)
||
type
.
Equals
(
service
.
model
.
ProjectType
.
半成品入库与领用
))
if
(
type
.
Equals
(
service
.
model
.
ProjectType
.
空台车领用
)
||
type
.
Equals
(
service
.
model
.
ProjectType
.
空台车归还
)
||
(!
missionInfo
.
needBack
))
{
return
false
;
}
...
...
@@ -382,14 +586,15 @@ namespace DeviceLibrary
{
MissionManager
.
SetMissionOccupiedAgv
(
missionInfo
.
missionId
,
string
.
Empty
);
}
/// <summary>
/// 当前电梯正在使用电梯
/// </summary>
/// <param name="liftId"></param>
/// <param name="agv"></param>
protected
void
SetLiftOccupied
(
string
liftId
,
AgvInfo
agv
)
{
lift
.
LiftContext
.
SetLiftOccupiedAgv
(
liftId
,
agv
.
IP
);
}
protected
void
ResetLiftOccupied
(
string
liftId
)
{
lift
.
LiftContext
.
ResetLiftOccupiedAgv
(
liftId
);
}
/// <summary>
/// 目的地是否有小车占用
/// </summary>
...
...
@@ -398,33 +603,38 @@ namespace DeviceLibrary
/// <returns></returns>
protected
bool
TargetIsOccupied
(
AgvInfo
agv
,
string
targetName
)
{
try
{
if
(
agv
.
Scope
.
Equals
(
"1F"
))
{
AgvInfo
agvInfo
=
AGVManager
.
agvInfo
.
Find
(
s
=>
s
.
Auto
&&
!
s
.
IP
.
Equals
(
agv
.
IP
)
&&
agv
.
Scope
.
Workshop
.
Equals
(
s
.
Scope
.
Workshop
)
&&
s
.
Scope
.
Equals
(
"1F"
));
if
(
agvInfo
!=
null
)
{
//if (agvInfo?.Place.Name.Contains(targetName) ?? false)
// return true;
if
(
agvInfo
?.
TaskRunState
?.
Task
?.
Name
.
Equals
(
targetName
)
??
false
)
{
return
true
;
}
}
}
else
return
false
;
return
false
;
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
$
"TargetIsOccupied:{agv.Name},{JsonHelper.SerializeObject(AGVManager.agvInfo)}"
,
ex
);
return
false
;
}
return
LiftContext
.
OtherAGVIsInLift
(
agv
,
targetName
);
//try
//{
// if (agv.Scope.Equals("1F"))
// {
// AgvInfo agvInfo = AGVManager.agvInfo.Find(s => s.Auto && !s.IP.Equals(agv.IP)
// && agv.Scope.Workshop.Equals(s.Scope.Workshop) && s.Scope.Equals("1F"));
// if (agvInfo != null)
// {
// //if (agvInfo?.Place.Name.Contains(targetName) ?? false)
// // return true;
// if (agvInfo?.TaskRunState?.Task?.Name.Equals(targetName) ?? false)
// {
// return true;
// }
// }
// }
// else
// return false;
// return false;
//}
//catch (Exception ex)
//{
// LogUtil.error($"TargetIsOccupied:{agv.Name},{JsonHelper.SerializeObject(AGVManager.agvInfo)}", ex);
// return false;
//}
}
/// <summary>
/// 获取任务下一个状态
/// </summary>
/// <param name="missionState"></param>
/// <returns></returns>
protected
MissionState
getNextState
(
MissionState
missionState
)
{
if
(
missionState
==
MissionState
.
电梯运行
)
...
...
@@ -433,24 +643,95 @@ namespace DeviceLibrary
return
MissionState
.
离开电梯
;
else
if
(
missionState
==
MissionState
.
离开电梯
)
return
MissionState
.
送料
;
else
if
(
missionState
==
MissionState
.
前往电梯
)
return
MissionState
.
到达电梯
;
else
if
(
missionState
==
MissionState
.
到达电梯
)
return
MissionState
.
电梯运行
;
else
if
(
missionState
==
MissionState
.
返回电梯运行
)
return
MissionState
.
返回电梯到达
;
else
if
(
missionState
==
MissionState
.
返回电梯到达
)
return
MissionState
.
返回离开电梯
;
else
if
(
missionState
==
MissionState
.
返回离开电梯
)
return
MissionState
.
返回起始地
;
else
if
(
missionState
==
MissionState
.
等待成品回收
)
return
MissionState
.
返回电梯
;
return
missionState
++;
int
intType
=
((
int
)
missionState
)
+
1
;
return
(
MissionState
)
intType
;
}
protected
bool
MissionIsBackState
(
MissionInfo
missionInfo
)
{
if
(
missionInfo
==
null
)
return
false
;
if
(
missionInfo
.
state
>=
MissionState
.
返回到达电梯内
&&
missionInfo
.
state
<=
MissionState
.
返回电梯运行
)
return
true
;
if
(
missionInfo
.
state
==
MissionState
.
等待成品回收
)
return
true
;
return
false
;
}
protected
bool
CheckMIssionInlift
(
MissionInfo
missionInfo
)
{
if
(
missionInfo
.
state
>=
MissionState
.
返回电梯到达
&&
missionInfo
.
state
<=
MissionState
.
返回离开电梯
)
return
true
;
return
false
;
}
/// <summary>
/// 设置电梯内料架的任务状态
/// </summary>
/// <param name="missionState"></param>
/// <returns></returns>
protected
bool
setMissionState
(
MissionInfo
missionInfo
)
{
service
.
model
.
MissionInfo
mission
=
manager
.
MissionManager
.
GetMission
(
missionInfo
?.
missionId
??
""
);
if
(
mission
!=
null
)
{
MissionState
missionState
=
getNextState
(
mission
.
state
);
//任务状态变更
MissionManager
.
SetMissionState
(
mission
.
missionId
,
missionState
,
out
string
msg
);
return
true
;
}
return
false
;
}
/// <summary>
/// 设置当前任务的状态
/// </summary>
/// <param name="missionState"></param>
protected
void
setMissionState
(
MissionState
missionState
)
{
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
missionState
,
out
string
msg
);
}
protected
bool
IsBackShelf
(
MissionInfo
missionInfo
)
{
if
(
missionInfo
?.
state
>=
MissionState
.
返回电梯运行
&&
missionInfo
?.
state
<=
MissionState
.
返回电梯到达
)
if
(
missionInfo
?.
state
>=
MissionState
.
返回电梯运行
&&
missionInfo
?.
state
<=
MissionState
.
返回电梯到达
)
{
return
true
;
}
return
false
;
}
protected
Job
GetCallBackJob
()
{
//Assembly assembly = Assembly.GetExecutingAssembly(); // 获取当前程序集
//return (Model.Job)assembly.CreateInstance(JobParam.CallbackJob.Type.FullName);
object
[]
parameters
=
new
object
[
1
];
parameters
[
0
]
=
JobParam
;
Job
job
=
(
Job
)
Activator
.
CreateInstance
(
JobParam
.
CallbackJob
.
Type
,
parameters
);
return
job
;
}
protected
RunStep
GetCallBackStep
()
{
return
JobParam
.
CallbackJob
.
RunStep
;
}
/// <summary>
/// 生成Job回调
/// </summary>
/// <param name="type"></param>
/// <param name="callbackStep"></param>
/// <returns></returns>
protected
void
GenJobCallBack
(
Type
type
,
RunStep
callbackStep
,
JobParam
jobParam
=
null
)
{
JobParam
.
CallbackJob
=
new
JobCallBack
(
type
,
callbackStep
);
}
}
}
DeviceLibrary/bean/job/LiftToLinesJob.cs
查看文件 @
4ee65ac
using
Common
;
using
DeviceLibrary.bean
;
using
DeviceLibrary.lift
;
using
DeviceLibrary.manager
;
namespace
DeviceLibrary
.bean.job
namespace
DeviceLibrary
{
/// <summary>
/// 电梯到线体
...
...
@@ -18,9 +20,9 @@ namespace DeviceLibrary.bean.job
{
}
lift
.
LiftStatus
liftStatus
;
public
override
Job
Run
(
AgvInfo
agv
)
{
Job
job
=
this
;
agv
.
SetJobContext
(
new
bean
.
agv
.
JobContext
()
{
MissionId
=
JobParam
.
GetMissionInfo
().
missionId
,
...
...
@@ -32,10 +34,35 @@ namespace DeviceLibrary.bean.job
});
if
(
JobRunStep
.
IsStep
(
RunStep
.
NONE
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_01_ToLift
);
runInfo
=
$
"任务开始:去{JobParam.SrcNode.AliceName}"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
JobParam
.
SrcNode
.
Name
);
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_00_ToStandby
);
runInfo
=
$
"在{JobParam.SrcNode.AliceName}有小车,去待机点"
;
JobRunStep
.
Msg
=
runInfo
;
ToStandby
(
agv
);
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_01_ToLift
);
runInfo
=
$
"去{JobParam.SrcNode.AliceName}"
;
JobRunStep
.
Msg
=
runInfo
;
ToLift
(
agv
,
JobParam
.
SrcNode
.
Name
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_00_ToStandby
))
{
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Name
))
{
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_01_ToLift
);
runInfo
=
$
"任务开始:去{JobParam.SrcNode.AliceName}"
;
JobRunStep
.
Msg
=
runInfo
;
ToLift
(
agv
,
JobParam
.
SrcNode
.
Name
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_01_ToLift
))
{
...
...
@@ -58,7 +85,7 @@ namespace DeviceLibrary.bean.job
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_03_EnterLift
);
SetLiftOccupied
(
JobParam
.
SrcNode
.
Name
,
agv
);
runInfo
=
$
"{JobParam.SrcNode.AliceName}门已开启,进电梯取料点"
;
AllocateTask
(
agv
,
$
"{JobParam.SrcNode.Name}_{SettingString.PutShelfOn}"
);
ToPutShelfOn
(
agv
,
JobParam
.
SrcNode
.
Name
);
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
电梯到达
,
out
string
msg
);
JobRunStep
.
Msg
=
runInfo
;
...
...
@@ -72,7 +99,6 @@ namespace DeviceLibrary.bean.job
runInfo
=
$
"到达{JobParam.SrcNode.AliceName}取料点,准备拾取料车"
;
JobRunStep
.
Msg
=
runInfo
;
PutLiftShelfOn
(
agv
,
JobParam
.
SrcNode
.
Name
);
//AllocateTask(agv, $"{SettingString.PutShelfOn}_{JobParam.SrcNode.Name}");
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_04_PutShelfOn
))
...
...
@@ -87,7 +113,7 @@ namespace DeviceLibrary.bean.job
runInfo
=
$
"在{JobParam.SrcNode.AliceName}拾取料车完成,准备离开"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{SettingString.Leave}_{JobParam.SrcNode.Name}"
);
LeaveLift
(
agv
,
JobParam
.
SrcNode
.
Name
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_05_LeaveLift
))
...
...
@@ -101,6 +127,7 @@ namespace DeviceLibrary.bean.job
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
离开电梯
,
out
string
msg
);
JobRunStep
.
Msg
=
runInfo
;
ClearLiftNodeOccupied
(
agv
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_06_CloseLiftDoor
))
...
...
@@ -109,7 +136,7 @@ namespace DeviceLibrary.bean.job
runInfo
=
$
"关闭{JobParam.SrcNode.AliceName}门完成,去{JobParam.CurTargetNode.AliceName}的放料点"
;
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
送料
,
out
string
msg
);
AllocateTask
(
agv
,
$
"{GetTargetName(JobParam.CurTargetNode)}_{SettingString.TakeShelfOff}"
);
ToTakeShelfOff
(
agv
,
GetTargetName
(
JobParam
.
CurTargetNode
)
);
JobRunStep
.
Msg
=
runInfo
;
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_07_ToLine
))
...
...
@@ -176,18 +203,18 @@ namespace DeviceLibrary.bean.job
System
.
Threading
.
Thread
.
Sleep
(
1000
);
runInfo
=
$
"去下一线体{JobParam.CurTargetNode.AliceName}的放料点"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{GetTargetName(JobParam.CurTargetNode)}_{SettingString.TakeShelfOff}"
);
ToTakeShelfOff
(
agv
,
GetTargetName
(
JobParam
.
CurTargetNode
)
);
}
else
{
if
(
JobParam
.
GetMissionInfo
()
!=
null
&&
JobParam
.
GetMissionInfo
().
needBack
)
{
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Alice
Name
))
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_11_ToStandby
);
runInfo
=
$
"{JobParam.SrcNode.AliceName}有车,去停留点"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{SettingString.Standby}"
);
ToStandby
(
agv
);
}
else
{
...
...
@@ -196,15 +223,15 @@ namespace DeviceLibrary.bean.job
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
返回电梯
,
out
string
msg
);
AllocateTask
(
agv
,
JobParam
.
SrcNode
.
Name
);
ToLift
(
agv
,
JobParam
.
SrcNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobParam
.
GetMissionInfo
()
!=
null
&&
!
JobParam
.
GetMissionInfo
().
needBack
)
{
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_16_TakeShelfOff
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}是最后一个线体,料车无需返回,
准备
卸车"
;
AllocateTask
(
agv
,
SettingString
.
TakeShelfOff
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}是最后一个线体,料车无需返回,
直接
卸车"
;
TakeShelfOff
(
agv
);
JobRunStep
.
Msg
=
runInfo
;
}
}
...
...
@@ -213,12 +240,12 @@ namespace DeviceLibrary.bean.job
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Alice
Name
))
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_11_ToStandby
);
runInfo
=
$
"{JobParam.SrcNode.AliceName}有车,去停留点"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{SettingString.Standby}"
);
ToStandby
(
agv
);
}
else
{
...
...
@@ -238,7 +265,7 @@ namespace DeviceLibrary.bean.job
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_11_ToStandby
))
{
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Alice
Name
))
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Name
))
{
}
else
...
...
@@ -248,13 +275,18 @@ namespace DeviceLibrary.bean.job
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
返回电梯
,
out
string
msg
);
AllocateTask
(
agv
,
JobParam
.
SrcNode
.
Name
);
ToLift
(
agv
,
JobParam
.
SrcNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_12_WaitDoorOpen
))
{
if
(
lift
.
LiftContext
.
IsDoorOpen
(
JobParam
.
SrcNode
.
Name
,
JobParam
.
GetMissionInfo
().
destinationFloor
))
if
(
LiftContext
.
CheckHasEmptyFinished
(
agv
,
JobParam
.
SrcNode
.
Name
,
out
JobParam
.
LiftStatus
))
{
JobParam
.
CurTargetNode
=
JobParam
.
SrcNode
;
job
=
new
SwitchShelfJob
(
JobParam
);
}
else
if
(
lift
.
LiftContext
.
IsDoorOpen
(
JobParam
.
SrcNode
.
Name
,
JobParam
.
GetMissionInfo
().
destinationFloor
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_13_CheckLiftStatus
);
runInfo
=
$
"{JobParam.SrcNode.AliceName}门已开,检查电梯内该层是否有料车"
;
...
...
@@ -275,14 +307,17 @@ namespace DeviceLibrary.bean.job
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_13_CheckLiftStatus
))
{
if
(
lift
.
LiftContext
.
IsDoorOpen
(
JobParam
.
SrcNode
.
Name
,
JobParam
.
GetMissionInfo
().
destinationFloor
))
if
(
LiftContext
.
CheckHasEmptyFinished
(
agv
,
JobParam
.
SrcNode
.
Name
,
out
JobParam
.
LiftStatus
))
{
JobParam
.
CurTargetNode
=
JobParam
.
SrcNode
;
job
=
new
SwitchShelfJob
(
JobParam
);
}
else
if
(
lift
.
LiftContext
.
IsDoorOpen
(
JobParam
.
SrcNode
.
Name
,
JobParam
.
GetMissionInfo
().
destinationFloor
))
{
if
(
lift
.
LiftContext
.
HasShelfNeedLeave
(
JobParam
.
SrcNode
.
Name
,
agv
.
Client
,
out
l
iftStatus
))
if
(
lift
.
LiftContext
.
HasShelfNeedLeave
(
JobParam
.
SrcNode
.
Name
,
agv
.
Client
,
out
JobParam
.
L
iftStatus
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_14_01_ToTemp1
);
runInfo
=
$
"{JobParam.SrcNode.AliceName}内有料车,去临时点1放料点"
;
AllocateTask
(
agv
,
$
"{JobParam.SrcNode.Name}_{SettingString.Temp1}_{SettingString.TakeShelfOff}"
);
JobRunStep
.
Msg
=
runInfo
;
JobParam
.
CurTargetNode
=
JobParam
.
SrcNode
;
job
=
new
SwitchShelfJob
(
JobParam
);
}
else
{
...
...
@@ -290,7 +325,7 @@ namespace DeviceLibrary.bean.job
lift
.
LiftContext
.
SetLiftOccupiedAgv
(
JobParam
.
SrcNode
.
Name
,
agv
.
IP
);
runInfo
=
$
"{JobParam.SrcNode.AliceName}无料车,去放料点"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{JobParam.SrcNode.Name}_{SettingString.TakeShelfOff}"
);
ToTakeShelfOff
(
agv
,
JobParam
.
SrcNode
.
Name
);
}
}
else
if
(
JobRunStep
.
IsTimeOut
(
20
)
&&
!
lift
.
LiftContext
.
CheckIfRequestOk
(
JobParam
.
SrcNode
.
Name
,
JobParam
.
GetMissionInfo
()))
...
...
@@ -308,7 +343,7 @@ namespace DeviceLibrary.bean.job
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_14_02_TakeShelfOffAtLift
);
runInfo
=
$
"到达{JobParam.SrcNode.AliceName}放料点,准备卸下料车"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{SettingString.TakeShelfOff}_{JobParam.SrcNode.Name}"
);
TakeShelfOffAtLift
(
agv
,
JobParam
.
SrcNode
.
Name
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_14_02_TakeShelfOffAtLift
))
...
...
@@ -319,7 +354,8 @@ namespace DeviceLibrary.bean.job
runInfo
=
$
"在{JobParam.SrcNode.AliceName}卸下料车完成,准备离开"
;
JobRunStep
.
Msg
=
runInfo
;
ResetMissionOccupiedAgv
(
JobParam
.
GetMissionInfo
());
AllocateTask
(
agv
,
$
"{SettingString.Leave}_{JobParam.SrcNode.Name}"
);
//AllocateTask(agv, $"{SettingString.Leave}_{JobParam.SrcNode.Name}");
LeaveLift
(
agv
,
JobParam
.
SrcNode
.
Name
);
//上报位置
manager
.
UploadManager
.
UploadTransportStatus
(
new
service
.
model
.
TransportStatus
(
agv
.
CurJob
.
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
TransportStatus
.
TypeStr
.
status
,
agv
.
Name
,
JobParam
.
SrcNode
.
Name
,
service
.
model
.
TransportStatus
.
ModeStr
.
auto
,
...
...
@@ -336,12 +372,13 @@ namespace DeviceLibrary.bean.job
bool
rtn
=
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
SrcNode
.
Name
,
agv
);
runInfo
=
$
"离开{JobParam.SrcNode.AliceName},关门: {rtn}"
;
JobRunStep
.
Msg
=
runInfo
;
System
.
Threading
.
Thread
.
Sleep
(
1000
);
System
.
Threading
.
Thread
.
Sleep
(
5000
);
ClearLiftNodeOccupied
(
agv
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_14_04_CloseLiftDoor
))
{
if
(!
lift
.
LiftContext
.
IsDoorOpen
(
JobParam
.
SrcNode
.
Name
,
JobParam
.
GetMissionInfo
().
sourceFloor
))
//
if (!lift.LiftContext.IsDoorOpen(JobParam.SrcNode.Name, JobParam.GetMissionInfo().sourceFloor))
{
JobRunStep
.
ToNextStep
(
RunStep
.
END
);
//任务状态变更
...
...
@@ -349,50 +386,11 @@ namespace DeviceLibrary.bean.job
runInfo
=
$
"{JobName}结束:{JobParam.SrcNode.AliceName}已关门"
;
JobRunStep
.
Msg
=
runInfo
;
}
else
if
(
JobRunStep
.
IsTimeOut
(
0.5
,
out
double
time
))
{
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
SrcNode
.
Name
,
agv
);
System
.
Threading
.
Thread
.
Sleep
(
1000
);
}
}
#
endregion
#
region
电梯内有料车
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_14_01_ToTemp1
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_14_02_WaitLiftIdle
);
runInfo
=
$
"到达{JobParam.SrcNode.AliceName}的临时点1的放料点,等待电梯空闲"
;
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_14_02_WaitLiftIdle
))
{
if
(!
lift
.
LiftContext
.
HasShelfNeedLeave
(
JobParam
.
SrcNode
.
Name
,
agv
.
Client
,
out
liftStatus
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_14_03_RequestLift
);
runInfo
=
$
"请求使用{JobParam.SrcNode.AliceName}"
;
JobRunStep
.
Msg
=
runInfo
;
//请求电梯
lift
.
LiftContext
.
Request
(
JobParam
.
GetMissionInfo
(),
agv
,
true
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_14_03_RequestLift
))
{
if
(!
lift
.
LiftContext
.
CheckIfRequestOk
(
JobParam
.
SrcNode
.
Name
,
JobParam
.
GetMissionInfo
()))
{
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_11_BackToLift
);
runInfo
=
$
"请求使用{JobParam.SrcNode.AliceName}成功,去电梯口"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
JobParam
.
SrcNode
.
Name
);
}
else
if
(
JobRunStep
.
IsTimeOut
(
20
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_14_03_RequestLift
);
//请求电梯
lift
.
LiftContext
.
Request
(
JobParam
.
GetMissionInfo
(),
agv
,
true
);
}
//else if (JobRunStep.IsTimeOut(0.5, out double time))
//{
// lift.LiftContext.AGVLeave(JobParam.SrcNode.Name, agv);
// System.Threading.Thread.Sleep(1000);
//}
}
#
endregion
...
...
@@ -417,7 +415,7 @@ namespace DeviceLibrary.bean.job
JobRunStep
.
EndJob
();
return
null
;
}
return
this
;
return
job
;
}
}
}
DeviceLibrary/bean/job/LineToLiftJob.cs
查看文件 @
4ee65ac
using
Common
;
using
DeviceLibrary.bean
;
using
DeviceLibrary.bean.job
;
using
DeviceLibrary.lift
;
using
DeviceLibrary.manager
;
using
DeviceLibrary.service.model
;
using
System
;
using
System.Threading
;
namespace
DeviceLibrary
{
/// <summary>
///
1F,线体到电梯
///
线体取料车送到电梯任务
/// </summary>
public
class
LineToLiftJob
:
Job
{
...
...
@@ -22,9 +24,9 @@ namespace DeviceLibrary
{
}
lift
.
LiftStatus
liftStatus
;
public
override
Job
Run
(
AgvInfo
agv
)
{
Job
job
=
this
;
agv
.
SetJobContext
(
new
bean
.
agv
.
JobContext
()
{
MissionId
=
JobParam
.
GetMissionInfo
().
missionId
,
...
...
@@ -37,8 +39,8 @@ namespace DeviceLibrary
if
(
JobRunStep
.
IsStep
(
RunStep
.
NONE
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_01_ToLine
);
runInfo
=
$
"
任务开始:
去{JobParam.SrcNode.AliceName}的取料点"
;
AllocateTask
(
agv
,
$
"{JobParam.SrcNode.Name}_{SettingString.PutShelfOn
}"
);
runInfo
=
$
"去{JobParam.SrcNode.AliceName}的取料点"
;
ToPutShelfOn
(
agv
,
$
"{JobParam.SrcNode.Name
}"
);
JobRunStep
.
Msg
=
runInfo
;
}
...
...
@@ -57,7 +59,6 @@ namespace DeviceLibrary
runInfo
=
$
"到达{JobParam.SrcNode.AliceName}的取料点,开始拾取料车"
;
JobRunStep
.
Msg
=
runInfo
;
PutShelfOn
(
agv
);
//AllocateTask(agv, SettingString.PutShelfOn);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_02_PutShelfOn
))
...
...
@@ -68,17 +69,10 @@ namespace DeviceLibrary
manager
.
UploadManager
.
UploadTransportStatus
(
new
service
.
model
.
TransportStatus
(
agv
.
CurJob
.
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
TransportStatus
.
TypeStr
.
status
,
agv
.
Name
,
agv
.
Place
.
Name
,
service
.
model
.
TransportStatus
.
ModeStr
.
auto
,
$
"取车"
));
if
(
LiftContext
.
CheckHasEmptyFinished
(
agv
,
JobParam
.
CurTargetNode
.
Name
,
out
liftStatus
))
if
(
TargetIsOccupied
(
agv
,
JobParam
.
CurTargetNode
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_ToStandby
);
AllocateTask
(
agv
,
SettingString
.
Standby
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}有空成品料车,先去待机点"
;
JobRunStep
.
Msg
=
runInfo
;
}
else
if
(
TargetIsOccupied
(
agv
,
JobParam
.
CurTargetNode
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_ToStandby
);
AllocateTask
(
agv
,
SettingString
.
Standby
);
ToStandby
(
agv
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}有小车,先去待机点"
;
JobRunStep
.
Msg
=
runInfo
;
}
...
...
@@ -88,23 +82,24 @@ namespace DeviceLibrary
runInfo
=
$
"在{JobParam.SrcNode.AliceName}拾取料车完成,去{JobParam.CurTargetNode.AliceName}"
;
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
前往电梯
,
out
string
msg
);
AllocateTask
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
ToLift
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_ToStandby
))
{
if
(!
TargetIsOccupied
(
agv
,
JobParam
.
CurTargetNode
.
Name
)
&&
!
LiftContext
.
CheckHasEmptyFinished
(
agv
,
JobParam
.
CurTargetNode
.
Name
,
out
liftStatus
))
if
(!
TargetIsOccupied
(
agv
,
JobParam
.
CurTargetNode
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_03_ToLift
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已空闲"
;
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已空闲
,前往目的地
"
;
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
前往电梯
,
out
string
msg
);
AllocateTask
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
//AllocateTask(agv, JobParam.CurTargetNode.Name);
ToLift
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_03_ToLift
))
{
...
...
@@ -125,42 +120,42 @@ namespace DeviceLibrary
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_04_CheckLiftStatus
))
{
if
(
LiftContext
.
CheckHasEmptyFinished
(
agv
,
JobParam
.
CurTargetNode
.
Name
,
out
l
iftStatus
))
if
(
LiftContext
.
CheckHasEmptyFinished
(
agv
,
JobParam
.
CurTargetNode
.
Name
,
out
JobParam
.
L
iftStatus
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_01_ToStandby
);
//设置电梯占用
//SetLiftOccupied(JobParam.CurTargetNode.Name, agv);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}内有成品空料车,去待机点等待电梯空闲"
;
//
AllocateStandbyTask
(
agv
);
JobRunStep
.
Msg
=
runInfo
;
MissionInfo
missionInfo
=
MissionManager
.
GetMission
(
JobParam
.
LiftStatus
?.
missionId
??
""
);
if
(
missionInfo
!=
null
)
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_13_ToShelfPlace
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门,内有成品空料车{missionInfo.missionId},去料架缓存点"
;
//
ToTakeShelfOff
(
agv
,
SettingString
.
ShelfBuff
);
JobRunStep
.
Msg
=
runInfo
;
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_01_ToStandby
);
//设置电梯占用
//SetLiftOccupied(JobParam.CurTargetNode.Name, agv);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门,内有成品空料车但无工单信息,去待机点,需要手动清空电梯缓存并关闭电梯门"
;
//
ToStandby
(
agv
);
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
lift
.
LiftContext
.
IsDoorOpen
(
JobParam
.
CurTargetNode
.
Name
,
JobParam
.
GetMissionInfo
().
sourceFloor
))
{
if
(
lift
.
LiftContext
.
HasShelfNeedLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
.
Client
,
out
l
iftStatus
))
if
(
lift
.
LiftContext
.
HasShelfNeedLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
.
Client
,
out
JobParam
.
L
iftStatus
))
{
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
liftStatus
.
missionId
);
if
(
IsBackShelf
(
missionInfo
)
)
MissionInfo
missionInfo
=
MissionManager
.
GetMission
(
JobParam
.
LiftStatus
?.
missionId
??
""
);
if
(
missionInfo
!=
null
)
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_01_ToTemp1
);
//设置电梯占用
SetLiftOccupied
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门。电梯内有料车,去临时点1的卸料点,准备卸下车上料车"
;
//
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}_{SettingString.Temp1}_{SettingString.TakeShelfOff}"
);
//service.model.MissionInfo missionInfo = manager.MissionManager.GetMission(liftStatus.missionId);
if
(
missionInfo
!=
null
)
{
//任务状态变更
MissionManager
.
SetMissionState
(
missionInfo
.
missionId
,
getNextState
(
missionInfo
.
state
),
out
string
msg
);
}
JobRunStep
.
Msg
=
runInfo
;
job
=
new
SwitchShelfJob
(
JobParam
);
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_01_ToStandby
);
//设置电梯占用
//SetLiftOccupied(JobParam.CurTargetNode.Name, agv);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门。电梯内有送料的料车
,去待机点等待电梯空闲
"
;
//
AllocateStandbyTask
(
agv
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门。电梯内有送料的料车
但无工单信息,去待机点,需要手动清空电梯缓存并关闭电梯门
"
;
//
ToStandby
(
agv
);
JobRunStep
.
Msg
=
runInfo
;
}
}
...
...
@@ -171,7 +166,7 @@ namespace DeviceLibrary
SetLiftOccupied
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门,到放料点"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}_{SettingString.TakeShelfOff}"
);
ToTakeShelfOff
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
}
}
else
if
(
JobRunStep
.
IsTimeOut
(
20
)
&&
!
lift
.
LiftContext
.
CheckIfRequestOk
(
JobParam
.
CurTargetNode
.
Name
,
JobParam
.
GetMissionInfo
()))
...
...
@@ -186,178 +181,53 @@ namespace DeviceLibrary
}
Thread
.
Sleep
(
2000
);
}
#
region
电梯内有料车
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_05_01_ToStandby
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
if
(!
LiftContext
.
CheckHasEmptyFinished
(
agv
,
JobParam
.
GetMissionInfo
().
liftName
,
out
liftStatus
)
&&
!
LiftContext
.
IsDoorOpen
(
JobParam
.
CurTargetNode
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_04_CheckLiftStatus
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}无占用,请求电梯"
;
JobRunStep
.
Msg
=
runInfo
;
//请求电梯
lift
.
LiftContext
.
Request
(
JobParam
.
GetMissionInfo
(),
agv
);
System
.
Threading
.
Thread
.
Sleep
(
2000
);
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_05_01_ToTemp1
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_02_TakeShelfOffAtTemp1
);
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName}的临时点1,将车上料车卸下"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{SettingString.TakeShelfOff}"
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_05_02_TakeShelfOffAtTemp1
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_03_ToLift
);
runInfo
=
$
"在{JobParam.CurTargetNode.AliceName}将车上料车卸在临时点1完成,去电梯口"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}"
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_05_03_ToLift
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
if
(!
TargetIsOccupied
(
agv
,
JobParam
.
CurTargetNode
.
Name
)
&&
!
LiftContext
.
IsDoorOpen
(
JobParam
.
CurTargetNode
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_04_EnterLift
);
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName},去取料点"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}_{SettingString.PutShelfOn}"
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_05_04_EnterLift
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_05_PutShelfOn
);
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName}的取料点,准备拾取料车"
;
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_03_ToLift
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已空闲"
;
ToLift
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
liftStatus
.
missionId
);
PutLiftShelfOn
(
agv
,
JobParam
.
CurTargetNode
.
Name
,
missionInfo
);
//AllocateTask(agv, $"{SettingString.PutShelfOn}_{JobParam.CurTargetNode.Name}");
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_05_05_PutShelfOn
))
#
region
电梯内有空成品料车
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_05_13_ToShelfPlace
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_06_LeaveLift
);
runInfo
=
$
"拾取{JobParam.CurTargetNode.AliceName}的料车完成,准备离开电梯"
;
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_14_TakeShelfOff
);
runInfo
=
$
"到达料架缓存点,准备卸下料车"
;
TakeShelfOff
(
agv
);
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{SettingString.Leave}_{JobParam.CurTargetNode.Name}"
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_05_
06_LeaveLift
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_05_
14_TakeShelfOff
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_15_CloseDoor
);
//AGV离开
bool
rtn
=
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
,
false
);
runInfo
=
$
"离开{JobParam.CurTargetNode.AliceName}完成,发送离开信号:{rtn}"
;
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
liftStatus
.
missionId
);
if
(
missionInfo
!=
null
)
{
//任务状态变更
MissionManager
.
SetMissionState
(
missionInfo
.
missionId
,
getNextState
(
missionInfo
.
state
),
out
string
msg
);
}
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_05_15_CloseDoor
))
{
if
(
lift
.
LiftContext
.
CheckAgvLeaveSig
(
JobParam
.
CurTargetNode
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_18_ToStore
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}关门完成,将料车送到{liftStatus.destinationPoint}的放料点"
;
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
liftStatus
.
missionId
);
//设置任务状态为料架换缓存
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
料架缓存
,
out
string
msg
);
ResetMissionOccupiedAgv
(
JobParam
.
GetMissionInfo
());
//执行取空成品任务
Node
src
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
LIFT_D2
,
NodeType
.
Lift
);
Node
dest
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
LIFT_C1
,
NodeType
.
Lift
);
MissionInfo
missionInfo
=
MissionManager
.
GetMission
(
JobParam
.
LiftStatus
?.
missionId
);
if
(
missionInfo
!=
null
)
{
//任务状态变更
MissionManager
.
SetMissionState
(
missionInfo
.
missionId
,
getNextState
(
missionInfo
.
state
),
out
string
msg
);
JobParam
jobParam
=
new
JobParam
(
src
,
dest
,
null
,
missionInfo
);
MissionManager
.
SetMissionOccupied
(
missionInfo
,
agv
);
job
=
new
F1LiftD2ToLiftC1Job
(
jobParam
);
}
JobRunStep
.
Msg
=
runInfo
;
ResetMissionOccupiedAgv
(
JobParam
.
GetMissionInfo
());
AllocateTask
(
agv
,
$
"{liftStatus.destinationPoint}_{SettingString.TakeShelfOff}"
);
}
else
if
(
JobRunStep
.
IsTimeOut
(
0.5
,
out
double
val
))
{
//AGV离开
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
,
false
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}离开信号超时重发"
;
JobRunStep
.
Msg
=
runInfo
;
System
.
Threading
.
Thread
.
Sleep
(
3000
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_05_18_ToStore
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_19_TakeShelfOff
);
runInfo
=
$
"到达{liftStatus.destinationPoint}的放料点,准备卸下"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{SettingString.TakeShelfOff}"
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_05_19_TakeShelfOff
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_10_ToTemp1
);
runInfo
=
$
"料车在{liftStatus.destinationPoint}卸下完成, 返回{JobParam.CurTargetNode.AliceName}的临时点1的取料点"
;
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
liftStatus
.
missionId
);
if
(
missionInfo
!=
null
)
else
{
//任务状态变更
MissionManager
.
SetMissionState
(
missionInfo
.
missionId
,
service
.
model
.
MissionState
.
完成
,
out
string
msg
);
JobRunStep
.
ToNextStep
(
RunStep
.
END
);
runInfo
=
$
"未搜索到电梯内的料车任务信息【{JobParam.LiftStatus?.missionId ?? ""}】,结束任务"
;
JobRunStep
.
Msg
=
runInfo
;
}
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}_{SettingString.Temp1}_{SettingString.PutShelfOn}"
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_05_10_ToTemp1
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_11_PutTemp1ShelfOn
);
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName}的临时点1的取料点,准备拾取料架"
;
JobRunStep
.
Msg
=
runInfo
;
//AllocateTask(agv, $"{SettingString.PutShelfOn}");
PutShelfOn
(
agv
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_05_11_PutTemp1ShelfOn
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_12_ToLift
);
//runInfo = $"拾取料架完成,去{JobParam.CurTargetNode.AliceName}";
//JobRunStep.Msg = runInfo;
//AllocateTask(agv, $"{JobParam.CurTargetNode.Name}");
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_05_12_ToLift
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_04_CheckLiftStatus
);
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName},请求电梯"
;
JobRunStep
.
Msg
=
runInfo
;
//请求电梯
lift
.
LiftContext
.
Request
(
JobParam
.
GetMissionInfo
(),
agv
);
System
.
Threading
.
Thread
.
Sleep
(
2000
);
}
}
#
endregion
#
region
电梯内无料车
...
...
@@ -368,7 +238,7 @@ namespace DeviceLibrary
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_06_02_TakeShelfOffAtLift
);
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName}放料点,准备卸下料车"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{SettingString.TakeShelfOff}_{JobParam.CurTargetNode.Name}"
);
TakeShelfOffAtLift
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_06_02_TakeShelfOffAtLift
))
...
...
@@ -382,15 +252,10 @@ namespace DeviceLibrary
manager
.
UploadManager
.
UploadTransportStatus
(
new
service
.
model
.
TransportStatus
(
agv
.
CurJob
.
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
TransportStatus
.
TypeStr
.
status
,
agv
.
Name
,
agv
.
Place
.
Name
,
service
.
model
.
TransportStatus
.
ModeStr
.
auto
,
$
"电梯卸车"
));
if
(
JobParam
.
GetMissionInfo
().
projectType
.
Equals
(
service
.
model
.
ProjectType
.
成品入库
))
{
//设置该电梯内的产品是成品入库
lift
.
LiftContext
.
SetFinishedState
(
JobParam
.
CurTargetNode
.
Name
,
true
);
}
runInfo
=
$
"料车在{JobParam.CurTargetNode.AliceName}卸下完成,准备离开"
;
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
到达电梯
,
out
string
msg
);
AllocateTask
(
agv
,
$
"{SettingString.Leave}_{JobParam.CurTargetNode.Name}"
);
LeaveLift
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
}
}
...
...
@@ -400,12 +265,6 @@ namespace DeviceLibrary
{
JobRunStep
.
ToNextStep
(
RunStep
.
END
);
bool
rtn
=
false
;
if
(
JobParam
.
GetMissionInfo
().
projectType
.
Equals
(
service
.
model
.
ProjectType
.
成品入库
))
{
//AGV离开
rtn
=
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
,
false
);
}
else
{
//AGV离开
rtn
=
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
...
...
@@ -414,6 +273,7 @@ namespace DeviceLibrary
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
电梯运行
,
out
string
msg
);
JobRunStep
.
Msg
=
runInfo
;
ClearLiftNodeOccupied
(
agv
);
}
}
#
endregion
...
...
@@ -422,7 +282,7 @@ namespace DeviceLibrary
JobRunStep
.
EndJob
();
return
null
;
}
return
this
;
return
job
;
}
}
...
...
DeviceLibrary/bean/job/ShelfBackLiftToStoreJob.cs
查看文件 @
4ee65ac
...
...
@@ -31,10 +31,35 @@ namespace DeviceLibrary.bean.job
});
if
(
JobRunStep
.
IsStep
(
RunStep
.
NONE
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
ShelfBack_LiftToStore_01_ToLift
);
runInfo
=
$
"任务开始:去{JobParam.SrcNode.AliceName}"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{JobParam.SrcNode.Name}"
);
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
ShelfBack_LiftToStore_01_ToStandby
);
runInfo
=
$
"{JobParam.SrcNode.AliceName}有小车,去待机点"
;
JobRunStep
.
Msg
=
runInfo
;
MoveToNode
(
agv
,
$
"{SettingString.Standby}"
);
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
ShelfBack_LiftToStore_01_ToLift
);
runInfo
=
$
"任务开始:去{JobParam.SrcNode.AliceName}"
;
JobRunStep
.
Msg
=
runInfo
;
ToLift
(
agv
,
$
"{JobParam.SrcNode.Name}"
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
ShelfBack_LiftToStore_01_ToStandby
))
{
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Name
))
{
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
ShelfBack_LiftToStore_01_ToLift
);
runInfo
=
$
"任务开始:去{JobParam.SrcNode.AliceName}"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{JobParam.SrcNode.Name}"
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
ShelfBack_LiftToStore_01_ToLift
))
{
...
...
@@ -44,7 +69,7 @@ namespace DeviceLibrary.bean.job
//上报状态
manager
.
UploadManager
.
UploadTransportStatus
(
new
service
.
model
.
TransportStatus
(
agv
.
CurJob
.
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
TransportStatus
.
TypeStr
.
status
,
agv
.
Name
,
agv
.
Place
.
Name
,
service
.
model
.
TransportStatus
.
ModeStr
.
auto
,
$
"到达{
JobParam.SrcNode.Name
}"
));
$
"到达{
JobParam.SrcNode.Name
}"
));
runInfo
=
$
"到达{JobParam.SrcNode.AliceName},等待门开启"
;
JobRunStep
.
Msg
=
runInfo
;
}
...
...
@@ -56,7 +81,7 @@ namespace DeviceLibrary.bean.job
JobRunStep
.
ToNextStep
(
RunStep
.
ShelfBack_LiftToStore_02_02_EnterLift
);
runInfo
=
$
"{JobParam.SrcNode.AliceName}门已开启,去取料点"
;
//任务状态变更
lift
.
LiftContext
.
SetLiftOccupiedAgv
(
JobParam
.
SrcNode
.
Name
,
agv
.
IP
);
lift
.
LiftContext
.
SetLiftOccupiedAgv
(
JobParam
.
SrcNode
.
Name
,
agv
.
IP
);
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
返回电梯到达
,
out
string
msg
);
AllocateTask
(
agv
,
$
"{JobParam.SrcNode.Name}_{SettingString.PutShelfOn}"
);
JobRunStep
.
Msg
=
runInfo
;
...
...
@@ -84,7 +109,8 @@ namespace DeviceLibrary.bean.job
$
"电梯取车"
));
runInfo
=
$
"在{JobParam.SrcNode.AliceName}取料车完成,准备离开"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{SettingString.Leave}_{JobParam.SrcNode.Name}"
);
//AllocateTask(agv, $"{SettingString.Leave}_{JobParam.SrcNode.Name}");
LeaveLift
(
agv
,
JobParam
.
SrcNode
.
Name
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
ShelfBack_LiftToStore_04_LeaveLift
))
...
...
@@ -93,7 +119,7 @@ namespace DeviceLibrary.bean.job
{
JobRunStep
.
ToNextStep
(
RunStep
.
ShelfBack_LiftToStore_05_CloseLiftDoor
);
//关门
bool
rtn
=
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
SrcNode
.
Name
,
agv
,
false
);
bool
rtn
=
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
SrcNode
.
Name
,
agv
,
false
);
runInfo
=
$
"离开{JobParam.SrcNode.AliceName},关闭电梯门:{rtn}"
;
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
返回离开电梯
,
out
string
msg
);
...
...
@@ -117,7 +143,7 @@ namespace DeviceLibrary.bean.job
//上报状态
manager
.
UploadManager
.
UploadTransportStatus
(
new
service
.
model
.
TransportStatus
(
agv
.
CurJob
.
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
TransportStatus
.
TypeStr
.
status
,
agv
.
Name
,
agv
.
Place
.
Name
,
service
.
model
.
TransportStatus
.
ModeStr
.
auto
,
$
"到达{
JobParam.CurTargetNode.Name
}"
));
$
"到达{
JobParam.CurTargetNode.Name
}"
));
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName}放料点,卸下料车"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
SettingString
.
TakeShelfOff
);
...
...
DeviceLibrary/bean/job/StandyJob.cs
查看文件 @
4ee65ac
...
...
@@ -43,7 +43,7 @@ namespace DeviceLibrary
JobRunStep
.
ToNextStep
(
RunStep
.
STANDBY_WAIT_REACH_STANDBY
);
runInfo
=
"从"
+
JobParam
.
SrcNode
+
"回到待机位"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateStandbyTask
(
agv
);
ToStandby
(
agv
);
}
}
...
...
DeviceLibrary/bean/job/SteelLiftToStorageJob.cs
查看文件 @
4ee65ac
...
...
@@ -294,7 +294,7 @@ namespace DeviceLibrary.bean.job
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Alice
Name
))
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
Steel_LiftToLine_19_ToStandby
);
runInfo
=
$
"{JobParam.SrcNode.AliceName}有车,去停留点"
;
...
...
@@ -319,7 +319,7 @@ namespace DeviceLibrary.bean.job
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
Steel_LiftToLine_19_ToStandby
))
{
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Alice
Name
))
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Name
))
{
}
else
...
...
DeviceLibrary/bean/job/SteelLineToLiftJob.cs
查看文件 @
4ee65ac
...
...
@@ -36,7 +36,7 @@ namespace DeviceLibrary
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_01_ToLine
);
runInfo
=
$
"任务开始:去{JobParam.SteelShelfNode.AliceName}的取料点"
;
AllocateTask
(
agv
,
$
"{JobParam.SteelShelfNode.Name}_{SettingString.PutShelfOn}"
);
ToPutShelfOn
(
agv
,
JobParam
.
SteelShelfNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
}
...
...
@@ -54,7 +54,7 @@ namespace DeviceLibrary
runInfo
=
$
"到达{JobParam.SrcNode.AliceName}的取料点,开始拾取料车"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
SettingString
.
PutShelfOn
);
PutShelfOn
(
agv
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_02_PutShelfOn
))
...
...
@@ -67,7 +67,7 @@ namespace DeviceLibrary
service
.
model
.
TransportStatus
.
TypeStr
.
status
,
agv
.
Name
,
agv
.
Place
.
Name
,
service
.
model
.
TransportStatus
.
ModeStr
.
auto
,
$
"取车"
));
runInfo
=
$
"在{JobParam.SrcNode.AliceName}拾取料车完成,去{JobParam.SrcNode.AliceName}放料点"
;
AllocateTask
(
agv
,
$
"{JobParam.SrcNode.Name}_{SettingString.TakeShelfOff}"
);
ToTakeShelfOff
(
agv
,
JobParam
.
SrcNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
}
}
...
...
@@ -113,7 +113,7 @@ namespace DeviceLibrary
runInfo
=
$
"在{JobParam.SrcNode.AliceName}确认完成,去{JobParam.CurTargetNode.AliceName}"
;
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
前往电梯
,
out
string
msg
);
AllocateTask
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
ToLift
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
}
...
...
@@ -143,7 +143,7 @@ namespace DeviceLibrary
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_01_ToTemp1
);
SetLiftOccupied
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门。电梯内有料车,去临时点1的卸料点,准备卸下车上料车"
;
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}_{SettingString.Temp1}_{SettingString.TakeShelfOff}"
);
ToTmp1TakeOff
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
liftStatus
.
missionId
);
if
(
missionInfo
!=
null
)
{
...
...
@@ -157,7 +157,7 @@ namespace DeviceLibrary
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_06_01_EnterLift
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门,到放料点"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}_{SettingString.TakeShelfOff}"
);
ToTakeShelfOff
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
}
}
else
if
(
JobRunStep
.
IsTimeOut
(
20
)
&&
!
lift
.
LiftContext
.
CheckIfRequestOk
(
JobParam
.
CurTargetNode
.
Name
,
JobParam
.
GetMissionInfo
()))
...
...
DeviceLibrary/bean/job/SwitchShelfJob.cs
0 → 100644
查看文件 @
4ee65ac
using
Common
;
using
DeviceLibrary.bean
;
using
DeviceLibrary.bean.job
;
using
DeviceLibrary.lift
;
using
DeviceLibrary.manager
;
using
DeviceLibrary.service.model
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading
;
using
System.Threading.Tasks
;
using
static
System
.
Windows
.
Forms
.
AxHost
;
namespace
DeviceLibrary
{
public
class
SwitchShelfJob
:
Job
{
/// <summary>
/// 电梯交换料车任务
/// </summary>
/// <param name="agvPlae">小车当前位置</param>
public
SwitchShelfJob
(
JobParam
jobParam
)
:
base
(
jobParam
)
{
JobName
=
"电梯交换料车任务"
;
MissionInfo
info
=
manager
.
MissionManager
.
GetMission
(
JobParam
?.
LiftStatus
?.
missionId
??
""
);
liftMission
=
new
MissionInfo
()
{
missionId
=
info
.
missionId
,
state
=
info
.
state
,
liftName
=
info
.
liftName
,
sourcePoint
=
info
.
sourcePoint
,
destinationPoint
=
info
.
destinationPoint
,
needBack
=
info
.
needBack
};
}
public
SwitchShelfJob
()
:
base
()
{
JobName
=
"电梯交换料车任务"
;
}
/// <summary>
/// 电梯内料车的任务信息
/// </summary>
service
.
model
.
MissionInfo
liftMission
;
private
string
missionInfo
()
{
try
{
return
$
"【当前任务:{JobParam?.GetMissionInfo()?.missionId ?? ""},"
+
$
"{MissionManager.GetMission(JobParam?.GetMissionInfo()?.missionId ?? "")?.state.ToString() ?? ""}】"
+
$
"【电梯内任务:{liftMission?.missionId ?? ""},"
+
$
"{MissionManager.GetMission(liftMission?.missionId ?? "")?.state.ToString() ?? ""}】"
;
}
catch
{
return
""
;
}
}
public
override
Job
Run
(
AgvInfo
agv
)
{
Job
job
=
this
;
agv
.
SetJobContext
(
new
bean
.
agv
.
JobContext
()
{
AgvTask
=
agv
.
TaskRunState
.
Task
,
JobFullName
=
this
.
ToString
(),
JobStep
=
JobRunStep
.
PreStep
(),
Name
=
agv
.
Name
,
JobParam
=
JobParam
});
if
(
JobRunStep
.
IsStep
(
RunStep
.
NONE
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
Switch_01_ToTmp1
);
runInfo
=
$
"去{JobParam.CurTargetNode.AliceName}临时点1,{missionInfo()}"
;
ToTmp1TakeOff
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
Switch_01_ToTmp1
))
{
if
(
AGVTaskIsFinished
(
agv
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
Switch_02_TakeShelfOffAtTmp1
);
runInfo
=
$
"在{JobParam.CurTargetNode.AliceName}临时点1将待送料车卸下,,{missionInfo()}"
;
TakeShelfOff
(
agv
);
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
Switch_02_TakeShelfOffAtTmp1
))
{
if
(
AGVTaskIsFinished
(
agv
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
Switch_03_ToLift
);
runInfo
=
$
"去{JobParam.CurTargetNode.AliceName},,{missionInfo()}"
;
MoveToNode
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
Switch_03_ToLift
))
{
if
(
AGVTaskIsFinished
(
agv
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
Switch_04_EnterLift
);
if
(
setMissionState
(
liftMission
))
{
MissionManager
.
SetMissionOccupied
(
liftMission
,
agv
);
runInfo
=
$
"到{JobParam.CurTargetNode.AliceName}的取料点,并设置任务状态,,{missionInfo()}"
;
}
else
runInfo
=
$
"到{JobParam.CurTargetNode.AliceName}的取料点,未找到电梯内料架任务"
;
MoveToNodePutShelf
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
Switch_04_EnterLift
))
{
if
(
AGVTaskIsFinished
(
agv
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
Switch_05_PutLiftShelfOn
);
runInfo
=
$
"在{JobParam.CurTargetNode.AliceName}的取料点拾取电梯内的料车,,{missionInfo()}"
;
PutLiftShelfOn
(
agv
,
JobParam
.
CurTargetNode
.
Name
,
liftMission
);
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
Switch_05_PutLiftShelfOn
))
{
if
(
AGVTaskIsFinished
(
agv
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
Switch_06_LeaveLift
);
runInfo
=
$
"拾取完成,离开{JobParam.CurTargetNode.AliceName},{missionInfo()}"
;
LeaveLift
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
Switch_06_LeaveLift
))
{
if
(
AGVTaskIsFinished
(
agv
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
Switch_07_ToTmp2
);
if
(
setMissionState
(
liftMission
))
{
runInfo
=
$
"去{JobParam.CurTargetNode.AliceName}临时点2放料点,并设置任务状态,{missionInfo()}"
;
}
else
runInfo
=
$
"去{JobParam.CurTargetNode.AliceName}临时点2放料点,未找到电梯内的料架任务"
;
ToTmp2TakeOff
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
Switch_07_ToTmp2
))
{
if
(
AGVTaskIsFinished
(
agv
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
Switch_08_TakeShelfOffAtTpm2
);
runInfo
=
$
"将{JobParam.CurTargetNode.AliceName}内的料车卸在临时点2,{missionInfo()}"
;
TakeShelfOff
(
agv
);
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
Switch_08_TakeShelfOffAtTpm2
))
{
if
(
AGVTaskIsFinished
(
agv
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
Switch_09_ReToTmp1
);
runInfo
=
$
"去{JobParam.CurTargetNode.AliceName}临时点1取料点,{missionInfo()}"
;
ToTmp1PutOn
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
Switch_09_ReToTmp1
))
{
if
(
AGVTaskIsFinished
(
agv
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
Switch_10_PutShelfOnAtTmp1
);
runInfo
=
$
"在{JobParam.CurTargetNode.AliceName}临时点1拾取待送料车,{missionInfo()}"
;
PutShelfOn
(
agv
);
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
Switch_10_PutShelfOnAtTmp1
))
{
if
(
AGVTaskIsFinished
(
agv
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
Switch_11_ToLift
);
runInfo
=
$
"去{JobParam.CurTargetNode.AliceName},{missionInfo()}"
;
MoveToNode
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
Switch_11_ToLift
))
{
if
(
AGVTaskIsFinished
(
agv
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
Switch_12_EnterLift
);
runInfo
=
$
"去{JobParam.CurTargetNode.AliceName}的放料点,{missionInfo()}"
;
MoveToNodeTakeOff
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
Switch_12_EnterLift
))
{
if
(
AGVTaskIsFinished
(
agv
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
Switch_13_TakeLiftShelfOff
);
runInfo
=
$
"在{JobParam.CurTargetNode.AliceName}卸下料车,{missionInfo()}"
;
TakeShelfOffAtLift
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
Switch_13_TakeLiftShelfOff
))
{
if
(
AGVTaskIsFinished
(
agv
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
Switch_14_LeaveLift
);
MissionInfo
mission
=
MissionManager
.
GetMission
(
JobParam
.
GetMissionInfo
().
missionId
);
MissionState
state
=
getNextState
(
mission
.
state
);
if
(
mission
.
projectType
.
Equals
(
ProjectType
.
移远成品入库
)
&&
SettingString
.
LIFT_D2
.
Equals
(
JobParam
.
CurTargetNode
.
Name
))
{
state
=
MissionState
.
等待成品回收
;
}
setMissionState
(
state
);
runInfo
=
$
"离开{JobParam.CurTargetNode.AliceName},设置任务状态,并清空任务占用,{missionInfo()}"
;
ResetMissionOccupiedAgv
(
JobParam
.
GetMissionInfo
());
LeaveLift
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
Switch_14_LeaveLift
))
{
if
(
AGVTaskIsFinished
(
agv
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
Switch_15_CloseDoor
);
MissionInfo
mission
=
MissionManager
.
GetMission
(
JobParam
.
GetMissionInfo
().
missionId
);
if
(
mission
.
projectType
.
Equals
(
ProjectType
.
移远成品入库
)
&&
SettingString
.
LIFT_D2
.
Equals
(
JobParam
.
CurTargetNode
.
Name
))
{
runInfo
=
$
"关闭{JobParam.CurTargetNode.AliceName}"
;
}
else
{
runInfo
=
$
"关闭{JobParam.CurTargetNode.AliceName},并更新电梯运行信息"
;
LiftContext
.
UpdateRequestInfo
(
mission
,
agv
,
MissionIsBackState
(
mission
));
}
JobRunStep
.
Msg
=
runInfo
;
Thread
.
Sleep
(
1000
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
Switch_15_CloseDoor
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
Switch_15_WaitDoorClose
);
MissionInfo
mission
=
MissionManager
.
GetMission
(
JobParam
.
GetMissionInfo
().
missionId
);
if
(
mission
.
projectType
.
Equals
(
ProjectType
.
移远成品入库
)
&&
SettingString
.
LIFT_D2
.
Equals
(
JobParam
.
CurTargetNode
.
Name
))
{
LiftContext
.
FinishedProduct
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
Thread
.
Sleep
(
5000
);
}
else
{
MissionState
state
=
getNextState
(
mission
.
state
);
setMissionState
(
state
);
}
bool
continueUse
=
false
;
if
((
mission
.
state
>=
MissionState
.
到达电梯
&&
mission
.
state
<=
MissionState
.
电梯运行
)||
(
mission
.
state
>=
MissionState
.
返回到达电梯内
&&
mission
.
state
<=
MissionState
.
返回电梯运行
))
continueUse
=
true
;
//关门
bool
rtn
=
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
,
continueUse
);
Thread
.
Sleep
(
2000
);
if
(
mission
.
projectType
.
Equals
(
ProjectType
.
移远成品入库
)
&&
SettingString
.
LIFT_D2
.
Equals
(
JobParam
.
CurTargetNode
.
Name
))
{
LiftContext
.
CloseFinishedProduct
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
}
ClearLiftNodeOccupied
(
agv
);
runInfo
=
$
"离开{JobParam.CurTargetNode.AliceName},关闭门:{rtn},continueUse={continueUse}"
;
JobRunStep
.
Msg
=
runInfo
;
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
Switch_15_WaitDoorClose
))
{
//if (!lift.LiftContext.IsDoorOpen(JobParam.CurTargetNode.Name))
{
JobRunStep
.
ToNextStep
(
RunStep
.
Switch_16_ReToTmp2
);
runInfo
=
$
"去{JobParam.CurTargetNode.AliceName}临时点2取料点,{missionInfo()}"
;
ToTmp2PutOn
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
}
//else if (JobRunStep.IsTimeOut(5))
//{
// JobRunStep.ToNextStep(RunStep.Switch_15_WaitDoorClose);
// bool rtn = lift.LiftContext.AGVLeave(JobParam.CurTargetNode.Name, agv);
// runInfo = $"重新发送关闭门{JobParam.CurTargetNode.AliceName},{rtn}";
//}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
Switch_16_ReToTmp2
))
{
if
(
AGVTaskIsFinished
(
agv
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
Switch_17_PutShelfOnAtTmp2
);
runInfo
=
$
"在{JobParam.CurTargetNode.AliceName}临时点2拾取电梯内的料车,{missionInfo()}"
;
PutShelfOn
(
agv
,
liftMission
);
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
Switch_17_PutShelfOnAtTmp2
))
{
if
(
AGVTaskIsFinished
(
agv
))
{
if
(
CheckMIssionInlift
(
MissionManager
.
GetMission
(
liftMission
.
missionId
)))
{
JobRunStep
.
ToNextStep
(
RunStep
.
Switch_19_ReturnShelf
);
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
Switch_18_SendShelf
);
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
Switch_18_SendShelf
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
END
);
MissionInfo
missionInfo
=
MissionManager
.
GetMission
(
liftMission
.
missionId
);
//if(missionInfo ==null)
//{
// job = null;
// runInfo = $"未查询到任务信息,结束任务:{liftMission.missionId}";
// JobRunStep.Msg = runInfo;
//}
//else
if
(
service
.
model
.
MissionInfo
.
IsFinishedProdcut
(
missionInfo
))
{
if
(
JobParam
.
CurTargetNode
.
Name
.
Equals
(
SettingString
.
LIFT_D2
))
//电梯内的料架为移远成品空料车
{
Node
src
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
LIFT_D2
,
NodeType
.
Lift
);
Node
dest
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
LIFT_C1
,
NodeType
.
Lift
);
JobParam
jobParam
=
new
JobParam
(
src
,
dest
,
null
,
missionInfo
);
MissionManager
.
SetMissionOccupied
(
missionInfo
,
agv
);
job
=
new
F1LiftD2ToLiftC1Job
(
jobParam
);
job
.
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_06_CloseLiftDoor
);
job
.
JobRunStep
.
Msg
=
$
"从{JobParam.CurTargetNode.AliceName}取料完成,继续执行任务:{JsonHelper.SerializeObject(missionInfo)}"
;
}
else
//电梯内的料架为移远成品满料车
{
Node
src
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
LIFT_C1
,
NodeType
.
Lift
);
Node
dest
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
LIFT_D2
,
NodeType
.
Lift
);
JobParam
jobParam
=
new
JobParam
(
src
,
dest
,
null
,
missionInfo
);
MissionManager
.
SetMissionOccupied
(
missionInfo
,
agv
);
job
=
new
F1LiftC1ToLiftD2Job
(
jobParam
);
job
.
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_06_CloseLiftDoor
);
job
.
JobRunStep
.
Msg
=
$
"从{JobParam.CurTargetNode.AliceName}取料完成,继续执行任务:{JsonHelper.SerializeObject(missionInfo)}"
;
}
}
else
{
Node
src
=
manager
.
NodeManager
.
GetNode
(
missionInfo
.
liftName
,
NodeType
.
Lift
);
string
[]
destTmp
=
missionInfo
.
destinationPoint
.
Split
(
','
);
string
[]
dests
=
destTmp
.
Distinct
().
ToArray
();
Node
dest
=
manager
.
NodeManager
.
GetNode
(
dests
.
Length
>
1
?
dests
[
0
]
:
missionInfo
.
destinationPoint
,
NodeType
.
Node
);
JobParam
jobParam
=
new
JobParam
(
src
,
dest
,
null
,
missionInfo
);
if
(
dests
.
Length
>
1
)
{
for
(
int
i
=
1
;
i
<
dests
.
Length
;
i
++)
{
Node
node
=
manager
.
NodeManager
.
GetNode
(
dests
[
i
],
NodeType
.
Node
);
if
(
node
!=
null
)
jobParam
.
TargetNodes
.
Add
(
node
);
else
{
LogUtil
.
error
(
$
"无法生成任务,因不存在的节点:{dests[i]}"
);
job
=
null
;
}
}
}
job
=
new
LiftToLinesJob
(
jobParam
);
job
.
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_06_CloseLiftDoor
);
job
.
JobRunStep
.
Msg
=
$
"从{JobParam.CurTargetNode.AliceName}取料完成,继续执行任务:{JsonHelper.SerializeObject(missionInfo)}"
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
Switch_19_ReturnShelf
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
END
);
MissionInfo
missionInfo
=
MissionManager
.
GetMission
(
liftMission
.
missionId
);
Node
src
=
manager
.
NodeManager
.
GetNode
(
missionInfo
.
liftName
,
NodeType
.
Lift
);
Node
dest
=
manager
.
NodeManager
.
GetNode
(
missionInfo
.
sourcePoint
,
NodeType
.
Node
);
JobParam
jobParam
=
new
JobParam
(
src
,
dest
,
null
,
missionInfo
);
MissionManager
.
SetMissionOccupied
(
missionInfo
,
agv
);
job
=
new
ShelfBackLiftToStoreJob
(
jobParam
);
job
.
JobRunStep
.
ToNextStep
(
RunStep
.
ShelfBack_LiftToStore_05_CloseLiftDoor
);
job
.
JobRunStep
.
Msg
=
$
"从{JobParam.CurTargetNode.AliceName}取料完成,继续执行任务:{JsonHelper.SerializeObject(missionInfo)}"
;
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
END
))
{
}
return
job
;
}
}
}
DeviceLibrary/bean/jobType/BackLiftToLineJobType.cs
查看文件 @
4ee65ac
using
Common
;
using
DeviceLibrary.bean.job
;
using
DeviceLibrary.manager
;
using
System
;
namespace
DeviceLibrary.bean.jobType
{
...
...
@@ -15,19 +16,25 @@ namespace DeviceLibrary.bean.jobType
return
null
;
else
{
if
(
agv
.
HasEmptyShelfInLift
(
out
string
liftname
,
out
lift
.
LiftStatus
lift
))
//agv.Scope.Floor.Equals(1) &&
if
(
agv
.
HasEmptyShelfInLift
(
out
string
liftname
,
out
lift
.
LiftStatus
lift
))
//agv.Scope.Floor.Equals(1) &&
{
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
ShelfBackMission
(
agv
);
if
(
missionInfo
!=
null
)
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
ShelfBackMission
(
agv
);
if
(
missionInfo
!=
null
)
{
if
(!
liftname
.
Equals
(
missionInfo
?.
liftName
))
return
null
;
if
(
CheckHasSameJob
(
agv
,
liftname
))
{
return
null
;
}
if
(
TargetIsOccupied
(
agv
,
liftname
))
return
null
;
//if (service.model.MissionInfo.IsFinishedProdcut(missionInfo))
// return null;
Node
src
=
manager
.
NodeManager
.
GetNode
(
liftname
,
NodeType
.
Lift
);
string
[]
dests
=
lift
.
destinationPoint
.
Split
(
','
);
Node
dest
=
manager
.
NodeManager
.
GetNode
(
dests
.
Length
>
1
?
dests
[
0
]
:
lift
.
destinationPoint
,
NodeType
.
Node
);
JobParam
jobParam
=
new
JobParam
(
src
,
dest
,
null
,
missionInfo
);
JobParam
jobParam
=
new
JobParam
(
src
,
dest
,
null
,
missionInfo
);
MissionManager
.
SetMissionOccupied
(
missionInfo
,
agv
);
return
new
ShelfBackLiftToStoreJob
(
jobParam
);
}
...
...
@@ -35,5 +42,21 @@ namespace DeviceLibrary.bean.jobType
}
return
null
;
}
bool
CheckHasSameJob
(
AgvInfo
agv
,
string
liftname
)
{
try
{
AgvInfo
agvInfo
=
AGVManager
.
agvInfo
.
Find
(
s
=>
s
.
Auto
&&
s
.
Scope
.
Workshop
.
Equals
(
agv
.
Scope
.
Workshop
)
&&
s
.
CurJob
!=
null
&&
(
s
.
CurJob
is
F1LiftC1ToLiftD2Job
||
s
.
CurJob
is
F1LiftD2ToLiftC1Job
||
(
s
.
CurJob
is
LineToLiftJob
&&
liftname
.
Equals
(
s
?.
CurJob
?.
JobParam
?.
CurTargetNode
?.
Name
??
""
))));
if
(
agvInfo
!=
null
)
return
true
;
}
catch
{
return
false
;
}
return
false
;
}
}
}
DeviceLibrary/bean/jobType/F1LiftC1ToLiftD2JobType.cs
查看文件 @
4ee65ac
...
...
@@ -21,13 +21,13 @@ namespace DeviceLibrary.bean.jobType
{
if
(
agv
.
Scope
.
Floor
.
Equals
(
1
)
&&
agv
.
HasFinishedShelfInLift
(
out
string
liftname
,
out
lift
.
LiftStatus
lift
))
{
//if (CheckOtherRobotState(agv, SettingString.LIFT_C1) || CheckOtherRobotState(agv, SettingString.LIFT_D2))
//{
// return null;
//}
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetF1SendFullFinishedC1ToD2Mission
(
agv
);
if
(
missionInfo
!=
null
)
{
if
(
TargetIsOccupied
(
agv
,
SettingString
.
LIFT_D2
)
||
TargetIsOccupied
(
agv
,
SettingString
.
LIFT_C1
))
{
return
null
;
}
if
(
service
.
model
.
MissionInfo
.
IsFinishedProdcut
(
missionInfo
))
{
Node
src
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
LIFT_C1
,
NodeType
.
Lift
);
...
...
@@ -46,7 +46,7 @@ namespace DeviceLibrary.bean.jobType
try
{
AgvInfo
agvInfo
=
AGVManager
.
agvInfo
.
Find
(
s
=>
s
.
Auto
&&
s
.
Scope
.
Workshop
.
Equals
(
agv
.
Scope
.
Workshop
)
&&
s
.
CurJob
!=
null
&&
(
s
.
CurJob
is
F1LiftC1ToLiftD2Job
||
s
.
CurJob
is
F1LiftD2ToLiftC1Job
));
&&
s
.
CurJob
!=
null
&&
(
s
.
CurJob
is
F1LiftC1ToLiftD2Job
||
s
.
CurJob
is
F1LiftD2ToLiftC1Job
||
s
.
CurJob
is
LineToLiftJob
));
if
(
agvInfo
!=
null
)
return
true
;
}
...
...
DeviceLibrary/bean/jobType/F1LiftD2ToLiftC1JobType.cs
查看文件 @
4ee65ac
...
...
@@ -19,10 +19,10 @@ namespace DeviceLibrary.bean.jobType
{
if
(
agv
.
Scope
.
Floor
.
Equals
(
1
)
&&
agv
.
HasFinishedEmptyShelfInLift
(
out
string
liftname
,
out
lift
.
LiftStatus
lift
))
{
//if (CheckOtherRobotState(agv, SettingString.LIFT_C1) || CheckOtherRobotState
(agv, SettingString.LIFT_D2))
//
{
//
return null;
//
}
if
(
TargetIsOccupied
(
agv
,
SettingString
.
LIFT_D2
))
{
return
null
;
}
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetF1FinishedD2ToC1Mission
(
agv
);
if
(
missionInfo
!=
null
)
{
...
...
@@ -41,7 +41,7 @@ namespace DeviceLibrary.bean.jobType
try
{
AgvInfo
agvInfo
=
AGVManager
.
agvInfo
.
Find
(
s
=>
s
.
Auto
&&
s
.
Scope
.
Workshop
.
Equals
(
agv
.
Scope
.
Workshop
)
&&
s
.
CurJob
!=
null
&&
(
s
.
CurJob
is
F1LiftD2ToLiftC1Job
||
s
.
CurJob
is
F1LiftC1ToLiftD2Job
));
&&
s
.
CurJob
!=
null
&&
(
s
.
CurJob
is
F1LiftD2ToLiftC1Job
||
s
.
CurJob
is
F1LiftC1ToLiftD2Job
||
s
.
CurJob
is
LineToLiftJob
));
if
(
agvInfo
!=
null
)
return
true
;
}
...
...
DeviceLibrary/bean/jobType/JobType.cs
查看文件 @
4ee65ac
using
Common
;
using
DeviceLibrary.lift
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
...
...
@@ -22,34 +23,22 @@ namespace DeviceLibrary
// AGVManager.agvInfo.Find(s=>s.Auto&& !s.IP.Equals(agvInfo.IP)&&(agvInfo?.CurJob?.JobParam?.))
//}
/// <summary>
///
检查其他机器人是否有电梯任务
///
目标点是否有小车
/// </summary>
/// <param name="agv
Info
"></param>
/// <param name="
liftn
ame"></param>
/// <returns>
true:有
</returns>
protected
bool
CheckOtherRobotState
(
AgvInfo
agvInfo
,
string
liftn
ame
)
/// <param name="agv"></param>
/// <param name="
targetN
ame"></param>
/// <returns></returns>
protected
bool
TargetIsOccupied
(
AgvInfo
agv
,
string
targetN
ame
)
{
var
allAgv
=
AGVManager
.
agvInfo
.
FindAll
(
s
=>
s
.
Auto
&&
!
agvInfo
.
IP
.
Equals
(
s
.
IP
)
&&
agvInfo
.
Scope
.
Workshop
.
Equals
(
s
.
Scope
.
Workshop
));
try
{
AgvInfo
agvInfo1
=
allAgv
.
Find
(
s
=>
s
.
Place
!=
null
&&
s
.
Place
.
Name
.
Contains
(
liftname
));
//AgvInfo agvInfo1 = allAgv.Find(s => s.CurJob != null && s.CurJob.JobParam != null &&
// ((s.CurJob.JobParam.SrcNode != null && s.CurJob.JobParam.SrcNode.Name.Contains(liftname)) &&
// (s.CurJob.JobParam.CurTargetNode != null && s.CurJob.JobParam.CurTargetNode.Name.Contains(liftname))));
if
(
agvInfo1
!=
null
)
return
true
;
return
LiftContext
.
OtherAGVIsInLift
(
agv
,
targetName
);
}
catch
(
Exception
ex
)
{
foreach
(
var
item
in
allAgv
)
{
LogUtil
.
error
(
$
"CheckOtherRobotState,{agvInfo.Name},{liftname}: {JsonHelper.SerializeObject(item)}"
,
ex
);
}
return
true
;
LogUtil
.
error
(
$
"TargetIsOccupied:{agv.Name},{JsonHelper.SerializeObject(AGVManager.agvInfo)}"
,
ex
);
return
false
;
}
return
false
;
}
}
}
DeviceLibrary/bean/jobType/LiftToLinesJobType.cs
查看文件 @
4ee65ac
...
...
@@ -26,6 +26,8 @@ namespace DeviceLibrary
return
null
;
else
if
(
CheckHasSameJob
(
agv
))
return
null
;
else
if
(
CheckHasSendJob
(
agv
))
return
null
;
else
{
if
(
agv
.
HasEmptyShelfInLift
(
out
string
liftname
,
out
lift
.
LiftStatus
lift
))
//!agv.Scope.Floor.Equals(1) &&
...
...
@@ -59,6 +61,8 @@ namespace DeviceLibrary
}
}
MissionManager
.
SetMissionOccupied
(
missionInfo
,
agv
);
MissionManager
.
Log
.
Info
(
$
"执行任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}"
);
return
new
LiftToLinesJob
(
jobParam
);
}
}
...
...
@@ -70,17 +74,18 @@ namespace DeviceLibrary
{
try
{
if
(
agv
.
Scope
.
Workshop
.
Equals
(
"1F"
))
{
AgvInfo
agvInfo
=
AGVManager
.
agvInfo
.
Find
(
s
=>
s
.
Auto
&&
s
.
Scope
.
Workshop
.
Equals
(
agv
.
Scope
.
Workshop
)
&&
s
.
CurJob
!=
null
&&
(
s
.
CurJob
is
LiftToLinesJob
)
&&
s
.
Scope
.
Workshop
.
Equals
(
"1F"
));
if
(
agvInfo
!=
null
)
return
true
;
}
else
{
return
false
;
}
AgvInfo
agvInfo
=
AGVManager
.
agvInfo
.
Find
(
s
=>
s
.
Auto
&&
s
.
Scope
.
Workshop
.
Equals
(
agv
.
Scope
.
Workshop
)
&&
s
.
CurJob
!=
null
&&
(
s
.
CurJob
is
LiftToLinesJob
));
if
(
agvInfo
!=
null
)
return
true
;
//if (agv.Scope.Workshop.Equals("1F"))
//{
//}
//else
//{
// return false;
//}
}
catch
{
...
...
@@ -88,34 +93,28 @@ namespace DeviceLibrary
}
return
false
;
}
bool
TargetIsOccupied
(
AgvInfo
agv
,
string
targetName
)
bool
CheckHasSendJob
(
AgvInfo
agv
)
{
try
{
if
(
agv
.
Scope
.
Equals
(
"1F"
))
if
(
agv
.
Scope
.
Workshop
.
Equals
(
"1F"
))
{
AgvInfo
agvInfo
=
AGVManager
.
agvInfo
.
Find
(
s
=>
s
.
Auto
&&
!
s
.
IP
.
Equals
(
agv
.
IP
)
&&
agv
.
Scope
.
Workshop
.
Equals
(
s
.
Scope
.
Workshop
)
&&
s
.
Scope
.
Equals
(
"1F"
));
AgvInfo
agvInfo
=
AGVManager
.
agvInfo
.
Find
(
s
=>
s
.
Auto
&&
s
.
Scope
.
Workshop
.
Equals
(
agv
.
Scope
.
Workshop
)
&&
s
.
CurJob
!=
null
&&
s
.
Scope
.
Workshop
.
Equals
(
"1F"
)
&&
(
s
.
CurJob
is
LineToLiftJob
||
s
.
CurJob
is
F1LiftC1ToLiftD2Job
||
s
.
CurJob
is
F1LiftD2ToLiftC1Job
));
if
(
agvInfo
!=
null
)
{
//if (agvInfo?.Place.Name.Contains(targetName) ?? false)
// return true;
if
(
agvInfo
?.
TaskRunState
?.
Task
?.
Name
.
Equals
(
targetName
)
??
false
)
{
return
true
;
}
}
return
true
;
}
else
{
return
false
;
return
false
;
}
}
catch
(
Exception
ex
)
catch
{
LogUtil
.
error
(
$
"TargetIsOccupied:{agv.Name},{JsonHelper.SerializeObject(AGVManager.agvInfo)}"
,
ex
);
return
false
;
}
return
false
;
}
}
}
DeviceLibrary/bean/jobType/LineToLiftJobType.cs
查看文件 @
4ee65ac
using
Common
;
using
DeviceLibrary.bean.job
;
using
DeviceLibrary.lift
;
using
DeviceLibrary.manager
;
using
System
;
using
System.Collections.Generic
;
...
...
@@ -18,6 +19,8 @@ namespace DeviceLibrary.bean.jobType
{
if
(!
agv
.
IsIdle
())
return
null
;
if
(
LiftContext
.
CheckHasEmptyFinished
(
agv
,
SettingString
.
LIFT_D2
,
out
LiftStatus
liftStatus
))
return
null
;
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetLineToLiftMission
(
agv
,
out
string
liftname
);
if
(
missionInfo
!=
null
)
{
...
...
@@ -35,7 +38,7 @@ namespace DeviceLibrary.bean.jobType
Common
.
LogUtil
.
error
(
$
"无法生成任务,电梯不存在:{liftname}"
);
return
null
;
}
if
(
CheckOtherRobotState
(
agv
,
liftname
))
if
(
TargetIsOccupied
(
agv
,
liftname
))
{
return
null
;
}
...
...
@@ -49,19 +52,18 @@ namespace DeviceLibrary.bean.jobType
return
null
;
}
bool
CheckHasSameJob
(
AgvInfo
agv
,
string
liftname
)
bool
CheckHasSameJob
(
AgvInfo
agv
,
string
liftname
)
{
try
{
if
(
agv
.
Scope
.
Workshop
.
Equals
(
"1F"
))
{
AgvInfo
agvInfo
=
AGVManager
.
agvInfo
.
Find
(
s
=>
s
.
Auto
&&
s
.
Scope
.
Workshop
.
Equals
(
agv
.
Scope
.
Workshop
)
&&
s
.
Scope
.
Workshop
.
Equals
(
"1F"
)
&&
s
.
CurJob
!=
null
&&
(
s
.
CurJob
is
LineToLiftJob
||
s
.
CurJob
is
F1LiftC1ToLiftD2Job
s
.
CurJob
!=
null
&&
(
s
.
CurJob
is
LineToLiftJob
||
s
.
CurJob
is
F1LiftC1ToLiftD2Job
||
s
.
CurJob
is
F1LiftD2ToLiftC1Job
));
if
(
agvInfo
!=
null
)
{
if
(
agvInfo
?.
CurJob
?.
JobParam
?.
GetMissionInfo
()?.
liftName
?.
Equals
(
liftname
)??
true
)
if
(
agvInfo
?.
CurJob
?.
JobParam
?.
GetMissionInfo
()?.
liftName
?.
Equals
(
liftname
)
??
true
)
{
return
true
;
}
...
...
@@ -71,11 +73,19 @@ namespace DeviceLibrary.bean.jobType
// return true;
}
else
return
false
;
{
AgvInfo
agvInfo
=
AGVManager
.
agvInfo
.
Find
(
s
=>
s
.
Auto
&&
s
.
Scope
.
Workshop
.
Equals
(
agv
.
Scope
.
Workshop
)
&&
s
.
CurJob
!=
null
&&
(
s
.
CurJob
is
LineToLiftJob
));
if
(
agvInfo
!=
null
)
{
return
true
;
}
}
return
false
;
}
catch
(
Exception
ex
)
catch
(
Exception
ex
)
{
LogUtil
.
error
(
"LineToLiftJobType CheckHasSameJob"
,
ex
);
LogUtil
.
error
(
"LineToLiftJobType CheckHasSameJob"
,
ex
);
return
true
;
}
return
false
;
...
...
DeviceLibrary/bean/jobType/ShelfBuffToLiftJobType.cs
0 → 100644
查看文件 @
4ee65ac
using
Common
;
using
DeviceLibrary.bean.job
;
using
DeviceLibrary.lift
;
using
DeviceLibrary.manager
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
namespace
DeviceLibrary.bean.jobType
{
/// <summary>
/// 从缓存点取料并送入电梯内
/// </summary>
public
class
ShelfBuffToLiftJobType
:
JobType
{
public
override
Job
GetNewJob
(
AgvInfo
agv
)
{
if
(!
agv
.
IsIdle
())
return
null
;
if
(
LiftContext
.
CheckHasEmptyFinished
(
agv
,
SettingString
.
LIFT_D2
,
out
LiftStatus
liftStatus
))
return
null
;
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
BuffToLiftMission
(
agv
);
if
(
missionInfo
!=
null
)
{
if
(
CheckHasSameJob
(
agv
,
missionInfo
.
liftName
))
return
null
;
Node
src
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
ShelfBuff
,
NodeType
.
Node
);
Node
dest
=
manager
.
NodeManager
.
GetNode
(
missionInfo
.
liftName
,
NodeType
.
Lift
);
if
(
src
==
null
)
{
Common
.
LogUtil
.
error
(
$
"无法生成任务,起始点不存在:{missionInfo.sourcePoint}"
);
return
null
;
}
if
(
dest
==
null
)
{
Common
.
LogUtil
.
error
(
$
"无法生成任务,电梯不存在:{missionInfo.liftName}"
);
return
null
;
}
if
(
TargetIsOccupied
(
agv
,
missionInfo
.
liftName
))
{
return
null
;
}
JobParam
jobParam
=
new
JobParam
(
src
,
dest
,
null
,
missionInfo
);
MissionManager
.
SetMissionOccupied
(
missionInfo
,
agv
);
MissionManager
.
Log
.
Info
(
$
"执行任务[{agv.Name}][ShelfBuffToLiftJobType]{JsonHelper.SerializeObject(missionInfo)}"
);
//任务状态变更
//MissionManager.SetMissionState(missionInfo.missionId, service.model.MissionState.已分配, out string msg);
return
new
LineToLiftJob
(
jobParam
);
}
return
null
;
}
bool
CheckHasSameJob
(
AgvInfo
agv
,
string
liftname
)
{
try
{
if
(
agv
.
Scope
.
Workshop
.
Equals
(
"1F"
))
{
AgvInfo
agvInfo
=
AGVManager
.
agvInfo
.
Find
(
s
=>
s
.
Auto
&&
s
.
Scope
.
Workshop
.
Equals
(
agv
.
Scope
.
Workshop
)
&&
s
.
Scope
.
Workshop
.
Equals
(
"1F"
)
&&
s
.
CurJob
!=
null
&&
(
s
.
CurJob
is
LineToLiftJob
||
s
.
CurJob
is
F1LiftC1ToLiftD2Job
||
s
.
CurJob
is
F1LiftD2ToLiftC1Job
));
if
(
agvInfo
!=
null
)
{
if
(
agvInfo
?.
CurJob
?.
JobParam
?.
GetMissionInfo
()?.
liftName
?.
Equals
(
liftname
)
??
true
)
{
return
true
;
}
}
//if (agvInfo != null)
// return true;
}
else
return
false
;
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
"LineToLiftJobType CheckHasSameJob"
,
ex
);
return
true
;
}
return
false
;
}
}
}
DeviceLibrary/lift/LiftContext.cs
查看文件 @
4ee65ac
...
...
@@ -5,6 +5,7 @@ using System.Linq;
using
System.Text
;
using
System.Threading
;
using
System.Threading.Tasks
;
using
System.Web.Management
;
using
static
DeviceLibrary
.
OpManager
;
namespace
DeviceLibrary.lift
...
...
@@ -41,11 +42,92 @@ namespace DeviceLibrary.lift
{
if
(
liftStatus
?.
HasEmptyFinishedShelf
??
false
)
//D2电梯有成品空架子,不返回门状态
{
//返回一个成品任务id
liftStatus
.
missionId
=
manager
.
MissionManager
.
GetMissionIdByEmptyFinishedShelfInLift
(
SettingString
.
LIFT_C1
);
return
true
;
}
}
return
false
;
}
public
static
string
GetLiftNodeOccupiedInfo
()
{
try
{
StringBuilder
sb
=
new
StringBuilder
();
sb
.
AppendLine
(
"电梯位置占用信息"
);
foreach
(
var
item
in
lifts
)
{
sb
.
Append
(
item
.
Key
+
":"
);
sb
.
AppendLine
(
"[点位占用:"
+
string
.
Join
(
";"
,
item
.
Value
.
Agvs
)
+
"][电梯使用:"
+
item
.
Value
.
UsingAgv
+
"]"
);
}
return
sb
.
ToString
();
}
catch
{
}
return
""
;
}
/// <summary>
/// 设置电梯节点的占用
/// </summary>
/// <param name="agv"></param>
/// <param name="liftName"></param>
public
static
void
SetLiftNodeOccupied
(
AgvInfo
agv
,
string
liftName
=
""
)
{
try
{
if
(
string
.
IsNullOrEmpty
(
liftName
))
{
foreach
(
var
item
in
lifts
.
Values
)
{
if
(
item
.
Agvs
!=
null
&&
item
.
Agvs
.
Contains
(
agv
.
IP
))
{
item
.
Agvs
.
Remove
(
agv
.
IP
);
LogUtil
.
info
(
$
"【{agv.Name}】清除电梯节点占用:{string.Join("
,
",item.Agvs)}"
);
}
}
}
else
{
if
(!
lifts
[
liftName
].
Agvs
.
Contains
(
agv
.
IP
))
{
lifts
[
liftName
].
Agvs
.
Add
(
agv
.
IP
);
LogUtil
.
info
(
$
"【{agv.Name}】设置电梯【{liftName}】节点占用:{string.Join("
,
", lifts[liftName].Agvs)}"
);
}
}
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
$
"SetLiftOccupied: {agv.IP},{liftName}"
,
ex
);
}
}
/// <summary>
/// 同车间的其他小车是否在电梯处
/// </summary>
/// <param name="agv"></param>
/// <param name="liftName"></param>
/// <returns></returns>
public
static
bool
OtherAGVIsInLift
(
AgvInfo
agv
,
string
liftName
)
{
try
{
AgvInfo
agvInfo
=
AGVManager
.
agvInfo
.
Find
(
s
=>
s
.
Scope
.
Workshop
.
Equals
(
agv
.
Scope
.
Workshop
)
&&
!
s
.
IP
.
Equals
(
agv
.
IP
)&&
s
.
Auto
);
if
(
agvInfo
!=
null
)
{
return
lifts
[
liftName
].
Agvs
.
Contains
(
agvInfo
.
IP
);
}
else
return
false
;
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
$
"OtherAGVIsInLift: {agv.IP},{liftName}"
,
ex
);
}
return
false
;
}
/// <summary>
/// 电梯是否开门
/// </summary>
...
...
@@ -79,7 +161,7 @@ namespace DeviceLibrary.lift
/// <returns>true:是</returns>
public
static
bool
IsOccupied
(
AgvInfo
agv
,
string
liftId
)
{
return
lifts
[
liftId
].
Occupied
Agv
.
Equals
(
agv
.
IP
);
return
lifts
[
liftId
].
Using
Agv
.
Equals
(
agv
.
IP
);
}
/// <summary>
/// 请求使用电梯
...
...
@@ -135,6 +217,58 @@ namespace DeviceLibrary.lift
return
rtn
;
}
/// <summary>
/// 更新请求信息
/// </summary>
/// <param name="missionInfo"></param>
/// <param name="agvInfo"></param>
/// <param name="isback"></param>
/// <returns></returns>
public
static
bool
UpdateRequestInfo
(
service
.
model
.
MissionInfo
missionInfo
,
AgvInfo
agvInfo
,
bool
isback
=
false
)
{
service
.
model
.
SendInInfo
info
;
bool
rtn
=
false
;
if
(
isback
)
//返回
{
if
(!
AGVManager
.
GetsysClientBy
(
missionInfo
.
sourceFloor
,
missionInfo
.
liftName
,
out
string
destclient
))
{
Common
.
LogUtil
.
error
(
$
"请求电梯失败,因目的系统标识获取失败:floor={agvInfo.Scope.Floor},lift={missionInfo.liftName}"
);
return
false
;
}
info
=
new
service
.
model
.
SendInInfo
()
{
liftId
=
missionInfo
.
liftName
,
destinationFloor
=
missionInfo
.
sourceFloor
,
destinationPoint
=
missionInfo
.
sourcePoint
,
destinationClient
=
destclient
,
sourceFloor
=
missionInfo
.
destinationFloor
,
sourceClient
=
agvInfo
.
Client
,
updateInfo
=
true
};
}
else
{
if
(!
AGVManager
.
GetsysClientBy
(
missionInfo
.
destinationFloor
,
missionInfo
.
liftName
,
out
string
destclient
))
{
Common
.
LogUtil
.
error
(
$
"请求电梯失败,因目的系统标识获取失败:floor={agvInfo.Scope.Floor},lift={missionInfo.liftName}"
);
return
false
;
}
info
=
new
service
.
model
.
SendInInfo
()
{
liftId
=
missionInfo
.
liftName
,
sourceClient
=
agvInfo
.
Client
,
sourceFloor
=
missionInfo
.
sourceFloor
,
sourcePoint
=
missionInfo
.
sourcePoint
,
destinationClient
=
destclient
,
destinationFloor
=
missionInfo
.
destinationFloor
,
destinationPoint
=
missionInfo
.
destinationPoint
,
updateInfo
=
true
};
}
LogUtil
.
info
(
$
"更新电梯请求信息:{JsonHelper.SerializeObject(info)}"
);
rtn
=
HttpManager
.
RequestSendIn
(
info
);
return
rtn
;
}
/// <summary>
/// 成品呼叫
/// </summary>
/// <param name="missionInfo"></param>
...
...
@@ -314,19 +448,19 @@ namespace DeviceLibrary.lift
/// <param name="agvIp"></param>
public
static
void
SetLiftOccupiedAgv
(
string
liftId
,
string
agvIp
)
{
lifts
[
liftId
].
Occupied
Agv
=
agvIp
;
Common
.
LogUtil
.
info
(
$
"
设置电梯占用
:{liftId},{agvIp}【{JsonHelper.SerializeObject(lifts)}】"
);
lifts
[
liftId
].
Using
Agv
=
agvIp
;
Common
.
LogUtil
.
info
(
$
"
使用电梯
:{liftId},{agvIp}【{JsonHelper.SerializeObject(lifts)}】"
);
}
public
static
void
ResetLiftOccupiedAgv
(
string
liftId
)
{
try
{
lifts
[
liftId
].
Occupied
Agv
=
""
;
Common
.
LogUtil
.
info
(
$
"清除
电梯占用
:{liftId}【{JsonHelper.SerializeObject(lifts)}】"
);
lifts
[
liftId
].
Using
Agv
=
""
;
Common
.
LogUtil
.
info
(
$
"清除
使用电梯
:{liftId}【{JsonHelper.SerializeObject(lifts)}】"
);
}
catch
(
Exception
ex
)
{
Common
.
LogUtil
.
error
(
$
"清除
电梯占用
失败:{liftId}"
,
ex
);
Common
.
LogUtil
.
error
(
$
"清除
使用电梯
失败:{liftId}"
,
ex
);
}
}
public
static
void
ResetLiftOccupiedAgv
(
AgvInfo
agv
)
...
...
@@ -335,17 +469,17 @@ namespace DeviceLibrary.lift
{
foreach
(
var
item
in
lifts
.
Values
)
{
if
(
agv
.
IP
.
Equals
(
item
.
Occupied
Agv
))
if
(
agv
.
IP
.
Equals
(
item
.
Using
Agv
))
{
item
.
Occupied
Agv
=
""
;
Common
.
LogUtil
.
info
(
$
"{agv.Name}清除
电梯占用
:【{JsonHelper.SerializeObject(lifts)}】"
);
item
.
Using
Agv
=
""
;
Common
.
LogUtil
.
info
(
$
"{agv.Name}清除
使用电梯
:【{JsonHelper.SerializeObject(lifts)}】"
);
}
}
}
catch
(
Exception
ex
)
{
Common
.
LogUtil
.
error
(
$
"{agv.Name}清除
电梯占用
失败"
,
ex
);
Common
.
LogUtil
.
error
(
$
"{agv.Name}清除
使用电梯
失败"
,
ex
);
}
}
/// <summary>
...
...
@@ -355,8 +489,8 @@ namespace DeviceLibrary.lift
/// <returns>true:占用</returns>
public
static
bool
CheckLiftOccupied
(
string
liftId
)
{
LogUtil
.
debug
(
$
"检查电梯{liftId}是否被
占
用:【{JsonHelper.SerializeObject(lifts)}】"
);
return
!
lifts
[
liftId
].
Occupied
Agv
.
Equals
(
""
);
LogUtil
.
debug
(
$
"检查电梯{liftId}是否被
使
用:【{JsonHelper.SerializeObject(lifts)}】"
);
return
!
lifts
[
liftId
].
Using
Agv
.
Equals
(
""
);
}
/// <summary>
/// 获取电梯状态
...
...
DeviceLibrary/lift/LiftInfo.cs
查看文件 @
4ee65ac
...
...
@@ -9,7 +9,11 @@ namespace DeviceLibrary.lift
public
class
LiftInfo
{
public
LiftStatus
LiftStatus
{
get
;
set
;
}
public
string
OccupiedAgv
{
get
;
set
;
}
=
""
;
public
string
UsingAgv
{
get
;
set
;
}
=
""
;
/// <summary>
/// 占用电梯的小车名
/// </summary>
public
List
<
string
>
Agvs
{
get
;
set
;
}
=
new
List
<
string
>();
public
LiftInfo
()
{
LiftStatus
=
new
LiftStatus
();
...
...
DeviceLibrary/manager/AGVManager.cs
查看文件 @
4ee65ac
...
...
@@ -66,6 +66,7 @@ namespace DeviceLibrary
jobTypes
.
Add
(
new
F1LiftD2ToLiftC1JobType
());
jobTypes
.
Add
(
new
LiftToLinesJobType
());
jobTypes
.
Add
(
new
BackLiftToLineJobType
());
jobTypes
.
Add
(
new
ShelfBuffToLiftJobType
());
jobTypes
.
Add
(
new
LineToLiftJobType
());
jobTypes
.
Add
(
new
LineOneToManyJobType
());
jobTypes
.
Add
(
new
SteelLineToLiftJobType
());
...
...
DeviceLibrary/manager/MissionManager.cs
查看文件 @
4ee65ac
...
...
@@ -255,6 +255,32 @@ namespace DeviceLibrary.manager
}
return
null
;
}
/// <summary>
/// 获取料架缓存点的任务
/// </summary>
/// <param name="agv"></param>
/// <returns></returns>
public
static
MissionInfo
BuffToLiftMission
(
AgvInfo
agv
)
{
MissionInfo
missionInfo
=
null
;
try
{
var
missions
=
GetMissionInfos
().
Where
(
w
=>
w
.
state
!=
MissionState
.
中止
&&
w
.
state
!=
MissionState
.
取消
&&
w
.
state
!=
MissionState
.
完成
).
ToList
();
missionInfo
=
missions
.
Find
(
s
=>
s
.
sourceWorkshop
.
Equals
(
agv
.
Scope
.
Workshop
)
&&
!
s
.
sourceWorkshop
.
Equals
(
s
.
destinationWorkshop
)
&&
s
.
state
.
Equals
(
MissionState
.
料架缓存
)
&&
agv
.
Scope
.
Tasks
.
Contains
(
s
.
projectType
.
ToString
()));
if
(
missionInfo
!=
null
&&
AgvCanGetMission
(
missionInfo
))
return
missionInfo
;
}
catch
(
Exception
e
)
{
Log
.
Error
(
"BuffToLiftMission"
,
e
);
}
return
null
;
}
static
bool
AgvCanGetMission
(
MissionInfo
missionInfo
)
{
return
string
.
IsNullOrEmpty
(
missionInfo
.
occupiedAgv
);
...
...
@@ -276,8 +302,6 @@ namespace DeviceLibrary.manager
&&
agv
.
Scope
.
Tasks
.
Contains
(
s
.
projectType
.
ToString
())
&&
!
s
.
projectType
.
Equals
(
ProjectType
.
移远成品入库
));
if
(
missionInfo
!=
null
&&
AgvCanGetMission
(
missionInfo
))
{
SetMissionOccupied
(
missionInfo
,
agv
);
Log
.
Info
(
$
"执行任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}"
);
return
missionInfo
;
}
}
...
...
@@ -303,12 +327,11 @@ namespace DeviceLibrary.manager
missionInfo
=
missions
.
Where
(
s
=>
(
agv
.
Scope
.
Workshop
.
Equals
(
s
.
sourceWorkshop
))
&&
(!
s
.
projectType
.
Equals
(
ProjectType
.
钢网入库
)
&&
!
s
.
projectType
.
Equals
(
ProjectType
.
钢网领用
))
&&
&&
(
s
.
state
>=
MissionState
.
返回到达电梯内
&&
s
.
state
<=
MissionState
.
返回电梯到达
)
&&
agv
.
Scope
.
Tasks
.
Contains
(
s
.
projectType
.
ToString
())).
FirstOrDefault
();
if
(
missionInfo
!=
null
&&
AgvCanGetMission
(
missionInfo
))
{
Log
.
Info
(
$
"执行料架返回任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}"
);
return
missionInfo
;
}
}
...
...
@@ -331,7 +354,6 @@ namespace DeviceLibrary.manager
&&
agv
.
Scope
.
Tasks
.
Contains
(
s
.
projectType
.
ToString
())).
FirstOrDefault
();
if
(
missionInfo
!=
null
&&
AgvCanGetMission
(
missionInfo
))
{
Log
.
Info
(
$
"执行钢网分发线体任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}"
);
return
missionInfo
;
}
}
...
...
@@ -354,8 +376,6 @@ namespace DeviceLibrary.manager
&&
agv
.
Scope
.
Tasks
.
Contains
(
s
.
projectType
.
ToString
())).
FirstOrDefault
();
if
(
missionInfo
!=
null
&&
AgvCanGetMission
(
missionInfo
))
{
Log
.
Info
(
$
"执行钢网去立库任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}"
);
return
missionInfo
;
}
}
...
...
@@ -382,7 +402,6 @@ namespace DeviceLibrary.manager
&&
s
.
projectType
.
Equals
(
ProjectType
.
移远成品入库
)).
FirstOrDefault
();
if
(
missionInfo
!=
null
&&
AgvCanGetMission
(
missionInfo
))
{
Log
.
Info
(
$
"执行1F成品回收任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}"
);
return
missionInfo
;
}
}
...
...
@@ -411,7 +430,6 @@ namespace DeviceLibrary.manager
&&
s
.
projectType
.
Equals
(
ProjectType
.
移远成品入库
)).
FirstOrDefault
();
if
(
missionInfo
!=
null
&&
AgvCanGetMission
(
missionInfo
)
&&
missionInfo
.
missionId
.
StartsWith
(
"P16"
))
{
Log
.
Info
(
$
"执行1F成品入库任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}"
);
return
missionInfo
;
}
}
...
...
@@ -442,7 +460,6 @@ namespace DeviceLibrary.manager
if
(
missionInfo
!=
null
&&
AgvCanGetMission
(
missionInfo
))
{
SetMissionOccupied
(
missionInfo
,
agv
);
Log
.
Info
(
$
"执行任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}"
);
return
missionInfo
;
}
}
...
...
@@ -581,7 +598,7 @@ namespace DeviceLibrary.manager
public
static
void
AddSteelTarNodes
(
string
missionId
,
string
nodes
)
{
MissionInfo
missionInfo
=
GetMission
(
missionId
);
if
(
missionInfo
!=
null
)
if
(
missionInfo
!=
null
)
{
missionInfo
.
destinationPoint
=
nodes
;
{
...
...
@@ -605,7 +622,7 @@ namespace DeviceLibrary.manager
Log
.
Info
(
$
"任务[{missionInfo.missionId}]更改钢网目的地[{nodes}]成功"
);
}
}
/// <summary>
/// 根据任务信息得到电梯名称
...
...
DeviceLibrary/service/Service.cs
查看文件 @
4ee65ac
...
...
@@ -7,6 +7,7 @@ using System.Runtime.Serialization;
using
Common
;
using
DeviceLibrary.service.model
;
using
DeviceLibrary.manager
;
using
System.Reflection
;
namespace
DeviceLibrary
{
...
...
@@ -35,6 +36,13 @@ namespace DeviceLibrary
}
else
{
int
.
TryParse
(
createMissionInfo
.
missionId
.
Substring
(
1
,
2
),
out
int
projectType
);
if
(
projectType
>
16
)
{
result
.
code
=
-
1
;
result
.
msg
=
$
"不存在的任务类型:{createMissionInfo.sourcePoint}"
;
Log
.
Error
(
result
.
msg
);
}
if
(!
NodeManager
.
CheckNode
(
createMissionInfo
.
sourcePoint
))
{
result
.
code
=
-
1
;
...
...
DeviceLibrary/service/model/MissionInfo.cs
查看文件 @
4ee65ac
...
...
@@ -144,6 +144,19 @@ namespace DeviceLibrary.service.model
return
false
;
return
missionInfo
.
projectType
.
Equals
(
ProjectType
.
移远成品入库
);
}
/// <summary>
/// 拷贝一个新的实例
/// </summary>
/// <returns></returns>
//public MissionInfo ToCopy()
//{
// MissionInfo posInfo = new MissionInfo();
// System.Reflection.PropertyInfo[] info1 = posInfo.GetType().GetProperties();
// System.Reflection.PropertyInfo[] info2 = this.GetType().GetProperties();
// for (int i = 0; i < info1.Length; i++)
// info1[i].SetValue(posInfo, info2[i].GetValue(this));
// return posInfo;
//}
}
public
enum
MissionState
...
...
@@ -203,7 +216,8 @@ namespace DeviceLibrary.service.model
/// 完成
/// </summary>
完成
,
等待成品回收
等待成品回收
,
料架缓存
}
/// <summary>
/// 项目类型
...
...
DeviceLibrary/service/model/SendInInfo.cs
查看文件 @
4ee65ac
...
...
@@ -39,5 +39,9 @@ namespace DeviceLibrary.service.model
/// 目的地点位
/// </summary>
public
string
destinationPoint
{
get
;
set
;
}
/// <summary>
/// 更新电梯信息
/// </summary>
public
bool
updateInfo
{
get
;
set
;
}
=
false
;
}
}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论