Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
张东亮
/
Qisda-SO1037-AGVDispatch
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit ab1c3da7
由
张东亮
编写于
2022-12-12 09:19:35 +0800
浏览文件
选项
浏览文件
标签
下载
差异文件
合并
2 个父辈
1947a66c
8b6e4812
隐藏空白字符变更
内嵌
并排
正在显示
36 个修改的文件
包含
2475 行增加
和
762 行删除
AGVDispatch/FrmMain.Designer.cs
AGVDispatch/FrmMain.cs
AGVDispatch/Manual.cs
Common/SettingString.cs
Common/util/HttpHelper.cs
DeviceLibrary/Control.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/manager/NodeManager.cs
DeviceLibrary/service/Service.cs
DeviceLibrary/service/model/MissionInfo.cs
DeviceLibrary/service/model/SendInInfo.cs
AGVDispatch/FrmMain.Designer.cs
查看文件 @
ab1c3da
...
@@ -53,6 +53,7 @@
...
@@ -53,6 +53,7 @@
this
.
txtShow
=
new
System
.
Windows
.
Forms
.
TextBox
();
this
.
txtShow
=
new
System
.
Windows
.
Forms
.
TextBox
();
this
.
tableLayoutPanel4
=
new
System
.
Windows
.
Forms
.
TableLayoutPanel
();
this
.
tableLayoutPanel4
=
new
System
.
Windows
.
Forms
.
TableLayoutPanel
();
this
.
flowLayoutPanel1
=
new
System
.
Windows
.
Forms
.
FlowLayoutPanel
();
this
.
flowLayoutPanel1
=
new
System
.
Windows
.
Forms
.
FlowLayoutPanel
();
this
.
textBox1
=
new
System
.
Windows
.
Forms
.
TextBox
();
this
.
tableLayoutPanel3
.
SuspendLayout
();
this
.
tableLayoutPanel3
.
SuspendLayout
();
this
.
tabControl1
.
SuspendLayout
();
this
.
tabControl1
.
SuspendLayout
();
this
.
tabPage2
.
SuspendLayout
();
this
.
tabPage2
.
SuspendLayout
();
...
@@ -358,6 +359,7 @@
...
@@ -358,6 +359,7 @@
//
//
// tabPage5
// tabPage5
//
//
this
.
tabPage5
.
Controls
.
Add
(
this
.
textBox1
);
this
.
tabPage5
.
Controls
.
Add
(
this
.
txtShow
);
this
.
tabPage5
.
Controls
.
Add
(
this
.
txtShow
);
this
.
tabPage5
.
Location
=
new
System
.
Drawing
.
Point
(
4
,
25
);
this
.
tabPage5
.
Location
=
new
System
.
Drawing
.
Point
(
4
,
25
);
this
.
tabPage5
.
Margin
=
new
System
.
Windows
.
Forms
.
Padding
(
4
);
this
.
tabPage5
.
Margin
=
new
System
.
Windows
.
Forms
.
Padding
(
4
);
...
@@ -369,12 +371,12 @@
...
@@ -369,12 +371,12 @@
//
//
// txtShow
// 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
.
Location
=
new
System
.
Drawing
.
Point
(
0
,
0
);
this
.
txtShow
.
Margin
=
new
System
.
Windows
.
Forms
.
Padding
(
4
);
this
.
txtShow
.
Margin
=
new
System
.
Windows
.
Forms
.
Padding
(
4
);
this
.
txtShow
.
Multiline
=
true
;
this
.
txtShow
.
Multiline
=
true
;
this
.
txtShow
.
Name
=
"txtShow"
;
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
;
this
.
txtShow
.
TabIndex
=
0
;
//
//
// tableLayoutPanel4
// tableLayoutPanel4
...
@@ -402,6 +404,16 @@
...
@@ -402,6 +404,16 @@
this
.
flowLayoutPanel1
.
Size
=
new
System
.
Drawing
.
Size
(
1698
,
506
);
this
.
flowLayoutPanel1
.
Size
=
new
System
.
Drawing
.
Size
(
1698
,
506
);
this
.
flowLayoutPanel1
.
TabIndex
=
0
;
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
// FrmMain
//
//
this
.
AutoScaleDimensions
=
new
System
.
Drawing
.
SizeF
(
8F
,
15F
);
this
.
AutoScaleDimensions
=
new
System
.
Drawing
.
SizeF
(
8F
,
15F
);
...
@@ -463,6 +475,7 @@
...
@@ -463,6 +475,7 @@
private
System
.
Windows
.
Forms
.
TextBox
txtShow
;
private
System
.
Windows
.
Forms
.
TextBox
txtShow
;
private
System
.
Windows
.
Forms
.
CheckBox
checkBox1
;
private
System
.
Windows
.
Forms
.
CheckBox
checkBox1
;
private
System
.
Windows
.
Forms
.
Button
button1
;
private
System
.
Windows
.
Forms
.
Button
button1
;
private
System
.
Windows
.
Forms
.
TextBox
textBox1
;
}
}
}
}
AGVDispatch/FrmMain.cs
查看文件 @
ab1c3da
...
@@ -12,6 +12,7 @@ using System.Threading.Tasks;
...
@@ -12,6 +12,7 @@ using System.Threading.Tasks;
using
System.Windows.Forms
;
using
System.Windows.Forms
;
using
Common
;
using
Common
;
using
DeviceLibrary
;
using
DeviceLibrary
;
using
DeviceLibrary.lift
;
using
DeviceLibrary.manager
;
using
DeviceLibrary.manager
;
using
DeviceLibrary.service.model
;
using
DeviceLibrary.service.model
;
...
@@ -157,6 +158,12 @@ namespace AGVControl
...
@@ -157,6 +158,12 @@ namespace AGVControl
Invoke
(
new
Action
(()
=>
Invoke
(
new
Action
(()
=>
{
{
txtShow
.
Text
=
DeviceLibrary
.
HttpManager
.
Agvtransinfo
;
txtShow
.
Text
=
DeviceLibrary
.
HttpManager
.
Agvtransinfo
;
try
{
textBox1
.
Text
=
LiftContext
.
GetLiftNodeOccupiedInfo
();
}
catch
{
}
}));
}));
...
@@ -230,7 +237,7 @@ namespace AGVControl
...
@@ -230,7 +237,7 @@ namespace AGVControl
private
void
dgvInfos_DataError
(
object
sender
,
DataGridViewDataErrorEventArgs
e
)
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
)
private
void
dgvInfos_CellContentClick
(
object
sender
,
DataGridViewCellEventArgs
e
)
...
...
AGVDispatch/Manual.cs
查看文件 @
ab1c3da
...
@@ -94,6 +94,7 @@ namespace AGVControl
...
@@ -94,6 +94,7 @@ namespace AGVControl
{
{
Agv
.
Auto
=
false
;
Agv
.
Auto
=
false
;
LiftContext
.
ResetLiftOccupiedAgv
(
Agv
);
LiftContext
.
ResetLiftOccupiedAgv
(
Agv
);
LiftContext
.
SetLiftNodeOccupied
(
Agv
);
ChargePileManager
.
StopCharge
(
Agv
);
ChargePileManager
.
StopCharge
(
Agv
);
LogUtil
.
info
(
$
"取消自动任务,当前运行信息是:{Agv.Msg}"
);
LogUtil
.
info
(
$
"取消自动任务,当前运行信息是:{Agv.Msg}"
);
try
try
...
...
Common/SettingString.cs
查看文件 @
ab1c3da
...
@@ -31,6 +31,18 @@ namespace Common
...
@@ -31,6 +31,18 @@ namespace Common
public
const
string
LIFT_D2
=
"LIFT_D2"
;
public
const
string
LIFT_D2
=
"LIFT_D2"
;
public
const
string
LIFT_C1
=
"LIFT_C1"
;
public
const
string
LIFT_C1
=
"LIFT_C1"
;
public
const
string
storage
=
"storage"
;
public
const
string
storage
=
"storage"
;
public
const
string
CrossDoor
=
"CrossDoor"
;
public
const
string
CrossAirDoor
=
"CrossAirDoor"
;
public
const
string
In
=
"In"
;
public
const
string
Out
=
"Out"
;
public
const
string
ToDoor
=
"ToDoor"
;
public
const
string
OpenDoor
=
"OpenDoor"
;
public
const
string
EnterDoor
=
"EnterDoor"
;
public
const
string
CloseDoor
=
"CloseDoor"
;
public
const
string
OpenOtherDoor
=
"OpenOtherDoor"
;
public
const
string
LeaveDoor
=
"LeaveDoor"
;
public
const
string
CloseOtherDoor
=
"CloseOtherDoor"
;
//任务状态
//任务状态
public
const
string
Wait
=
"Wait"
;
public
const
string
Wait
=
"Wait"
;
public
const
string
Done
=
"Done"
;
public
const
string
Done
=
"Done"
;
...
@@ -70,6 +82,9 @@ namespace Common
...
@@ -70,6 +82,9 @@ namespace Common
public
const
string
Lift_Names
=
"Lift_Names"
;
public
const
string
Lift_Names
=
"Lift_Names"
;
public
const
string
IsDebug
=
"IsDebug"
;
public
const
string
IsDebug
=
"IsDebug"
;
#
endregion
#
endregion
#
region
点位
public
const
string
ShelfBuff
=
"ShelfBuff"
;
#
endregion
}
}
}
}
Common/util/HttpHelper.cs
查看文件 @
ab1c3da
...
@@ -142,7 +142,7 @@ namespace Common
...
@@ -142,7 +142,7 @@ namespace Common
}
}
catch
(
Exception
e
)
catch
(
Exception
e
)
{
{
LogUtil
.
error
(
"POST ERROR:"
+
url
,
e
);
LogUtil
.
error
(
$
"POST ERROR:【{url}】【{paramData}】"
,
e
);
}
}
if
(!
result
.
Contains
(
"null"
)
&&
result
.
Length
!=
0
)
if
(!
result
.
Contains
(
"null"
)
&&
result
.
Length
!=
0
)
{
{
...
@@ -180,7 +180,7 @@ namespace Common
...
@@ -180,7 +180,7 @@ namespace Common
}
}
catch
(
Exception
e
)
catch
(
Exception
e
)
{
{
LogUtil
.
error
(
"POST ERROR:"
+
e
.
ToString
()
);
LogUtil
.
error
(
$
"POST ERROR:【{url}】【{paramData}】"
,
e
);
}
}
return
result
;
return
result
;
}
}
...
...
DeviceLibrary/Control.cs
查看文件 @
ab1c3da
...
@@ -30,7 +30,7 @@ namespace DeviceLibrary
...
@@ -30,7 +30,7 @@ namespace DeviceLibrary
{
{
AgvCallTimer
=
new
System
.
Timers
.
Timer
AgvCallTimer
=
new
System
.
Timers
.
Timer
{
{
Interval
=
3
00
,
Interval
=
5
00
,
AutoReset
=
true
,
AutoReset
=
true
,
Enabled
=
false
Enabled
=
false
};
};
...
@@ -38,7 +38,7 @@ namespace DeviceLibrary
...
@@ -38,7 +38,7 @@ namespace DeviceLibrary
AgvStateTimer
=
new
System
.
Timers
.
Timer
AgvStateTimer
=
new
System
.
Timers
.
Timer
{
{
Interval
=
5
000
,
Interval
=
3
000
,
AutoReset
=
true
,
AutoReset
=
true
,
Enabled
=
false
Enabled
=
false
};
};
...
@@ -181,7 +181,6 @@ namespace DeviceLibrary
...
@@ -181,7 +181,6 @@ namespace DeviceLibrary
return
null
;
return
null
;
if
(
job
!=
null
)
if
(
job
!=
null
)
{
{
//log.Debug(agv_Info.Name + " GetJob OK " + job.ToString());
return
job
;
return
job
;
}
}
}
}
...
@@ -214,7 +213,6 @@ namespace DeviceLibrary
...
@@ -214,7 +213,6 @@ namespace DeviceLibrary
if
(!
AGVManager
.
agvInfo
[
i
].
StateID
.
Equals
(
eAGVState
.
Ready
)
if
(!
AGVManager
.
agvInfo
[
i
].
StateID
.
Equals
(
eAGVState
.
Ready
)
&&
!
AGVManager
.
agvInfo
[
i
].
StateID
.
Equals
(
eAGVState
.
Executing
)
&&
!
AGVManager
.
agvInfo
[
i
].
StateID
.
Equals
(
eAGVState
.
None
))
&&
!
AGVManager
.
agvInfo
[
i
].
StateID
.
Equals
(
eAGVState
.
Executing
)
&&
!
AGVManager
.
agvInfo
[
i
].
StateID
.
Equals
(
eAGVState
.
None
))
{
{
//log.Warn(string.Format("{0}不能调用 StateID={1}", AGVManager.agvInfo[i].Name, AGVManager.agvInfo[i].StateID.ToString()));
continue
;
continue
;
}
}
if
(
agv
.
TaskRunState
.
DeWaitTaskQueue
(
out
AgvTask
task
))
if
(
agv
.
TaskRunState
.
DeWaitTaskQueue
(
out
AgvTask
task
))
...
...
DeviceLibrary/DeviceLibrary.csproj
查看文件 @
ab1c3da
...
@@ -87,6 +87,7 @@
...
@@ -87,6 +87,7 @@
<Compile Include="bean\agv\Mir_Error.cs" />
<Compile Include="bean\agv\Mir_Error.cs" />
<Compile Include="bean\agv\Scope.cs" />
<Compile Include="bean\agv\Scope.cs" />
<Compile Include="bean\ChargePiles.cs" />
<Compile Include="bean\ChargePiles.cs" />
<Compile Include="bean\jobType\ShelfBuffToLiftJobType.cs" />
<Compile Include="bean\jobType\SteelLiftToLinesJobType.cs" />
<Compile Include="bean\jobType\SteelLiftToLinesJobType.cs" />
<Compile Include="bean\jobType\F1LiftC1ToLiftD2JobType.cs" />
<Compile Include="bean\jobType\F1LiftC1ToLiftD2JobType.cs" />
<Compile Include="bean\jobType\F1LiftD2ToLiftC1JobType.cs" />
<Compile Include="bean\jobType\F1LiftD2ToLiftC1JobType.cs" />
...
@@ -97,6 +98,7 @@
...
@@ -97,6 +98,7 @@
<Compile Include="bean\job\ChargeJob.cs" />
<Compile Include="bean\job\ChargeJob.cs" />
<Compile Include="bean\job\F1LiftC1ToLiftD2Job.cs" />
<Compile Include="bean\job\F1LiftC1ToLiftD2Job.cs" />
<Compile Include="bean\job\F1LiftD2ToLiftC1Job.cs" />
<Compile Include="bean\job\F1LiftD2ToLiftC1Job.cs" />
<Compile Include="bean\job\CrossDoorJob.cs" />
<Compile Include="bean\job\SteelLiftToStorageJob.cs" />
<Compile Include="bean\job\SteelLiftToStorageJob.cs" />
<Compile Include="bean\job\SteelLiftToLinesJob.cs" />
<Compile Include="bean\job\SteelLiftToLinesJob.cs" />
<Compile Include="bean\job\LineOneToManyJob.cs" />
<Compile Include="bean\job\LineOneToManyJob.cs" />
...
@@ -108,6 +110,7 @@
...
@@ -108,6 +110,7 @@
<Compile Include="bean\JobParam.cs" />
<Compile Include="bean\JobParam.cs" />
<Compile Include="bean\jobType\BackLiftToLineJobType.cs" />
<Compile Include="bean\jobType\BackLiftToLineJobType.cs" />
<Compile Include="bean\jobType\LineToLiftJobType.cs" />
<Compile Include="bean\jobType\LineToLiftJobType.cs" />
<Compile Include="bean\job\SwitchShelfJob.cs" />
<Compile Include="bean\TaskRunState.cs" />
<Compile Include="bean\TaskRunState.cs" />
<Compile Include="bean\jobType\LiftToLinesJobType.cs" />
<Compile Include="bean\jobType\LiftToLinesJobType.cs" />
<Compile Include="bean\job\StandyJob.cs" />
<Compile Include="bean\job\StandyJob.cs" />
...
...
DeviceLibrary/bean/JobParam.cs
查看文件 @
ab1c3da
using
Common
;
using
Common
;
using
DeviceLibrary.lift
;
using
System
;
using
System
;
using
System.Collections.Generic
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Linq
;
using
System.Text
;
using
System.Text
;
using
System.Threading.Tasks
;
using
System.Threading.Tasks
;
using
System.Web.UI.WebControls.WebParts
;
namespace
DeviceLibrary.bean
namespace
DeviceLibrary.bean
{
{
...
@@ -16,7 +18,10 @@ namespace DeviceLibrary.bean
...
@@ -16,7 +18,10 @@ namespace DeviceLibrary.bean
/// 初始地点
/// 初始地点
/// </summary>
/// </summary>
public
Node
SrcNode
{
get
;
set
;
}
public
Node
SrcNode
{
get
;
set
;
}
/// <summary>
/// 过门信息
/// </summary>
public
CrossDoor
CrossDoor
{
get
;
set
;
}
=
new
CrossDoor
();
private
service
.
model
.
MissionInfo
missionInfo
;
private
service
.
model
.
MissionInfo
missionInfo
;
/// <summary>
/// <summary>
...
@@ -26,7 +31,10 @@ namespace DeviceLibrary.bean
...
@@ -26,7 +31,10 @@ namespace DeviceLibrary.bean
{
{
return
missionInfo
;
return
missionInfo
;
}
}
/// <summary>
/// 电梯内的料架信息
/// </summary>
public
LiftStatus
LiftStatus
;
/// <summary>
/// <summary>
/// 任务信息
/// 任务信息
/// </summary>
/// </summary>
...
@@ -51,6 +59,10 @@ namespace DeviceLibrary.bean
...
@@ -51,6 +59,10 @@ namespace DeviceLibrary.bean
/// </summary>
/// </summary>
public
Shelf
Shelf
{
get
;
set
;
}
public
Shelf
Shelf
{
get
;
set
;
}
public
OpType
OpType
{
get
;
set
;
}
=
OpType
.
ComToLine
;
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
)
public
JobParam
(
Node
srcplace
,
Node
tarplace
=
null
,
Shelf
shelf
=
null
,
service
.
model
.
MissionInfo
MissionInfo
=
null
)
{
{
SrcNode
=
srcplace
;
SrcNode
=
srcplace
;
...
@@ -58,6 +70,7 @@ namespace DeviceLibrary.bean
...
@@ -58,6 +70,7 @@ namespace DeviceLibrary.bean
Shelf
=
shelf
;
Shelf
=
shelf
;
this
.
missionInfo
=
MissionInfo
;
this
.
missionInfo
=
MissionInfo
;
TargetNodes
=
new
List
<
Node
>();
TargetNodes
=
new
List
<
Node
>();
CrossDoor
=
new
CrossDoor
();
}
}
}
}
/// <summary>
/// <summary>
...
@@ -82,4 +95,35 @@ namespace DeviceLibrary.bean
...
@@ -82,4 +95,35 @@ namespace DeviceLibrary.bean
/// </summary>
/// </summary>
MaulAndAPI
,
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
;
}
}
public
class
CrossDoor
{
/// <summary>
/// 当前位置
/// </summary>
public
Node
CurNode
{
get
;
set
;
}
/// <summary>
/// 下一位置
/// </summary>
public
Node
NextNode
{
get
;
set
;
}
/// <summary>
/// 是否是进入方向
/// </summary>
public
bool
IsIn
{
get
;
set
;
}
=
true
;
/// <summary>
/// 是否是风淋门
/// </summary>
public
bool
IsAir
{
get
;
set
;
}
=
false
;
}
}
}
DeviceLibrary/bean/RunStep.cs
查看文件 @
ab1c3da
...
@@ -34,6 +34,7 @@ namespace DeviceLibrary.bean
...
@@ -34,6 +34,7 @@ namespace DeviceLibrary.bean
#
endregion
#
endregion
#
region
料架返回
电梯到线体
#
region
料架返回
电梯到线体
ShelfBack_LiftToStore_01_ToStandby
,
/// <summary>
/// <summary>
/// 去电梯口
/// 去电梯口
/// </summary>
/// </summary>
...
@@ -58,6 +59,7 @@ namespace DeviceLibrary.bean
...
@@ -58,6 +59,7 @@ namespace DeviceLibrary.bean
/// 关闭电梯门
/// 关闭电梯门
/// </summary>
/// </summary>
ShelfBack_LiftToStore_05_CloseLiftDoor
,
ShelfBack_LiftToStore_05_CloseLiftDoor
,
ShelfBack_LiftToStore_06_CrossDoor
,
/// <summary>
/// <summary>
/// 去库房
/// 去库房
/// </summary>
/// </summary>
...
@@ -66,11 +68,14 @@ namespace DeviceLibrary.bean
...
@@ -66,11 +68,14 @@ namespace DeviceLibrary.bean
/// 放下料车
/// 放下料车
/// </summary>
/// </summary>
ShelfBack_LiftToStore_07_TakeShelfOff
,
ShelfBack_LiftToStore_07_TakeShelfOff
,
ShelfBack_LiftToStore_07_CrossDoor
,
#
endregion
#
endregion
#
region
线体到电梯
#
region
线体到电梯
LineToLift_00_CrossDoor
,
LineToLift_01_ToLine
,
LineToLift_01_ToLine
,
LineToLift_02_PutShelfOn
,
LineToLift_02_PutShelfOn
,
LineToLift_02_CrossDoor
,
LineToLift_ToSteelSrc
,
LineToLift_ToSteelSrc
,
LineToLift_PlaySound
,
LineToLift_PlaySound
,
LineToLift_WaitConfirm
,
LineToLift_WaitConfirm
,
...
@@ -103,6 +108,8 @@ namespace DeviceLibrary.bean
...
@@ -103,6 +108,8 @@ namespace DeviceLibrary.bean
LineToLift_05_10_ToTemp1
,
LineToLift_05_10_ToTemp1
,
LineToLift_05_11_PutTemp1ShelfOn
,
LineToLift_05_11_PutTemp1ShelfOn
,
LineToLift_05_12_ToLift
,
LineToLift_05_12_ToLift
,
LineToLift_05_13_ToShelfPlace
,
LineToLift_05_14_TakeShelfOff
,
#
endregion
#
endregion
#
region
电梯内无料车
#
region
电梯内无料车
...
@@ -114,6 +121,7 @@ namespace DeviceLibrary.bean
...
@@ -114,6 +121,7 @@ namespace DeviceLibrary.bean
#
endregion
#
endregion
#
region
电梯到线体
产品分发
最后空料料架返回
#
region
电梯到线体
产品分发
最后空料料架返回
SD_LiftToLine_00_ToStandby
,
/// <summary>
/// <summary>
/// 去电梯口
/// 去电梯口
/// </summary>
/// </summary>
...
@@ -142,6 +150,8 @@ namespace DeviceLibrary.bean
...
@@ -142,6 +150,8 @@ namespace DeviceLibrary.bean
/// 去线体
/// 去线体
/// </summary>
/// </summary>
SD_LiftToLine_07_ToLine
,
SD_LiftToLine_07_ToLine
,
SD_LiftToLine_07_CrossDoor
,
SD_LiftToLine_07_CrossTwoDoor
,
/// <summary>
/// <summary>
/// 到达线体,上报位置
/// 到达线体,上报位置
/// </summary>
/// </summary>
...
@@ -159,6 +169,8 @@ namespace DeviceLibrary.bean
...
@@ -159,6 +169,8 @@ namespace DeviceLibrary.bean
/// </summary>
/// </summary>
SD_LiftToLine_11_BackToLift
,
SD_LiftToLine_11_BackToLift
,
SD_LiftToLine_11_ToStandby
,
SD_LiftToLine_11_ToStandby
,
SD_LiftToLine_11_CrossTwoDoor
,
SD_LiftToLine_11_CrossTDoor
,
/// <summary>
/// <summary>
/// 等待电梯门开启
/// 等待电梯门开启
/// </summary>
/// </summary>
...
@@ -194,6 +206,8 @@ namespace DeviceLibrary.bean
...
@@ -194,6 +206,8 @@ namespace DeviceLibrary.bean
/// 料车无需返回,直接结束
/// 料车无需返回,直接结束
/// </summary>
/// </summary>
SD_LiftToLine_16_TakeShelfOff
,
SD_LiftToLine_16_TakeShelfOff
,
SD_LiftToLine_16_CrossTwoDoor
,
SD_LiftToLine_16_CrossTDoor
,
SD_LiftToLine_17_Dock
,
SD_LiftToLine_17_Dock
,
SD_LiftToLine_18_CheckState
,
SD_LiftToLine_18_CheckState
,
SD_LiftToLine_19_TakeOff
,
SD_LiftToLine_19_TakeOff
,
...
@@ -363,6 +377,7 @@ namespace DeviceLibrary.bean
...
@@ -363,6 +377,7 @@ namespace DeviceLibrary.bean
#
endregion
#
endregion
#
region
1F
成品空料架从
D2
到
C1
#
region
1F
成品空料架从
D2
到
C1
S1F_LiftD2ToLiftC1_00_ToStandby
,
/// <summary>
/// <summary>
/// 去电梯口
/// 去电梯口
/// </summary>
/// </summary>
...
@@ -387,6 +402,7 @@ namespace DeviceLibrary.bean
...
@@ -387,6 +402,7 @@ namespace DeviceLibrary.bean
/// 关闭电梯门
/// 关闭电梯门
/// </summary>
/// </summary>
S1F_LiftD2ToLiftC1_06_CloseLiftDoor
,
S1F_LiftD2ToLiftC1_06_CloseLiftDoor
,
S1F_LiftD2ToLiftC1_07_ToStandby
,
S1F_LiftD2ToLiftC1_07_ToLiftC1
,
S1F_LiftD2ToLiftC1_07_ToLiftC1
,
S1F_LiftD2ToLiftC1_08_CheckC1Status
,
S1F_LiftD2ToLiftC1_08_CheckC1Status
,
...
@@ -412,6 +428,7 @@ namespace DeviceLibrary.bean
...
@@ -412,6 +428,7 @@ namespace DeviceLibrary.bean
S1F_LiftD2ToLiftC1_19_03_ToTemp1
,
S1F_LiftD2ToLiftC1_19_03_ToTemp1
,
S1F_LiftD2ToLiftC1_19_04_PutTemp1ShelfOn
,
S1F_LiftD2ToLiftC1_19_04_PutTemp1ShelfOn
,
S1F_LiftD2ToLiftC1_19_05_ToLift
,
S1F_LiftD2ToLiftC1_19_05_ToLift
,
S1F_LiftD2ToLiftC1_19_05_ToStandby
,
#
endregion
#
endregion
#
region
空成品料车
#
region
空成品料车
...
@@ -434,6 +451,10 @@ namespace DeviceLibrary.bean
...
@@ -434,6 +451,10 @@ namespace DeviceLibrary.bean
#
endregion
#
endregion
#
region
1F
成品入库从
C1
到
D2
#
region
1F
成品入库从
C1
到
D2
S1F_LiftC1ToLiftD2_Buff
,
S1F_LiftC1ToLiftD2_ToLine
,
S1F_LiftC1ToLiftD2_PutShelf
,
S1F_LiftC1ToLiftD2_00_ToStandby
,
/// <summary>
/// <summary>
/// 去电梯口
/// 去电梯口
/// </summary>
/// </summary>
...
@@ -459,6 +480,7 @@ namespace DeviceLibrary.bean
...
@@ -459,6 +480,7 @@ namespace DeviceLibrary.bean
/// </summary>
/// </summary>
S1F_LiftC1ToLiftD2_06_CloseLiftDoor
,
S1F_LiftC1ToLiftD2_06_CloseLiftDoor
,
S1F_LiftC1ToLiftD2_07_ToLiftD2
,
S1F_LiftC1ToLiftD2_07_ToLiftD2
,
S1F_LiftC1ToLiftD2_ToStandby
,
S1F_LiftC1ToLiftD2_08_CheckD2Status
,
S1F_LiftC1ToLiftD2_08_CheckD2Status
,
#
region
电梯内无料车
#
region
电梯内无料车
...
@@ -467,9 +489,9 @@ namespace DeviceLibrary.bean
...
@@ -467,9 +489,9 @@ namespace DeviceLibrary.bean
S1F_LiftC1ToLiftD2_11_LeaveLift
,
S1F_LiftC1ToLiftD2_11_LeaveLift
,
#
endregion
#
endregion
#
region
电梯内有料车
#
region
电梯内有料车
S1F_LiftC1ToLiftD2_12_ToTemp1
,
S1F_LiftC1ToLiftD2_12_ToStandby
,
S1F_LiftC1ToLiftD2_12_ToStandby
,
S1F_LiftC1ToLiftD2_13_TakeShelfOffAtTemp1
,
S1F_LiftC1ToLiftD2_13_ToShelfBuff
,
S1F_LiftC1ToLiftD2_14_TakeShelfOff
,
S1F_LiftC1ToLiftD2_14_ToLift
,
S1F_LiftC1ToLiftD2_14_ToLift
,
S1F_LiftC1ToLiftD2_15_EnterLift
,
S1F_LiftC1ToLiftD2_15_EnterLift
,
S1F_LiftC1ToLiftD2_16_PutShelfOn
,
S1F_LiftC1ToLiftD2_16_PutShelfOn
,
...
@@ -504,6 +526,96 @@ namespace DeviceLibrary.bean
...
@@ -504,6 +526,96 @@ namespace DeviceLibrary.bean
#
endregion
#
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>
/// 结束
/// 结束
/// </summary>
/// </summary>
...
...
DeviceLibrary/bean/job/ChargeJob.cs
查看文件 @
ab1c3da
...
@@ -24,17 +24,17 @@ namespace DeviceLibrary
...
@@ -24,17 +24,17 @@ namespace DeviceLibrary
/// <param name="agv"></param>
/// <param name="agv"></param>
public
override
Job
Run
(
AgvInfo
agv
)
public
override
Job
Run
(
AgvInfo
agv
)
{
{
agv
.
SetJobContext
(
new
bean
.
agv
.
JobContext
()
//
agv.SetJobContext(new bean.agv.JobContext()
{
//
{
AgvTask
=
agv
.
TaskRunState
.
Task
,
//
AgvTask = agv.TaskRunState.Task,
JobFullName
=
this
.
ToString
(),
//
JobFullName = this.ToString(),
JobStep
=
JobRunStep
.
PreStep
(),
//
JobStep = JobRunStep.PreStep(),
Name
=
agv
.
Name
,
//
Name = agv.Name,
JobParam
=
JobParam
//
JobParam = JobParam
})
;
//
}) ;
if
(
JobRunStep
.
IsStep
(
RunStep
.
NONE
))
if
(
JobRunStep
.
IsStep
(
RunStep
.
NONE
))
{
{
ClearLiftNodeOccupied
(
agv
);
if
(!
ChargePileManager
.
HasEmpty
(
agv
,
out
ChargePile
charge
))
if
(!
ChargePileManager
.
HasEmpty
(
agv
,
out
ChargePile
charge
))
{
{
runInfo
=
$
"无空闲充电桩,从"
+
JobParam
.
SrcNode
+
"回到待机位"
;
runInfo
=
$
"无空闲充电桩,从"
+
JobParam
.
SrcNode
+
"回到待机位"
;
...
...
DeviceLibrary/bean/job/CrossDoorJob.cs
0 → 100644
查看文件 @
ab1c3da
using
Common
;
using
DeviceLibrary.bean
;
using
DeviceLibrary.manager
;
using
System.Text
;
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
)
{
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
.
CrossDoor_01_ToCurDoor
);
runInfo
=
$
"去{JobParam.CrossDoor.CurNode.AliceName}侧门前"
;
JobRunStep
.
Msg
=
runInfo
;
tocurDoor
(
agv
);
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
CrossDoor_01_ToCurDoor
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
CrossDoor_02_OpenCurDoor
);
runInfo
=
$
"到达{JobParam.CrossDoor.CurNode.AliceName}侧门前,开门"
;
JobRunStep
.
Msg
=
runInfo
;
openCurDoor
(
agv
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
CrossDoor_02_OpenCurDoor
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
CrossDoor_03_Enter
);
runInfo
=
$
"从{JobParam.CrossDoor.CurNode.AliceName}侧进门"
;
JobRunStep
.
Msg
=
runInfo
;
enterDoor
(
agv
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
CrossDoor_03_Enter
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
CrossDoor_04_CloseCurDoor
);
runInfo
=
$
"关闭{JobParam.CrossDoor.CurNode.AliceName}侧的门"
;
JobRunStep
.
Msg
=
runInfo
;
closeCurDoor
(
agv
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
CrossDoor_04_CloseCurDoor
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
CrossDoor_05_OpenAntherDoor
);
runInfo
=
$
"打开{JobParam.CrossDoor.NextNode.AliceName}侧门"
;
JobRunStep
.
Msg
=
runInfo
;
openNextDoor
(
agv
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
CrossDoor_05_OpenAntherDoor
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
CrossDoor_06_LeaveDoor
);
runInfo
=
$
"离开门,进入{JobParam.CrossDoor.NextNode.AliceName}侧"
;
JobRunStep
.
Msg
=
runInfo
;
leaveDoor
(
agv
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
CrossDoor_06_LeaveDoor
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
CrossDoor_07_CloseAntherDoor
);
runInfo
=
$
"关闭{JobParam.CrossDoor.NextNode.AliceName}侧门"
;
JobRunStep
.
Msg
=
runInfo
;
closeNextDoor
(
agv
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
CrossDoor_07_CloseAntherDoor
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
CrossDoor_08_Finish
);
runInfo
=
$
"到达{JobParam.CrossDoor.NextNode.AliceName}的车间"
;
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
CrossDoor_08_Finish
))
{
job
=
GetCallBackJob
();
job
.
JobRunStep
.
ToNextStep
(
GetCallBackStep
());
JobRunStep
.
Msg
=
$
"从{JobParam.CrossDoor.CurNode.AliceName}-》{JobParam.CrossDoor.NextNode.AliceName}完成"
;
}
return
job
;
}
//默认 4D->4C
//4C外-》4C风淋门内
//3D风淋门外-》3D风淋门内
/// <summary>
/// 获取任务名
/// </summary>
/// <returns></returns>
string
getTaskName
(
string
name
)
{
StringBuilder
sb
=
new
StringBuilder
();
if
(
JobParam
.
CrossDoor
?.
IsAir
??
false
)
sb
.
Append
(
SettingString
.
CrossAirDoor
);
else
{
sb
.
Append
(
SettingString
.
CrossDoor
);
}
sb
.
Append
(
"_"
);
if
(
JobParam
.
CrossDoor
?.
IsIn
??
true
)
sb
.
Append
(
SettingString
.
In
);
else
sb
.
Append
(
SettingString
.
Out
);
sb
.
Append
(
"_"
);
sb
.
Append
(
name
);
return
sb
.
ToString
();
}
/// <summary>
/// 去当前车间门前
/// </summary>
void
tocurDoor
(
AgvInfo
agv
)
{
AllocateTask
(
agv
,
getTaskName
(
SettingString
.
ToDoor
));
}
/// <summary>
/// 开当前门
/// </summary>
void
openCurDoor
(
AgvInfo
agv
)
{
AllocateTask
(
agv
,
getTaskName
(
SettingString
.
OpenDoor
));
}
/// <summary>
/// 进入门里
/// </summary>
void
enterDoor
(
AgvInfo
agv
)
{
AllocateTask
(
agv
,
getTaskName
(
SettingString
.
EnterDoor
));
}
/// <summary>
/// 关闭当前门
/// </summary>
void
closeCurDoor
(
AgvInfo
agv
)
{
AllocateTask
(
agv
,
getTaskName
(
SettingString
.
CloseDoor
));
}
/// <summary>
/// 开另一个门
/// </summary>
void
openNextDoor
(
AgvInfo
agv
)
{
AllocateTask
(
agv
,
getTaskName
(
SettingString
.
OpenOtherDoor
));
}
/// <summary>
/// 离开门
/// </summary>
void
leaveDoor
(
AgvInfo
agv
)
{
AllocateTask
(
agv
,
getTaskName
(
SettingString
.
LeaveDoor
));
}
/// <summary>
/// 关闭另一个门
/// </summary>
void
closeNextDoor
(
AgvInfo
agv
)
{
AllocateTask
(
agv
,
getTaskName
(
SettingString
.
CloseOtherDoor
));
}
}
}
DeviceLibrary/bean/job/F1LiftC1ToLiftD2Job.cs
查看文件 @
ab1c3da
using
Common
;
using
Common
;
using
DeviceLibrary.lift
;
using
DeviceLibrary.lift
;
using
DeviceLibrary.manager
;
using
DeviceLibrary.manager
;
using
DeviceLibrary.service.model
;
using
System.Runtime.InteropServices
;
using
System.Security.Cryptography.X509Certificates
;
using
System.Security.Cryptography.X509Certificates
;
using
System.Threading
;
using
System.Threading
;
...
@@ -21,24 +23,89 @@ namespace DeviceLibrary.bean.job
...
@@ -21,24 +23,89 @@ namespace DeviceLibrary.bean.job
{
{
}
}
lift
.
LiftStatus
liftStatus
;
public
override
Job
Run
(
AgvInfo
agv
)
public
override
Job
Run
(
AgvInfo
agv
)
{
{
agv
.
SetJobContext
(
new
bean
.
agv
.
JobContext
()
Job
job
=
this
;
agv
.
SetJobContext
(
new
agv
.
JobContext
()
{
{
MissionId
=
JobParam
.
GetMissionInfo
().
missionId
,
MissionId
=
JobParam
.
GetMissionInfo
().
missionId
,
AgvTask
=
agv
.
TaskRunState
.
Task
,
AgvTask
=
agv
.
TaskRunState
.
Task
,
JobFullName
=
this
.
ToString
(),
JobFullName
=
ToString
(),
JobStep
=
JobRunStep
.
PreStep
(),
JobStep
=
JobRunStep
.
PreStep
(),
Name
=
agv
.
Name
,
Name
=
agv
.
Name
,
JobParam
=
JobParam
JobParam
=
JobParam
});
});
if
(
JobRunStep
.
IsStep
(
RunStep
.
NONE
))
if
(
JobRunStep
.
IsStep
(
RunStep
.
NONE
))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_01_ToLiftC1
);
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Name
))
runInfo
=
$
"任务开始:去{JobParam.SrcNode.AliceName}"
;
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_00_ToStandby
);
runInfo
=
$
"已有小车在{JobParam.SrcNode.AliceName},先去待机点"
;
JobRunStep
.
Msg
=
runInfo
;
ToStandby
(
agv
);
}
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_Buff
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_ToLine
);
runInfo
=
$
"去{JobParam.SrcNode.AliceName}的取料点"
;
ToPutShelfOn
(
agv
,
$
"{JobParam.SrcNode.Name}"
);
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{JobParam.SrcNode.Name}"
);
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_ToLine
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_PutShelf
);
runInfo
=
$
"到达{JobParam.SrcNode.AliceName}的取料点,开始拾取料车"
;
JobRunStep
.
Msg
=
runInfo
;
PutShelfOn
(
agv
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_PutShelf
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
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.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_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
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_01_ToLiftC1
))
{
{
...
@@ -46,7 +113,7 @@ namespace DeviceLibrary.bean.job
...
@@ -46,7 +113,7 @@ namespace DeviceLibrary.bean.job
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_02_WaitDoorOpen
);
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
,
service
.
model
.
TransportStatus
.
TypeStr
.
status
,
agv
.
Name
,
agv
.
Place
.
Name
,
service
.
model
.
TransportStatus
.
ModeStr
.
auto
,
$
"到达{JobParam.SrcNode.Name}"
));
$
"到达{JobParam.SrcNode.Name}"
));
//lift.LiftContext.Request(JobParam.GetMissionInfo(), agv, false, false);
//lift.LiftContext.Request(JobParam.GetMissionInfo(), agv, false, false);
...
@@ -56,20 +123,20 @@ namespace DeviceLibrary.bean.job
...
@@ -56,20 +123,20 @@ namespace DeviceLibrary.bean.job
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_02_WaitDoorOpen
))
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
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_03_EnterLift
);
runInfo
=
$
"{JobParam.SrcNode.AliceName}门已开启,去取料点"
;
runInfo
=
$
"{JobParam.SrcNode.AliceName}门已开启,去取料点"
;
//任务状态变更
//任务状态变更
SetLiftOccupied
(
JobParam
.
SrcNode
.
Name
,
agv
);
SetLiftOccupied
(
JobParam
.
SrcNode
.
Name
,
agv
);
AllocateTask
(
agv
,
$
"{JobParam.SrcNode.Name}_{SettingString.PutShelfOn
}"
);
ToPutShelfOn
(
agv
,
$
"{JobParam.SrcNode.Name
}"
);
JobRunStep
.
Msg
=
runInfo
;
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
);
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
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_03_EnterLift
))
...
@@ -90,12 +157,12 @@ namespace DeviceLibrary.bean.job
...
@@ -90,12 +157,12 @@ namespace DeviceLibrary.bean.job
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_05_LeaveLift
);
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
,
service
.
model
.
TransportStatus
.
TypeStr
.
status
,
agv
.
Name
,
agv
.
Place
.
Name
,
service
.
model
.
TransportStatus
.
ModeStr
.
auto
,
$
"电梯取车"
));
$
"电梯取车"
));
runInfo
=
$
"在{JobParam.SrcNode.AliceName}取料车完成,准备离开"
;
runInfo
=
$
"在{JobParam.SrcNode.AliceName}取料车完成,准备离开"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{SettingString.Leave}_{JobParam.SrcNode.Name}"
);
LeaveLift
(
agv
,
JobParam
.
SrcNode
.
Name
);
}
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_05_LeaveLift
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_05_LeaveLift
))
...
@@ -104,19 +171,48 @@ namespace DeviceLibrary.bean.job
...
@@ -104,19 +171,48 @@ namespace DeviceLibrary.bean.job
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_06_CloseLiftDoor
);
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}"
;
runInfo
=
$
"离开{JobParam.SrcNode.AliceName},关闭电梯门:{rtn}"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
ClearLiftNodeOccupied
(
agv
);
}
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_06_CloseLiftDoor
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_06_CloseLiftDoor
))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_07_ToLiftD2
);
if
(
TargetIsOccupied
(
agv
,
JobParam
.
CurTargetNode
.
Name
))
runInfo
=
$
"关闭{JobParam.SrcNode.AliceName}门完成,去{JobParam.CurTargetNode.AliceName}"
;
{
//任务状态变更
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_ToStandby
);
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
送料
,
out
string
msg
);
runInfo
=
$
"已有小车在{JobParam.CurTargetNode.AliceName},先去待机点"
;
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}"
);
JobRunStep
.
Msg
=
runInfo
;
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
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_07_ToLiftD2
))
{
{
...
@@ -124,73 +220,44 @@ namespace DeviceLibrary.bean.job
...
@@ -124,73 +220,44 @@ namespace DeviceLibrary.bean.job
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_08_CheckD2Status
);
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
,
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},请求电梯并等待开门"
;
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName},请求电梯并等待开门"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
//开始请求电梯
//开始请求电梯
lift
.
LiftContext
.
FinishedRequest
(
JobParam
.
GetMissionInfo
(),
agv
);
LiftContext
.
FinishedRequest
(
JobParam
.
GetMissionInfo
(),
agv
);
}
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_08_CheckD2Status
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_08_CheckD2Status
))
{
{
if
(
LiftContext
.
CheckHasEmptyFinished
(
agv
,
JobParam
.
CurTargetNode
.
Name
,
out
liftStatus
))
if
(
LiftContext
.
CheckHasEmptyFinished
(
agv
,
JobParam
.
CurTargetNode
.
Name
,
out
JobParam
.
LiftStatus
))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_12_ToTemp1
);
MissionInfo
missionInfo
=
MissionManager
.
GetMission
(
JobParam
.
LiftStatus
?.
missionId
??
""
);
SetLiftOccupied
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
if
(
missionInfo
!=
null
)
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
))
{
{
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
liftStatus
.
missionId
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_13_ToShelfBuff
);
if
(
IsBackShelf
(
missionInfo
))
SetLiftOccupied
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
{
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门,内有成品空料车{JobParam?.LiftStatus?.missionId},去料架缓存点"
;
//
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_12_ToTemp1
);
ToTakeShelfOff
(
agv
,
SettingString
.
ShelfBuff
);
// SetLiftOccupied(JobParam.CurTargetNode.Name, agv);
JobRunStep
.
Msg
=
runInfo
;
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门。电梯内有料车,去临时点1的卸料点,准备卸下车上料车"
;
//
}
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}_{SettingString.Temp1}_{SettingString.TakeShelfOff}"
);
else
{
if
(
missionInfo
!=
null
)
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_12_ToStandby
);
{
//设置电梯占用
//任务状态变更
//SetLiftOccupied(JobParam.CurTargetNode.Name, agv);
MissionManager
.
SetMissionState
(
missionInfo
.
missionId
,
service
.
model
.
MissionState
.
返回电梯到达
,
out
string
msg
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门,内有成品空料车但无工单信息,去待机点,需要手动清空电梯缓存并关闭电梯门"
;
//
}
ToStandby
(
agv
);
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
}
}
else
}
{
else
if
(
LiftContext
.
IsDoorOpen
(
JobParam
.
CurTargetNode
.
Name
,
JobParam
.
GetMissionInfo
().
destinationFloor
))
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_12_ToStandby
);
{
// SetLiftOccupied(JobParam.CurTargetNode.Name, agv);
if
(
LiftContext
.
HasShelfNeedLeaveFinished
(
JobParam
.
CurTargetNode
.
Name
,
agv
.
Client
,
out
JobParam
.
LiftStatus
))
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门。电梯内有送料的料车,去待机点等待电梯空闲"
;
//
{
AllocateStandbyTask
(
agv
);
MissionManager
.
SetMissionOccupied
(
JobParam
.
GetMissionInfo
().
missionId
,
agv
);
JobRunStep
.
Msg
=
runInfo
;
job
=
new
SwitchShelfJob
(
JobParam
);
}
}
}
else
//if (!TargetIsOccupied(agv, JobParam.CurTargetNode.Name))
else
//if (!TargetIsOccupied(agv, JobParam.CurTargetNode.Name))
{
{
...
@@ -198,14 +265,14 @@ namespace DeviceLibrary.bean.job
...
@@ -198,14 +265,14 @@ namespace DeviceLibrary.bean.job
SetLiftOccupied
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
SetLiftOccupied
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门,到放料点"
;
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门,到放料点"
;
JobRunStep
.
Msg
=
runInfo
;
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
()))
else
if
(
JobRunStep
.
IsTimeOut
(
20
)
&&
!
LiftContext
.
CheckIfRequestOk
(
JobParam
.
CurTargetNode
.
Name
,
JobParam
.
GetMissionInfo
()))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_08_CheckD2Status
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_08_CheckD2Status
);
//请求电梯
//请求电梯
lift
.
LiftContext
.
FinishedRequest
(
JobParam
.
GetMissionInfo
(),
agv
);
LiftContext
.
FinishedRequest
(
JobParam
.
GetMissionInfo
(),
agv
);
}
}
}
}
#
region
电梯内无料车
#
region
电梯内无料车
...
@@ -226,13 +293,12 @@ namespace DeviceLibrary.bean.job
...
@@ -226,13 +293,12 @@ namespace DeviceLibrary.bean.job
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_11_LeaveLift
);
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
,
service
.
model
.
TransportStatus
.
TypeStr
.
status
,
agv
.
Name
,
agv
.
Place
.
Name
,
service
.
model
.
TransportStatus
.
ModeStr
.
auto
,
$
"电梯卸车"
));
$
"电梯卸车"
));
runInfo
=
$
"料车在{JobParam.CurTargetNode.AliceName}卸下完成,准备离开"
;
runInfo
=
$
"料车在{JobParam.CurTargetNode.AliceName}卸下完成,准备离开"
;
LeaveLift
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
AllocateTask
(
agv
,
$
"{SettingString.Leave}_{JobParam.CurTargetNode.Name}"
);
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
}
}
}
}
...
@@ -242,162 +308,97 @@ namespace DeviceLibrary.bean.job
...
@@ -242,162 +308,97 @@ namespace DeviceLibrary.bean.job
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
END
);
JobRunStep
.
ToNextStep
(
RunStep
.
END
);
//发送该料是成品
//发送该料是成品
bool
rtn1
=
lift
.
LiftContext
.
FinishedProduct
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
bool
rtn1
=
LiftContext
.
FinishedProduct
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
Thread
.
Sleep
(
5000
);
Thread
.
Sleep
(
5000
);
//AGV离开
//AGV离开
bool
rtn
=
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
,
false
);
bool
rtn
=
LiftContext
.
AGVLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
,
false
);
Thread
.
Sleep
(
2000
);
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}"
;
runInfo
=
$
"任务结束:离开{JobParam.CurTargetNode.AliceName}完成并发送离开信号和送成品信号:{rtn},{rtn1},{rtn2}"
;
//任务状态变更
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
等待成品回收
,
out
string
msg
);
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
等待成品回收
,
out
string
msg
);
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
ClearLiftNodeOccupied
(
agv
);
}
}
}
}
#
endregion
#
endregion
#
region
电梯内有料车
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_12_ToStandby
))
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
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_07_ToLiftD2
);
runInfo
=
$
"在{JobParam.CurTargetNode.AliceName}临时点1请求电梯"
;
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
;
JobRunStep
.
Msg
=
runInfo
;
//请求电梯
lift
.
LiftContext
.
FinishedRequest
(
JobParam
.
GetMissionInfo
(),
agv
);
System
.
Threading
.
Thread
.
Sleep
(
2000
);
}
}
}
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_12_ToTemp1
))
#
region
电梯内有料车
{
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);
//}
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_13_TakeShelfOffAtTemp1
);
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_13_ToShelfBuff
))
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
))
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_15_EnterLift
);
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName},去取料点"
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}_{SettingString.PutShelfOn}"
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_15_EnterLift
))
{
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_1
6_PutShelfOn
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_1
4_TakeShelfOff
);
runInfo
=
$
"到达
{JobParam.CurTargetNode.AliceName}的取料点,准备拾取料车
"
;
runInfo
=
$
"到达
料架缓存点,将车上料车卸下
"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
if
(
liftStatus
.
HasEmptyFinishedShelf
)
TakeShelfOff
(
agv
);
{
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_1
6_PutShelfOn
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_1
4_TakeShelfOff
))
{
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_17_LeaveLift
);
//设置任务状态为料架换缓存
runInfo
=
$
"拾取{JobParam.CurTargetNode.AliceName}的料车完成,准备离开电梯"
;
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
料架缓存
,
out
string
msg
);
JobRunStep
.
Msg
=
runInfo
;
ResetMissionOccupiedAgv
(
JobParam
.
GetMissionInfo
());
AllocateTask
(
agv
,
$
"{SettingString.Leave}_{JobParam.CurTargetNode.Name}"
);
//执行取空成品任务
}
Node
src
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
LIFT_D2
,
NodeType
.
Lift
);
}
Node
dest
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
LIFT_C1
,
NodeType
.
Lift
);
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_17_LeaveLift
))
MissionInfo
missionInfo
=
MissionManager
.
GetMission
(
JobParam
.
LiftStatus
?.
missionId
);
{
if
(
missionInfo
!=
null
)
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
if
(
liftStatus
.
HasEmptyFinishedShelf
)
//电梯里的是成品回收料
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_20_01_ToTemp2
);
JobParam
jobParam
=
new
JobParam
(
src
,
dest
,
null
,
missionInfo
);
runInfo
=
$
"离开{JobParam.CurTargetNode.AliceName}完成,去临时点2的放料点"
;
MissionManager
.
SetMissionOccupied
(
missionInfo
,
agv
);
//service.model.MissionInfo missionInfo = manager.MissionManager.GetMission(liftStatus.missionId);
job
=
new
F1LiftD2ToLiftC1Job
(
jobParam
);
//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
;
}
}
else
else
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_18_CloseDoor
);
JobRunStep
.
ToNextStep
(
RunStep
.
END
);
//AGV离开
runInfo
=
$
"未搜索到电梯内的料车任务信息【{JobParam.LiftStatus?.missionId ?? ""}】,结束任务"
;
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
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
}
}
}
}
}
}
#
region
送往库房的料车
#
region
送往库房的料车
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_18_CloseDoor
))
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
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_19_01_ToStore
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}关门完成,将料车送到{
l
iftStatus.destinationPoint}的放料点"
;
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}关门完成,将料车送到{
JobParam.L
iftStatus.destinationPoint}的放料点"
;
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
l
iftStatus
.
missionId
);
service
.
model
.
MissionInfo
missionInfo
=
MissionManager
.
GetMission
(
JobParam
.
L
iftStatus
.
missionId
);
if
(
missionInfo
!=
null
)
if
(
missionInfo
!=
null
)
{
{
//任务状态变更
//任务状态变更
MissionManager
.
SetMissionState
(
missionInfo
.
missionId
,
service
.
model
.
MissionState
.
返回起始地
,
out
string
msg
);
MissionManager
.
SetMissionState
(
missionInfo
.
missionId
,
service
.
model
.
MissionState
.
返回起始地
,
out
string
msg
);
}
}
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{liftStatus.destinationPoint}_{SettingString.TakeShelfOff
}"
);
ToTakeShelfOff
(
agv
,
$
"{JobParam.LiftStatus.destinationPoint
}"
);
}
}
else
if
(
JobRunStep
.
IsTimeOut
(
0.5
,
out
double
val
))
else
if
(
JobRunStep
.
IsTimeOut
(
0.5
,
out
double
val
))
{
{
//AGV离开
//AGV离开
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
,
false
);
LiftContext
.
AGVLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
,
false
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}离开信号超时重发"
;
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}离开信号超时重发"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
System
.
Threading
.
Thread
.
Sleep
(
3000
);
Thread
.
Sleep
(
3000
);
}
}
}
}
...
@@ -407,9 +408,9 @@ namespace DeviceLibrary.bean.job
...
@@ -407,9 +408,9 @@ namespace DeviceLibrary.bean.job
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_19_02_TakeShelfOff
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_19_02_TakeShelfOff
);
runInfo
=
$
"到达{
l
iftStatus.destinationPoint}的放料点,准备卸下"
;
runInfo
=
$
"到达{
JobParam.L
iftStatus.destinationPoint}的放料点,准备卸下"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{SettingString.TakeShelfOff}"
);
TakeShelfOff
(
agv
);
}
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_19_02_TakeShelfOff
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_19_02_TakeShelfOff
))
...
@@ -417,15 +418,15 @@ namespace DeviceLibrary.bean.job
...
@@ -417,15 +418,15 @@ namespace DeviceLibrary.bean.job
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_19_03_ToTemp1
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_19_03_ToTemp1
);
runInfo
=
$
"料车在{
l
iftStatus.destinationPoint}卸下完成, 返回{JobParam.CurTargetNode.AliceName}的临时点1的取料点"
;
runInfo
=
$
"料车在{
JobParam.L
iftStatus.destinationPoint}卸下完成, 返回{JobParam.CurTargetNode.AliceName}的临时点1的取料点"
;
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
l
iftStatus
.
missionId
);
service
.
model
.
MissionInfo
missionInfo
=
MissionManager
.
GetMission
(
JobParam
.
L
iftStatus
.
missionId
);
if
(
missionInfo
!=
null
)
if
(
missionInfo
!=
null
)
{
{
//任务状态变更
//任务状态变更
MissionManager
.
SetMissionState
(
missionInfo
.
missionId
,
service
.
model
.
MissionState
.
完成
,
out
string
msg
);
MissionManager
.
SetMissionState
(
missionInfo
.
missionId
,
service
.
model
.
MissionState
.
完成
,
out
string
msg
);
}
}
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}_{SettingString.Temp1}_{SettingString.PutShelfOn
}"
);
ToTmp1PutOn
(
agv
,
$
"{JobParam.CurTargetNode.Name
}"
);
}
}
}
}
...
@@ -447,7 +448,8 @@ namespace DeviceLibrary.bean.job
...
@@ -447,7 +448,8 @@ namespace DeviceLibrary.bean.job
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_19_05_ToLift
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_19_05_ToLift
);
runInfo
=
$
"拾取料架完成,去{JobParam.CurTargetNode.AliceName}"
;
runInfo
=
$
"拾取料架完成,去{JobParam.CurTargetNode.AliceName}"
;
JobRunStep
.
Msg
=
runInfo
;
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
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_19_05_ToLift
))
...
@@ -458,8 +460,8 @@ namespace DeviceLibrary.bean.job
...
@@ -458,8 +460,8 @@ namespace DeviceLibrary.bean.job
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName},请求电梯"
;
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName},请求电梯"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
//请求电梯
//请求电梯
lift
.
LiftContext
.
Request
(
JobParam
.
GetMissionInfo
(),
agv
,
false
,
true
);
LiftContext
.
Request
(
JobParam
.
GetMissionInfo
(),
agv
,
false
,
true
);
System
.
Threading
.
Thread
.
Sleep
(
2000
);
Thread
.
Sleep
(
2000
);
}
}
}
}
#
endregion
#
endregion
...
@@ -474,7 +476,7 @@ namespace DeviceLibrary.bean.job
...
@@ -474,7 +476,7 @@ namespace DeviceLibrary.bean.job
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_20_02_TakeShelfOff
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_20_02_TakeShelfOff
);
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName}临时点2的放料点,准备放下料车"
;
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName}临时点2的放料点,准备放下料车"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{SettingString.TakeShelfOff}"
);
TakeShelfOff
(
agv
);
}
}
}
}
...
@@ -482,10 +484,10 @@ namespace DeviceLibrary.bean.job
...
@@ -482,10 +484,10 @@ namespace DeviceLibrary.bean.job
{
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
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的取料点"
;
runInfo
=
$
"在{JobParam.CurTargetNode.AliceName}临时点2放下料车完成,去临时点1的取料点"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}_{SettingString.Temp1}_{SettingString.PutShelfOn
}"
);
ToTmp1PutOn
(
agv
,
$
"{JobParam.CurTargetNode.Name
}"
);
}
}
}
}
...
@@ -493,7 +495,7 @@ namespace DeviceLibrary.bean.job
...
@@ -493,7 +495,7 @@ namespace DeviceLibrary.bean.job
{
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
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的取料点,准备取料"
;
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName}临时点1的取料点,准备取料"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
//AllocateTask(agv, $"{SettingString.PutShelfOn}");
//AllocateTask(agv, $"{SettingString.PutShelfOn}");
...
@@ -508,7 +510,7 @@ namespace DeviceLibrary.bean.job
...
@@ -508,7 +510,7 @@ namespace DeviceLibrary.bean.job
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_20_05_ToLiftC1
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_20_05_ToLiftC1
);
runInfo
=
$
"在{JobParam.CurTargetNode.AliceName}临时点1取料完成,去电梯"
;
runInfo
=
$
"在{JobParam.CurTargetNode.AliceName}临时点1取料完成,去电梯"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}"
);
ToLift
(
agv
,
$
"{JobParam.CurTargetNode.Name}"
);
}
}
}
}
...
@@ -519,7 +521,7 @@ namespace DeviceLibrary.bean.job
...
@@ -519,7 +521,7 @@ namespace DeviceLibrary.bean.job
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_20_06_EnterLiftC1
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_20_06_EnterLiftC1
);
runInfo
=
$
"进入{JobParam.CurTargetNode.AliceName}的放料点"
;
runInfo
=
$
"进入{JobParam.CurTargetNode.AliceName}的放料点"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}_{SettingString.TakeShelfOff
}"
);
ToTakeShelfOff
(
agv
,
$
"{JobParam.CurTargetNode.Name
}"
);
}
}
}
}
...
@@ -531,7 +533,7 @@ namespace DeviceLibrary.bean.job
...
@@ -531,7 +533,7 @@ namespace DeviceLibrary.bean.job
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName}的放料点,准备放下料架"
;
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName}的放料点,准备放下料架"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
//AllocateTask(agv, $"{SettingString.TakeShelfOff}");
//AllocateTask(agv, $"{SettingString.TakeShelfOff}");
TakeYiYuanLiftShelfOff
(
agv
,
SettingString
.
TakeShelfOff
);
TakeYiYuanLiftShelfOff
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
}
}
}
}
...
@@ -542,7 +544,8 @@ namespace DeviceLibrary.bean.job
...
@@ -542,7 +544,8 @@ namespace DeviceLibrary.bean.job
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_20_08_LeaveLiftC1
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_20_08_LeaveLiftC1
);
runInfo
=
$
"在{JobParam.CurTargetNode.AliceName}放下料架完成,准备离开"
;
runInfo
=
$
"在{JobParam.CurTargetNode.AliceName}放下料架完成,准备离开"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{SettingString.Leave}_{JobParam.CurTargetNode.Name}"
);
//AllocateTask(agv, $"{SettingString.Leave}_{JobParam.CurTargetNode.Name}");
LeaveLift
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
}
}
}
}
...
@@ -551,39 +554,44 @@ namespace DeviceLibrary.bean.job
...
@@ -551,39 +554,44 @@ namespace DeviceLibrary.bean.job
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_20_09_CloseDoor
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_20_09_CloseDoor
);
LiftContext
.
FinishedProduct
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
Thread
.
Sleep
(
2000
);
//AGV离开
//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}"
;
runInfo
=
$
"离开{JobParam.CurTargetNode.AliceName}完成,发送离开信号:{rtn}"
;
//任务状态变更
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
等待成品回收
,
out
string
msg
);
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
等待成品回收
,
out
string
msg
);
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
ResetMissionOccupiedAgv
(
JobParam
.
GetMissionInfo
());
ResetMissionOccupiedAgv
(
JobParam
.
GetMissionInfo
());
ClearLiftNodeOccupied
(
agv
);
}
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_20_09_CloseDoor
))
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
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_20_10_ToTemp2
);
runInfo
=
$
"去{JobParam.CurTargetNode.AliceName}临时点2的取料点"
;
runInfo
=
$
"去{JobParam.CurTargetNode.AliceName}临时点2的取料点"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}_{SettingString.Temp2}_{SettingString.PutShelfOn}"
);
ToTmp2PutOn
(
agv
,
$
"{JobParam.CurTargetNode.Name}"
);
}
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.IsTimeOut(0.5, out double val))
//{
// //AGV离开
// LiftContext.AGVLeave(JobParam.CurTargetNode.Name, agv, false);
// runInfo = $"{JobParam.CurTargetNode.AliceName}离开信号超时重发";
// JobRunStep.Msg = runInfo;
// Thread.Sleep(3000);
//}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_20_10_ToTemp2
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftC1ToLiftD2_20_10_ToTemp2
))
{
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
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的取料点,准备取料架"
;
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName}临时点2的取料点,准备取料架"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
// AllocateTask(agv, $"{SettingString.PutShelfOn}");
// AllocateTask(agv, $"{SettingString.PutShelfOn}");
...
@@ -606,14 +614,14 @@ namespace DeviceLibrary.bean.job
...
@@ -606,14 +614,14 @@ namespace DeviceLibrary.bean.job
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
{
//去C1
//去C1
Node
src
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
LIFT_D2
,
NodeType
.
Lift
);
Node
src
=
NodeManager
.
GetNode
(
SettingString
.
LIFT_D2
,
NodeType
.
Lift
);
Node
dest
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
LIFT_C1
,
NodeType
.
Lift
);
Node
dest
=
NodeManager
.
GetNode
(
SettingString
.
LIFT_C1
,
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
));
F1LiftD2ToLiftC1Job
d2ToLiftC1Job
=
new
F1LiftD2ToLiftC1Job
(
jobParam
);
F1LiftD2ToLiftC1Job
d2ToLiftC1Job
=
new
F1LiftD2ToLiftC1Job
(
jobParam
);
d2ToLiftC1Job
.
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_07_ToLiftC1
);
d2ToLiftC1Job
.
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_07_ToLiftC1
);
runInfo
=
$
"准备去{SettingString.LIFT_C1}送空成品料车"
;
runInfo
=
$
"准备去{SettingString.LIFT_C1}送空成品料车"
;
d2ToLiftC1Job
.
JobRunStep
.
Msg
=
runInfo
;
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
)
if
(
missionInfo
!=
null
)
{
{
//任务状态变更
//任务状态变更
...
@@ -632,7 +640,7 @@ namespace DeviceLibrary.bean.job
...
@@ -632,7 +640,7 @@ namespace DeviceLibrary.bean.job
JobRunStep
.
EndJob
();
JobRunStep
.
EndJob
();
return
null
;
return
null
;
}
}
return
this
;
return
job
;
}
}
}
}
}
}
DeviceLibrary/bean/job/F1LiftD2ToLiftC1Job.cs
查看文件 @
ab1c3da
...
@@ -19,9 +19,9 @@ namespace DeviceLibrary.bean.job
...
@@ -19,9 +19,9 @@ namespace DeviceLibrary.bean.job
{
{
}
}
lift
.
LiftStatus
liftStatus
;
public
override
Job
Run
(
AgvInfo
agv
)
public
override
Job
Run
(
AgvInfo
agv
)
{
{
Job
job
=
this
;
agv
.
SetJobContext
(
new
bean
.
agv
.
JobContext
()
agv
.
SetJobContext
(
new
bean
.
agv
.
JobContext
()
{
{
MissionId
=
JobParam
.
GetMissionInfo
().
missionId
,
MissionId
=
JobParam
.
GetMissionInfo
().
missionId
,
...
@@ -33,10 +33,34 @@ namespace DeviceLibrary.bean.job
...
@@ -33,10 +33,34 @@ namespace DeviceLibrary.bean.job
});
});
if
(
JobRunStep
.
IsStep
(
RunStep
.
NONE
))
if
(
JobRunStep
.
IsStep
(
RunStep
.
NONE
))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_01_ToLiftD2
);
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Name
))
runInfo
=
$
"任务开始:去{JobParam.SrcNode.AliceName}"
;
{
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_00_ToStandby
);
AllocateTask
(
agv
,
$
"{JobParam.SrcNode.Name}"
);
runInfo
=
$
"在{JobParam.SrcNode.AliceName}小车,先去待机点"
;
JobRunStep
.
Msg
=
runInfo
;
ToStandby
(
agv
);
}
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_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
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftD2ToLiftC1_01_ToLiftD2
))
{
{
...
@@ -92,7 +116,8 @@ namespace DeviceLibrary.bean.job
...
@@ -92,7 +116,8 @@ namespace DeviceLibrary.bean.job
$
"电梯取车"
));
$
"电梯取车"
));
runInfo
=
$
"在{JobParam.SrcNode.AliceName}取料车完成,准备离开"
;
runInfo
=
$
"在{JobParam.SrcNode.AliceName}取料车完成,准备离开"
;
JobRunStep
.
Msg
=
runInfo
;
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
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftD2ToLiftC1_05_LeaveLift
))
...
@@ -104,16 +129,43 @@ namespace DeviceLibrary.bean.job
...
@@ -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);
bool
rtn
=
lift
.
LiftContext
.
EmptyFinishedAGVLeave
(
JobParam
.
SrcNode
.
Name
,
agv
);
//lift.LiftContext.AGVLeave(JobParam.SrcNode.Name, agv, false);
runInfo
=
$
"离开{JobParam.SrcNode.AliceName},关闭电梯门:{rtn}"
;
runInfo
=
$
"离开{JobParam.SrcNode.AliceName},关闭电梯门:{rtn}"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
ClearLiftNodeOccupied
(
agv
);
}
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftD2ToLiftC1_06_CloseLiftDoor
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftD2ToLiftC1_06_CloseLiftDoor
))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_07_ToLiftC1
);
if
(
TargetIsOccupied
(
agv
,
JobParam
.
CurTargetNode
.
Name
))
runInfo
=
$
"关闭{JobParam.SrcNode.AliceName}门完成,去{JobParam.CurTargetNode.AliceName}"
;
{
//任务状态变更
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_07_ToStandby
);
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
返回电梯
,
out
string
msg
);
runInfo
=
$
"在{JobParam.CurTargetNode.AliceName}有小车,去待机点"
;
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}"
);
ToStandby
(
agv
);
JobRunStep
.
Msg
=
runInfo
;
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
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftD2ToLiftC1_07_ToLiftC1
))
{
{
...
@@ -134,13 +186,13 @@ namespace DeviceLibrary.bean.job
...
@@ -134,13 +186,13 @@ namespace DeviceLibrary.bean.job
{
{
if
(
lift
.
LiftContext
.
IsDoorOpen
(
JobParam
.
CurTargetNode
.
Name
,
JobParam
.
GetMissionInfo
().
destinationFloor
))
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
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_12_ToTemp1
);
//SetLiftOccupied(JobParam.CurTargetNode.Name, agv);
//SetLiftOccupied(JobParam.CurTargetNode.Name, agv);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门。电梯内有成品料车,去临时点1的卸料点,准备卸下车上料车"
;
//
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门。电梯内有成品料车,去临时点1的卸料点,准备卸下车上料车"
;
//
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}_{SettingString.Temp1}_{SettingString.TakeShelfOff}"
);
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
)
if
(
missionInfo
!=
null
)
{
{
//任务状态变更
//任务状态变更
...
@@ -148,31 +200,33 @@ namespace DeviceLibrary.bean.job
...
@@ -148,31 +200,33 @@ namespace DeviceLibrary.bean.job
}
}
JobRunStep
.
Msg
=
runInfo
;
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
);
MissionManager
.
SetMissionOccupied
(
JobParam
.
GetMissionInfo
().
missionId
,
agv
);
if
(
IsBackShelf
(
missionInfo
))
job
=
new
SwitchShelfJob
(
JobParam
);
{
//service.model.MissionInfo missionInfo = manager.MissionManager.GetMission(liftStatus.missionId);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_12_ToTemp1
);
//if (IsBackShelf(missionInfo))
SetLiftOccupied
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
//{
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门。电梯内有料车,去临时点1的卸料点,准备卸下车上料车"
;
//
// JobRunStep.ToNextStep(RunStep.S1F_LiftD2ToLiftC1_12_ToTemp1);
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}_{SettingString.Temp1}_{SettingString.TakeShelfOff}"
);
// SetLiftOccupied(JobParam.CurTargetNode.Name, agv);
// runInfo = $"{JobParam.CurTargetNode.AliceName}已开门。电梯内有料车,去临时点1的卸料点,准备卸下车上料车";//
// AllocateTask(agv, $"{JobParam.CurTargetNode.Name}_{SettingString.Temp1}_{SettingString.TakeShelfOff}");
if
(
missionInfo
!=
null
)
//
if (missionInfo != null)
{
//
{
//任务状态变更
//
//任务状态变更
MissionManager
.
SetMissionState
(
missionInfo
.
missionId
,
service
.
model
.
MissionState
.
返回电梯到达
,
out
string
msg
);
//
MissionManager.SetMissionState(missionInfo.missionId, service.model.MissionState.返回电梯到达, out string msg);
}
//
}
JobRunStep
.
Msg
=
runInfo
;
//
JobRunStep.Msg = runInfo;
}
//
}
else
//
else
{
//
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_12_ToStandby
);
//
JobRunStep.ToNextStep(RunStep.S1F_LiftD2ToLiftC1_12_ToStandby);
// SetLiftOccupied(JobParam.CurTargetNode.Name, agv);
//
// SetLiftOccupied(JobParam.CurTargetNode.Name, agv);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门。电梯内有送料的料车,去待机点等待电梯空闲"
;
//
//
runInfo = $"{JobParam.CurTargetNode.AliceName}已开门。电梯内有送料的料车,去待机点等待电梯空闲";//
AllocateStandbyTask
(
agv
);
//
AllocateStandbyTask(agv);
JobRunStep
.
Msg
=
runInfo
;
//
JobRunStep.Msg = runInfo;
}
//
}
}
}
else
//if (!TargetIsOccupied(agv, JobParam.CurTargetNode.Name))
else
//if (!TargetIsOccupied(agv, JobParam.CurTargetNode.Name))
{
{
...
@@ -214,7 +268,8 @@ namespace DeviceLibrary.bean.job
...
@@ -214,7 +268,8 @@ namespace DeviceLibrary.bean.job
ResetMissionOccupiedAgv
(
JobParam
.
GetMissionInfo
());
ResetMissionOccupiedAgv
(
JobParam
.
GetMissionInfo
());
//任务状态变更
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
返回到达电梯内
,
out
string
msg
);
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
;
JobRunStep
.
Msg
=
runInfo
;
}
}
}
}
...
@@ -312,11 +367,11 @@ namespace DeviceLibrary.bean.job
...
@@ -312,11 +367,11 @@ namespace DeviceLibrary.bean.job
{
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
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
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_20_01_ToTemp2
);
runInfo
=
$
"离开{JobParam.CurTargetNode.AliceName}完成,去临时点2的放料点"
;
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
)
if
(
missionInfo
!=
null
)
{
{
//任务状态变更
//任务状态变更
...
@@ -328,10 +383,11 @@ namespace DeviceLibrary.bean.job
...
@@ -328,10 +383,11 @@ namespace DeviceLibrary.bean.job
else
else
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_18_CloseDoor
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_18_CloseDoor
);
ClearLiftNodeOccupied
(
agv
);
//AGV离开
//AGV离开
bool
rtn
=
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
,
false
);
bool
rtn
=
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
,
false
);
runInfo
=
$
"离开{JobParam.CurTargetNode.AliceName}完成,发送离开信号:{rtn}"
;
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
)
if
(
missionInfo
!=
null
)
{
{
//任务状态变更
//任务状态变更
...
@@ -349,15 +405,15 @@ namespace DeviceLibrary.bean.job
...
@@ -349,15 +405,15 @@ namespace DeviceLibrary.bean.job
if
(
lift
.
LiftContext
.
CheckAgvLeaveSig
(
JobParam
.
CurTargetNode
.
Name
))
if
(
lift
.
LiftContext
.
CheckAgvLeaveSig
(
JobParam
.
CurTargetNode
.
Name
))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_19_01_ToStore
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_19_01_ToStore
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}关门完成,将料车送到{
l
iftStatus.destinationPoint}的放料点"
;
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}关门完成,将料车送到{
JobParam.L
iftStatus.destinationPoint}的放料点"
;
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
l
iftStatus
.
missionId
);
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
JobParam
.
L
iftStatus
.
missionId
);
if
(
missionInfo
!=
null
)
if
(
missionInfo
!=
null
)
{
{
//任务状态变更
//任务状态变更
MissionManager
.
SetMissionState
(
missionInfo
.
missionId
,
service
.
model
.
MissionState
.
返回起始地
,
out
string
msg
);
MissionManager
.
SetMissionState
(
missionInfo
.
missionId
,
service
.
model
.
MissionState
.
返回起始地
,
out
string
msg
);
}
}
JobRunStep
.
Msg
=
runInfo
;
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
))
else
if
(
JobRunStep
.
IsTimeOut
(
0.5
,
out
double
val
))
{
{
...
@@ -375,7 +431,7 @@ namespace DeviceLibrary.bean.job
...
@@ -375,7 +431,7 @@ namespace DeviceLibrary.bean.job
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_19_02_TakeShelfOff
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_19_02_TakeShelfOff
);
runInfo
=
$
"到达{
l
iftStatus.destinationPoint}的放料点,准备卸下"
;
runInfo
=
$
"到达{
JobParam.L
iftStatus.destinationPoint}的放料点,准备卸下"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{SettingString.TakeShelfOff}"
);
AllocateTask
(
agv
,
$
"{SettingString.TakeShelfOff}"
);
}
}
...
@@ -385,8 +441,8 @@ namespace DeviceLibrary.bean.job
...
@@ -385,8 +441,8 @@ namespace DeviceLibrary.bean.job
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_19_03_ToTemp1
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_19_03_ToTemp1
);
runInfo
=
$
"料车在{
l
iftStatus.destinationPoint}卸下完成, 返回{JobParam.CurTargetNode.AliceName}的临时点1的取料点"
;
runInfo
=
$
"料车在{
JobParam.L
iftStatus.destinationPoint}卸下完成, 返回{JobParam.CurTargetNode.AliceName}的临时点1的取料点"
;
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
l
iftStatus
.
missionId
);
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
JobParam
.
L
iftStatus
.
missionId
);
if
(
missionInfo
!=
null
)
if
(
missionInfo
!=
null
)
{
{
//任务状态变更
//任务状态变更
...
@@ -412,10 +468,35 @@ namespace DeviceLibrary.bean.job
...
@@ -412,10 +468,35 @@ namespace DeviceLibrary.bean.job
{
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
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
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_19_05_ToLift
);
runInfo
=
$
"拾取料架完成,去{JobParam.CurTargetNode.AliceName}"
;
runInfo
=
$
"拾取料架完成,去{JobParam.CurTargetNode.AliceName}"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}"
);
ToLift
(
agv
,
$
"{JobParam.CurTargetNode.Name}"
);
}
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftD2ToLiftC1_19_05_ToLift
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
S1F_LiftD2ToLiftC1_19_05_ToLift
))
...
@@ -511,7 +592,8 @@ namespace DeviceLibrary.bean.job
...
@@ -511,7 +592,8 @@ namespace DeviceLibrary.bean.job
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
//任务状态变更
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
返回到达电梯内
,
out
string
msg
);
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 +608,8 @@ namespace DeviceLibrary.bean.job
...
@@ -526,6 +608,8 @@ namespace DeviceLibrary.bean.job
//任务状态变更
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
返回电梯运行
,
out
string
msg
);
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
返回电梯运行
,
out
string
msg
);
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
ResetMissionOccupiedAgv
(
JobParam
.
GetMissionInfo
());
ClearLiftNodeOccupied
(
agv
);
}
}
}
}
...
@@ -536,7 +620,8 @@ namespace DeviceLibrary.bean.job
...
@@ -536,7 +620,8 @@ namespace DeviceLibrary.bean.job
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_20_10_ToTemp2
);
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftD2ToLiftC1_20_10_ToTemp2
);
runInfo
=
$
"去{JobParam.CurTargetNode.AliceName}临时点2的取料点"
;
runInfo
=
$
"去{JobParam.CurTargetNode.AliceName}临时点2的取料点"
;
JobRunStep
.
Msg
=
runInfo
;
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
))
else
if
(
JobRunStep
.
IsTimeOut
(
0.5
,
out
double
val
))
{
{
...
@@ -576,12 +661,12 @@ namespace DeviceLibrary.bean.job
...
@@ -576,12 +661,12 @@ namespace DeviceLibrary.bean.job
//去D2
//去D2
Node
src
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
LIFT_C1
,
NodeType
.
Lift
);
Node
src
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
LIFT_C1
,
NodeType
.
Lift
);
Node
dest
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
LIFT_D2
,
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
);
F1LiftC1ToLiftD2Job
c1ToLiftD2Job
=
new
F1LiftC1ToLiftD2Job
(
jobParam
);
c1ToLiftD2Job
.
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_07_ToLiftD2
);
c1ToLiftD2Job
.
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_07_ToLiftD2
);
runInfo
=
$
"准备去{SettingString.LIFT_D2}送成品料车"
;
runInfo
=
$
"准备去{SettingString.LIFT_D2}送成品料车"
;
c1ToLiftD2Job
.
JobRunStep
.
Msg
=
runInfo
;
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
)
if
(
missionInfo
!=
null
)
{
{
//任务状态变更
//任务状态变更
...
@@ -599,7 +684,7 @@ namespace DeviceLibrary.bean.job
...
@@ -599,7 +684,7 @@ namespace DeviceLibrary.bean.job
JobRunStep
.
EndJob
();
JobRunStep
.
EndJob
();
return
null
;
return
null
;
}
}
return
this
;
return
job
;
}
}
}
}
}
}
DeviceLibrary/bean/job/Job.cs
查看文件 @
ab1c3da
using
Common
;
using
Common
;
using
DeviceLibrary.bean
;
using
DeviceLibrary.bean
;
using
DeviceLibrary.lift
;
using
DeviceLibrary.manager
;
using
DeviceLibrary.manager
;
using
DeviceLibrary.service.model
;
using
DeviceLibrary.service.model
;
using
log4net.Util
;
using
log4net.Util
;
using
System
;
using
System
;
using
System.Web.UI.WebControls.WebParts
;
using
System.Windows.Forms
;
using
System.Windows.Forms
;
namespace
DeviceLibrary
namespace
DeviceLibrary
...
@@ -73,6 +75,163 @@ namespace DeviceLibrary
...
@@ -73,6 +75,163 @@ namespace DeviceLibrary
Task
=
AgvTaskManager
.
GetTaskByName
(
taskName
,
agv
);
Task
=
AgvTaskManager
.
GetTaskByName
(
taskName
,
agv
);
AgvTaskManager
.
AssignMission
(
agv
,
taskName
);
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
)
public
void
PutLiftShelfOn
(
AgvInfo
agv
,
string
nodeName
)
{
{
if
(
JobParam
.
GetMissionInfo
().
projectType
.
Equals
(
ProjectType
.
空台车归还
)
||
if
(
JobParam
.
GetMissionInfo
().
projectType
.
Equals
(
ProjectType
.
空台车归还
)
||
...
@@ -140,7 +299,7 @@ namespace DeviceLibrary
...
@@ -140,7 +299,7 @@ namespace DeviceLibrary
{
{
AllocateTask
(
agv
,
$
"{SettingString.PutShelfOn}_{nodeName}{SettingString._Steel}"
);
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}"
);
AllocateTask
(
agv
,
$
"{SettingString.PutShelfOn}_{nodeName}{SettingString._Box}"
);
}
}
...
@@ -171,6 +330,7 @@ namespace DeviceLibrary
...
@@ -171,6 +330,7 @@ namespace DeviceLibrary
AllocateTask
(
agv
,
$
"{SettingString.PutShelfOn}"
);
AllocateTask
(
agv
,
$
"{SettingString.PutShelfOn}"
);
}
}
}
}
public
void
TakeYiYuanLiftShelfOff
(
AgvInfo
agv
,
string
nodeName
)
public
void
TakeYiYuanLiftShelfOff
(
AgvInfo
agv
,
string
nodeName
)
{
{
if
(
JobParam
.
GetMissionInfo
().
projectType
.
Equals
(
ProjectType
.
移远成品入库
))
if
(
JobParam
.
GetMissionInfo
().
projectType
.
Equals
(
ProjectType
.
移远成品入库
))
...
@@ -179,9 +339,13 @@ namespace DeviceLibrary
...
@@ -179,9 +339,13 @@ namespace DeviceLibrary
}
}
else
else
{
{
AllocateTask
(
agv
,
$
"{SettingString.
PutShelfOn
}_{nodeName}"
);
AllocateTask
(
agv
,
$
"{SettingString.
TakeShelfOff
}_{nodeName}"
);
}
}
}
}
/// <summary>
/// 根据当前任务类型拾取料车,非电梯拾取任务
/// </summary>
/// <param name="agv"></param>
public
void
PutShelfOn
(
AgvInfo
agv
)
public
void
PutShelfOn
(
AgvInfo
agv
)
{
{
if
(
JobParam
.
GetMissionInfo
().
projectType
.
Equals
(
ProjectType
.
空台车归还
)
||
if
(
JobParam
.
GetMissionInfo
().
projectType
.
Equals
(
ProjectType
.
空台车归还
)
||
...
@@ -218,12 +382,52 @@ namespace DeviceLibrary
...
@@ -218,12 +382,52 @@ namespace DeviceLibrary
AllocateTask
(
agv
,
$
"{SettingString.PutShelfOn}"
);
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
)
protected
void
AllocateTask
(
AgvInfo
agv
,
ChargePile
chargePile
)
{
{
Task
=
new
AgvTask
()
{
AliceName
=
chargePile
.
AliceName
,
Name
=
chargePile
.
Name
,
Guid
=
chargePile
.
Guid
};
Task
=
new
AgvTask
()
{
AliceName
=
chargePile
.
AliceName
,
Name
=
chargePile
.
Name
,
Guid
=
chargePile
.
Guid
};
AgvTaskManager
.
AssignMission
(
agv
,
chargePile
,
Task
);
AgvTaskManager
.
AssignMission
(
agv
,
chargePile
,
Task
);
}
}
protected
void
AllocateStandbyTask
(
AgvInfo
agv
)
protected
void
ToStandby
(
AgvInfo
agv
)
{
{
Task
=
AgvTaskManager
.
GetTaskByName
(
$
"{SettingString.Standby}"
,
agv
);
Task
=
AgvTaskManager
.
GetTaskByName
(
$
"{SettingString.Standby}"
,
agv
);
AgvTaskManager
.
AssignMission
(
agv
,
$
"{SettingString.Standby}"
);
AgvTaskManager
.
AssignMission
(
agv
,
$
"{SettingString.Standby}"
);
...
@@ -314,16 +518,16 @@ namespace DeviceLibrary
...
@@ -314,16 +518,16 @@ namespace DeviceLibrary
/// <summary>
/// <summary>
/// 是否需要确认
/// 是否需要确认
/// </summary>
/// </summary>
/// <returns></returns>
/// <returns>
false,不需要确认
</returns>
protected
bool
NeedConfirm
()
protected
bool
NeedConfirm
()
{
{
if
(
JobParam
.
GetMissionInfo
()
!=
null
)
if
(
JobParam
.
GetMissionInfo
()
!=
null
)
{
{
MissionInfo
missionInfo
=
JobParam
.
GetMissionInfo
();
MissionInfo
missionInfo
=
JobParam
.
GetMissionInfo
();
service
.
model
.
ProjectType
type
=
JobParam
.
GetMissionInfo
().
projectType
;
service
.
model
.
ProjectType
type
=
JobParam
.
GetMissionInfo
().
projectType
;
if
(
type
.
Equals
(
service
.
model
.
ProjectType
.
空台车领用
)
||
type
.
Equals
(
service
.
model
.
ProjectType
.
空台车归还
)
||
if
(
type
.
Equals
(
service
.
model
.
ProjectType
.
空台车领用
)
||
(
type
.
Equals
(
service
.
model
.
ProjectType
.
半成品入库
)
&&
!
missionInfo
.
needBack
)
type
.
Equals
(
service
.
model
.
ProjectType
.
空台车归还
)
||
||
type
.
Equals
(
service
.
model
.
ProjectType
.
半成品入库与领用
))
(!
missionInfo
.
needBack
))
{
{
return
false
;
return
false
;
}
}
...
@@ -382,14 +586,15 @@ namespace DeviceLibrary
...
@@ -382,14 +586,15 @@ namespace DeviceLibrary
{
{
MissionManager
.
SetMissionOccupiedAgv
(
missionInfo
.
missionId
,
string
.
Empty
);
MissionManager
.
SetMissionOccupiedAgv
(
missionInfo
.
missionId
,
string
.
Empty
);
}
}
/// <summary>
/// 当前电梯正在使用电梯
/// </summary>
/// <param name="liftId"></param>
/// <param name="agv"></param>
protected
void
SetLiftOccupied
(
string
liftId
,
AgvInfo
agv
)
protected
void
SetLiftOccupied
(
string
liftId
,
AgvInfo
agv
)
{
{
lift
.
LiftContext
.
SetLiftOccupiedAgv
(
liftId
,
agv
.
IP
);
lift
.
LiftContext
.
SetLiftOccupiedAgv
(
liftId
,
agv
.
IP
);
}
}
protected
void
ResetLiftOccupied
(
string
liftId
)
{
lift
.
LiftContext
.
ResetLiftOccupiedAgv
(
liftId
);
}
/// <summary>
/// <summary>
/// 目的地是否有小车占用
/// 目的地是否有小车占用
/// </summary>
/// </summary>
...
@@ -398,33 +603,38 @@ namespace DeviceLibrary
...
@@ -398,33 +603,38 @@ namespace DeviceLibrary
/// <returns></returns>
/// <returns></returns>
protected
bool
TargetIsOccupied
(
AgvInfo
agv
,
string
targetName
)
protected
bool
TargetIsOccupied
(
AgvInfo
agv
,
string
targetName
)
{
{
try
if
(
LiftContext
.
OtherAGVIsInLift
(
agv
,
targetName
))
return
true
;
else
{
{
if
(
agv
.
Scope
.
Equals
(
"1F"
))
try
{
{
AgvInfo
agvInfo
=
AGVManager
.
agvInfo
.
Find
(
s
=>
s
.
Auto
&&
!
s
.
IP
.
Equals
(
agv
.
IP
)
AgvInfo
agvInfo
=
AGVManager
.
agvInfo
.
Find
(
s
=>
s
.
Auto
&&
!
s
.
IP
.
Equals
(
agv
.
IP
)
&&
agv
.
Scope
.
Workshop
.
Equals
(
s
.
Scope
.
Workshop
)
&&
s
.
Scope
.
Equals
(
"1F"
)
);
&&
agv
.
Scope
.
Workshop
.
Equals
(
s
.
Scope
.
Workshop
));
if
(
agvInfo
!=
null
)
if
(
agvInfo
!=
null
)
{
{
//if (agvInfo?.Place.Name.Contains(targetName) ?? false)
if
(
agvInfo
?.
TaskRunState
?.
Task
?.
Name
.
Contains
(
targetName
)
??
false
)
// return true;
if
(
agvInfo
?.
TaskRunState
?.
Task
?.
Name
.
Equals
(
targetName
)
??
false
)
{
{
return
true
;
return
true
;
}
}
//else if (agvInfo?.Place?.Name.Contains(targetName) ?? false)
// return true;
}
}
return
false
;
}
}
else
catch
(
Exception
ex
)
{
LogUtil
.
error
(
$
"TargetIsOccupied:{agv.Name},{JsonHelper.SerializeObject(AGVManager.agvInfo)}"
,
ex
);
return
false
;
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
)
protected
MissionState
getNextState
(
MissionState
missionState
)
{
{
if
(
missionState
==
MissionState
.
电梯运行
)
if
(
missionState
==
MissionState
.
电梯运行
)
...
@@ -433,24 +643,95 @@ namespace DeviceLibrary
...
@@ -433,24 +643,95 @@ namespace DeviceLibrary
return
MissionState
.
离开电梯
;
return
MissionState
.
离开电梯
;
else
if
(
missionState
==
MissionState
.
离开电梯
)
else
if
(
missionState
==
MissionState
.
离开电梯
)
return
MissionState
.
送料
;
return
MissionState
.
送料
;
else
if
(
missionState
==
MissionState
.
前往电梯
)
return
MissionState
.
到达电梯
;
else
if
(
missionState
==
MissionState
.
到达电梯
)
return
MissionState
.
电梯运行
;
else
if
(
missionState
==
MissionState
.
返回电梯运行
)
else
if
(
missionState
==
MissionState
.
返回电梯运行
)
return
MissionState
.
返回电梯到达
;
return
MissionState
.
返回电梯到达
;
else
if
(
missionState
==
MissionState
.
返回电梯到达
)
else
if
(
missionState
==
MissionState
.
返回电梯到达
)
return
MissionState
.
返回离开电梯
;
return
MissionState
.
返回离开电梯
;
else
if
(
missionState
==
MissionState
.
返回离开电梯
)
else
if
(
missionState
==
MissionState
.
返回离开电梯
)
return
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
)
protected
bool
IsBackShelf
(
MissionInfo
missionInfo
)
{
{
if
(
missionInfo
?.
state
>=
MissionState
.
返回电梯运行
&&
missionInfo
?.
state
<=
MissionState
.
返回电梯到达
)
if
(
missionInfo
?.
state
>=
MissionState
.
返回电梯运行
&&
missionInfo
?.
state
<=
MissionState
.
返回电梯到达
)
{
{
return
true
;
return
true
;
}
}
return
false
;
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
查看文件 @
ab1c3da
using
Common
;
using
Common
;
using
DeviceLibrary.bean
;
using
DeviceLibrary.lift
;
using
DeviceLibrary.manager
;
using
DeviceLibrary.manager
;
using
System.Web.UI
;
namespace
DeviceLibrary
.bean.job
namespace
DeviceLibrary
{
{
/// <summary>
/// <summary>
/// 电梯到线体
/// 电梯到线体
...
@@ -18,9 +21,9 @@ namespace DeviceLibrary.bean.job
...
@@ -18,9 +21,9 @@ namespace DeviceLibrary.bean.job
{
{
}
}
lift
.
LiftStatus
liftStatus
;
public
override
Job
Run
(
AgvInfo
agv
)
public
override
Job
Run
(
AgvInfo
agv
)
{
{
Job
job
=
this
;
agv
.
SetJobContext
(
new
bean
.
agv
.
JobContext
()
agv
.
SetJobContext
(
new
bean
.
agv
.
JobContext
()
{
{
MissionId
=
JobParam
.
GetMissionInfo
().
missionId
,
MissionId
=
JobParam
.
GetMissionInfo
().
missionId
,
...
@@ -32,10 +35,35 @@ namespace DeviceLibrary.bean.job
...
@@ -32,10 +35,35 @@ namespace DeviceLibrary.bean.job
});
});
if
(
JobRunStep
.
IsStep
(
RunStep
.
NONE
))
if
(
JobRunStep
.
IsStep
(
RunStep
.
NONE
))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_01_ToLift
);
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Name
))
runInfo
=
$
"任务开始:去{JobParam.SrcNode.AliceName}"
;
{
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_00_ToStandby
);
AllocateTask
(
agv
,
JobParam
.
SrcNode
.
Name
);
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
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_01_ToLift
))
{
{
...
@@ -58,7 +86,7 @@ namespace DeviceLibrary.bean.job
...
@@ -58,7 +86,7 @@ namespace DeviceLibrary.bean.job
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_03_EnterLift
);
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_03_EnterLift
);
SetLiftOccupied
(
JobParam
.
SrcNode
.
Name
,
agv
);
SetLiftOccupied
(
JobParam
.
SrcNode
.
Name
,
agv
);
runInfo
=
$
"{JobParam.SrcNode.AliceName}门已开启,进电梯取料点"
;
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
);
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
电梯到达
,
out
string
msg
);
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
...
@@ -72,7 +100,6 @@ namespace DeviceLibrary.bean.job
...
@@ -72,7 +100,6 @@ namespace DeviceLibrary.bean.job
runInfo
=
$
"到达{JobParam.SrcNode.AliceName}取料点,准备拾取料车"
;
runInfo
=
$
"到达{JobParam.SrcNode.AliceName}取料点,准备拾取料车"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
PutLiftShelfOn
(
agv
,
JobParam
.
SrcNode
.
Name
);
PutLiftShelfOn
(
agv
,
JobParam
.
SrcNode
.
Name
);
//AllocateTask(agv, $"{SettingString.PutShelfOn}_{JobParam.SrcNode.Name}");
}
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_04_PutShelfOn
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_04_PutShelfOn
))
...
@@ -87,7 +114,7 @@ namespace DeviceLibrary.bean.job
...
@@ -87,7 +114,7 @@ namespace DeviceLibrary.bean.job
runInfo
=
$
"在{JobParam.SrcNode.AliceName}拾取料车完成,准备离开"
;
runInfo
=
$
"在{JobParam.SrcNode.AliceName}拾取料车完成,准备离开"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{SettingString.Leave}_{JobParam.SrcNode.Name}"
);
LeaveLift
(
agv
,
JobParam
.
SrcNode
.
Name
);
}
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_05_LeaveLift
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_05_LeaveLift
))
...
@@ -101,15 +128,54 @@ namespace DeviceLibrary.bean.job
...
@@ -101,15 +128,54 @@ namespace DeviceLibrary.bean.job
//任务状态变更
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
离开电梯
,
out
string
msg
);
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
离开电梯
,
out
string
msg
);
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
ClearLiftNodeOccupied
(
agv
);
}
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_06_CloseLiftDoor
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_06_CloseLiftDoor
))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_07_ToLine
);
runInfo
=
$
"关闭{JobParam.SrcNode.AliceName}门完成,去{JobParam.CurTargetNode.AliceName}的放料点"
;
//任务状态变更
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
送料
,
out
string
msg
);
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
送料
,
out
string
msg
);
AllocateTask
(
agv
,
$
"{GetTargetName(JobParam.CurTargetNode)}_{SettingString.TakeShelfOff}"
);
//是否需要跨两个门
if
(
NodeManager
.
NeedCrossTwoDoor
(
agv
,
JobParam
.
SrcNode
,
JobParam
.
CurTargetNode
))
{
JobParam
.
CrossDoor
.
CurNode
=
JobParam
.
SrcNode
;
JobParam
.
CrossDoor
.
NextNode
=
JobParam
.
CurTargetNode
;
JobParam
.
CrossDoor
.
IsIn
=
true
;
JobParam
.
CrossDoor
.
IsAir
=
false
;
GenJobCallBack
(
this
.
GetType
(),
RunStep
.
SD_LiftToLine_07_CrossTwoDoor
,
JobParam
);
job
=
new
CrossDoorJob
(
JobParam
);
}
//是否需要跨门
else
if
(
NodeManager
.
NeedCrossDoor
(
agv
,
JobParam
.
SrcNode
,
JobParam
.
CurTargetNode
,
out
bool
isin
,
out
bool
isair
))
{
JobParam
.
CrossDoor
.
CurNode
=
JobParam
.
SrcNode
;
JobParam
.
CrossDoor
.
NextNode
=
JobParam
.
CurTargetNode
;
JobParam
.
CrossDoor
.
IsIn
=
isin
;
JobParam
.
CrossDoor
.
IsAir
=
isair
;
GenJobCallBack
(
this
.
GetType
(),
RunStep
.
SD_LiftToLine_07_CrossDoor
,
JobParam
);
job
=
new
CrossDoorJob
(
JobParam
);
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_07_CrossDoor
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_07_CrossTwoDoor
))
{
JobParam
.
CrossDoor
.
CurNode
=
JobParam
.
SrcNode
;
JobParam
.
CrossDoor
.
NextNode
=
JobParam
.
CurTargetNode
;
JobParam
.
CrossDoor
.
IsIn
=
true
;
JobParam
.
CrossDoor
.
IsAir
=
true
;
GenJobCallBack
(
this
.
GetType
(),
RunStep
.
SD_LiftToLine_07_CrossDoor
,
JobParam
);
job
=
new
CrossDoorJob
(
JobParam
);
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_07_CrossDoor
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_07_ToLine
);
runInfo
=
$
"去{JobParam.CurTargetNode.AliceName}的放料点"
;
ToTakeShelfOff
(
agv
,
GetTargetName
(
JobParam
.
CurTargetNode
));
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_07_ToLine
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_07_ToLine
))
...
@@ -170,24 +236,52 @@ namespace DeviceLibrary.bean.job
...
@@ -170,24 +236,52 @@ namespace DeviceLibrary.bean.job
{
{
if
(
JobParam
.
TargetNodes
!=
null
&&
JobParam
.
TargetNodes
.
Count
>
0
)
if
(
JobParam
.
TargetNodes
!=
null
&&
JobParam
.
TargetNodes
.
Count
>
0
)
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_07_ToLine
);
JobParam
.
CurTargetNode
=
JobParam
.
TargetNodes
[
0
];
JobParam
.
CurTargetNode
=
JobParam
.
TargetNodes
[
0
];
JobParam
.
TargetNodes
.
RemoveAt
(
0
);
JobParam
.
TargetNodes
.
RemoveAt
(
0
);
System
.
Threading
.
Thread
.
Sleep
(
1000
);
if
(
NodeManager
.
NeedCrossDoor
(
agv
,
agv
.
Place
,
JobParam
.
CurTargetNode
,
out
bool
isin
,
out
bool
isair
))
runInfo
=
$
"去下一线体{JobParam.CurTargetNode.AliceName}的放料点"
;
{
JobRunStep
.
Msg
=
runInfo
;
JobParam
.
CrossDoor
.
CurNode
=
agv
.
Place
;
AllocateTask
(
agv
,
$
"{GetTargetName(JobParam.CurTargetNode)}_{SettingString.TakeShelfOff}"
);
JobParam
.
CrossDoor
.
NextNode
=
JobParam
.
CurTargetNode
;
JobParam
.
CrossDoor
.
IsIn
=
isin
;
JobParam
.
CrossDoor
.
IsAir
=
isair
;
GenJobCallBack
(
this
.
GetType
(),
RunStep
.
SD_LiftToLine_07_CrossDoor
,
JobParam
);
job
=
new
CrossDoorJob
(
JobParam
);
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_07_CrossDoor
);
runInfo
=
$
"去下一线体"
;
JobRunStep
.
Msg
=
runInfo
;
}
}
}
else
else
{
{
if
(
JobParam
.
GetMissionInfo
()
!=
null
&&
JobParam
.
GetMissionInfo
().
needBack
)
if
(
JobParam
.
GetMissionInfo
()
!=
null
&&
JobParam
.
GetMissionInfo
().
needBack
)
{
{
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
AliceName
))
if
(
NodeManager
.
NeedCrossTwoDoor
(
agv
,
agv
.
Place
,
JobParam
.
SrcNode
))
{
JobParam
.
CrossDoor
.
CurNode
=
agv
.
Place
;
JobParam
.
CrossDoor
.
NextNode
=
JobParam
.
SrcNode
;
JobParam
.
CrossDoor
.
IsIn
=
false
;
JobParam
.
CrossDoor
.
IsAir
=
true
;
GenJobCallBack
(
this
.
GetType
(),
RunStep
.
SD_LiftToLine_11_CrossTwoDoor
,
JobParam
);
job
=
new
CrossDoorJob
(
JobParam
);
}
else
if
(
NodeManager
.
NeedCrossDoor
(
agv
,
agv
.
Place
,
JobParam
.
SrcNode
,
out
bool
isin
,
out
bool
isair
))
{
JobParam
.
CrossDoor
.
CurNode
=
agv
.
Place
;
JobParam
.
CrossDoor
.
NextNode
=
JobParam
.
SrcNode
;
JobParam
.
CrossDoor
.
IsIn
=
isin
;
JobParam
.
CrossDoor
.
IsAir
=
isair
;
GenJobCallBack
(
this
.
GetType
(),
RunStep
.
SD_LiftToLine_11_CrossTDoor
,
JobParam
);
job
=
new
CrossDoorJob
(
JobParam
);
}
else
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Name
))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_11_ToStandby
);
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_11_ToStandby
);
runInfo
=
$
"{JobParam.SrcNode.AliceName}有车,去停留点"
;
runInfo
=
$
"{JobParam.SrcNode.AliceName}有车,去停留点"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{SettingString.Standby}"
);
ToStandby
(
agv
);
}
}
else
else
{
{
...
@@ -196,29 +290,48 @@ namespace DeviceLibrary.bean.job
...
@@ -196,29 +290,48 @@ namespace DeviceLibrary.bean.job
//任务状态变更
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
返回电梯
,
out
string
msg
);
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
返回电梯
,
out
string
msg
);
AllocateTask
(
agv
,
JobParam
.
SrcNode
.
Name
);
ToLift
(
agv
,
JobParam
.
SrcNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
}
}
}
}
else
if
(
JobParam
.
GetMissionInfo
()
!=
null
&&
!
JobParam
.
GetMissionInfo
().
needBack
)
else
if
(
JobParam
.
GetMissionInfo
()
!=
null
&&
!
JobParam
.
GetMissionInfo
().
needBack
)
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_16_TakeShelfOff
);
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_16_TakeShelfOff
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}是最后一个线体,料车无需返回,
准备
卸车"
;
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}是最后一个线体,料车无需返回,
直接
卸车"
;
AllocateTask
(
agv
,
SettingString
.
TakeShelfOff
);
TakeShelfOff
(
agv
);
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
}
}
}
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_11_CrossTwoDoor
))
{
JobParam
.
CrossDoor
.
CurNode
=
JobParam
.
CurTargetNode
;
JobParam
.
CrossDoor
.
NextNode
=
JobParam
.
SrcNode
;
JobParam
.
CrossDoor
.
IsIn
=
false
;
JobParam
.
CrossDoor
.
IsAir
=
false
;
GenJobCallBack
(
this
.
GetType
(),
RunStep
.
SD_LiftToLine_11_CrossTDoor
,
JobParam
);
job
=
new
CrossDoorJob
(
JobParam
);
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_11_CrossTDoor
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_11_BackToLift
);
runInfo
=
$
"过门完成,分发结束,料车需返回,去电梯口"
;
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
返回电梯
,
out
string
msg
);
ToLift
(
agv
,
JobParam
.
SrcNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_11_BackToLift
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_11_BackToLift
))
{
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
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
);
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_11_ToStandby
);
runInfo
=
$
"{JobParam.SrcNode.AliceName}有车,去停留点"
;
runInfo
=
$
"{JobParam.SrcNode.AliceName}有车,去停留点"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{SettingString.Standby}"
);
ToStandby
(
agv
);
}
}
else
else
{
{
...
@@ -238,7 +351,7 @@ namespace DeviceLibrary.bean.job
...
@@ -238,7 +351,7 @@ namespace DeviceLibrary.bean.job
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_11_ToStandby
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_11_ToStandby
))
{
{
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Alice
Name
))
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Name
))
{
{
}
}
else
else
...
@@ -248,13 +361,19 @@ namespace DeviceLibrary.bean.job
...
@@ -248,13 +361,19 @@ namespace DeviceLibrary.bean.job
//任务状态变更
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
返回电梯
,
out
string
msg
);
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
返回电梯
,
out
string
msg
);
AllocateTask
(
agv
,
JobParam
.
SrcNode
.
Name
);
ToLift
(
agv
,
JobParam
.
SrcNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
}
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_12_WaitDoorOpen
))
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
;
MissionManager
.
SetMissionOccupied
(
JobParam
.
GetMissionInfo
().
missionId
,
agv
);
job
=
new
SwitchShelfJob
(
JobParam
);
}
else
if
(
lift
.
LiftContext
.
IsDoorOpen
(
JobParam
.
SrcNode
.
Name
,
JobParam
.
GetMissionInfo
().
destinationFloor
))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_13_CheckLiftStatus
);
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_13_CheckLiftStatus
);
runInfo
=
$
"{JobParam.SrcNode.AliceName}门已开,检查电梯内该层是否有料车"
;
runInfo
=
$
"{JobParam.SrcNode.AliceName}门已开,检查电梯内该层是否有料车"
;
...
@@ -275,14 +394,19 @@ namespace DeviceLibrary.bean.job
...
@@ -275,14 +394,19 @@ namespace DeviceLibrary.bean.job
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_13_CheckLiftStatus
))
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
))
{
{
if
(
lift
.
LiftContext
.
HasShelfNeedLeave
(
JobParam
.
SrcNode
.
Name
,
agv
.
Client
,
out
liftStatus
))
JobParam
.
CurTargetNode
=
JobParam
.
SrcNode
;
MissionManager
.
SetMissionOccupied
(
JobParam
.
GetMissionInfo
().
missionId
,
agv
);
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
JobParam
.
LiftStatus
))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_14_01_ToTemp1
);
JobParam
.
CurTargetNode
=
JobParam
.
SrcNode
;
runInfo
=
$
"{JobParam.SrcNode.AliceName}内有料车,去临时点1放料点"
;
MissionManager
.
SetMissionOccupied
(
JobParam
.
GetMissionInfo
().
missionId
,
agv
);
AllocateTask
(
agv
,
$
"{JobParam.SrcNode.Name}_{SettingString.Temp1}_{SettingString.TakeShelfOff}"
);
job
=
new
SwitchShelfJob
(
JobParam
);
JobRunStep
.
Msg
=
runInfo
;
}
}
else
else
{
{
...
@@ -290,7 +414,7 @@ namespace DeviceLibrary.bean.job
...
@@ -290,7 +414,7 @@ namespace DeviceLibrary.bean.job
lift
.
LiftContext
.
SetLiftOccupiedAgv
(
JobParam
.
SrcNode
.
Name
,
agv
.
IP
);
lift
.
LiftContext
.
SetLiftOccupiedAgv
(
JobParam
.
SrcNode
.
Name
,
agv
.
IP
);
runInfo
=
$
"{JobParam.SrcNode.AliceName}无料车,去放料点"
;
runInfo
=
$
"{JobParam.SrcNode.AliceName}无料车,去放料点"
;
JobRunStep
.
Msg
=
runInfo
;
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
()))
else
if
(
JobRunStep
.
IsTimeOut
(
20
)
&&
!
lift
.
LiftContext
.
CheckIfRequestOk
(
JobParam
.
SrcNode
.
Name
,
JobParam
.
GetMissionInfo
()))
...
@@ -308,7 +432,7 @@ namespace DeviceLibrary.bean.job
...
@@ -308,7 +432,7 @@ namespace DeviceLibrary.bean.job
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_14_02_TakeShelfOffAtLift
);
JobRunStep
.
ToNextStep
(
RunStep
.
SD_LiftToLine_14_02_TakeShelfOffAtLift
);
runInfo
=
$
"到达{JobParam.SrcNode.AliceName}放料点,准备卸下料车"
;
runInfo
=
$
"到达{JobParam.SrcNode.AliceName}放料点,准备卸下料车"
;
JobRunStep
.
Msg
=
runInfo
;
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
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_14_02_TakeShelfOffAtLift
))
...
@@ -319,7 +443,8 @@ namespace DeviceLibrary.bean.job
...
@@ -319,7 +443,8 @@ namespace DeviceLibrary.bean.job
runInfo
=
$
"在{JobParam.SrcNode.AliceName}卸下料车完成,准备离开"
;
runInfo
=
$
"在{JobParam.SrcNode.AliceName}卸下料车完成,准备离开"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
ResetMissionOccupiedAgv
(
JobParam
.
GetMissionInfo
());
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
,
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
,
service
.
model
.
TransportStatus
.
TypeStr
.
status
,
agv
.
Name
,
JobParam
.
SrcNode
.
Name
,
service
.
model
.
TransportStatus
.
ModeStr
.
auto
,
...
@@ -336,12 +461,13 @@ namespace DeviceLibrary.bean.job
...
@@ -336,12 +461,13 @@ namespace DeviceLibrary.bean.job
bool
rtn
=
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
SrcNode
.
Name
,
agv
);
bool
rtn
=
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
SrcNode
.
Name
,
agv
);
runInfo
=
$
"离开{JobParam.SrcNode.AliceName},关门: {rtn}"
;
runInfo
=
$
"离开{JobParam.SrcNode.AliceName},关门: {rtn}"
;
JobRunStep
.
Msg
=
runInfo
;
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
))
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
);
JobRunStep
.
ToNextStep
(
RunStep
.
END
);
//任务状态变更
//任务状态变更
...
@@ -349,50 +475,11 @@ namespace DeviceLibrary.bean.job
...
@@ -349,50 +475,11 @@ namespace DeviceLibrary.bean.job
runInfo
=
$
"{JobName}结束:{JobParam.SrcNode.AliceName}已关门"
;
runInfo
=
$
"{JobName}结束:{JobParam.SrcNode.AliceName}已关门"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsTimeOut
(
0.5
,
out
double
time
))
//else if (JobRunStep.IsTimeOut(0.5, out double time))
{
//{
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
SrcNode
.
Name
,
agv
);
// lift.LiftContext.AGVLeave(JobParam.SrcNode.Name, agv);
System
.
Threading
.
Thread
.
Sleep
(
1000
);
// 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
);
}
}
}
#
endregion
#
endregion
...
@@ -400,7 +487,6 @@ namespace DeviceLibrary.bean.job
...
@@ -400,7 +487,6 @@ namespace DeviceLibrary.bean.job
{
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
END
);
runInfo
=
$
"在{JobParam.CurTargetNode.AliceName}卸下料车完成"
;
runInfo
=
$
"在{JobParam.CurTargetNode.AliceName}卸下料车完成"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
//任务状态变更
//任务状态变更
...
@@ -408,16 +494,54 @@ namespace DeviceLibrary.bean.job
...
@@ -408,16 +494,54 @@ namespace DeviceLibrary.bean.job
//上报状态
//上报状态
manager
.
UploadManager
.
UploadTransportStatus
(
new
service
.
model
.
TransportStatus
(
agv
.
CurJob
.
JobParam
.
GetMissionInfo
().
missionId
,
manager
.
UploadManager
.
UploadTransportStatus
(
new
service
.
model
.
TransportStatus
(
agv
.
CurJob
.
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
TransportStatus
.
TypeStr
.
status
,
agv
.
Name
,
JobParam
.
CurTargetNode
.
Name
,
service
.
model
.
TransportStatus
.
ModeStr
.
auto
,
service
.
model
.
TransportStatus
.
TypeStr
.
status
,
agv
.
Name
,
JobParam
.
CurTargetNode
.
Name
,
service
.
model
.
TransportStatus
.
ModeStr
.
auto
,
$
"卸车"
));
$
"卸货{JobParam.CurTargetNode.Name}"
));
if
(
NodeManager
.
NeedCrossTwoDoor
(
agv
,
agv
.
Place
,
JobParam
.
SrcNode
))
{
JobParam
.
CrossDoor
.
CurNode
=
agv
.
Place
;
JobParam
.
CrossDoor
.
NextNode
=
JobParam
.
SrcNode
;
JobParam
.
CrossDoor
.
IsIn
=
false
;
JobParam
.
CrossDoor
.
IsAir
=
true
;
GenJobCallBack
(
this
.
GetType
(),
RunStep
.
SD_LiftToLine_16_CrossTwoDoor
,
JobParam
);
job
=
new
CrossDoorJob
(
JobParam
);
}
else
if
(
NodeManager
.
NeedCrossDoor
(
agv
,
agv
.
Place
,
JobParam
.
SrcNode
,
out
bool
isin
,
out
bool
isair
))
{
JobParam
.
CrossDoor
.
CurNode
=
agv
.
Place
;
JobParam
.
CrossDoor
.
NextNode
=
JobParam
.
SrcNode
;
JobParam
.
CrossDoor
.
IsIn
=
isin
;
JobParam
.
CrossDoor
.
IsAir
=
isair
;
GenJobCallBack
(
this
.
GetType
(),
RunStep
.
SD_LiftToLine_16_CrossTDoor
,
JobParam
);
job
=
new
CrossDoorJob
(
JobParam
);
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
END
);
}
}
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_16_CrossTwoDoor
))
{
JobParam
.
CrossDoor
.
CurNode
=
JobParam
.
CurTargetNode
;
JobParam
.
CrossDoor
.
NextNode
=
JobParam
.
SrcNode
;
JobParam
.
CrossDoor
.
IsIn
=
false
;
JobParam
.
CrossDoor
.
IsAir
=
false
;
GenJobCallBack
(
this
.
GetType
(),
RunStep
.
SD_LiftToLine_16_CrossTDoor
,
JobParam
);
job
=
new
CrossDoorJob
(
JobParam
);
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
SD_LiftToLine_16_CrossTDoor
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
END
);
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
END
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
END
))
{
{
JobRunStep
.
EndJob
();
JobRunStep
.
EndJob
();
return
null
;
return
null
;
}
}
return
this
;
return
job
;
}
}
}
}
}
}
DeviceLibrary/bean/job/LineToLiftJob.cs
查看文件 @
ab1c3da
using
Common
;
using
Common
;
using
DeviceLibrary.bean
;
using
DeviceLibrary.bean
;
using
DeviceLibrary.bean.job
;
using
DeviceLibrary.lift
;
using
DeviceLibrary.lift
;
using
DeviceLibrary.manager
;
using
DeviceLibrary.manager
;
using
DeviceLibrary.service.model
;
using
System
;
using
System
;
using
System.Threading
;
using
System.Threading
;
namespace
DeviceLibrary
namespace
DeviceLibrary
{
{
/// <summary>
/// <summary>
///
1F,线体到电梯
///
线体取料车送到电梯任务
/// </summary>
/// </summary>
public
class
LineToLiftJob
:
Job
public
class
LineToLiftJob
:
Job
{
{
...
@@ -22,9 +24,9 @@ namespace DeviceLibrary
...
@@ -22,9 +24,9 @@ namespace DeviceLibrary
{
{
}
}
lift
.
LiftStatus
liftStatus
;
public
override
Job
Run
(
AgvInfo
agv
)
public
override
Job
Run
(
AgvInfo
agv
)
{
{
Job
job
=
this
;
agv
.
SetJobContext
(
new
bean
.
agv
.
JobContext
()
agv
.
SetJobContext
(
new
bean
.
agv
.
JobContext
()
{
{
MissionId
=
JobParam
.
GetMissionInfo
().
missionId
,
MissionId
=
JobParam
.
GetMissionInfo
().
missionId
,
...
@@ -36,11 +38,28 @@ namespace DeviceLibrary
...
@@ -36,11 +38,28 @@ namespace DeviceLibrary
});
});
if
(
JobRunStep
.
IsStep
(
RunStep
.
NONE
))
if
(
JobRunStep
.
IsStep
(
RunStep
.
NONE
))
{
{
JobParam
.
CrossDoor
.
CurNode
=
agv
.
Place
;
JobParam
.
CrossDoor
.
NextNode
=
JobParam
.
SrcNode
;
if
(
NodeManager
.
NeedCrossDoor
(
agv
,
JobParam
.
CrossDoor
.
CurNode
,
JobParam
.
CrossDoor
.
NextNode
,
out
bool
isin
,
out
bool
isair
))
{
JobParam
.
CrossDoor
.
IsIn
=
isin
;
JobParam
.
CrossDoor
.
IsAir
=
isair
;
GenJobCallBack
(
this
.
GetType
(),
RunStep
.
LineToLift_00_CrossDoor
,
JobParam
);
job
=
new
CrossDoorJob
(
JobParam
);
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_00_CrossDoor
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_00_CrossDoor
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_01_ToLine
);
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_01_ToLine
);
runInfo
=
$
"
任务开始:
去{JobParam.SrcNode.AliceName}的取料点"
;
runInfo
=
$
"去{JobParam.SrcNode.AliceName}的取料点"
;
AllocateTask
(
agv
,
$
"{JobParam.SrcNode.Name}_{SettingString.PutShelfOn
}"
);
ToPutShelfOn
(
agv
,
$
"{JobParam.SrcNode.Name
}"
);
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_01_ToLine
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_01_ToLine
))
{
{
...
@@ -57,7 +76,6 @@ namespace DeviceLibrary
...
@@ -57,7 +76,6 @@ namespace DeviceLibrary
runInfo
=
$
"到达{JobParam.SrcNode.AliceName}的取料点,开始拾取料车"
;
runInfo
=
$
"到达{JobParam.SrcNode.AliceName}的取料点,开始拾取料车"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
PutShelfOn
(
agv
);
PutShelfOn
(
agv
);
//AllocateTask(agv, SettingString.PutShelfOn);
}
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_02_PutShelfOn
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_02_PutShelfOn
))
...
@@ -68,43 +86,60 @@ namespace DeviceLibrary
...
@@ -68,43 +86,60 @@ namespace DeviceLibrary
manager
.
UploadManager
.
UploadTransportStatus
(
new
service
.
model
.
TransportStatus
(
agv
.
CurJob
.
JobParam
.
GetMissionInfo
().
missionId
,
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
,
service
.
model
.
TransportStatus
.
TypeStr
.
status
,
agv
.
Name
,
agv
.
Place
.
Name
,
service
.
model
.
TransportStatus
.
ModeStr
.
auto
,
$
"取车"
));
$
"取车"
));
if
(
LiftContext
.
CheckHasEmptyFinished
(
agv
,
JobParam
.
CurTargetNode
.
Name
,
out
liftStatus
))
JobParam
.
CrossDoor
.
CurNode
=
JobParam
.
SrcNode
;
JobParam
.
CrossDoor
.
NextNode
=
JobParam
.
CurTargetNode
;
if
(
NodeManager
.
NeedCrossDoor
(
agv
,
JobParam
.
CrossDoor
.
CurNode
,
JobParam
.
CrossDoor
.
NextNode
,
out
bool
isin
,
out
bool
isair
))
{
{
Job
RunStep
.
ToNextStep
(
RunStep
.
LineToLift_ToStandby
)
;
Job
Param
.
CrossDoor
.
IsIn
=
isin
;
AllocateTask
(
agv
,
SettingString
.
Standby
)
;
JobParam
.
CrossDoor
.
IsAir
=
isair
;
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}有空成品料车,先去待机点"
;
GenJobCallBack
(
this
.
GetType
(),
RunStep
.
LineToLift_02_CrossDoor
,
JobParam
)
;
JobRunStep
.
Msg
=
runInfo
;
job
=
new
CrossDoorJob
(
JobParam
)
;
}
}
else
if
(
TargetIsOccupied
(
agv
,
JobParam
.
CurTargetNode
.
Name
))
else
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_ToStandby
);
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_02_CrossDoor
);
AllocateTask
(
agv
,
SettingString
.
Standby
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}有小车,先去待机点"
;
JobRunStep
.
Msg
=
runInfo
;
}
}
else
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_02_CrossDoor
))
{
if
(
TargetIsOccupied
(
agv
,
JobParam
.
CurTargetNode
.
Name
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_ToStandby
);
if
(
agv
.
Scope
.
Workshop
.
Equals
(
"1F"
))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_03_ToLift
);
ToStandby
(
agv
);
runInfo
=
$
"在{JobParam.SrcNode.AliceName}拾取料车完成,去{JobParam.CurTargetNode.AliceName}"
;
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}有小车,先去待机点"
;
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
前往电梯
,
out
string
msg
);
AllocateTask
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
}
}
else
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}有小车,等待空闲"
;
JobRunStep
.
Msg
=
runInfo
;
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_03_ToLift
);
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
.
LineToLift_ToStandby
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_ToStandby
))
{
{
if
(!
TargetIsOccupied
(
agv
,
JobParam
.
CurTargetNode
.
Name
)
if
(!
TargetIsOccupied
(
agv
,
JobParam
.
CurTargetNode
.
Name
))
&&
!
LiftContext
.
CheckHasEmptyFinished
(
agv
,
JobParam
.
CurTargetNode
.
Name
,
out
liftStatus
))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_03_ToLift
);
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
);
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
;
JobRunStep
.
Msg
=
runInfo
;
}
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_03_ToLift
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_03_ToLift
))
{
{
...
@@ -125,42 +160,43 @@ namespace DeviceLibrary
...
@@ -125,42 +160,43 @@ namespace DeviceLibrary
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_04_CheckLiftStatus
))
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
);
MissionInfo
missionInfo
=
MissionManager
.
GetMission
(
JobParam
.
LiftStatus
?.
missionId
??
""
);
//设置电梯占用
if
(
missionInfo
!=
null
)
//SetLiftOccupied(JobParam.CurTargetNode.Name, agv);
{
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}内有成品空料车,去待机点等待电梯空闲"
;
//
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_13_ToShelfPlace
);
AllocateStandbyTask
(
agv
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门,内有成品空料车{missionInfo.missionId},去料架缓存点"
;
//
JobRunStep
.
Msg
=
runInfo
;
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
))
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
);
MissionInfo
missionInfo
=
MissionManager
.
GetMission
(
JobParam
.
LiftStatus
?.
missionId
??
""
);
if
(
IsBackShelf
(
missionInfo
)
)
if
(
missionInfo
!=
null
)
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_01_ToTemp1
);
MissionManager
.
SetMissionOccupied
(
missionInfo
,
agv
);
//设置电梯占用
job
=
new
SwitchShelfJob
(
JobParam
);
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
;
}
}
else
else
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_01_ToStandby
);
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_01_ToStandby
);
//设置电梯占用
//设置电梯占用
//SetLiftOccupied(JobParam.CurTargetNode.Name, agv);
//SetLiftOccupied(JobParam.CurTargetNode.Name, agv);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门。电梯内有送料的料车
,去待机点等待电梯空闲
"
;
//
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门。电梯内有送料的料车
但无工单信息,去待机点,需要手动清空电梯缓存并关闭电梯门
"
;
//
AllocateStandbyTask
(
agv
);
ToStandby
(
agv
);
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
}
}
}
}
...
@@ -171,7 +207,7 @@ namespace DeviceLibrary
...
@@ -171,7 +207,7 @@ namespace DeviceLibrary
SetLiftOccupied
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
SetLiftOccupied
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门,到放料点"
;
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门,到放料点"
;
JobRunStep
.
Msg
=
runInfo
;
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
()))
else
if
(
JobRunStep
.
IsTimeOut
(
20
)
&&
!
lift
.
LiftContext
.
CheckIfRequestOk
(
JobParam
.
CurTargetNode
.
Name
,
JobParam
.
GetMissionInfo
()))
...
@@ -186,178 +222,53 @@ namespace DeviceLibrary
...
@@ -186,178 +222,53 @@ namespace DeviceLibrary
}
}
Thread
.
Sleep
(
2000
);
Thread
.
Sleep
(
2000
);
}
}
#
region
电梯内有料车
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_05_01_ToStandby
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_05_01_ToStandby
))
{
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
if
(!
TargetIsOccupied
(
agv
,
JobParam
.
CurTargetNode
.
Name
)
&&
!
LiftContext
.
IsDoorOpen
(
JobParam
.
CurTargetNode
.
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
))
{
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
);
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_03_ToLift
);
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName}的取料点,准备拾取料车"
;
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已空闲"
;
ToLift
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
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
))
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_06_LeaveLift
);
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_14_TakeShelfOff
);
runInfo
=
$
"拾取{JobParam.CurTargetNode.AliceName}的料车完成,准备离开电梯"
;
runInfo
=
$
"到达料架缓存点,准备卸下料车"
;
TakeShelfOff
(
agv
);
JobRunStep
.
Msg
=
runInfo
;
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
))
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_15_CloseDoor
);
//设置任务状态为料架换缓存
//AGV离开
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
料架缓存
,
out
string
msg
);
bool
rtn
=
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
,
false
);
ResetMissionOccupiedAgv
(
JobParam
.
GetMissionInfo
());
runInfo
=
$
"离开{JobParam.CurTargetNode.AliceName}完成,发送离开信号:{rtn}"
;
//执行取空成品任务
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
liftStatus
.
missionId
);
Node
src
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
LIFT_D2
,
NodeType
.
Lift
);
if
(
missionInfo
!=
null
)
Node
dest
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
LIFT_C1
,
NodeType
.
Lift
);
{
MissionInfo
missionInfo
=
MissionManager
.
GetMission
(
JobParam
.
LiftStatus
?.
missionId
);
//任务状态变更
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
);
if
(
missionInfo
!=
null
)
if
(
missionInfo
!=
null
)
{
{
//任务状态变更
JobParam
jobParam
=
new
JobParam
(
src
,
dest
,
null
,
missionInfo
);
MissionManager
.
SetMissionState
(
missionInfo
.
missionId
,
getNextState
(
missionInfo
.
state
),
out
string
msg
);
MissionManager
.
SetMissionOccupied
(
missionInfo
,
agv
);
job
=
new
F1LiftD2ToLiftC1Job
(
jobParam
);
}
}
JobRunStep
.
Msg
=
runInfo
;
else
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
)
{
{
//任务状态变更
JobRunStep
.
ToNextStep
(
RunStep
.
END
);
MissionManager
.
SetMissionState
(
missionInfo
.
missionId
,
service
.
model
.
MissionState
.
完成
,
out
string
msg
);
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
#
endregion
#
region
电梯内无料车
#
region
电梯内无料车
...
@@ -368,7 +279,7 @@ namespace DeviceLibrary
...
@@ -368,7 +279,7 @@ namespace DeviceLibrary
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_06_02_TakeShelfOffAtLift
);
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_06_02_TakeShelfOffAtLift
);
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName}放料点,准备卸下料车"
;
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName}放料点,准备卸下料车"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
$
"{SettingString.TakeShelfOff}_{JobParam.CurTargetNode.Name}"
);
TakeShelfOffAtLift
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
}
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_06_02_TakeShelfOffAtLift
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_06_02_TakeShelfOffAtLift
))
...
@@ -382,15 +293,10 @@ namespace DeviceLibrary
...
@@ -382,15 +293,10 @@ namespace DeviceLibrary
manager
.
UploadManager
.
UploadTransportStatus
(
new
service
.
model
.
TransportStatus
(
agv
.
CurJob
.
JobParam
.
GetMissionInfo
().
missionId
,
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
,
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}卸下完成,准备离开"
;
runInfo
=
$
"料车在{JobParam.CurTargetNode.AliceName}卸下完成,准备离开"
;
//任务状态变更
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
到达电梯
,
out
string
msg
);
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
;
JobRunStep
.
Msg
=
runInfo
;
}
}
}
}
...
@@ -400,12 +306,6 @@ namespace DeviceLibrary
...
@@ -400,12 +306,6 @@ namespace DeviceLibrary
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
END
);
JobRunStep
.
ToNextStep
(
RunStep
.
END
);
bool
rtn
=
false
;
bool
rtn
=
false
;
if
(
JobParam
.
GetMissionInfo
().
projectType
.
Equals
(
service
.
model
.
ProjectType
.
成品入库
))
{
//AGV离开
rtn
=
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
,
false
);
}
else
{
{
//AGV离开
//AGV离开
rtn
=
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
rtn
=
lift
.
LiftContext
.
AGVLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
...
@@ -414,6 +314,7 @@ namespace DeviceLibrary
...
@@ -414,6 +314,7 @@ namespace DeviceLibrary
//任务状态变更
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
电梯运行
,
out
string
msg
);
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
电梯运行
,
out
string
msg
);
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
ClearLiftNodeOccupied
(
agv
);
}
}
}
}
#
endregion
#
endregion
...
@@ -422,7 +323,7 @@ namespace DeviceLibrary
...
@@ -422,7 +323,7 @@ namespace DeviceLibrary
JobRunStep
.
EndJob
();
JobRunStep
.
EndJob
();
return
null
;
return
null
;
}
}
return
this
;
return
job
;
}
}
}
}
...
...
DeviceLibrary/bean/job/ShelfBackLiftToStoreJob.cs
查看文件 @
ab1c3da
using
Common
;
using
Common
;
using
DeviceLibrary.manager
;
using
DeviceLibrary.manager
;
using
System.Data.Entity.Infrastructure
;
namespace
DeviceLibrary.bean.job
namespace
DeviceLibrary.bean.job
{
{
...
@@ -20,6 +21,7 @@ namespace DeviceLibrary.bean.job
...
@@ -20,6 +21,7 @@ namespace DeviceLibrary.bean.job
}
}
public
override
Job
Run
(
AgvInfo
agv
)
public
override
Job
Run
(
AgvInfo
agv
)
{
{
Job
job
=
this
;
agv
.
SetJobContext
(
new
bean
.
agv
.
JobContext
()
agv
.
SetJobContext
(
new
bean
.
agv
.
JobContext
()
{
{
MissionId
=
JobParam
.
GetMissionInfo
().
missionId
,
MissionId
=
JobParam
.
GetMissionInfo
().
missionId
,
...
@@ -31,10 +33,35 @@ namespace DeviceLibrary.bean.job
...
@@ -31,10 +33,35 @@ namespace DeviceLibrary.bean.job
});
});
if
(
JobRunStep
.
IsStep
(
RunStep
.
NONE
))
if
(
JobRunStep
.
IsStep
(
RunStep
.
NONE
))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
ShelfBack_LiftToStore_01_ToLift
);
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Name
))
runInfo
=
$
"任务开始:去{JobParam.SrcNode.AliceName}"
;
{
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
ToNextStep
(
RunStep
.
ShelfBack_LiftToStore_01_ToStandby
);
AllocateTask
(
agv
,
$
"{JobParam.SrcNode.Name}"
);
runInfo
=
$
"{JobParam.SrcNode.AliceName}有小车,去待机点"
;
JobRunStep
.
Msg
=
runInfo
;
ToStandby
(
agv
);
}
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
;
ToLift
(
agv
,
$
"{JobParam.SrcNode.Name}"
);
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
ShelfBack_LiftToStore_01_ToLift
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
ShelfBack_LiftToStore_01_ToLift
))
{
{
...
@@ -44,7 +71,7 @@ namespace DeviceLibrary.bean.job
...
@@ -44,7 +71,7 @@ namespace DeviceLibrary.bean.job
//上报状态
//上报状态
manager
.
UploadManager
.
UploadTransportStatus
(
new
service
.
model
.
TransportStatus
(
agv
.
CurJob
.
JobParam
.
GetMissionInfo
().
missionId
,
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
,
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},等待门开启"
;
runInfo
=
$
"到达{JobParam.SrcNode.AliceName},等待门开启"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
}
}
...
@@ -56,9 +83,9 @@ namespace DeviceLibrary.bean.job
...
@@ -56,9 +83,9 @@ namespace DeviceLibrary.bean.job
JobRunStep
.
ToNextStep
(
RunStep
.
ShelfBack_LiftToStore_02_02_EnterLift
);
JobRunStep
.
ToNextStep
(
RunStep
.
ShelfBack_LiftToStore_02_02_EnterLift
);
runInfo
=
$
"{JobParam.SrcNode.AliceName}门已开启,去取料点"
;
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
);
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
返回电梯到达
,
out
string
msg
);
AllocateTask
(
agv
,
$
"{JobParam.SrcNode.Name}_{SettingString.PutShelfOn
}"
);
ToPutShelfOn
(
agv
,
$
"{JobParam.SrcNode.Name
}"
);
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
}
}
}
}
...
@@ -84,7 +111,8 @@ namespace DeviceLibrary.bean.job
...
@@ -84,7 +111,8 @@ namespace DeviceLibrary.bean.job
$
"电梯取车"
));
$
"电梯取车"
));
runInfo
=
$
"在{JobParam.SrcNode.AliceName}取料车完成,准备离开"
;
runInfo
=
$
"在{JobParam.SrcNode.AliceName}取料车完成,准备离开"
;
JobRunStep
.
Msg
=
runInfo
;
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
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
ShelfBack_LiftToStore_04_LeaveLift
))
...
@@ -93,20 +121,38 @@ namespace DeviceLibrary.bean.job
...
@@ -93,20 +121,38 @@ namespace DeviceLibrary.bean.job
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
ShelfBack_LiftToStore_05_CloseLiftDoor
);
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}"
;
runInfo
=
$
"离开{JobParam.SrcNode.AliceName},关闭电梯门:{rtn}"
;
//任务状态变更
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
返回离开电梯
,
out
string
msg
);
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
返回离开电梯
,
out
string
msg
);
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
ClearLiftNodeOccupied
(
agv
);
}
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
ShelfBack_LiftToStore_05_CloseLiftDoor
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
ShelfBack_LiftToStore_05_CloseLiftDoor
))
{
{
if
(
NodeManager
.
NeedCrossDoor
(
agv
,
JobParam
.
SrcNode
,
JobParam
.
CurTargetNode
,
out
bool
isin
,
out
bool
isair
))
{
JobParam
.
CrossDoor
.
CurNode
=
JobParam
.
SrcNode
;
JobParam
.
CrossDoor
.
NextNode
=
JobParam
.
CurTargetNode
;
JobParam
.
CrossDoor
.
IsIn
=
isin
;
JobParam
.
CrossDoor
.
IsAir
=
isair
;
GenJobCallBack
(
this
.
GetType
(),
RunStep
.
ShelfBack_LiftToStore_06_CrossDoor
,
JobParam
);
job
=
new
CrossDoorJob
(
JobParam
);
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
ShelfBack_LiftToStore_06_CrossDoor
);
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
ShelfBack_LiftToStore_06_CrossDoor
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
ShelfBack_LiftToStore_06_ToStore
);
JobRunStep
.
ToNextStep
(
RunStep
.
ShelfBack_LiftToStore_06_ToStore
);
runInfo
=
$
"
关闭{JobParam.SrcNode.AliceName}门完成,
去{JobParam.CurTargetNode.AliceName}放料点"
;
runInfo
=
$
"去{JobParam.CurTargetNode.AliceName}放料点"
;
//任务状态变更
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
返回起始地
,
out
string
msg
);
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
返回起始地
,
out
string
msg
);
AllocateTask
(
agv
,
$
"{JobParam.CurTargetNode.Name}_{SettingString.TakeShelfOff
}"
);
ToTakeShelfOff
(
agv
,
$
"{JobParam.CurTargetNode.Name
}"
);
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
ShelfBack_LiftToStore_06_ToStore
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
ShelfBack_LiftToStore_06_ToStore
))
...
@@ -117,7 +163,7 @@ namespace DeviceLibrary.bean.job
...
@@ -117,7 +163,7 @@ namespace DeviceLibrary.bean.job
//上报状态
//上报状态
manager
.
UploadManager
.
UploadTransportStatus
(
new
service
.
model
.
TransportStatus
(
agv
.
CurJob
.
JobParam
.
GetMissionInfo
().
missionId
,
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
,
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}放料点,卸下料车"
;
runInfo
=
$
"到达{JobParam.CurTargetNode.AliceName}放料点,卸下料车"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
SettingString
.
TakeShelfOff
);
AllocateTask
(
agv
,
SettingString
.
TakeShelfOff
);
...
@@ -127,23 +173,45 @@ namespace DeviceLibrary.bean.job
...
@@ -127,23 +173,45 @@ namespace DeviceLibrary.bean.job
{
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
END
);
runInfo
=
$
"在{JobParam.CurTargetNode.AliceName}卸下料车完成"
;
runInfo
=
$
"任务结束:在{JobParam.CurTargetNode.AliceName}卸下料车完成"
;
//任务状态变更
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
完成
,
out
string
msg
);
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
完成
,
out
string
msg
);
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
//上报状态
if
(
IsProjectType
(
service
.
model
.
ProjectType
.
移远成品入库
))
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
,
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}"
));
}
else
//上报状态
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
(
NodeManager
.
NeedCrossDoor
(
agv
,
JobParam
.
CurTargetNode
,
JobParam
.
SrcNode
,
out
bool
isin
,
out
bool
isair
))
{
JobParam
.
CrossDoor
.
CurNode
=
JobParam
.
CurTargetNode
;
JobParam
.
CrossDoor
.
NextNode
=
JobParam
.
SrcNode
;
JobParam
.
CrossDoor
.
IsIn
=
isin
;
JobParam
.
CrossDoor
.
IsAir
=
isair
;
GenJobCallBack
(
this
.
GetType
(),
RunStep
.
ShelfBack_LiftToStore_07_CrossDoor
,
JobParam
);
job
=
new
CrossDoorJob
(
JobParam
);
}
else
{
JobRunStep
.
ToNextStep
(
RunStep
.
ShelfBack_LiftToStore_07_CrossDoor
);
}
}
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
ShelfBack_LiftToStore_07_CrossDoor
))
{
JobRunStep
.
ToNextStep
(
RunStep
.
END
);
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
END
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
END
))
{
{
JobRunStep
.
EndJob
();
job
=
null
;
return
null
;
}
}
return
this
;
return
job
;
}
}
}
}
}
}
DeviceLibrary/bean/job/StandyJob.cs
查看文件 @
ab1c3da
...
@@ -27,14 +27,14 @@ namespace DeviceLibrary
...
@@ -27,14 +27,14 @@ namespace DeviceLibrary
/// <param name="agv"></param>
/// <param name="agv"></param>
public
override
Job
Run
(
AgvInfo
agv
)
public
override
Job
Run
(
AgvInfo
agv
)
{
{
agv
.
SetJobContext
(
new
bean
.
agv
.
JobContext
()
//
agv.SetJobContext(new bean.agv.JobContext()
{
//
{
AgvTask
=
agv
.
TaskRunState
.
Task
,
//
AgvTask = agv.TaskRunState.Task,
JobFullName
=
this
.
ToString
(),
//
JobFullName = this.ToString(),
JobStep
=
JobRunStep
.
PreStep
(),
//
JobStep = JobRunStep.PreStep(),
Name
=
agv
.
Name
,
//
Name = agv.Name,
JobParam
=
JobParam
//
JobParam=JobParam
});
//
});
if
(
JobRunStep
.
IsStep
(
RunStep
.
NONE
))
if
(
JobRunStep
.
IsStep
(
RunStep
.
NONE
))
{
{
{
{
...
@@ -43,7 +43,7 @@ namespace DeviceLibrary
...
@@ -43,7 +43,7 @@ namespace DeviceLibrary
JobRunStep
.
ToNextStep
(
RunStep
.
STANDBY_WAIT_REACH_STANDBY
);
JobRunStep
.
ToNextStep
(
RunStep
.
STANDBY_WAIT_REACH_STANDBY
);
runInfo
=
"从"
+
JobParam
.
SrcNode
+
"回到待机位"
;
runInfo
=
"从"
+
JobParam
.
SrcNode
+
"回到待机位"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
AllocateStandbyTask
(
agv
);
ToStandby
(
agv
);
}
}
}
}
...
...
DeviceLibrary/bean/job/SteelLiftToStorageJob.cs
查看文件 @
ab1c3da
...
@@ -294,7 +294,7 @@ namespace DeviceLibrary.bean.job
...
@@ -294,7 +294,7 @@ namespace DeviceLibrary.bean.job
{
{
if
(
agv
.
TaskRunState
.
CheckTaskFinished
(
agv
.
Name
))
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
);
JobRunStep
.
ToNextStep
(
RunStep
.
Steel_LiftToLine_19_ToStandby
);
runInfo
=
$
"{JobParam.SrcNode.AliceName}有车,去停留点"
;
runInfo
=
$
"{JobParam.SrcNode.AliceName}有车,去停留点"
;
...
@@ -319,7 +319,7 @@ namespace DeviceLibrary.bean.job
...
@@ -319,7 +319,7 @@ namespace DeviceLibrary.bean.job
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
Steel_LiftToLine_19_ToStandby
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
Steel_LiftToLine_19_ToStandby
))
{
{
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Alice
Name
))
if
(
TargetIsOccupied
(
agv
,
JobParam
.
SrcNode
.
Name
))
{
{
}
}
else
else
...
...
DeviceLibrary/bean/job/SteelLineToLiftJob.cs
查看文件 @
ab1c3da
...
@@ -36,7 +36,7 @@ namespace DeviceLibrary
...
@@ -36,7 +36,7 @@ namespace DeviceLibrary
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_01_ToLine
);
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_01_ToLine
);
runInfo
=
$
"任务开始:去{JobParam.SteelShelfNode.AliceName}的取料点"
;
runInfo
=
$
"任务开始:去{JobParam.SteelShelfNode.AliceName}的取料点"
;
AllocateTask
(
agv
,
$
"{JobParam.SteelShelfNode.Name}_{SettingString.PutShelfOn}"
);
ToPutShelfOn
(
agv
,
JobParam
.
SteelShelfNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
}
}
...
@@ -54,7 +54,7 @@ namespace DeviceLibrary
...
@@ -54,7 +54,7 @@ namespace DeviceLibrary
runInfo
=
$
"到达{JobParam.SrcNode.AliceName}的取料点,开始拾取料车"
;
runInfo
=
$
"到达{JobParam.SrcNode.AliceName}的取料点,开始拾取料车"
;
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
AllocateTask
(
agv
,
SettingString
.
PutShelfOn
);
PutShelfOn
(
agv
);
}
}
}
}
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_02_PutShelfOn
))
else
if
(
JobRunStep
.
IsStep
(
RunStep
.
LineToLift_02_PutShelfOn
))
...
@@ -67,7 +67,7 @@ namespace DeviceLibrary
...
@@ -67,7 +67,7 @@ namespace DeviceLibrary
service
.
model
.
TransportStatus
.
TypeStr
.
status
,
agv
.
Name
,
agv
.
Place
.
Name
,
service
.
model
.
TransportStatus
.
ModeStr
.
auto
,
service
.
model
.
TransportStatus
.
TypeStr
.
status
,
agv
.
Name
,
agv
.
Place
.
Name
,
service
.
model
.
TransportStatus
.
ModeStr
.
auto
,
$
"取车"
));
$
"取车"
));
runInfo
=
$
"在{JobParam.SrcNode.AliceName}拾取料车完成,去{JobParam.SrcNode.AliceName}放料点"
;
runInfo
=
$
"在{JobParam.SrcNode.AliceName}拾取料车完成,去{JobParam.SrcNode.AliceName}放料点"
;
AllocateTask
(
agv
,
$
"{JobParam.SrcNode.Name}_{SettingString.TakeShelfOff}"
);
ToTakeShelfOff
(
agv
,
JobParam
.
SrcNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
}
}
}
}
...
@@ -113,7 +113,7 @@ namespace DeviceLibrary
...
@@ -113,7 +113,7 @@ namespace DeviceLibrary
runInfo
=
$
"在{JobParam.SrcNode.AliceName}确认完成,去{JobParam.CurTargetNode.AliceName}"
;
runInfo
=
$
"在{JobParam.SrcNode.AliceName}确认完成,去{JobParam.CurTargetNode.AliceName}"
;
//任务状态变更
//任务状态变更
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
前往电梯
,
out
string
msg
);
MissionManager
.
SetMissionState
(
JobParam
.
GetMissionInfo
().
missionId
,
service
.
model
.
MissionState
.
前往电梯
,
out
string
msg
);
AllocateTask
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
ToLift
(
agv
,
JobParam
.
CurTargetNode
.
Name
);
JobRunStep
.
Msg
=
runInfo
;
JobRunStep
.
Msg
=
runInfo
;
}
}
...
@@ -143,7 +143,7 @@ namespace DeviceLibrary
...
@@ -143,7 +143,7 @@ namespace DeviceLibrary
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_01_ToTemp1
);
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_05_01_ToTemp1
);
SetLiftOccupied
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
SetLiftOccupied
(
JobParam
.
CurTargetNode
.
Name
,
agv
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门。电梯内有料车,去临时点1的卸料点,准备卸下车上料车"
;
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
);
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetMission
(
liftStatus
.
missionId
);
if
(
missionInfo
!=
null
)
if
(
missionInfo
!=
null
)
{
{
...
@@ -157,7 +157,7 @@ namespace DeviceLibrary
...
@@ -157,7 +157,7 @@ namespace DeviceLibrary
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_06_01_EnterLift
);
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_06_01_EnterLift
);
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门,到放料点"
;
runInfo
=
$
"{JobParam.CurTargetNode.AliceName}已开门,到放料点"
;
JobRunStep
.
Msg
=
runInfo
;
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
()))
else
if
(
JobRunStep
.
IsTimeOut
(
20
)
&&
!
lift
.
LiftContext
.
CheckIfRequestOk
(
JobParam
.
CurTargetNode
.
Name
,
JobParam
.
GetMissionInfo
()))
...
...
DeviceLibrary/bean/job/SwitchShelfJob.cs
0 → 100644
查看文件 @
ab1c3da
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
))
{
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
查看文件 @
ab1c3da
using
Common
;
using
Common
;
using
DeviceLibrary.bean.job
;
using
DeviceLibrary.bean.job
;
using
DeviceLibrary.lift
;
using
DeviceLibrary.manager
;
using
DeviceLibrary.manager
;
using
System
;
namespace
DeviceLibrary.bean.jobType
namespace
DeviceLibrary.bean.jobType
{
{
...
@@ -15,19 +17,26 @@ namespace DeviceLibrary.bean.jobType
...
@@ -15,19 +17,26 @@ namespace DeviceLibrary.bean.jobType
return
null
;
return
null
;
else
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
);
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
ShelfBackMission
(
agv
);
if
(
missionInfo
!=
null
)
if
(
missionInfo
!=
null
)
{
{
if
(!
liftname
.
Equals
(
missionInfo
?.
liftName
))
if
(!
liftname
.
Equals
(
missionInfo
?.
liftName
))
return
null
;
return
null
;
if
(
CheckHasSameJob
(
agv
,
liftname
))
{
return
null
;
}
if
(
AgvAtPlace
(
agv
,
liftname
))
return
null
;
//if (service.model.MissionInfo.IsFinishedProdcut(missionInfo))
//if (service.model.MissionInfo.IsFinishedProdcut(missionInfo))
// return null;
// return null;
Node
src
=
manager
.
NodeManager
.
GetNode
(
liftname
,
NodeType
.
Lift
);
Node
src
=
manager
.
NodeManager
.
GetNode
(
liftname
,
NodeType
.
Lift
);
string
[]
dests
=
lift
.
destinationPoint
.
Split
(
','
);
string
[]
dests
=
lift
.
destinationPoint
.
Split
(
','
);
Node
dest
=
manager
.
NodeManager
.
GetNode
(
dests
.
Length
>
1
?
dests
[
0
]
:
lift
.
destinationPoint
,
NodeType
.
Node
);
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
);
LiftContext
.
SetLiftNodeOccupied
(
agv
,
liftname
);
MissionManager
.
SetMissionOccupied
(
missionInfo
,
agv
);
MissionManager
.
SetMissionOccupied
(
missionInfo
,
agv
);
return
new
ShelfBackLiftToStoreJob
(
jobParam
);
return
new
ShelfBackLiftToStoreJob
(
jobParam
);
}
}
...
@@ -35,5 +44,22 @@ namespace DeviceLibrary.bean.jobType
...
@@ -35,5 +44,22 @@ namespace DeviceLibrary.bean.jobType
}
}
return
null
;
return
null
;
}
}
bool
CheckHasSameJob
(
AgvInfo
agv
,
string
liftname
)
{
return
false
;
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
查看文件 @
ab1c3da
...
@@ -21,13 +21,13 @@ namespace DeviceLibrary.bean.jobType
...
@@ -21,13 +21,13 @@ namespace DeviceLibrary.bean.jobType
{
{
if
(
agv
.
Scope
.
Floor
.
Equals
(
1
)
&&
agv
.
HasFinishedShelfInLift
(
out
string
liftname
,
out
lift
.
LiftStatus
lift
))
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
);
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetF1SendFullFinishedC1ToD2Mission
(
agv
);
if
(
missionInfo
!=
null
)
if
(
missionInfo
!=
null
)
{
{
if
(
TargetIsOccupied
(
agv
,
SettingString
.
LIFT_C1
))
//TargetIsOccupied(agv, SettingString.LIFT_D2) ||
{
return
null
;
}
if
(
service
.
model
.
MissionInfo
.
IsFinishedProdcut
(
missionInfo
))
if
(
service
.
model
.
MissionInfo
.
IsFinishedProdcut
(
missionInfo
))
{
{
Node
src
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
LIFT_C1
,
NodeType
.
Lift
);
Node
src
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
LIFT_C1
,
NodeType
.
Lift
);
...
@@ -43,10 +43,11 @@ namespace DeviceLibrary.bean.jobType
...
@@ -43,10 +43,11 @@ namespace DeviceLibrary.bean.jobType
}
}
bool
CheckHasSameJob
(
AgvInfo
agv
)
bool
CheckHasSameJob
(
AgvInfo
agv
)
{
{
return
false
;
try
try
{
{
AgvInfo
agvInfo
=
AGVManager
.
agvInfo
.
Find
(
s
=>
s
.
Auto
&&
s
.
Scope
.
Workshop
.
Equals
(
agv
.
Scope
.
Workshop
)
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
.
IP
.
Equals
(
agv
.
IP
)
&&
s
.
CurJob
!=
null
&&
(
s
.
CurJob
is
F1LiftC1ToLiftD2Job
||
s
.
CurJob
is
F1LiftD2ToLiftC1Job
));
//|| (s.CurJob is LineToLiftJob && SettingString.LIFT_C1.Equals(s.CurJob?.JobParam?.GetMissionInfo()?.liftName??"")
if
(
agvInfo
!=
null
)
if
(
agvInfo
!=
null
)
return
true
;
return
true
;
}
}
...
...
DeviceLibrary/bean/jobType/F1LiftD2ToLiftC1JobType.cs
查看文件 @
ab1c3da
...
@@ -19,10 +19,10 @@ namespace DeviceLibrary.bean.jobType
...
@@ -19,10 +19,10 @@ namespace DeviceLibrary.bean.jobType
{
{
if
(
agv
.
Scope
.
Floor
.
Equals
(
1
)
&&
agv
.
HasFinishedEmptyShelfInLift
(
out
string
liftname
,
out
lift
.
LiftStatus
lift
))
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))
if
(
TargetIsOccupied
(
agv
,
SettingString
.
LIFT_D2
))
//
{
{
//
return null;
return
null
;
//
}
}
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetF1FinishedD2ToC1Mission
(
agv
);
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetF1FinishedD2ToC1Mission
(
agv
);
if
(
missionInfo
!=
null
)
if
(
missionInfo
!=
null
)
{
{
...
@@ -38,10 +38,11 @@ namespace DeviceLibrary.bean.jobType
...
@@ -38,10 +38,11 @@ namespace DeviceLibrary.bean.jobType
}
}
bool
CheckHasSameJob
(
AgvInfo
agv
)
bool
CheckHasSameJob
(
AgvInfo
agv
)
{
{
return
false
;
try
try
{
{
AgvInfo
agvInfo
=
AGVManager
.
agvInfo
.
Find
(
s
=>
s
.
Auto
&&
s
.
Scope
.
Workshop
.
Equals
(
agv
.
Scope
.
Workshop
)
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
F1LiftC1ToLiftD2
Job
));
&&
!
s
.
IP
.
Equals
(
agv
.
IP
)
&&
s
.
CurJob
!=
null
&&
(
s
.
CurJob
is
F1LiftD2ToLiftC1Job
||
s
.
CurJob
is
F1LiftC1ToLiftD2Job
||
s
.
CurJob
is
LineToLift
Job
));
if
(
agvInfo
!=
null
)
if
(
agvInfo
!=
null
)
return
true
;
return
true
;
}
}
...
...
DeviceLibrary/bean/jobType/JobType.cs
查看文件 @
ab1c3da
using
Common
;
using
Common
;
using
DeviceLibrary.lift
;
using
System
;
using
System
;
using
System.Collections.Generic
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Linq
;
...
@@ -17,39 +18,57 @@ namespace DeviceLibrary
...
@@ -17,39 +18,57 @@ namespace DeviceLibrary
{
{
return
null
;
return
null
;
}
}
//public bool HasRobotExecuteLiftTask(AgvInfo agvInfo,string liftName)
//{
// AGVManager.agvInfo.Find(s=>s.Auto&& !s.IP.Equals(agvInfo.IP)&&(agvInfo?.CurJob?.JobParam?.))
//}
/// <summary>
/// <summary>
///
检查其他机器人是否有电梯任务
///
目标点是否有小车
/// </summary>
/// </summary>
/// <param name="agv
Info
"></param>
/// <param name="agv"></param>
/// <param name="
liftn
ame"></param>
/// <param name="
targetN
ame"></param>
/// <returns>
true:有
</returns>
/// <returns></returns>
protected
bool
CheckOtherRobotState
(
AgvInfo
agvInfo
,
string
liftn
ame
)
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
try
{
{
AgvInfo
agvInfo1
=
allAgv
.
Find
(
s
=>
s
.
Place
!=
null
&&
s
.
Place
.
Name
.
Contains
(
liftname
));
return
LiftContext
.
OtherAGVIsInLift
(
agv
,
targetName
);
//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
;
}
}
catch
(
Exception
ex
)
catch
(
Exception
ex
)
{
{
foreach
(
var
item
in
allAgv
)
LogUtil
.
error
(
$
"TargetIsOccupied:{agv.Name},{JsonHelper.SerializeObject(AGVManager.agvInfo)}"
,
ex
);
return
false
;
}
}
/// <summary>
/// 只有去电梯取料料架使用
/// </summary>
/// <param name="agv"></param>
/// <param name="targetName"></param>
/// <returns></returns>
protected
bool
AgvAtPlace
(
AgvInfo
agv
,
string
targetName
)
{
try
{
if
(
LiftContext
.
OtherAGVIsInLift
(
agv
,
targetName
))
{
return
true
;
}
else
{
{
LogUtil
.
error
(
$
"CheckOtherRobotState,{agvInfo.Name},{liftname}: {JsonHelper.SerializeObject(item)}"
,
ex
);
AgvInfo
agvInfo
=
AGVManager
.
agvInfo
.
Find
(
s
=>
s
.
Auto
&&
!
s
.
IP
.
Equals
(
agv
.
IP
)
&&
agv
.
Scope
.
Workshop
.
Equals
(
s
.
Scope
.
Workshop
));
if
(
agvInfo
!=
null
)
{
if
(
agvInfo
?.
TaskRunState
?.
Task
?.
Name
.
Contains
(
targetName
)
??
false
)
{
return
true
;
}
}
return
false
;
}
}
return
true
;
}
}
return
false
;
catch
(
Exception
ex
)
{
LogUtil
.
error
(
$
"AgvAtPlace:{agv.Name},{JsonHelper.SerializeObject(AGVManager.agvInfo)}"
,
ex
);
return
false
;
}
}
}
}
}
}
}
DeviceLibrary/bean/jobType/LiftToLinesJobType.cs
查看文件 @
ab1c3da
...
@@ -6,6 +6,7 @@ using DeviceLibrary.manager;
...
@@ -6,6 +6,7 @@ using DeviceLibrary.manager;
using
DeviceLibrary.bean
;
using
DeviceLibrary.bean
;
using
DeviceLibrary.bean.job
;
using
DeviceLibrary.bean.job
;
using
System
;
using
System
;
using
DeviceLibrary.lift
;
namespace
DeviceLibrary
namespace
DeviceLibrary
{
{
...
@@ -26,6 +27,8 @@ namespace DeviceLibrary
...
@@ -26,6 +27,8 @@ namespace DeviceLibrary
return
null
;
return
null
;
else
if
(
CheckHasSameJob
(
agv
))
else
if
(
CheckHasSameJob
(
agv
))
return
null
;
return
null
;
else
if
(
CheckHasSendJob
(
agv
))
return
null
;
else
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) &&
...
@@ -35,7 +38,7 @@ namespace DeviceLibrary
...
@@ -35,7 +38,7 @@ namespace DeviceLibrary
{
{
if
(!
liftname
.
Equals
(
missionInfo
?.
liftName
))
if
(!
liftname
.
Equals
(
missionInfo
?.
liftName
))
return
null
;
return
null
;
if
(
TargetIsOccupied
(
agv
,
liftname
))
if
(
AgvAtPlace
(
agv
,
liftname
))
return
null
;
return
null
;
if
(
service
.
model
.
MissionInfo
.
IsFinishedProdcut
(
missionInfo
))
if
(
service
.
model
.
MissionInfo
.
IsFinishedProdcut
(
missionInfo
))
return
null
;
return
null
;
...
@@ -59,6 +62,9 @@ namespace DeviceLibrary
...
@@ -59,6 +62,9 @@ namespace DeviceLibrary
}
}
}
}
LiftContext
.
SetLiftNodeOccupied
(
agv
,
liftname
);
MissionManager
.
SetMissionOccupied
(
missionInfo
,
agv
);
MissionManager
.
Log
.
Info
(
$
"执行任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}"
);
return
new
LiftToLinesJob
(
jobParam
);
return
new
LiftToLinesJob
(
jobParam
);
}
}
}
}
...
@@ -68,12 +74,13 @@ namespace DeviceLibrary
...
@@ -68,12 +74,13 @@ namespace DeviceLibrary
bool
CheckHasSameJob
(
AgvInfo
agv
)
bool
CheckHasSameJob
(
AgvInfo
agv
)
{
{
return
false
;
try
try
{
{
if
(
agv
.
Scope
.
Workshop
.
Equals
(
"1F"
))
if
(
agv
.
Scope
.
Workshop
.
Equals
(
"1F"
))
{
{
AgvInfo
agvInfo
=
AGVManager
.
agvInfo
.
Find
(
s
=>
s
.
Auto
&&
s
.
Scope
.
Workshop
.
Equals
(
agv
.
Scope
.
Workshop
)
AgvInfo
agvInfo
=
AGVManager
.
agvInfo
.
Find
(
s
=>
s
.
Auto
&&
!
s
.
IP
.
Equals
(
agv
.
IP
)
&&
s
.
Scope
.
Workshop
.
Equals
(
agv
.
Scope
.
Workshop
)
&&
s
.
CurJob
!=
null
&&
(
s
.
CurJob
is
LiftToLinesJob
)
&&
s
.
Scope
.
Workshop
.
Equals
(
"1F"
));
&&
s
.
CurJob
!=
null
&&
(
s
.
CurJob
is
LiftToLinesJob
));
if
(
agvInfo
!=
null
)
if
(
agvInfo
!=
null
)
return
true
;
return
true
;
}
}
...
@@ -88,34 +95,32 @@ namespace DeviceLibrary
...
@@ -88,34 +95,32 @@ namespace DeviceLibrary
}
}
return
false
;
return
false
;
}
}
bool
CheckHasSendJob
(
AgvInfo
agv
)
bool
TargetIsOccupied
(
AgvInfo
agv
,
string
targetName
)
{
{
return
false
;
try
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
)
AgvInfo
agvInfo
=
AGVManager
.
agvInfo
.
Find
(
s
=>
s
.
Auto
&&
!
s
.
IP
.
Equals
(
agv
.
IP
)&&
s
.
Scope
.
Workshop
.
Equals
(
agv
.
Scope
.
Workshop
)
&&
agv
.
Scope
.
Workshop
.
Equals
(
s
.
Scope
.
Workshop
)
&&
s
.
Scope
.
Equals
(
"1F"
));
&&
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
!=
null
)
{
return
true
;
//if (agvInfo?.Place.Name.Contains(targetName) ?? false)
// return true;
if
(
agvInfo
?.
TaskRunState
?.
Task
?.
Name
.
Equals
(
targetName
)
??
false
)
{
return
true
;
}
}
}
}
else
else
return
false
;
{
return
false
;
AgvInfo
agvInfo
=
AGVManager
.
agvInfo
.
Find
(
s
=>
s
.
Auto
&&
!
s
.
IP
.
Equals
(
agv
.
IP
)
&&
s
.
Scope
.
Workshop
.
Equals
(
agv
.
Scope
.
Workshop
)
&&
s
.
CurJob
!=
null
&&
(
s
.
CurJob
is
LineToLiftJob
));
if
(
agvInfo
!=
null
)
return
true
;
}
}
}
catch
(
Exception
ex
)
catch
{
{
LogUtil
.
error
(
$
"TargetIsOccupied:{agv.Name},{JsonHelper.SerializeObject(AGVManager.agvInfo)}"
,
ex
);
return
false
;
return
false
;
}
}
return
false
;
}
}
}
}
}
}
DeviceLibrary/bean/jobType/LineToLiftJobType.cs
查看文件 @
ab1c3da
using
Common
;
using
Common
;
using
DeviceLibrary.bean.job
;
using
DeviceLibrary.bean.job
;
using
DeviceLibrary.lift
;
using
DeviceLibrary.manager
;
using
DeviceLibrary.manager
;
using
System
;
using
System
;
using
System.Collections.Generic
;
using
System.Collections.Generic
;
...
@@ -18,6 +19,8 @@ namespace DeviceLibrary.bean.jobType
...
@@ -18,6 +19,8 @@ namespace DeviceLibrary.bean.jobType
{
{
if
(!
agv
.
IsIdle
())
if
(!
agv
.
IsIdle
())
return
null
;
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
);
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetLineToLiftMission
(
agv
,
out
string
liftname
);
if
(
missionInfo
!=
null
)
if
(
missionInfo
!=
null
)
{
{
...
@@ -35,10 +38,10 @@ namespace DeviceLibrary.bean.jobType
...
@@ -35,10 +38,10 @@ namespace DeviceLibrary.bean.jobType
Common
.
LogUtil
.
error
(
$
"无法生成任务,电梯不存在:{liftname}"
);
Common
.
LogUtil
.
error
(
$
"无法生成任务,电梯不存在:{liftname}"
);
return
null
;
return
null
;
}
}
if
(
CheckOtherRobotState
(
agv
,
liftname
))
//if (TargetIsOccupied
(agv, liftname))
{
//
{
return
null
;
//
return null;
}
//
}
JobParam
jobParam
=
new
JobParam
(
src
,
dest
,
null
,
missionInfo
);
JobParam
jobParam
=
new
JobParam
(
src
,
dest
,
null
,
missionInfo
);
MissionManager
.
SetMissionOccupied
(
missionInfo
,
agv
);
MissionManager
.
SetMissionOccupied
(
missionInfo
,
agv
);
MissionManager
.
Log
.
Info
(
$
"执行任务[{agv.Name}][LineToLiftJobType]{JsonHelper.SerializeObject(missionInfo)}"
);
MissionManager
.
Log
.
Info
(
$
"执行任务[{agv.Name}][LineToLiftJobType]{JsonHelper.SerializeObject(missionInfo)}"
);
...
@@ -49,19 +52,19 @@ namespace DeviceLibrary.bean.jobType
...
@@ -49,19 +52,19 @@ namespace DeviceLibrary.bean.jobType
return
null
;
return
null
;
}
}
bool
CheckHasSameJob
(
AgvInfo
agv
,
string
liftname
)
bool
CheckHasSameJob
(
AgvInfo
agv
,
string
liftname
)
{
{
return
false
;
try
try
{
{
if
(
agv
.
Scope
.
Workshop
.
Equals
(
"1F"
))
if
(
agv
.
Scope
.
Workshop
.
Equals
(
"1F"
))
{
{
AgvInfo
agvInfo
=
AGVManager
.
agvInfo
.
Find
(
s
=>
s
.
Auto
&&
s
.
Scope
.
Workshop
.
Equals
(
agv
.
Scope
.
Workshop
)
&&
AgvInfo
agvInfo
=
AGVManager
.
agvInfo
.
Find
(
s
=>
s
.
Auto
&&
s
.
Scope
.
Workshop
.
Equals
(
agv
.
Scope
.
Workshop
)
&&
s
.
Scope
.
Workshop
.
Equals
(
"1F"
)
!
s
.
IP
.
Equals
(
agv
.
IP
)&&
s
.
CurJob
!=
null
&&
(
s
.
CurJob
is
F1LiftC1ToLiftD2Job
&&
s
.
CurJob
!=
null
&&
(
s
.
CurJob
is
LineToLiftJob
||
s
.
CurJob
is
F1LiftC1ToLiftD2Job
||
s
.
CurJob
is
F1LiftD2ToLiftC1Job
));
//s.CurJob is LineToLiftJob ||
||
s
.
CurJob
is
F1LiftD2ToLiftC1Job
));
if
(
agvInfo
!=
null
)
if
(
agvInfo
!=
null
)
{
{
if
(
agvInfo
?.
CurJob
?.
JobParam
?.
GetMissionInfo
()?.
liftName
?.
Equals
(
liftname
)??
true
)
if
(
agvInfo
?.
CurJob
?.
JobParam
?.
GetMissionInfo
()?.
liftName
?.
Equals
(
liftname
)
??
true
)
{
{
return
true
;
return
true
;
}
}
...
@@ -71,11 +74,19 @@ namespace DeviceLibrary.bean.jobType
...
@@ -71,11 +74,19 @@ namespace DeviceLibrary.bean.jobType
// return true;
// return true;
}
}
else
else
return
false
;
{
AgvInfo
agvInfo
=
AGVManager
.
agvInfo
.
Find
(
s
=>
s
.
Auto
&&
s
.
Scope
.
Workshop
.
Equals
(
agv
.
Scope
.
Workshop
)
&&
!
s
.
IP
.
Equals
(
agv
.
IP
)
&&
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
true
;
}
}
return
false
;
return
false
;
...
...
DeviceLibrary/bean/jobType/ShelfBuffToLiftJobType.cs
0 → 100644
查看文件 @
ab1c3da
using
Common
;
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.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)}"
);
if
(
missionInfo
.
projectType
.
Equals
(
ProjectType
.
移远成品入库
))
{
jobParam
.
CurTargetNode
=
manager
.
NodeManager
.
GetNode
(
SettingString
.
LIFT_D2
,
NodeType
.
Lift
);
F1LiftC1ToLiftD2Job
job
=
new
F1LiftC1ToLiftD2Job
(
jobParam
);
job
.
JobRunStep
.
ToNextStep
(
RunStep
.
S1F_LiftC1ToLiftD2_Buff
);
return
job
;
}
else
return
new
LineToLiftJob
(
jobParam
);
}
return
null
;
}
bool
CheckHasSameJob
(
AgvInfo
agv
,
string
liftname
)
{
return
false
;
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
查看文件 @
ab1c3da
...
@@ -5,6 +5,7 @@ using System.Linq;
...
@@ -5,6 +5,7 @@ using System.Linq;
using
System.Text
;
using
System.Text
;
using
System.Threading
;
using
System.Threading
;
using
System.Threading.Tasks
;
using
System.Threading.Tasks
;
using
System.Web.Management
;
using
static
DeviceLibrary
.
OpManager
;
using
static
DeviceLibrary
.
OpManager
;
namespace
DeviceLibrary.lift
namespace
DeviceLibrary.lift
...
@@ -41,11 +42,92 @@ namespace DeviceLibrary.lift
...
@@ -41,11 +42,92 @@ namespace DeviceLibrary.lift
{
{
if
(
liftStatus
?.
HasEmptyFinishedShelf
??
false
)
//D2电梯有成品空架子,不返回门状态
if
(
liftStatus
?.
HasEmptyFinishedShelf
??
false
)
//D2电梯有成品空架子,不返回门状态
{
{
//返回一个成品任务id
liftStatus
.
missionId
=
manager
.
MissionManager
.
GetMissionIdByEmptyFinishedShelfInLift
(
SettingString
.
LIFT_C1
);
return
true
;
return
true
;
}
}
}
}
return
false
;
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>
/// 电梯是否开门
/// 电梯是否开门
/// </summary>
/// </summary>
...
@@ -79,7 +161,7 @@ namespace DeviceLibrary.lift
...
@@ -79,7 +161,7 @@ namespace DeviceLibrary.lift
/// <returns>true:是</returns>
/// <returns>true:是</returns>
public
static
bool
IsOccupied
(
AgvInfo
agv
,
string
liftId
)
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>
/// <summary>
/// 请求使用电梯
/// 请求使用电梯
...
@@ -135,6 +217,58 @@ namespace DeviceLibrary.lift
...
@@ -135,6 +217,58 @@ namespace DeviceLibrary.lift
return
rtn
;
return
rtn
;
}
}
/// <summary>
/// <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>
/// </summary>
/// <param name="missionInfo"></param>
/// <param name="missionInfo"></param>
...
@@ -314,19 +448,19 @@ namespace DeviceLibrary.lift
...
@@ -314,19 +448,19 @@ namespace DeviceLibrary.lift
/// <param name="agvIp"></param>
/// <param name="agvIp"></param>
public
static
void
SetLiftOccupiedAgv
(
string
liftId
,
string
agvIp
)
public
static
void
SetLiftOccupiedAgv
(
string
liftId
,
string
agvIp
)
{
{
lifts
[
liftId
].
Occupied
Agv
=
agvIp
;
lifts
[
liftId
].
Using
Agv
=
agvIp
;
Common
.
LogUtil
.
info
(
$
"
设置电梯占用
:{liftId},{agvIp}【{JsonHelper.SerializeObject(lifts)}】"
);
Common
.
LogUtil
.
info
(
$
"
使用电梯
:{liftId},{agvIp}【{JsonHelper.SerializeObject(lifts)}】"
);
}
}
public
static
void
ResetLiftOccupiedAgv
(
string
liftId
)
public
static
void
ResetLiftOccupiedAgv
(
string
liftId
)
{
{
try
try
{
{
lifts
[
liftId
].
Occupied
Agv
=
""
;
lifts
[
liftId
].
Using
Agv
=
""
;
Common
.
LogUtil
.
info
(
$
"清除
电梯占用
:{liftId}【{JsonHelper.SerializeObject(lifts)}】"
);
Common
.
LogUtil
.
info
(
$
"清除
使用电梯
:{liftId}【{JsonHelper.SerializeObject(lifts)}】"
);
}
}
catch
(
Exception
ex
)
catch
(
Exception
ex
)
{
{
Common
.
LogUtil
.
error
(
$
"清除
电梯占用
失败:{liftId}"
,
ex
);
Common
.
LogUtil
.
error
(
$
"清除
使用电梯
失败:{liftId}"
,
ex
);
}
}
}
}
public
static
void
ResetLiftOccupiedAgv
(
AgvInfo
agv
)
public
static
void
ResetLiftOccupiedAgv
(
AgvInfo
agv
)
...
@@ -335,17 +469,17 @@ namespace DeviceLibrary.lift
...
@@ -335,17 +469,17 @@ namespace DeviceLibrary.lift
{
{
foreach
(
var
item
in
lifts
.
Values
)
foreach
(
var
item
in
lifts
.
Values
)
{
{
if
(
agv
.
IP
.
Equals
(
item
.
Occupied
Agv
))
if
(
agv
.
IP
.
Equals
(
item
.
Using
Agv
))
{
{
item
.
Occupied
Agv
=
""
;
item
.
Using
Agv
=
""
;
Common
.
LogUtil
.
info
(
$
"{agv.Name}清除
电梯占用
:【{JsonHelper.SerializeObject(lifts)}】"
);
Common
.
LogUtil
.
info
(
$
"{agv.Name}清除
使用电梯
:【{JsonHelper.SerializeObject(lifts)}】"
);
}
}
}
}
}
}
catch
(
Exception
ex
)
catch
(
Exception
ex
)
{
{
Common
.
LogUtil
.
error
(
$
"{agv.Name}清除
电梯占用
失败"
,
ex
);
Common
.
LogUtil
.
error
(
$
"{agv.Name}清除
使用电梯
失败"
,
ex
);
}
}
}
}
/// <summary>
/// <summary>
...
@@ -355,8 +489,8 @@ namespace DeviceLibrary.lift
...
@@ -355,8 +489,8 @@ namespace DeviceLibrary.lift
/// <returns>true:占用</returns>
/// <returns>true:占用</returns>
public
static
bool
CheckLiftOccupied
(
string
liftId
)
public
static
bool
CheckLiftOccupied
(
string
liftId
)
{
{
LogUtil
.
debug
(
$
"检查电梯{liftId}是否被
占
用:【{JsonHelper.SerializeObject(lifts)}】"
);
LogUtil
.
debug
(
$
"检查电梯{liftId}是否被
使
用:【{JsonHelper.SerializeObject(lifts)}】"
);
return
!
lifts
[
liftId
].
Occupied
Agv
.
Equals
(
""
);
return
!
lifts
[
liftId
].
Using
Agv
.
Equals
(
""
);
}
}
/// <summary>
/// <summary>
/// 获取电梯状态
/// 获取电梯状态
...
...
DeviceLibrary/lift/LiftInfo.cs
查看文件 @
ab1c3da
...
@@ -9,7 +9,11 @@ namespace DeviceLibrary.lift
...
@@ -9,7 +9,11 @@ namespace DeviceLibrary.lift
public
class
LiftInfo
public
class
LiftInfo
{
{
public
LiftStatus
LiftStatus
{
get
;
set
;
}
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
()
public
LiftInfo
()
{
{
LiftStatus
=
new
LiftStatus
();
LiftStatus
=
new
LiftStatus
();
...
...
DeviceLibrary/manager/AGVManager.cs
查看文件 @
ab1c3da
...
@@ -66,6 +66,7 @@ namespace DeviceLibrary
...
@@ -66,6 +66,7 @@ namespace DeviceLibrary
jobTypes
.
Add
(
new
F1LiftD2ToLiftC1JobType
());
jobTypes
.
Add
(
new
F1LiftD2ToLiftC1JobType
());
jobTypes
.
Add
(
new
LiftToLinesJobType
());
jobTypes
.
Add
(
new
LiftToLinesJobType
());
jobTypes
.
Add
(
new
BackLiftToLineJobType
());
jobTypes
.
Add
(
new
BackLiftToLineJobType
());
jobTypes
.
Add
(
new
ShelfBuffToLiftJobType
());
jobTypes
.
Add
(
new
LineToLiftJobType
());
jobTypes
.
Add
(
new
LineToLiftJobType
());
jobTypes
.
Add
(
new
LineOneToManyJobType
());
jobTypes
.
Add
(
new
LineOneToManyJobType
());
jobTypes
.
Add
(
new
SteelLineToLiftJobType
());
jobTypes
.
Add
(
new
SteelLineToLiftJobType
());
...
...
DeviceLibrary/manager/MissionManager.cs
查看文件 @
ab1c3da
...
@@ -255,6 +255,33 @@ namespace DeviceLibrary.manager
...
@@ -255,6 +255,33 @@ namespace DeviceLibrary.manager
}
}
return
null
;
return
null
;
}
}
/// <summary>
/// 获取料架缓存点的任务
/// </summary>
/// <param name="agv"></param>
/// <returns></returns>
public
static
MissionInfo
BuffToLiftMission
(
AgvInfo
agv
)
{
MissionInfo
missionInfo
=
null
;
try
{
if
(!
agv
.
Scope
.
Workshop
.
Equals
(
"1F"
))
return
null
;
var
missions
=
GetMissionInfos
().
Where
(
w
=>
w
.
state
!=
MissionState
.
中止
&&
w
.
state
!=
MissionState
.
取消
&&
w
.
state
!=
MissionState
.
完成
).
ToList
();
missionInfo
=
missions
.
Find
(
s
=>
(
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
)
static
bool
AgvCanGetMission
(
MissionInfo
missionInfo
)
{
{
return
string
.
IsNullOrEmpty
(
missionInfo
.
occupiedAgv
);
return
string
.
IsNullOrEmpty
(
missionInfo
.
occupiedAgv
);
...
@@ -276,8 +303,6 @@ namespace DeviceLibrary.manager
...
@@ -276,8 +303,6 @@ namespace DeviceLibrary.manager
&&
agv
.
Scope
.
Tasks
.
Contains
(
s
.
projectType
.
ToString
())
&&
!
s
.
projectType
.
Equals
(
ProjectType
.
移远成品入库
));
&&
agv
.
Scope
.
Tasks
.
Contains
(
s
.
projectType
.
ToString
())
&&
!
s
.
projectType
.
Equals
(
ProjectType
.
移远成品入库
));
if
(
missionInfo
!=
null
&&
AgvCanGetMission
(
missionInfo
))
if
(
missionInfo
!=
null
&&
AgvCanGetMission
(
missionInfo
))
{
{
SetMissionOccupied
(
missionInfo
,
agv
);
Log
.
Info
(
$
"执行任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}"
);
return
missionInfo
;
return
missionInfo
;
}
}
}
}
...
@@ -303,12 +328,11 @@ namespace DeviceLibrary.manager
...
@@ -303,12 +328,11 @@ namespace DeviceLibrary.manager
missionInfo
=
missions
.
Where
(
s
=>
(
agv
.
Scope
.
Workshop
.
Equals
(
s
.
sourceWorkshop
))
&&
missionInfo
=
missions
.
Where
(
s
=>
(
agv
.
Scope
.
Workshop
.
Equals
(
s
.
sourceWorkshop
))
&&
(!
s
.
projectType
.
Equals
(
ProjectType
.
钢网入库
)
&&
!
s
.
projectType
.
Equals
(
ProjectType
.
钢网领用
))
(!
s
.
projectType
.
Equals
(
ProjectType
.
钢网入库
)
&&
!
s
.
projectType
.
Equals
(
ProjectType
.
钢网领用
))
&&
&&
(
s
.
state
>=
MissionState
.
返回到达电梯内
&&
s
.
state
<=
MissionState
.
返回电梯到达
)
(
s
.
state
>=
MissionState
.
返回到达电梯内
&&
s
.
state
<=
MissionState
.
返回电梯到达
)
&&
agv
.
Scope
.
Tasks
.
Contains
(
s
.
projectType
.
ToString
())).
FirstOrDefault
();
&&
agv
.
Scope
.
Tasks
.
Contains
(
s
.
projectType
.
ToString
())).
FirstOrDefault
();
if
(
missionInfo
!=
null
&&
AgvCanGetMission
(
missionInfo
))
if
(
missionInfo
!=
null
&&
AgvCanGetMission
(
missionInfo
))
{
{
Log
.
Info
(
$
"执行料架返回任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}"
);
return
missionInfo
;
return
missionInfo
;
}
}
}
}
...
@@ -331,7 +355,6 @@ namespace DeviceLibrary.manager
...
@@ -331,7 +355,6 @@ namespace DeviceLibrary.manager
&&
agv
.
Scope
.
Tasks
.
Contains
(
s
.
projectType
.
ToString
())).
FirstOrDefault
();
&&
agv
.
Scope
.
Tasks
.
Contains
(
s
.
projectType
.
ToString
())).
FirstOrDefault
();
if
(
missionInfo
!=
null
&&
AgvCanGetMission
(
missionInfo
))
if
(
missionInfo
!=
null
&&
AgvCanGetMission
(
missionInfo
))
{
{
Log
.
Info
(
$
"执行钢网分发线体任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}"
);
return
missionInfo
;
return
missionInfo
;
}
}
}
}
...
@@ -354,8 +377,6 @@ namespace DeviceLibrary.manager
...
@@ -354,8 +377,6 @@ namespace DeviceLibrary.manager
&&
agv
.
Scope
.
Tasks
.
Contains
(
s
.
projectType
.
ToString
())).
FirstOrDefault
();
&&
agv
.
Scope
.
Tasks
.
Contains
(
s
.
projectType
.
ToString
())).
FirstOrDefault
();
if
(
missionInfo
!=
null
&&
AgvCanGetMission
(
missionInfo
))
if
(
missionInfo
!=
null
&&
AgvCanGetMission
(
missionInfo
))
{
{
Log
.
Info
(
$
"执行钢网去立库任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}"
);
return
missionInfo
;
return
missionInfo
;
}
}
}
}
...
@@ -382,7 +403,6 @@ namespace DeviceLibrary.manager
...
@@ -382,7 +403,6 @@ namespace DeviceLibrary.manager
&&
s
.
projectType
.
Equals
(
ProjectType
.
移远成品入库
)).
FirstOrDefault
();
&&
s
.
projectType
.
Equals
(
ProjectType
.
移远成品入库
)).
FirstOrDefault
();
if
(
missionInfo
!=
null
&&
AgvCanGetMission
(
missionInfo
))
if
(
missionInfo
!=
null
&&
AgvCanGetMission
(
missionInfo
))
{
{
Log
.
Info
(
$
"执行1F成品回收任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}"
);
return
missionInfo
;
return
missionInfo
;
}
}
}
}
...
@@ -411,7 +431,6 @@ namespace DeviceLibrary.manager
...
@@ -411,7 +431,6 @@ namespace DeviceLibrary.manager
&&
s
.
projectType
.
Equals
(
ProjectType
.
移远成品入库
)).
FirstOrDefault
();
&&
s
.
projectType
.
Equals
(
ProjectType
.
移远成品入库
)).
FirstOrDefault
();
if
(
missionInfo
!=
null
&&
AgvCanGetMission
(
missionInfo
)
&&
missionInfo
.
missionId
.
StartsWith
(
"P16"
))
if
(
missionInfo
!=
null
&&
AgvCanGetMission
(
missionInfo
)
&&
missionInfo
.
missionId
.
StartsWith
(
"P16"
))
{
{
Log
.
Info
(
$
"执行1F成品入库任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}"
);
return
missionInfo
;
return
missionInfo
;
}
}
}
}
...
@@ -442,7 +461,6 @@ namespace DeviceLibrary.manager
...
@@ -442,7 +461,6 @@ namespace DeviceLibrary.manager
if
(
missionInfo
!=
null
&&
AgvCanGetMission
(
missionInfo
))
if
(
missionInfo
!=
null
&&
AgvCanGetMission
(
missionInfo
))
{
{
SetMissionOccupied
(
missionInfo
,
agv
);
SetMissionOccupied
(
missionInfo
,
agv
);
Log
.
Info
(
$
"执行任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}"
);
return
missionInfo
;
return
missionInfo
;
}
}
}
}
...
@@ -489,6 +507,11 @@ namespace DeviceLibrary.manager
...
@@ -489,6 +507,11 @@ namespace DeviceLibrary.manager
SetMissionOccupiedAgv
(
missionInfo
.
missionId
,
agv
.
Name
);
SetMissionOccupiedAgv
(
missionInfo
.
missionId
,
agv
.
Name
);
MissionChangedEvent
?.
Invoke
();
MissionChangedEvent
?.
Invoke
();
}
}
public
static
void
SetMissionOccupied
(
string
missionId
,
AgvInfo
agv
)
{
SetMissionOccupiedAgv
(
missionId
,
agv
.
Name
);
MissionChangedEvent
?.
Invoke
();
}
/// <summary>
/// <summary>
/// 设置任务状态
/// 设置任务状态
/// </summary>
/// </summary>
...
@@ -581,7 +604,7 @@ namespace DeviceLibrary.manager
...
@@ -581,7 +604,7 @@ namespace DeviceLibrary.manager
public
static
void
AddSteelTarNodes
(
string
missionId
,
string
nodes
)
public
static
void
AddSteelTarNodes
(
string
missionId
,
string
nodes
)
{
{
MissionInfo
missionInfo
=
GetMission
(
missionId
);
MissionInfo
missionInfo
=
GetMission
(
missionId
);
if
(
missionInfo
!=
null
)
if
(
missionInfo
!=
null
)
{
{
missionInfo
.
destinationPoint
=
nodes
;
missionInfo
.
destinationPoint
=
nodes
;
{
{
...
@@ -605,7 +628,7 @@ namespace DeviceLibrary.manager
...
@@ -605,7 +628,7 @@ namespace DeviceLibrary.manager
Log
.
Info
(
$
"任务[{missionInfo.missionId}]更改钢网目的地[{nodes}]成功"
);
Log
.
Info
(
$
"任务[{missionInfo.missionId}]更改钢网目的地[{nodes}]成功"
);
}
}
}
}
/// <summary>
/// <summary>
/// 根据任务信息得到电梯名称
/// 根据任务信息得到电梯名称
...
...
DeviceLibrary/manager/NodeManager.cs
查看文件 @
ab1c3da
...
@@ -8,6 +8,9 @@ using DeviceLibrary.manager;
...
@@ -8,6 +8,9 @@ using DeviceLibrary.manager;
using
System.Windows.Forms
;
using
System.Windows.Forms
;
using
System.Drawing
;
using
System.Drawing
;
using
static
DeviceLibrary
.
Node
;
using
static
DeviceLibrary
.
Node
;
using
System.Runtime.CompilerServices
;
using
static
System
.
Net
.
Mime
.
MediaTypeNames
;
using
System.Runtime.ConstrainedExecution
;
namespace
DeviceLibrary.manager
namespace
DeviceLibrary.manager
{
{
...
@@ -20,6 +23,7 @@ namespace DeviceLibrary.manager
...
@@ -20,6 +23,7 @@ namespace DeviceLibrary.manager
public
static
void
InitNodesInfos
()
public
static
void
InitNodesInfos
()
{
{
InitLinesInAirShower
();
nodeInfo
=
new
List
<
Node
>();
nodeInfo
=
new
List
<
Node
>();
XmlConfigOperation
.
LoadNodeInfos
(
nodeInfo
);
XmlConfigOperation
.
LoadNodeInfos
(
nodeInfo
);
WriteAllNodeInfos
();
WriteAllNodeInfos
();
...
@@ -32,7 +36,7 @@ namespace DeviceLibrary.manager
...
@@ -32,7 +36,7 @@ namespace DeviceLibrary.manager
XmlConfigOperation
.
LoadNodeInfos
(
nodes
);
XmlConfigOperation
.
LoadNodeInfos
(
nodes
);
nodeInfo
=
nodes
;
nodeInfo
=
nodes
;
}
}
catch
(
Exception
ex
)
catch
(
Exception
ex
)
{
{
MessageBox
.
Show
(
"重载节点失败:"
+
ex
.
StackTrace
,
"提示"
);
MessageBox
.
Show
(
"重载节点失败:"
+
ex
.
StackTrace
,
"提示"
);
}
}
...
@@ -49,7 +53,8 @@ namespace DeviceLibrary.manager
...
@@ -49,7 +53,8 @@ namespace DeviceLibrary.manager
DgvNode
.
AutoGenerateColumns
=
false
;
DgvNode
.
AutoGenerateColumns
=
false
;
DgvNode
.
AutoSize
=
true
;
DgvNode
.
AutoSize
=
true
;
DgvNode
.
DataSource
=
bindingSource
;
DgvNode
.
DataSource
=
bindingSource
;
DgvNode
.
RowPostPaint
+=
delegate
{
DgvNode
.
RowPostPaint
+=
delegate
{
DgvNode
.
RowsDefaultCellStyle
.
BackColor
=
Color
.
White
;
DgvNode
.
RowsDefaultCellStyle
.
BackColor
=
Color
.
White
;
DgvNode
.
AlternatingRowsDefaultCellStyle
.
BackColor
=
Color
.
LightBlue
;
DgvNode
.
AlternatingRowsDefaultCellStyle
.
BackColor
=
Color
.
LightBlue
;
};
};
...
@@ -88,7 +93,7 @@ namespace DeviceLibrary.manager
...
@@ -88,7 +93,7 @@ namespace DeviceLibrary.manager
//}
//}
}
}
public
static
void
UpdateDataSource
(
DataGridView
dataGridView
,
int
curRow
=
0
,
int
curColum
=
0
)
public
static
void
UpdateDataSource
(
DataGridView
dataGridView
,
int
curRow
=
0
,
int
curColum
=
0
)
{
{
BindingSource
bindingSource
=
new
BindingSource
();
BindingSource
bindingSource
=
new
BindingSource
();
foreach
(
Node
node
in
NodeManager
.
nodeInfo
)
foreach
(
Node
node
in
NodeManager
.
nodeInfo
)
...
@@ -98,8 +103,8 @@ namespace DeviceLibrary.manager
...
@@ -98,8 +103,8 @@ namespace DeviceLibrary.manager
bindingSource
.
Add
(
node
);
bindingSource
.
Add
(
node
);
}
}
dataGridView
.
DataSource
=
bindingSource
;
dataGridView
.
DataSource
=
bindingSource
;
if
(
dataGridView
.
Rows
.
Count
>=
curRow
if
(
dataGridView
.
Rows
.
Count
>=
curRow
&&
dataGridView
.
Columns
.
Count
>=
curColum
)
&&
dataGridView
.
Columns
.
Count
>=
curColum
)
{
{
dataGridView
.
CurrentCell
=
dataGridView
.
Rows
[
curRow
].
Cells
[
curColum
];
;
dataGridView
.
CurrentCell
=
dataGridView
.
Rows
[
curRow
].
Cells
[
curColum
];
;
}
}
...
@@ -129,10 +134,10 @@ namespace DeviceLibrary.manager
...
@@ -129,10 +134,10 @@ namespace DeviceLibrary.manager
else
else
return
true
;
return
true
;
}
}
public
static
bool
CheckNodes
(
string
nodenames
,
out
string
names
)
public
static
bool
CheckNodes
(
string
nodenames
,
out
string
names
)
{
{
string
[]
nodes
=
nodenames
.
Split
(
','
);
string
[]
nodes
=
nodenames
.
Split
(
','
);
names
=
""
;
names
=
""
;
foreach
(
string
item
in
nodes
)
foreach
(
string
item
in
nodes
)
{
{
Node
node
=
nodeInfo
.
Find
(
s
=>
s
.
Name
.
Equals
(
item
));
Node
node
=
nodeInfo
.
Find
(
s
=>
s
.
Name
.
Equals
(
item
));
...
@@ -193,5 +198,110 @@ namespace DeviceLibrary.manager
...
@@ -193,5 +198,110 @@ namespace DeviceLibrary.manager
// LogUtil.info(item.ToString());
// LogUtil.info(item.ToString());
//}
//}
}
}
#
region
跨门
跨风淋门
/// <summary>
/// 风淋门内的线体
/// key:车间名
/// val:线体名
/// </summary>
static
Dictionary
<
string
,
List
<
string
>>
linesInAirShower
=
new
Dictionary
<
string
,
List
<
string
>>();
static
void
InitLinesInAirShower
()
{
//添加3D的
linesInAirShower
.
Add
(
"3D"
,
new
List
<
string
>()
{
"S1Tail"
});
//添加4C的
linesInAirShower
.
Add
(
"4C"
,
new
List
<
string
>()
{
"C14Tail"
,
"C15Tail"
});
}
/// <summary>
/// 检查是否需要跨门
/// </summary>
/// <param name="cur"></param>
/// <param name="next"></param>
/// <returns></returns>
public
static
bool
NeedCrossDoor
(
AgvInfo
agv
,
Node
cur
,
Node
next
,
out
bool
isIn
,
out
bool
isAirDoor
)
{
isIn
=
true
;
isAirDoor
=
false
;
if
(
agv
.
Scope
.
Workshop
.
Equals
(
"1F"
))
return
false
;
return
false
;
try
{
if
(
cur
==
null
)
cur
=
agv
.
Place
;
if
(
next
==
null
)
next
=
agv
.
Place
;
if
(!
cur
.
Workshop
.
Equals
(
next
.
Workshop
))
{
if
(
cur
.
Equals
(
"4D"
)
&&
next
.
Workshop
.
Equals
(
"4C"
))
{
return
true
;
}
else
if
(
cur
.
Workshop
.
Equals
(
"4C"
)
&&
next
.
Workshop
.
Equals
(
"4D"
))
{
isIn
=
false
;
return
true
;
}
}
else
//在相同车间
{
if
(
linesInAirShower
.
ContainsKey
(
cur
.
Workshop
))
//当前点在风淋门内
{
if
(
linesInAirShower
.
ContainsKey
(
next
.
Workshop
))
//目标点在风淋门内
{
return
false
;
}
else
//目标点在风淋门外
{
isAirDoor
=
true
;
isIn
=
false
;
return
true
;
}
}
else
//当前点在风淋门外
{
if
(
linesInAirShower
.
ContainsKey
(
next
.
Workshop
))
//目标点在风淋门内
{
isAirDoor
=
true
;
return
true
;
}
else
//目标点在风淋门外
{
return
false
;
}
}
}
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
"NeedCrossDoor"
,
ex
);
}
return
false
;
}
/// <summary>
/// 是否需要跨两个门
/// </summary>
/// <param name="agv"></param>
/// <param name="node"></param>
/// <returns></returns>
public
static
bool
NeedCrossTwoDoor
(
AgvInfo
agv
,
Node
src
,
Node
dst
)
{
if
(
agv
.
Scope
.
Workshop
.
Equals
(
"1F"
))
return
false
;
return
false
;
try
{
if
(
src
==
null
)
src
=
agv
.
Place
;
if
(
dst
==
null
)
dst
=
agv
.
Place
;
if
(!
src
.
Workshop
.
Equals
(
dst
.
Workshop
)
&&
linesInAirShower
.
ContainsKey
(
dst
.
Workshop
))
{
return
true
;
}
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
"NeedCrossDoor"
,
ex
);
}
return
false
;
}
#
endregion
}
}
}
}
DeviceLibrary/service/Service.cs
查看文件 @
ab1c3da
...
@@ -7,6 +7,7 @@ using System.Runtime.Serialization;
...
@@ -7,6 +7,7 @@ using System.Runtime.Serialization;
using
Common
;
using
Common
;
using
DeviceLibrary.service.model
;
using
DeviceLibrary.service.model
;
using
DeviceLibrary.manager
;
using
DeviceLibrary.manager
;
using
System.Reflection
;
namespace
DeviceLibrary
namespace
DeviceLibrary
{
{
...
@@ -35,6 +36,13 @@ namespace DeviceLibrary
...
@@ -35,6 +36,13 @@ namespace DeviceLibrary
}
}
else
else
{
{
int
.
TryParse
(
createMissionInfo
.
missionId
.
Substring
(
1
,
2
),
out
int
projectType
);
if
(
projectType
>
16
)
{
result
.
code
=
-
1
;
result
.
msg
=
$
"创建任务失败,不存在的任务类型,请确认编号规则:{createMissionInfo.missionId}"
;
Log
.
Error
(
result
.
msg
);
}
if
(!
NodeManager
.
CheckNode
(
createMissionInfo
.
sourcePoint
))
if
(!
NodeManager
.
CheckNode
(
createMissionInfo
.
sourcePoint
))
{
{
result
.
code
=
-
1
;
result
.
code
=
-
1
;
...
...
DeviceLibrary/service/model/MissionInfo.cs
查看文件 @
ab1c3da
...
@@ -144,6 +144,19 @@ namespace DeviceLibrary.service.model
...
@@ -144,6 +144,19 @@ namespace DeviceLibrary.service.model
return
false
;
return
false
;
return
missionInfo
.
projectType
.
Equals
(
ProjectType
.
移远成品入库
);
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
public
enum
MissionState
...
@@ -203,7 +216,8 @@ namespace DeviceLibrary.service.model
...
@@ -203,7 +216,8 @@ namespace DeviceLibrary.service.model
/// 完成
/// 完成
/// </summary>
/// </summary>
完成
,
完成
,
等待成品回收
等待成品回收
,
料架缓存
}
}
/// <summary>
/// <summary>
/// 项目类型
/// 项目类型
...
...
DeviceLibrary/service/model/SendInInfo.cs
查看文件 @
ab1c3da
...
@@ -39,5 +39,9 @@ namespace DeviceLibrary.service.model
...
@@ -39,5 +39,9 @@ namespace DeviceLibrary.service.model
/// 目的地点位
/// 目的地点位
/// </summary>
/// </summary>
public
string
destinationPoint
{
get
;
set
;
}
public
string
destinationPoint
{
get
;
set
;
}
/// <summary>
/// 更新电梯信息
/// </summary>
public
bool
updateInfo
{
get
;
set
;
}
=
false
;
}
}
}
}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论