Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
张东亮
/
Qisda-SO1037-AGVDispatch
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 6f6f9ebf
由
张东亮
编写于
2023-09-24 10:15:16 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
一楼两料架在电梯不接问题
1 个父辈
131d64c1
显示空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
52 行增加
和
26 行删除
DeviceLibrary/Control.cs
DeviceLibrary/bean/Node.cs
DeviceLibrary/bean/job/LineToLiftJob.cs
DeviceLibrary/bean/jobType/LiftToLinesJobType.cs
DeviceLibrary/bean/jobType/LineToLiftJobType.cs
DeviceLibrary/lift/LiftContext.cs
DeviceLibrary/manager/MissionManager.cs
DeviceLibrary/manager/NodeManager.cs
DeviceLibrary/Control.cs
查看文件 @
6f6f9eb
...
@@ -16,7 +16,7 @@ namespace DeviceLibrary
...
@@ -16,7 +16,7 @@ namespace DeviceLibrary
{
{
public
class
Control
public
class
Control
{
{
private
static
log4net
.
ILog
log
=
log4net
.
LogManager
.
GetLogger
(
"Control"
)
;
private
static
log4net
.
ILog
log
=
LogUtil
.
LOGGER
;
static
Dictionary
<
string
,
RunInfo
>
runInfoMap
=
new
Dictionary
<
string
,
RunInfo
>();
static
Dictionary
<
string
,
RunInfo
>
runInfoMap
=
new
Dictionary
<
string
,
RunInfo
>();
private
System
.
Timers
.
Timer
AgvCallTimer
;
private
System
.
Timers
.
Timer
AgvCallTimer
;
...
@@ -203,7 +203,7 @@ namespace DeviceLibrary
...
@@ -203,7 +203,7 @@ namespace DeviceLibrary
if
(
job
!=
null
)
if
(
job
!=
null
)
{
{
agv
.
CurJob
=
job
;
agv
.
CurJob
=
job
;
LogUtil
.
info
(
$
"{agv.Name} 收到任务 {job?.JobParam?.GetMissionInfo()?.missionId??""}"
);
LogUtil
.
info
(
$
"{agv.Name} 收到任务 {job?.JobParam?.GetMissionInfo()?.missionId??""}
【{JsonHelper.SerializeObject(job)}】
"
);
}
}
}
}
else
else
...
...
DeviceLibrary/bean/Node.cs
查看文件 @
6f6f9eb
...
@@ -17,12 +17,12 @@ namespace DeviceLibrary
...
@@ -17,12 +17,12 @@ namespace DeviceLibrary
/// <summary>
/// <summary>
/// 节点名称
/// 节点名称
/// </summary>
/// </summary>
public
string
Name
{
get
;
set
;
}
public
string
Name
{
get
;
set
;
}
=
""
;
public
NodeType
Type
{
get
;
set
;
}
public
NodeType
Type
{
get
;
set
;
}
/// <summary>
/// <summary>
/// 所属车间
/// 所属车间
/// </summary>
/// </summary>
public
string
Workshop
{
get
;
set
;
}
public
string
Workshop
{
get
;
set
;
}
=
""
;
/// <summary>
/// <summary>
/// 节点IP
/// 节点IP
/// </summary>
/// </summary>
...
...
DeviceLibrary/bean/job/LineToLiftJob.cs
查看文件 @
6f6f9eb
using
Common
;
using
Common
;
using
DeviceLibrary.bean
;
using
DeviceLibrary.bean
;
using
DeviceLibrary.bean.agv
;
using
DeviceLibrary.bean.job
;
using
DeviceLibrary.bean.job
;
using
DeviceLibrary.lift
;
using
DeviceLibrary.lift
;
using
DeviceLibrary.manager
;
using
DeviceLibrary.manager
;
...
@@ -40,7 +41,7 @@ namespace DeviceLibrary
...
@@ -40,7 +41,7 @@ namespace DeviceLibrary
{
{
JobParam
.
CrossDoor
.
CurNode
=
agv
.
Place
;
JobParam
.
CrossDoor
.
CurNode
=
agv
.
Place
;
JobParam
.
CrossDoor
.
NextNode
=
JobParam
.
SrcNode
;
JobParam
.
CrossDoor
.
NextNode
=
JobParam
.
SrcNode
;
if
(
NodeManager
.
NeedCrossDoor
(
agv
,
JobParam
.
CrossDoor
.
CurNode
,
JobParam
.
CrossDoor
.
NextNode
,
out
bool
isin
,
out
bool
isair
))
if
(
NodeManager
.
NeedCrossDoor
(
agv
,
JobParam
.
CrossDoor
.
CurNode
,
JobParam
.
CrossDoor
.
NextNode
,
out
bool
isin
,
out
bool
isair
))
{
{
JobParam
.
CrossDoor
.
IsIn
=
isin
;
JobParam
.
CrossDoor
.
IsIn
=
isin
;
JobParam
.
CrossDoor
.
IsAir
=
isair
;
JobParam
.
CrossDoor
.
IsAir
=
isair
;
...
@@ -50,6 +51,8 @@ namespace DeviceLibrary
...
@@ -50,6 +51,8 @@ namespace DeviceLibrary
else
else
{
{
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_00_CrossDoor
);
JobRunStep
.
ToNextStep
(
RunStep
.
LineToLift_00_CrossDoor
);
runInfo
=
$
"无需过门,准备去取料点"
;
JobRunStep
.
Msg
=
runInfo
;
}
}
...
@@ -88,7 +91,7 @@ namespace DeviceLibrary
...
@@ -88,7 +91,7 @@ namespace DeviceLibrary
$
"取车"
));
$
"取车"
));
JobParam
.
CrossDoor
.
CurNode
=
JobParam
.
SrcNode
;
JobParam
.
CrossDoor
.
CurNode
=
JobParam
.
SrcNode
;
JobParam
.
CrossDoor
.
NextNode
=
JobParam
.
CurTargetNode
;
JobParam
.
CrossDoor
.
NextNode
=
JobParam
.
CurTargetNode
;
if
(
NodeManager
.
NeedCrossDoor
(
agv
,
JobParam
.
CrossDoor
.
CurNode
,
JobParam
.
CrossDoor
.
NextNode
,
out
bool
isin
,
out
bool
isair
))
if
(
NodeManager
.
NeedCrossDoor
(
agv
,
JobParam
.
CrossDoor
.
CurNode
,
JobParam
.
CrossDoor
.
NextNode
,
out
bool
isin
,
out
bool
isair
))
{
{
JobParam
.
CrossDoor
.
IsIn
=
isin
;
JobParam
.
CrossDoor
.
IsIn
=
isin
;
JobParam
.
CrossDoor
.
IsAir
=
isair
;
JobParam
.
CrossDoor
.
IsAir
=
isair
;
...
@@ -184,7 +187,13 @@ namespace DeviceLibrary
...
@@ -184,7 +187,13 @@ namespace DeviceLibrary
else
if
(
lift
.
LiftContext
.
IsDoorOpen
(
JobParam
.
CurTargetNode
.
Name
,
JobParam
.
GetMissionInfo
().
sourceFloor
,
agv
))
else
if
(
lift
.
LiftContext
.
IsDoorOpen
(
JobParam
.
CurTargetNode
.
Name
,
JobParam
.
GetMissionInfo
().
sourceFloor
,
agv
))
{
{
ChargePileManager
.
StopCharge
(
agv
);
ChargePileManager
.
StopCharge
(
agv
);
if
(
lift
.
LiftContext
.
HasShelfNeedLeave
(
JobParam
.
CurTargetNode
.
Name
,
agv
.
Client
,
out
JobParam
.
LiftStatus
))
string
liftClient
=
agv
.
Client
;
if
(
agv
.
Scope
.
Workshop
.
Equals
(
SettingString
.
_4C
)
&&
SettingString
.
LIFT_D2
.
Equals
(
JobParam
.
CurTargetNode
.
Name
))
{
//4C车使用4D的标识
liftClient
=
$
"{Common.AppConfigHelper.GetValue(SettingString.AppIdentity, "
NEOTEL
")}-{SettingString._4D}"
;
}
if
(
lift
.
LiftContext
.
HasShelfNeedLeave
(
JobParam
.
CurTargetNode
.
Name
,
liftClient
,
out
JobParam
.
LiftStatus
))
{
{
ChargePileManager
.
StopCharge
(
agv
);
ChargePileManager
.
StopCharge
(
agv
);
MissionInfo
missionInfo
=
MissionManager
.
GetMission
(
JobParam
.
LiftStatus
?.
missionId
??
""
);
MissionInfo
missionInfo
=
MissionManager
.
GetMission
(
JobParam
.
LiftStatus
?.
missionId
??
""
);
...
...
DeviceLibrary/bean/jobType/LiftToLinesJobType.cs
查看文件 @
6f6f9eb
...
@@ -33,7 +33,8 @@ namespace DeviceLibrary
...
@@ -33,7 +33,8 @@ namespace DeviceLibrary
{
{
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
.
GetReceiveMission
(
agv
);
//问题:两电梯都有架子离开时,只能一个一个接
service
.
model
.
MissionInfo
missionInfo
=
manager
.
MissionManager
.
GetReceiveMission
(
agv
,
liftname
);
//检查是否是空台车领用 3D->4C
//检查是否是空台车领用 3D->4C
if
(
missionInfo
==
null
&&
agv
.
Scope
.
Workshop
.
Equals
(
SettingString
.
_4D
))
if
(
missionInfo
==
null
&&
agv
.
Scope
.
Workshop
.
Equals
(
SettingString
.
_4D
))
{
{
...
@@ -42,8 +43,6 @@ namespace DeviceLibrary
...
@@ -42,8 +43,6 @@ namespace DeviceLibrary
if
(
missionInfo
!=
null
)
if
(
missionInfo
!=
null
)
{
{
if
(!
liftname
.
Equals
(
missionInfo
?.
liftName
))
return
null
;
if
(
AgvAtPlace
(
agv
,
liftname
))
if
(
AgvAtPlace
(
agv
,
liftname
))
return
null
;
return
null
;
if
(
service
.
model
.
MissionInfo
.
IsFinishedProdcut
(
missionInfo
))
if
(
service
.
model
.
MissionInfo
.
IsFinishedProdcut
(
missionInfo
))
...
...
DeviceLibrary/bean/jobType/LineToLiftJobType.cs
查看文件 @
6f6f9eb
...
@@ -48,7 +48,7 @@ namespace DeviceLibrary.bean.jobType
...
@@ -48,7 +48,7 @@ namespace DeviceLibrary.bean.jobType
//}
//}
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)}】
"
);
//任务状态变更
//任务状态变更
MissionManager
.
SetMissionState
(
missionInfo
.
missionId
,
service
.
model
.
MissionState
.
已分配
,
out
string
msg
);
MissionManager
.
SetMissionState
(
missionInfo
.
missionId
,
service
.
model
.
MissionState
.
已分配
,
out
string
msg
);
return
new
LineToLiftJob
(
jobParam
);
return
new
LineToLiftJob
(
jobParam
);
...
...
DeviceLibrary/lift/LiftContext.cs
查看文件 @
6f6f9eb
...
@@ -113,7 +113,7 @@ namespace DeviceLibrary.lift
...
@@ -113,7 +113,7 @@ namespace DeviceLibrary.lift
}
}
}
}
/// <summary>
/// <summary>
/// 同
车间
的其他小车是否占用电梯
/// 同
一层
的其他小车是否占用电梯
/// </summary>
/// </summary>
/// <param name="agv"></param>
/// <param name="agv"></param>
/// <param name="liftName"></param>
/// <param name="liftName"></param>
...
@@ -122,11 +122,16 @@ namespace DeviceLibrary.lift
...
@@ -122,11 +122,16 @@ namespace DeviceLibrary.lift
{
{
try
try
{
{
AgvInfo
agvInfo
=
AGVManager
.
agvInfo
.
Find
(
s
=>
var
agvInfos
=
AGVManager
.
agvInfo
.
FindAll
(
s
=>
s
.
Scope
.
Workshop
.
Equals
(
agv
.
Scope
.
Workshop
)
&&
!
s
.
IP
.
Equals
(
agv
.
IP
));
s
.
Scope
.
Floor
.
Equals
(
agv
.
Scope
.
Floor
)
&&
!
s
.
IP
.
Equals
(
agv
.
IP
));
if
(
agvInfo
!=
null
)
if
(
agvInfo
s
!=
null
)
{
{
return
lifts
[
liftName
].
Agvs
.
Contains
(
agvInfo
.
Name
);
//return lifts[liftName].Agvs.Contains(agvInfo.Name);
foreach
(
var
item
in
agvInfos
)
{
if
(
lifts
[
liftName
].
Agvs
.
Contains
(
item
.
Name
))
return
true
;
}
}
}
else
else
return
false
;
return
false
;
...
@@ -159,7 +164,7 @@ namespace DeviceLibrary.lift
...
@@ -159,7 +164,7 @@ namespace DeviceLibrary.lift
}
}
catch
(
Exception
ex
)
catch
(
Exception
ex
)
{
{
LogUtil
.
error
(
$
"
OtherAGVIsIn
Lift: {SettingString.LIFT_D2}"
,
ex
);
LogUtil
.
error
(
$
"
F4AGVIsInD2
Lift: {SettingString.LIFT_D2}"
,
ex
);
}
}
return
false
;
return
false
;
}
}
...
...
DeviceLibrary/manager/MissionManager.cs
查看文件 @
6f6f9eb
...
@@ -348,7 +348,7 @@ namespace DeviceLibrary.manager
...
@@ -348,7 +348,7 @@ namespace DeviceLibrary.manager
/// </summary>
/// </summary>
/// <param name="missionType"></param>
/// <param name="missionType"></param>
/// <returns></returns>
/// <returns></returns>
public
static
MissionInfo
GetReceiveMission
(
AgvInfo
agv
)
public
static
MissionInfo
GetReceiveMission
(
AgvInfo
agv
,
string
liftId
)
{
{
MissionInfo
missionInfo
=
null
;
MissionInfo
missionInfo
=
null
;
try
try
...
@@ -360,7 +360,7 @@ namespace DeviceLibrary.manager
...
@@ -360,7 +360,7 @@ namespace DeviceLibrary.manager
&&
agv
.
Scope
.
Tasks
.
Contains
(
s
.
projectType
.
ToString
())
&&
agv
.
Scope
.
Tasks
.
Contains
(
s
.
projectType
.
ToString
())
&&
!
s
.
projectType
.
Equals
(
ProjectType
.
移远成品入库
)
&&
!
s
.
projectType
.
Equals
(
ProjectType
.
移远成品入库
)
&&
!
s
.
projectType
.
Equals
(
ProjectType
.
钢网入库
)
&&
!
s
.
projectType
.
Equals
(
ProjectType
.
钢网入库
)
&&
!
s
.
projectType
.
Equals
(
ProjectType
.
钢网领用
));
&&
!
s
.
projectType
.
Equals
(
ProjectType
.
钢网领用
)
&&
s
.
liftName
.
Equals
(
liftId
)
);
if
(
missionInfo
!=
null
&&
AgvCanGetMission
(
missionInfo
))
if
(
missionInfo
!=
null
&&
AgvCanGetMission
(
missionInfo
))
{
{
return
missionInfo
;
return
missionInfo
;
...
@@ -933,6 +933,13 @@ namespace DeviceLibrary.manager
...
@@ -933,6 +933,13 @@ namespace DeviceLibrary.manager
liftname
=
SettingString
.
LIFT_D2
;
liftname
=
SettingString
.
LIFT_D2
;
}
}
}
}
if
(
missionInfo
.
sourceWorkshop
.
Equals
(
SettingString
.
_4D
))
{
if
(
missionInfo
.
destinationWorkshop
.
StartsWith
(
"1"
))
{
liftname
=
SettingString
.
LIFT_D2
;
}
}
break
;
break
;
case
ProjectType
.
空台车领用
:
case
ProjectType
.
空台车领用
:
if
(
missionInfo
.
sourceWorkshop
.
Equals
(
SettingString
.
_3D
))
if
(
missionInfo
.
sourceWorkshop
.
Equals
(
SettingString
.
_3D
))
...
...
DeviceLibrary/manager/NodeManager.cs
查看文件 @
6f6f9eb
...
@@ -223,24 +223,30 @@ namespace DeviceLibrary.manager
...
@@ -223,24 +223,30 @@ namespace DeviceLibrary.manager
{
{
isIn
=
true
;
isIn
=
true
;
isAirDoor
=
false
;
isAirDoor
=
false
;
if
(
cur
==
null
)
cur
=
agv
.
Place
;
if
(
next
==
null
)
next
=
agv
.
Place
;
try
{
if
(
agv
.
Scope
.
Workshop
.
Equals
(
"1F"
))
return
false
;
if
(
agv
.
Scope
.
Workshop
.
Equals
(
"1F"
))
return
false
;
if
(
agv
.
Scope
.
Workshop
.
Equals
(
"3C"
))
return
false
;
if
(
agv
.
Scope
.
Workshop
.
Equals
(
"4C"
))
if
(
agv
.
Scope
.
Workshop
.
Equals
(
"4C"
))
{
{
if
(
cur
.
Workshop
.
Equals
(
"4C"
)
&&
next
.
Type
.
Equals
(
NodeType
.
Lift
)
&&
next
.
Name
.
Equals
(
SettingString
.
LIFT_D2
))
if
(
cur
.
Workshop
.
Equals
(
"4C"
)
&&
next
.
Type
.
Equals
(
NodeType
.
Lift
)
&&
next
.
Name
.
Equals
(
SettingString
.
LIFT_D2
))
{
{
isIn
=
false
;
isIn
=
false
;
return
true
;
return
true
;
}
}
else
if
((
cur
.
Workshop
.
Equals
(
"4D"
)||(
cur
.
Type
.
Equals
(
NodeType
.
Lift
)
&&
cur
.
Name
.
Equals
(
SettingString
.
LIFT_D2
)))
&&
(
next
.
Type
.
Equals
(
NodeType
.
Standby
)
||
next
.
Type
.
Equals
(
NodeType
.
AutoCharge
)))
else
if
((
cur
.
Workshop
.
Equals
(
"4D"
)
||
(
cur
.
Type
.
Equals
(
NodeType
.
Lift
)
&&
cur
.
Name
.
Equals
(
SettingString
.
LIFT_D2
)))
&&
(
next
.
Type
.
Equals
(
NodeType
.
Standby
)
||
next
.
Type
.
Equals
(
NodeType
.
AutoCharge
)))
{
{
return
true
;
return
true
;
}
}
else
return
false
;
}
}
if
(
agv
.
Scope
.
Workshop
.
Equals
(
"3C"
))
return
false
;
try
//4D/3D车间的AGV
{
if
(
cur
==
null
)
cur
=
agv
.
Place
;
if
(
next
==
null
)
next
=
agv
.
Place
;
if
(
cur
.
Workshop
.
Equals
(
"4C"
)
||
next
.
Workshop
.
Equals
(
"4C"
))
if
(
cur
.
Workshop
.
Equals
(
"4C"
)
||
next
.
Workshop
.
Equals
(
"4C"
))
{
{
if
(
next
.
Workshop
.
Equals
(
"4C"
))
if
(
next
.
Workshop
.
Equals
(
"4C"
))
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论