Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
顾剑亮
/
Camera
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
图表
网络
创建新的问题
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 4a17d764
由
张东亮
编写于
2020-10-14 11:49:56 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1号车只运C5,C6
1 个父辈
33d7371d
隐藏空白字符变更
内嵌
并排
正在显示
19 个修改的文件
包含
564 行增加
和
335 行删除
.vs/AGVControl/v16/.suo
AGVControl/AGVControl.csproj
AGVControl/BLL/Control.cs
AGVControl/BLL/MiR_API.cs
AGVControl/Common.cs
AGVControl/bin/Debug/AGVControl.exe
AGVControl/bin/Debug/AGVControl.pdb
AGVControl/dll/log4net.dll
AGVControl/obj/Debug/AGVControl.csproj.CoreCompileInputs.cache
AGVControl/obj/Debug/AGVControl.csproj.FileListAbsolute.txt
AGVControl/obj/Debug/AGVControl.csproj.GenerateResource.cache
AGVControl/obj/Debug/AGVControl.csproj.ResolveComReference.cache
AGVControl/obj/Debug/AGVControl.exe
AGVControl/obj/Debug/AGVControl.pdb
AGVControl/obj/Debug/DesignTimeResolveAssemblyReferences.cache
AGVControl/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
AGVControl/obj/Debug/Interop.IWshRuntimeLibrary.dll
AgvClient/obj/Debug/AgvClient.csprojAssemblyReference.cache
AgvClientTest/obj/Debug/AgvClientTest.csprojAssemblyReference.cache
.vs/AGVControl/v16/.suo
查看文件 @
4a17d76
此文件类型无法预览
AGVControl/AGVControl.csproj
查看文件 @
4a17d76
...
@@ -40,7 +40,7 @@
...
@@ -40,7 +40,7 @@
</PropertyGroup>
</PropertyGroup>
<ItemGroup>
<ItemGroup>
<Reference Include="log4net">
<Reference Include="log4net">
<HintPath>
..\..\..\..\DLL
\log4net.dll</HintPath>
<HintPath>
dll
\log4net.dll</HintPath>
</Reference>
</Reference>
<Reference Include="Newtonsoft.Json, Version=3.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<Reference Include="Newtonsoft.Json, Version=3.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<SpecificVersion>False</SpecificVersion>
...
...
AGVControl/BLL/Control.cs
查看文件 @
4a17d76
...
@@ -407,137 +407,168 @@ namespace BLL
...
@@ -407,137 +407,168 @@ namespace BLL
bool
rtn
;
bool
rtn
;
string
log
;
string
log
;
Agv_Info
agv
=
Common
.
agvInfo
[
agvIdx
];
Agv_Info
agv
=
Common
.
agvInfo
[
agvIdx
];
//检测IO信号
if
(
agv
.
IP
.
Equals
(
Common
.
No1_IP
))
rtn
=
Common
.
mir
.
Get_IO_Status
(
agv
,
out
bool
[]
input
,
out
bool
[]
output
);
if
(
rtn
)
{
{
if
(
input
[
3
])
//检测IO信号
{
rtn
=
Common
.
mir
.
Get_IO_Status
(
agv
,
out
bool
[]
input
,
out
bool
[]
output
);
agv
.
IsUse
=
false
;
if
(
rtn
)
AgvChanged
?.
Invoke
(
agvIdx
);
//System.Windows.Forms.MessageBox.Show("关闭小车调用,因检测到车上有料架/料串,不执行任务!请将料架移除再打开调用。");
Common
.
log
.
Info
(
"关闭小车调用,因检测到车上有料架/料串,不执行任务!请将料架移除再打开调用。"
);
return
;
}
int
nodeIdx
=
-
1
;
int
high
=
0
,
middle
=
0
,
low
=
0
;
List
<
int
>
node
=
new
List
<
int
>();
//清除节点AGV的名称
foreach
(
var
item
in
Common
.
nodeInfo
)
{
{
if
(
i
tem
.
AgvName
.
Equals
(
agv
.
Name
)
)
if
(
i
nput
[
3
]
)
{
{
item
.
AgvName
=
""
;
agv
.
IsUse
=
false
;
Common
.
log
.
Info
(
"清除节点的AGV名称: 节点名:"
+
item
.
Name
+
";AGV名称:"
+
agv
.
Name
);
AgvChanged
?.
Invoke
(
agvIdx
);
//System.Windows.Forms.MessageBox.Show("关闭小车调用,因检测到车上有料架/料串,不执行任务!请将料架移除再打开调用。");
Common
.
log
.
Info
(
"关闭小车调用,因检测到车上有料架/料串,不执行任务!请将料架移除再打开调用。"
);
return
;
}
}
int
nodeIdx
=
-
1
;
}
int
high
=
0
,
middle
=
0
,
low
=
0
;
//B区域,需要出料,先拿料架
List
<
int
>
node
=
new
List
<
int
>();
//Mark.Length>1防止Mark为0的情况,Mark=0是VMI的进料
//清除节点AGV的名称
nodeIdx
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Action
==
ClientAction
.
NeedEnter
&&
s
.
AgvName
.
Equals
(
""
)
&&
s
.
Mark
.
Length
>
1
&&
s
.
IsUse
);
foreach
(
var
item
in
Common
.
nodeInfo
)
if
(
nodeIdx
==
-
1
)
{
Common
.
log
.
Info
(
"B区没有找到NeedEnter的节点"
);
}
else
//B区域需要出料
{
//Mark没有被缓存
int
n
=
Marks
.
FindIndex
(
t
=>
t
==
Common
.
nodeInfo
[
nodeIdx
].
Mark
);
if
(
n
==
-
1
)
//
{
{
n
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"A7"
&&
s
.
Action
==
ClientAction
.
NeedLeave
&&
if
(
item
.
AgvName
.
Equals
(
agv
.
Name
))
s
.
RFID
.
StartsWith
(
"A"
)
&&
s
.
AgvName
.
Equals
(
""
)
&&
s
.
IsUse
);
if
(
n
>
-
1
)
{
{
agv
.
Place
=
Common
.
nodeInfo
[
n
].
Name
;
item
.
AgvName
=
""
;
agv
.
Mark
=
Common
.
nodeInfo
[
nodeIdx
].
Mark
;
Common
.
log
.
Info
(
"清除节点的AGV名称: 节点名:"
+
item
.
Name
+
";AGV名称:"
+
agv
.
Name
)
;
//agv.CloseDoor = false;
}
rtn
=
Common
.
mir
.
Add_Mission_Fleet
(
agv
,
Common
.
agvMission
[
"Move"
+
agv
.
Place
]);
}
if
(
rtn
)
//需要出料架,且没有被标记
//A4是包装料仓的进料,不包含在内
//根据优先级调用
for
(
int
i
=
0
;
i
<
Common
.
nodeInfo
.
Count
;
i
++)
{
if
(
Common
.
nodeInfo
[
i
].
Action
==
ClientAction
.
NeedLeave
&&
Common
.
nodeInfo
[
i
].
Name
!=
"A4"
&&
Common
.
nodeInfo
[
i
].
AgvName
==
""
&&
Common
.
nodeInfo
[
i
].
IsUse
)
{
switch
(
Common
.
nodeInfo
[
i
].
Level
)
{
{
agv
.
CloseDoor
=
false
;
case
ClientLevel
.
High
:
Common
.
nodeInfo
[
n
].
AgvName
=
agv
.
Name
;
node
.
Insert
(
high
++,
i
);
agv
.
TaskSend
=
true
;
middle
++;
//_mark.Add(Common.nodeInfo[nodeIdx].Mark);
low
++;
MarkAdd
(
Common
.
nodeInfo
[
nodeIdx
].
Mark
);
break
;
//Common.log.OutString("Mark缓存 " + string.Join(",", Marks.ToArray()));
case
ClientLevel
.
Middle
:
node
.
Insert
(
middle
++,
i
);
low
++;
break
;
case
ClientLevel
.
Low
:
node
.
Insert
(
low
++,
i
);
break
;
}
}
}
log
=
string
.
Format
(
"{0} Move To {1}[{2}] [{3}]"
,
agv
.
Name
,
agv
.
Place
,
if
(
node
.
Count
==
0
)
Common
.
nodeInfo
[
nodeIdx
].
Action
.
ToString
(),
Common
.
nodeInfo
[
nodeIdx
].
Mark
);
{
Common
.
log
.
Info
(
log
);
nodeIdx
=
-
1
;
Common
.
ShowLog
(
log
);
}
Common
.
mir
.
State_Ready
(
agv
);
else
Common
.
server
.
NodeRefresh
(
n
);
{
//按顺序取符合要求的
for
(
int
i
=
0
;
i
<
node
.
Count
;
i
++)
{
if
(
Common
.
nodeInfo
[
node
[
i
]].
Name
==
"A1"
&&
Common
.
nodeInfo
[
node
[
i
]].
RFID
.
StartsWith
(
"B"
))
//A1出料串,检查C5是否需要
{
int
n
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"C5"
&&
s
.
Action
==
ClientAction
.
NeedEnter
&&
s
.
AgvName
==
""
&&
s
.
IsUse
);
if
(
n
>
-
1
)
{
nodeIdx
=
node
[
i
];
break
;
}
}
}
else
else
if
(
agv
.
IP
.
Equals
(
Common
.
No1_IP
)
&&
Common
.
nodeInfo
[
node
[
i
]].
Name
==
"C6"
)
//C6准备出空架子,A2需要料
{
{
agv
.
TaskSend
=
false
;
int
n
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"A2"
&&
s
.
Action
==
ClientAction
.
NeedEnter
&&
s
.
AgvName
==
""
&&
s
.
IsUse
);
log
=
string
.
Format
(
"{0} Move To {1} 失败"
,
agv
.
Name
,
agv
.
Place
);
//入料口有一个没有占用
//防止上一个任务已执行但返回失败时,删除任务
if
(
n
>
-
1
)
//Common.mir.Del_Mission(agv);
{
Common
.
log
.
Info
(
log
);
nodeIdx
=
node
[
i
];
Common
.
ShowLog
(
log
);
break
;
}
}
}
}
}
else
if
(
nodeIdx
>
-
1
)
{
{
//A4没有被占用
if
(
Common
.
nodeInfo
[
nodeIdx
].
Name
==
"A1"
)
n
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"A4"
&&
s
.
Action
==
ClientAction
.
NeedLeave
&&
s
.
AgvName
.
Equals
(
""
)
&&
s
.
IsUse
);
if
(
n
==
-
1
)
{
{
nodeIdx
=
-
1
;
if
(
Common
.
nodeInfo
[
nodeIdx
].
RFID
.
Length
==
0
||
Common
.
nodeInfo
[
nodeIdx
].
RFID
==
"00"
)
Common
.
log
.
Info
(
"A7,A4不是NeedLeave或被占用"
);
{
//Common.log.OutTextBox("A7,A4没有架子或被占用");
Common
.
log
.
Info
(
"A1 RFID 错误"
);
#
region
有出库任务,但
A7
,
A4
无空架子
//Common.log.OutTextBox("A1 RFID 错误");
//n = Common.nodeInfo.FindIndex(s => s.Name == "A8" && s.Action == ClientAction.NeedEnter && s.AgvName.Equals("") && s.IsUse);
return
;
//if (n == -1)
}
//{
else
// ClientNode a8Node = Common.nodeInfo.Find(s => s.Name.Equals("A8"));
{
// log = string.Format("A4、A7均无空架用于包装仓出库,且{0}已满,不可将A7架子放到{0}。需要人工干预 [ClientAction={1}]", a8Node.Name, a8Node.Action.ToString());
Common
.
log
.
Info
(
"[StatusNone Assign Mission A1] "
+
agv
.
Name
+
" "
+
Common
.
nodeInfo
[
nodeIdx
].
Name
);
// Common.log.Info(log);
MoveNode
(
agv
,
nodeIdx
);
// Common.ShowLog(log);
return
;
//}
}
////A7,A4均无空架子,可将A7的架子移动到A8
//else
//{
// agv.Place = "A7";
// //agv.Mark = Common.nodeInfo[nodeIdx].Mark;
// //agv.CloseDoor = false;
// rtn = Common.mir.Add_Mission_Fleet(agv, Common.agvMission["Move" + agv.Place]);
// if (rtn)
// {
// agv.CloseDoor = false;
// Common.nodeInfo[n].AgvName = agv.Name;
// agv.TaskSend = true;
// //_mark.Add(Common.nodeInfo[nodeIdx].Mark);
// //MarkAdd(Common.nodeInfo[nodeIdx].Mark);
// log = string.Format("{0} Move To {1}[{2}] ", agv.Name, agv.Place,
// "A7,A4无料架用于包装仓");
// Common.log.Info(log);
// Common.ShowLog(log);
// Common.mir.State_Ready(agv);
// Common.server.NodeRefresh(n);
// AgvChanged?.Invoke(agvIdx);
// }
// else
// {
// agv.TaskSend = false;
// log = string.Format("{0} Move To {1}失败[{2}] ", agv.Name, agv.Place,
// "A7,A4无料架用于包装仓");
// //防止上一个任务已执行但返回失败时,删除任务
// //Common.mir.Del_Mission(agv);
// Common.log.Info(log);
// Common.ShowLog(log);
// }
//}
#
endregion
}
}
else
else
{
{
Common
.
log
.
Info
(
"[StatusNone Assign Mission other] "
+
agv
.
Name
+
" "
+
Common
.
nodeInfo
[
nodeIdx
].
Name
);
MoveNode
(
agv
,
nodeIdx
);
return
;
}
}
}
}
}
else
//除1号小车
{
//检测IO信号
rtn
=
Common
.
mir
.
Get_IO_Status
(
agv
,
out
bool
[]
input
,
out
bool
[]
output
);
if
(
rtn
)
{
if
(
input
[
3
])
{
agv
.
IsUse
=
false
;
AgvChanged
?.
Invoke
(
agvIdx
);
//System.Windows.Forms.MessageBox.Show("关闭小车调用,因检测到车上有料架/料串,不执行任务!请将料架移除再打开调用。");
Common
.
log
.
Info
(
"关闭小车调用,因检测到车上有料架/料串,不执行任务!请将料架移除再打开调用。"
);
return
;
}
int
nodeIdx
=
-
1
;
int
high
=
0
,
middle
=
0
,
low
=
0
;
List
<
int
>
node
=
new
List
<
int
>();
//清除节点AGV的名称
foreach
(
var
item
in
Common
.
nodeInfo
)
{
if
(
item
.
AgvName
.
Equals
(
agv
.
Name
))
{
item
.
AgvName
=
""
;
Common
.
log
.
Info
(
"清除节点的AGV名称: 节点名:"
+
item
.
Name
+
";AGV名称:"
+
agv
.
Name
);
}
}
//B区域,需要出料,先拿料架
//Mark.Length>1防止Mark为0的情况,Mark=0是VMI的进料
nodeIdx
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Action
==
ClientAction
.
NeedEnter
&&
s
.
AgvName
.
Equals
(
""
)
&&
s
.
Mark
.
Length
>
1
&&
s
.
IsUse
);
if
(
nodeIdx
==
-
1
)
{
Common
.
log
.
Info
(
"B区没有找到NeedEnter的节点"
);
}
else
//B区域需要出料
{
//Mark没有被缓存
int
n
=
Marks
.
FindIndex
(
t
=>
t
==
Common
.
nodeInfo
[
nodeIdx
].
Mark
);
if
(
n
==
-
1
)
//
{
n
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"A7"
&&
s
.
Action
==
ClientAction
.
NeedLeave
&&
s
.
RFID
.
StartsWith
(
"A"
)
&&
s
.
AgvName
.
Equals
(
""
)
&&
s
.
IsUse
);
if
(
n
>
-
1
)
{
agv
.
Place
=
Common
.
nodeInfo
[
n
].
Name
;
agv
.
Place
=
Common
.
nodeInfo
[
n
].
Name
;
agv
.
Mark
=
Common
.
nodeInfo
[
nodeIdx
].
Mark
;
agv
.
Mark
=
Common
.
nodeInfo
[
nodeIdx
].
Mark
;
//agv.CloseDoor = false;
//agv.CloseDoor = false;
...
@@ -550,7 +581,7 @@ namespace BLL
...
@@ -550,7 +581,7 @@ namespace BLL
agv
.
TaskSend
=
true
;
agv
.
TaskSend
=
true
;
//_mark.Add(Common.nodeInfo[nodeIdx].Mark);
//_mark.Add(Common.nodeInfo[nodeIdx].Mark);
MarkAdd
(
Common
.
nodeInfo
[
nodeIdx
].
Mark
);
MarkAdd
(
Common
.
nodeInfo
[
nodeIdx
].
Mark
);
Common
.
log
.
Info
(
"Mark缓存 "
+
string
.
Join
(
","
,
Marks
.
ToArray
()));
//Common.log.OutString
("Mark缓存 " + string.Join(",", Marks.ToArray()));
log
=
string
.
Format
(
"{0} Move To {1}[{2}] [{3}]"
,
agv
.
Name
,
agv
.
Place
,
log
=
string
.
Format
(
"{0} Move To {1}[{2}] [{3}]"
,
agv
.
Name
,
agv
.
Place
,
Common
.
nodeInfo
[
nodeIdx
].
Action
.
ToString
(),
Common
.
nodeInfo
[
nodeIdx
].
Mark
);
Common
.
nodeInfo
[
nodeIdx
].
Action
.
ToString
(),
Common
.
nodeInfo
[
nodeIdx
].
Mark
);
...
@@ -568,146 +599,243 @@ namespace BLL
...
@@ -568,146 +599,243 @@ namespace BLL
Common
.
log
.
Info
(
log
);
Common
.
log
.
Info
(
log
);
Common
.
ShowLog
(
log
);
Common
.
ShowLog
(
log
);
}
}
}
else
{
//A4没有被占用
n
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"A4"
&&
s
.
Action
==
ClientAction
.
NeedLeave
&&
s
.
AgvName
.
Equals
(
""
)
&&
s
.
IsUse
);
if
(
n
==
-
1
)
{
nodeIdx
=
-
1
;
Common
.
log
.
Info
(
"A7,A4不是NeedLeave或被占用"
);
//Common.log.OutTextBox("A7,A4没有架子或被占用");
#
region
有出库任务,但
A7
,
A4
无空架子
//n = Common.nodeInfo.FindIndex(s => s.Name == "A8" && s.Action == ClientAction.NeedEnter && s.AgvName.Equals("") && s.IsUse);
//if (n == -1)
//{
// ClientNode a8Node = Common.nodeInfo.Find(s => s.Name.Equals("A8"));
// log = string.Format("A4、A7均无空架用于包装仓出库,且{0}已满,不可将A7架子放到{0}。需要人工干预 [ClientAction={1}]", a8Node.Name, a8Node.Action.ToString());
// Common.log.Info(log);
// Common.ShowLog(log);
//}
////A7,A4均无空架子,可将A7的架子移动到A8
//else
//{
// agv.Place = "A7";
// //agv.Mark = Common.nodeInfo[nodeIdx].Mark;
// //agv.CloseDoor = false;
// rtn = Common.mir.Add_Mission_Fleet(agv, Common.agvMission["Move" + agv.Place]);
// if (rtn)
// {
// agv.CloseDoor = false;
// Common.nodeInfo[n].AgvName = agv.Name;
// agv.TaskSend = true;
// //_mark.Add(Common.nodeInfo[nodeIdx].Mark);
// //MarkAdd(Common.nodeInfo[nodeIdx].Mark);
// log = string.Format("{0} Move To {1}[{2}] ", agv.Name, agv.Place,
// "A7,A4无料架用于包装仓");
// Common.log.Info(log);
// Common.ShowLog(log);
// Common.mir.State_Ready(agv);
// Common.server.NodeRefresh(n);
// AgvChanged?.Invoke(agvIdx);
// }
// else
// {
// agv.TaskSend = false;
// log = string.Format("{0} Move To {1}失败[{2}] ", agv.Name, agv.Place,
// "A7,A4无料架用于包装仓");
// //防止上一个任务已执行但返回失败时,删除任务
// //Common.mir.Del_Mission(agv);
// Common.log.Info(log);
// Common.ShowLog(log);
// }
//}
#
endregion
}
else
{
agv
.
Place
=
Common
.
nodeInfo
[
n
].
Name
;
agv
.
Mark
=
Common
.
nodeInfo
[
nodeIdx
].
Mark
;
//agv.CloseDoor = false;
rtn
=
Common
.
mir
.
Add_Mission_Fleet
(
agv
,
Common
.
agvMission
[
"Move"
+
agv
.
Place
]);
if
(
rtn
)
{
agv
.
CloseDoor
=
false
;
Common
.
nodeInfo
[
n
].
AgvName
=
agv
.
Name
;
agv
.
TaskSend
=
true
;
//_mark.Add(Common.nodeInfo[nodeIdx].Mark);
MarkAdd
(
Common
.
nodeInfo
[
nodeIdx
].
Mark
);
Common
.
log
.
Info
(
"Mark缓存 "
+
string
.
Join
(
","
,
Marks
.
ToArray
()));
log
=
string
.
Format
(
"{0} Move To {1}[{2}] [{3}]"
,
agv
.
Name
,
agv
.
Place
,
Common
.
nodeInfo
[
nodeIdx
].
Action
.
ToString
(),
Common
.
nodeInfo
[
nodeIdx
].
Mark
);
Common
.
log
.
Info
(
log
);
Common
.
ShowLog
(
log
);
Common
.
mir
.
State_Ready
(
agv
);
Common
.
server
.
NodeRefresh
(
n
);
}
else
{
agv
.
TaskSend
=
false
;
log
=
string
.
Format
(
"{0} Move To {1} 失败"
,
agv
.
Name
,
agv
.
Place
);
//防止上一个任务已执行但返回失败时,删除任务
//Common.mir.Del_Mission(agv);
Common
.
log
.
Info
(
log
);
Common
.
ShowLog
(
log
);
}
//_mark.Add(Common.nodeInfo[nodeIdx].Mark);
////Common.log.OutString("Mark缓存 " + string.Join(",", _mark.ToArray()));
//Common.nodeInfo[n].AgvName = agv.Name;
//_mark.Add(Common.nodeInfo[nodeIdx].Mark);
//agv.Place = Common.nodeInfo[n].Name;
////Common.log.OutString("Mark缓存 " + string.Join(",", _mark.ToArray()));
//agv.Mark = Common.nodeInfo[nodeIdx].Mark;
//rtn = Common.mir.Add_Mission_Fleet(agv, Common.agvMission["Move" + agv.Place]);
//log = string.Format("{0} Move {1} {2} {3}", agv.Name, agv.Place, Common.nodeInfo[nodeIdx].Action.ToString(), Common.nodeInfo[nodeIdx].Mark);
//Common.nodeInfo[n].AgvName = agv.Name;
//Common.log.Info(log);
//agv.Place = Common.nodeInfo[n].Name;
//Common.ShowLog(log);
//agv.Mark = Common.nodeInfo[nodeIdx].Mark;
//rtn = Common.mir.Add_Mission_Fleet(agv, Common.agvMission["Move" + agv.Place]);
//rtn = Common.mir.State_Ready(agv);
//log = string.Format("{0} Move {1} {2} {3}", agv.Name, agv.Place, Common.nodeInfo[nodeIdx].Action.ToString(), Common.nodeInfo[nodeIdx].Mark);
//Common.server.NodeRefresh(n);
//Common.log.Info(log);
//Common.ShowLog(log);
AgvChanged
?.
Invoke
(
agvIdx
);
//rtn = Common.mir.State_Ready(agv);
return
;
//Common.server.NodeRefresh(n);
AgvChanged
?.
Invoke
(
agvIdx
);
return
;
}
}
}
}
}
else
{
Common
.
log
.
Info
(
"缓存中已存在 "
+
Common
.
nodeInfo
[
nodeIdx
].
Mark
);
nodeIdx
=
-
1
;
}
}
}
else
{
Common
.
log
.
Info
(
"缓存中已存在 "
+
Common
.
nodeInfo
[
nodeIdx
].
Mark
);
nodeIdx
=
-
1
;
}
}
//需要出料架,且没有被标记
//需要出料架,且没有被标记
//A4是包装料仓的进料,不包含在内
//A4是包装料仓的进料,不包含在内
//根据优先级调用
//根据优先级调用
for
(
int
i
=
0
;
i
<
Common
.
nodeInfo
.
Count
;
i
++)
for
(
int
i
=
0
;
i
<
Common
.
nodeInfo
.
Count
;
i
++)
{
if
(
Common
.
nodeInfo
[
i
].
Action
==
ClientAction
.
NeedLeave
&&
Common
.
nodeInfo
[
i
].
Name
!=
"A4"
&&
Common
.
nodeInfo
[
i
].
AgvName
==
""
&&
Common
.
nodeInfo
[
i
].
IsUse
)
{
{
switch
(
Common
.
nodeInfo
[
i
].
Level
)
if
(
Common
.
nodeInfo
[
i
].
Action
==
ClientAction
.
NeedLeave
&&
Common
.
nodeInfo
[
i
].
Name
!=
"A4"
&&
Common
.
nodeInfo
[
i
].
AgvName
==
""
&&
Common
.
nodeInfo
[
i
].
IsUse
)
{
{
case
ClientLevel
.
High
:
switch
(
Common
.
nodeInfo
[
i
].
Level
)
node
.
Insert
(
high
++,
i
);
{
middle
++;
case
ClientLevel
.
High
:
low
++;
node
.
Insert
(
high
++,
i
);
break
;
middle
++;
case
ClientLevel
.
Middle
:
low
++;
node
.
Insert
(
middle
++,
i
);
break
;
low
++;
case
ClientLevel
.
Middle
:
break
;
node
.
Insert
(
middle
++,
i
);
case
ClientLevel
.
Low
:
low
++;
node
.
Insert
(
low
++,
i
);
break
;
break
;
case
ClientLevel
.
Low
:
node
.
Insert
(
low
++,
i
);
break
;
}
}
}
}
}
}
//测试,临时的
//测试,临时的
//for (int i = 0; i < node.Count; i++)
//for (int i = 0; i < node.Count; i++)
//{
//{
// //Common.log.OutString("Test " + node[i] + " Name=" + Common.nodeInfo[node[i]].Name + " Mark=" + Common.nodeInfo[node[i]].Mark);
// //Common.log.OutString("Test " + node[i] + " Name=" + Common.nodeInfo[node[i]].Name + " Mark=" + Common.nodeInfo[node[i]].Mark);
//}
//}
if
(
node
.
Count
==
0
)
if
(
node
.
Count
==
0
)
{
{
nodeIdx
=
-
1
;
nodeIdx
=
-
1
;
Common
.
log
.
Info
(
"没有找到新的NeedLeave的节点"
);
Common
.
log
.
Info
(
"没有找到新的NeedLeave的节点"
);
}
}
else
else
{
//按顺序取符合要求的
for
(
int
i
=
0
;
i
<
node
.
Count
;
i
++)
{
{
//
B区域出料架
//
按顺序取符合要求的
if
(
Common
.
nodeInfo
[
node
[
i
]].
Name
.
StartsWith
(
"B"
)
)
for
(
int
i
=
0
;
i
<
node
.
Count
;
i
++
)
{
{
if
(
Common
.
nodeInfo
[
node
[
i
]].
Mark
==
"0"
&&
Common
.
nodeInfo
[
node
[
i
]].
RFID
.
StartsWith
(
"A"
))
//料仓读取到RFID的才获取锁定信息
//B区域出料架
if
(
Common
.
nodeInfo
[
node
[
i
]].
Name
.
StartsWith
(
"B"
))
{
{
//获取料架锁定信息
if
(
Common
.
nodeInfo
[
node
[
i
]].
Mark
==
"0"
&&
Common
.
nodeInfo
[
node
[
i
]].
RFID
.
StartsWith
(
"A"
))
//料仓读取到RFID的才获取锁定信息
AGVManager
.
GetShelfLockInfo
(
Common
.
nodeInfo
[
node
[
i
]].
Name
,
Common
.
nodeInfo
[
node
[
i
]].
RFID
,
shelfLockedNodeNames
);
nodeIdx
=
node
[
i
];
break
;
}
else
{
//在Mark缓存中,按照先后顺序出料,只有第一个出完才能出第二个
int
idx
=
Marks
.
FindIndex
(
s
=>
s
==
Common
.
nodeInfo
[
node
[
i
]].
Mark
);
if
(
idx
==
0
)
{
{
//获取料架锁定信息
AGVManager
.
GetShelfLockInfo
(
Common
.
nodeInfo
[
node
[
i
]].
Name
,
Common
.
nodeInfo
[
node
[
i
]].
RFID
,
shelfLockedNodeNames
);
nodeIdx
=
node
[
i
];
nodeIdx
=
node
[
i
];
break
;
break
;
}
}
else
if
(
idx
==
-
1
)
//缓存中没有这个mark,可能是软件重启了
else
{
{
//_mark.Add(Common.nodeInfo[node[i]].Mark);
//在Mark缓存中,按照先后顺序出料,只有第一个出完才能出第二个
MarkAdd
(
Common
.
nodeInfo
[
node
[
i
]].
Mark
);
int
idx
=
Marks
.
FindIndex
(
s
=>
s
==
Common
.
nodeInfo
[
node
[
i
]].
Mark
);
nodeIdx
=
node
[
i
];
if
(
idx
==
0
)
break
;
{
nodeIdx
=
node
[
i
];
break
;
}
else
if
(
idx
==
-
1
)
//缓存中没有这个mark,可能是软件重启了
{
//_mark.Add(Common.nodeInfo[node[i]].Mark);
MarkAdd
(
Common
.
nodeInfo
[
node
[
i
]].
Mark
);
nodeIdx
=
node
[
i
];
break
;
}
}
}
}
}
}
else
if
(
Common
.
nodeInfo
[
node
[
i
]].
Name
==
"A1"
&&
Common
.
nodeInfo
[
node
[
i
]].
RFID
.
StartsWith
(
"B"
))
//A1出料串,检查C1,3,5是否需要
else
if
(
Common
.
nodeInfo
[
node
[
i
]].
Name
==
"A1"
&&
Common
.
nodeInfo
[
node
[
i
]].
RFID
.
StartsWith
(
"B"
))
//A1出料串,检查C1,3,5是否需要
{
int
n
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"C1"
&&
s
.
Action
==
ClientAction
.
NeedEnter
&&
s
.
AgvName
==
""
&&
s
.
IsUse
);
if
(
n
==
-
1
)
n
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"C3"
&&
s
.
Action
==
ClientAction
.
NeedEnter
&&
s
.
AgvName
==
""
&&
s
.
IsUse
);
if
(
n
==
-
1
)
n
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"C5"
&&
s
.
Action
==
ClientAction
.
NeedEnter
&&
s
.
AgvName
==
""
&&
s
.
IsUse
);
//入料口有一个没有占用
if
(
n
>
-
1
)
{
{
nodeIdx
=
node
[
i
];
int
n
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"C1"
&&
s
.
Action
==
ClientAction
.
NeedEnter
&&
s
.
AgvName
==
""
&&
s
.
IsUse
);
break
;
if
(
n
==
-
1
)
n
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"C3"
&&
s
.
Action
==
ClientAction
.
NeedEnter
&&
s
.
AgvName
==
""
&&
s
.
IsUse
);
//入料口有一个没有占用
if
(
n
>
-
1
)
{
nodeIdx
=
node
[
i
];
break
;
}
}
}
}
else
if
(
Common
.
nodeInfo
[
node
[
i
]].
Name
==
"A1"
&&
Common
.
nodeInfo
[
node
[
i
]].
RFID
.
StartsWith
(
"A"
))
//B区域入料
else
if
(
Common
.
nodeInfo
[
node
[
i
]].
Name
==
"A1"
&&
Common
.
nodeInfo
[
node
[
i
]].
RFID
.
StartsWith
(
"A"
))
//B区域入料
{
if
(
FindAreaBEnter
()
>
-
1
)
{
{
nodeIdx
=
node
[
i
];
if
(
FindAreaBEnter
()
>
-
1
)
break
;
{
nodeIdx
=
node
[
i
];
break
;
}
}
}
}
else
if
(
Common
.
nodeInfo
[
node
[
i
]].
Name
==
"A7"
&&
Common
.
nodeInfo
[
node
[
i
]].
RFID
.
StartsWith
(
"B"
))
//C7入料
else
if
(
Common
.
nodeInfo
[
node
[
i
]].
Name
==
"A7"
&&
Common
.
nodeInfo
[
node
[
i
]].
RFID
.
StartsWith
(
"B"
))
//C7入料
{
int
n
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"C7"
&&
s
.
Action
==
ClientAction
.
NeedEnter
&&
s
.
AgvName
==
""
&&
s
.
IsUse
);
//入料口有一个没有占用
if
(
n
>
-
1
)
{
{
nodeIdx
=
node
[
i
];
int
n
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"C7"
&&
s
.
Action
==
ClientAction
.
NeedEnter
&&
s
.
AgvName
==
""
&&
s
.
IsUse
);
break
;
//入料口有一个没有占用
if
(
n
>
-
1
)
{
nodeIdx
=
node
[
i
];
break
;
}
}
}
}
else
if
(
Common
.
nodeInfo
[
node
[
i
]].
Name
==
"A7"
&&
Common
.
nodeInfo
[
node
[
i
]].
RFID
.
StartsWith
(
"A"
))
//A7有空料架
else
if
(
Common
.
nodeInfo
[
node
[
i
]].
Name
==
"A7"
&&
Common
.
nodeInfo
[
node
[
i
]].
RFID
.
StartsWith
(
"A"
))
//A7有空料架
{
int
n
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"A4"
&&
s
.
Action
==
ClientAction
.
None
&&
s
.
IsUse
);
if
(
n
>
-
1
)
//B区域无出库任务,A4无料架,往A3送一个空架子,便于出料串
{
{
n
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"A3"
&&
s
.
Action
==
ClientAction
.
NeedEnter
&&
s
.
AgvName
==
""
&&
s
.
IsUse
);
int
n
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"A4"
&&
s
.
Action
==
ClientAction
.
None
&&
s
.
IsUse
);
if
(
n
>
-
1
)
//B区域无出库任务,A4无料架,往A3送一个空架子,便于出料串
{
n
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"A3"
&&
s
.
Action
==
ClientAction
.
NeedEnter
&&
s
.
AgvName
==
""
&&
s
.
IsUse
);
//入料口有一个没有占用
if
(
n
>
-
1
)
{
nodeIdx
=
node
[
i
];
break
;
}
}
n
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"C7"
&&
s
.
Action
==
ClientAction
.
NeedEnter
&&
s
.
AgvName
==
""
&&
s
.
IsUse
);
//入料口有一个没有占用
//入料口有一个没有占用
if
(
n
>
-
1
)
if
(
n
>
-
1
)
{
{
...
@@ -715,86 +843,80 @@ namespace BLL
...
@@ -715,86 +843,80 @@ namespace BLL
break
;
break
;
}
}
}
}
n
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"C7"
&&
s
.
Action
==
ClientAction
.
NeedEnter
&&
s
.
AgvName
==
""
&&
s
.
IsUse
);
else
if
(
Common
.
nodeInfo
[
node
[
i
]].
Name
==
"C2"
||
Common
.
nodeInfo
[
node
[
i
]].
Name
==
"C4"
)
//C2,4准备出空架子,A2需要料
//入料口有一个没有占用
if
(
n
>
-
1
)
{
{
nodeIdx
=
node
[
i
];
int
n
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"C7"
&&
s
.
Action
==
ClientAction
.
NeedEnter
&&
s
.
AgvName
==
""
&&
s
.
IsUse
);
break
;
if
(
n
==
-
1
)
n
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"A2"
&&
s
.
Action
==
ClientAction
.
NeedEnter
&&
s
.
AgvName
==
""
&&
s
.
IsUse
);
}
//入料口有一个没有占用
}
if
(
n
>
-
1
)
else
if
(
Common
.
nodeInfo
[
node
[
i
]].
Name
==
"C2"
||
Common
.
nodeInfo
[
node
[
i
]].
Name
==
"C4"
||
Common
.
nodeInfo
[
node
[
i
]].
Name
==
"C6"
)
//C2,4,6准备出空架子,A2需要料
{
{
nodeIdx
=
node
[
i
];
int
n
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"C7"
&&
s
.
Action
==
ClientAction
.
NeedEnter
&&
s
.
AgvName
==
""
&&
s
.
IsUse
);
break
;
if
(
n
==
-
1
)
n
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"A2"
&&
s
.
Action
==
ClientAction
.
NeedEnter
&&
s
.
AgvName
==
""
&&
s
.
IsUse
);
}
//入料口有一个没有占用
if
(
n
>
-
1
)
{
nodeIdx
=
node
[
i
];
break
;
}
}
}
else
if
(
Common
.
nodeInfo
[
node
[
i
]].
Name
==
"C8"
)
//C8出往A8
else
if
(
Common
.
nodeInfo
[
node
[
i
]].
Name
==
"C8"
)
//C8出往A8
{
int
n
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"A8"
&&
s
.
Action
==
ClientAction
.
NeedEnter
&&
s
.
AgvName
==
""
&&
s
.
IsUse
);
//入料口没有占用
if
(
n
>
-
1
)
{
{
nodeIdx
=
node
[
i
];
int
n
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"A8"
&&
s
.
Action
==
ClientAction
.
NeedEnter
&&
s
.
AgvName
==
""
&&
s
.
IsUse
);
break
;
//入料口没有占用
if
(
n
>
-
1
)
{
nodeIdx
=
node
[
i
];
break
;
}
}
}
//else if(!Common.nodeInfo[node[i]].Equals("C5") || !Common.nodeInfo[node[i]].Equals("C6"))
//{
// nodeIdx = node[i];
// break;
//}
}
}
else
{
nodeIdx
=
node
[
i
];
break
;
}
}
if
(
nodeIdx
>
-
1
)
if
(
nodeIdx
>
-
1
)
{
if
(
Common
.
nodeInfo
[
nodeIdx
].
Name
==
"A1"
)
{
{
if
(
Common
.
nodeInfo
[
nodeIdx
].
RFID
.
Length
==
0
||
Common
.
nodeInfo
[
nodeIdx
].
RFID
==
"00
"
)
if
(
Common
.
nodeInfo
[
nodeIdx
].
Name
==
"A1
"
)
{
{
Common
.
log
.
Info
(
"A1 RFID 错误"
);
if
(
Common
.
nodeInfo
[
nodeIdx
].
RFID
.
Length
==
0
||
Common
.
nodeInfo
[
nodeIdx
].
RFID
==
"00"
)
//Common.log.OutTextBox("A1 RFID 错误");
{
return
;
Common
.
log
.
Info
(
"A1 RFID 错误"
);
//Common.log.OutTextBox("A1 RFID 错误");
return
;
}
else
{
Common
.
log
.
Info
(
"[StatusNone Assign Mission A1] "
+
agv
.
Name
+
" "
+
Common
.
nodeInfo
[
nodeIdx
].
Name
);
MoveNode
(
agv
,
nodeIdx
);
return
;
}
}
}
else
else
{
{
Common
.
log
.
Info
(
"[StatusNone Assign Mission
A1
] "
+
agv
.
Name
+
" "
+
Common
.
nodeInfo
[
nodeIdx
].
Name
);
Common
.
log
.
Info
(
"[StatusNone Assign Mission
other
] "
+
agv
.
Name
+
" "
+
Common
.
nodeInfo
[
nodeIdx
].
Name
);
MoveNode
(
agv
,
nodeIdx
);
MoveNode
(
agv
,
nodeIdx
);
return
;
return
;
}
}
}
}
else
{
Common
.
log
.
Info
(
"[StatusNone Assign Mission other] "
+
agv
.
Name
+
" "
+
Common
.
nodeInfo
[
nodeIdx
].
Name
);
MoveNode
(
agv
,
nodeIdx
);
return
;
}
}
//Common.nodeInfo[nodeIdx].AgvName = agv.Name;
//Common.nodeInfo[nodeIdx].AgvName = agv.Name;
//agv.Place = Common.nodeInfo[nodeIdx].Name;
//agv.Place = Common.nodeInfo[nodeIdx].Name;
//agv.Mark = Common.nodeInfo[nodeIdx].Mark;
//agv.Mark = Common.nodeInfo[nodeIdx].Mark;
//rtn = Common.mir.Add_Mission_Fleet(agv, Common.agvMission["Move" + agv.Place]);
//rtn = Common.mir.Add_Mission_Fleet(agv, Common.agvMission["Move" + agv.Place]);
//log = string.Format("{0} Move {1} {2}", agv.Name, agv.Place, Common.nodeInfo[nodeIdx].Action.ToString());
//log = string.Format("{0} Move {1} {2}", agv.Name, agv.Place, Common.nodeInfo[nodeIdx].Action.ToString());
//Common.log.Info(log);
//Common.log.Info(log);
//Common.ShowLog(log);
//Common.ShowLog(log);
//rtn = Common.mir.State_Ready(agv);
//rtn = Common.mir.State_Ready(agv);
//AgvChanged?.Invoke(agvIdx);
//AgvChanged?.Invoke(agvIdx);
//Common.server.NodeRefresh(nodeIdx);
//Common.server.NodeRefresh(nodeIdx);
//return;
//return;
}
}
}
}
}
}
}
catch
(
Exception
ex
)
catch
(
Exception
ex
)
{
{
...
@@ -1147,8 +1269,9 @@ namespace BLL
...
@@ -1147,8 +1269,9 @@ namespace BLL
rtn
=
B123456Enter
(
agv
);
break
;
rtn
=
B123456Enter
(
agv
);
break
;
case
"C2"
:
case
"C2"
:
case
"C4"
:
case
"C4"
:
rtn
=
C24Enter
(
agv
);
break
;
case
"C6"
:
case
"C6"
:
rtn
=
C
24
6Enter
(
agv
);
break
;
rtn
=
C6Enter
(
agv
);
break
;
case
"C8"
:
case
"C8"
:
rtn
=
C8Enter
(
agv
);
break
;
rtn
=
C8Enter
(
agv
);
break
;
case
"D2"
:
case
"D2"
:
...
@@ -1402,16 +1525,46 @@ namespace BLL
...
@@ -1402,16 +1525,46 @@ namespace BLL
nodeIdx
=
FindAreaC
();
nodeIdx
=
FindAreaC
();
if
(
nodeIdx
>
-
1
)
if
(
nodeIdx
>
-
1
)
{
{
rtn
=
MoveNode
(
agv
,
nodeIdx
)
;
string
nodeName
=
Common
.
nodeInfo
[
nodeIdx
].
Name
;
if
(
rtn
)
if
(
nodeName
.
Equals
(
"C5"
)
&&
agv
.
IP
.
Equals
(
Common
.
No1_IP
)
)
{
{
agv
.
NextMission
=
""
;
rtn
=
MoveNode
(
agv
,
nodeIdx
);
Common
.
log
.
Info
(
agv
.
Name
+
" A1出料串["
+
agv
.
RFID
+
"],去["
+
Common
.
nodeInfo
[
nodeIdx
].
Name
+
"]入库"
);
if
(
rtn
)
{
agv
.
NextMission
=
""
;
Common
.
log
.
Info
(
agv
.
Name
+
" A1出料串["
+
agv
.
RFID
+
"],去["
+
Common
.
nodeInfo
[
nodeIdx
].
Name
+
"]入库"
);
}
else
{
agv
.
NextMission
=
Common
.
nodeInfo
[
nodeIdx
].
Name
;
//Common.mir.Add_Mission_Fleet(agv, "Common.agvMission["MoveStandbyTemp"]");
}
}
else
if
(!
nodeName
.
Equals
(
"C5"
)
&&
!
agv
.
IP
.
Equals
(
Common
.
No1_IP
))
{
rtn
=
MoveNode
(
agv
,
nodeIdx
);
if
(
rtn
)
{
agv
.
NextMission
=
""
;
Common
.
log
.
Info
(
agv
.
Name
+
" A1出料串["
+
agv
.
RFID
+
"],去["
+
Common
.
nodeInfo
[
nodeIdx
].
Name
+
"]入库"
);
}
else
{
agv
.
NextMission
=
Common
.
nodeInfo
[
nodeIdx
].
Name
;
//Common.mir.Add_Mission_Fleet(agv, "Common.agvMission["MoveStandbyTemp"]");
}
}
}
else
else
{
{
agv
.
NextMission
=
Common
.
nodeInfo
[
nodeIdx
].
Name
;
if
(!
agv
.
StandbyTemp
)
//Common.mir.Add_Mission_Fleet(agv, "Common.agvMission["MoveStandbyTemp"]");
{
agv
.
StandbyTemp
=
true
;
log
=
agv
.
Name
+
" A1出料串["
+
agv
.
RFID
+
"] C区暂时没有位置"
;
agv
.
NextMission
=
"C区"
;
Common
.
mir
.
Add_Mission_Fleet
(
agv
,
Common
.
agvMission
[
"MoveStandbyTemp"
]);
Common
.
log
.
Info
(
log
);
Common
.
ShowLog
(
log
);
}
}
}
}
}
else
else
...
@@ -1882,12 +2035,12 @@ namespace BLL
...
@@ -1882,12 +2035,12 @@ namespace BLL
rtn
=
FindNeedLeave
(
agv
,
"C4"
);
rtn
=
FindNeedLeave
(
agv
,
"C4"
);
if
(
rtn
)
if
(
rtn
)
Common
.
log
.
Info
(
agv
.
Name
+
" 在C1送完料串,检测到C4出料串任务[A2可以进料],开始执行"
);
Common
.
log
.
Info
(
agv
.
Name
+
" 在C1送完料串,检测到C4出料串任务[A2可以进料],开始执行"
);
if
(!
rtn
)
//
if (!rtn)
{
//
{
rtn
=
FindNeedLeave
(
agv
,
"C6"
);
//
rtn = FindNeedLeave(agv, "C6");
if
(
rtn
)
//
if (rtn)
Common
.
log
.
Info
(
agv
.
Name
+
" 在C1送完料串,检测到C6出料串任务[A2可以进料],开始执行"
);
//
Common.log.Info(agv.Name + " 在C1送完料串,检测到C6出料串任务[A2可以进料],开始执行");
}
//
}
}
}
if
(!
rtn
)
if
(!
rtn
)
...
@@ -1898,12 +2051,12 @@ namespace BLL
...
@@ -1898,12 +2051,12 @@ namespace BLL
rtn
=
FindNeedLeave
(
agv
,
"C4"
);
rtn
=
FindNeedLeave
(
agv
,
"C4"
);
if
(
rtn
)
if
(
rtn
)
Common
.
log
.
Info
(
agv
.
Name
+
" 在C1送完料串,检测到C4出料串任务[A2不可以进料,C7可以进料],开始执行"
);
Common
.
log
.
Info
(
agv
.
Name
+
" 在C1送完料串,检测到C4出料串任务[A2不可以进料,C7可以进料],开始执行"
);
if
(!
rtn
)
//
if (!rtn)
{
//
{
rtn
=
FindNeedLeave
(
agv
,
"C6"
);
//
rtn = FindNeedLeave(agv, "C6");
if
(
rtn
)
//
if (rtn)
Common
.
log
.
Info
(
agv
.
Name
+
" 在C1送完料串,检测到C6出料串任务[A2不可以进料,C7可以进料],开始执行"
);
//
Common.log.Info(agv.Name + " 在C1送完料串,检测到C6出料串任务[A2不可以进料,C7可以进料],开始执行");
}
//
}
}
}
}
}
...
@@ -1923,7 +2076,7 @@ namespace BLL
...
@@ -1923,7 +2076,7 @@ namespace BLL
{
{
rtn
=
MoveStandby
(
agv
);
rtn
=
MoveStandby
(
agv
);
if
(
rtn
)
if
(
rtn
)
Common
.
log
.
Info
(
agv
.
Name
+
" 在C1送完料串,C4,
C6,
A1,D2暂无任务,回待机位"
);
Common
.
log
.
Info
(
agv
.
Name
+
" 在C1送完料串,C4,A1,D2暂无任务,回待机位"
);
}
}
return
rtn
;
return
rtn
;
...
@@ -1943,12 +2096,12 @@ namespace BLL
...
@@ -1943,12 +2096,12 @@ namespace BLL
rtn
=
FindNeedLeave
(
agv
,
"C4"
);
rtn
=
FindNeedLeave
(
agv
,
"C4"
);
if
(
rtn
)
if
(
rtn
)
Common
.
log
.
Info
(
agv
.
Name
+
" 在C3送完料串,检测到C4出料串任务[A2可以进料],开始执行"
);
Common
.
log
.
Info
(
agv
.
Name
+
" 在C3送完料串,检测到C4出料串任务[A2可以进料],开始执行"
);
if
(!
rtn
)
//
if (!rtn)
{
//
{
rtn
=
FindNeedLeave
(
agv
,
"C6"
);
//
rtn = FindNeedLeave(agv, "C6");
if
(
rtn
)
//
if (rtn)
Common
.
log
.
Info
(
agv
.
Name
+
" 在C3送完料串,检测到C6出料串任务[A2可以进料],开始执行"
);
//
Common.log.Info(agv.Name + " 在C3送完料串,检测到C6出料串任务[A2可以进料],开始执行");
}
//
}
}
}
if
(!
rtn
)
if
(!
rtn
)
...
@@ -1959,12 +2112,12 @@ namespace BLL
...
@@ -1959,12 +2112,12 @@ namespace BLL
rtn
=
FindNeedLeave
(
agv
,
"C4"
);
rtn
=
FindNeedLeave
(
agv
,
"C4"
);
if
(
rtn
)
if
(
rtn
)
Common
.
log
.
Info
(
agv
.
Name
+
" 在C3送完料串,检测到C4出料串任务[A2不可以进料,C7可以进料],开始执行"
);
Common
.
log
.
Info
(
agv
.
Name
+
" 在C3送完料串,检测到C4出料串任务[A2不可以进料,C7可以进料],开始执行"
);
if
(!
rtn
)
//
if (!rtn)
{
//
{
rtn
=
FindNeedLeave
(
agv
,
"C6"
);
//
rtn = FindNeedLeave(agv, "C6");
if
(
rtn
)
//
if (rtn)
Common
.
log
.
Info
(
agv
.
Name
+
" 在C3送完料串,检测到C6出料串任务[A2不可以进料,C7可以进料],开始执行"
);
//
Common.log.Info(agv.Name + " 在C3送完料串,检测到C6出料串任务[A2不可以进料,C7可以进料],开始执行");
}
//
}
}
}
}
}
...
@@ -1985,7 +2138,7 @@ namespace BLL
...
@@ -1985,7 +2138,7 @@ namespace BLL
{
{
rtn
=
MoveStandby
(
agv
);
rtn
=
MoveStandby
(
agv
);
if
(
rtn
)
if
(
rtn
)
Common
.
log
.
Info
(
agv
.
Name
+
" 在C3送完料串,C4,
C6,
A1,D2暂无任务,回待机位"
);
Common
.
log
.
Info
(
agv
.
Name
+
" 在C3送完料串,C4,A1,D2暂无任务,回待机位"
);
}
}
...
@@ -2013,16 +2166,16 @@ namespace BLL
...
@@ -2013,16 +2166,16 @@ namespace BLL
Common
.
log
.
Info
(
agv
.
Name
+
" 在C5送完料串,检测到C6出料串任务[A2可以进料],开始执行"
);
Common
.
log
.
Info
(
agv
.
Name
+
" 在C5送完料串,检测到C6出料串任务[A2可以进料],开始执行"
);
}
}
if
(!
rtn
)
//
if (!rtn)
{
//
{
nodeIdx
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
==
"C7"
&&
s
.
Action
==
ClientAction
.
NeedEnter
&&
s
.
AgvName
==
""
&&
s
.
IsUse
);
//
nodeIdx = Common.nodeInfo.FindIndex(s => s.Name == "C7" && s.Action == ClientAction.NeedEnter && s.AgvName == "" && s.IsUse);
if
(
nodeIdx
>
-
1
)
//
if (nodeIdx > -1)
{
//
{
rtn
=
FindNeedLeave
(
agv
,
"C6"
);
//
rtn = FindNeedLeave(agv, "C6");
if
(
rtn
)
//
if (rtn)
Common
.
log
.
Info
(
agv
.
Name
+
" 在C5送完料串,检测到C6出料串任务[A2不可以进料,C7可以进料],开始执行"
);
//
Common.log.Info(agv.Name + " 在C5送完料串,检测到C6出料串任务[A2不可以进料,C7可以进料],开始执行");
}
//
}
}
//
}
if
(!
rtn
)
if
(!
rtn
)
{
{
...
@@ -2040,7 +2193,7 @@ namespace BLL
...
@@ -2040,7 +2193,7 @@ namespace BLL
{
{
rtn
=
MoveStandby
(
agv
);
rtn
=
MoveStandby
(
agv
);
if
(
rtn
)
if
(
rtn
)
Common
.
log
.
Info
(
agv
.
Name
+
" 在C
3
送完料串,C6,A1,D2暂无任务,回待机位"
);
Common
.
log
.
Info
(
agv
.
Name
+
" 在C
5
送完料串,C6,A1,D2暂无任务,回待机位"
);
}
}
//bool rtn = FindNeedLeave(agv, "C6");
//bool rtn = FindNeedLeave(agv, "C6");
...
@@ -2084,11 +2237,11 @@ namespace BLL
...
@@ -2084,11 +2237,11 @@ namespace BLL
}
}
/// <summary>
/// <summary>
/// 【满车】料串进入小车,离开C2,4
,6
/// 【满车】料串进入小车,离开C2,4
/// </summary>
/// </summary>
/// <param name="agv"></param>
/// <param name="agv"></param>
/// <returns></returns>
/// <returns></returns>
private
bool
C24
6
Enter
(
Agv_Info
agv
)
private
bool
C24Enter
(
Agv_Info
agv
)
{
{
string
log
;
string
log
;
bool
rtn
;
bool
rtn
;
...
@@ -2098,7 +2251,7 @@ namespace BLL
...
@@ -2098,7 +2251,7 @@ namespace BLL
if
(
rtn
)
if
(
rtn
)
{
{
agv
.
NextMission
=
""
;
agv
.
NextMission
=
""
;
Common
.
log
.
Info
(
agv
.
Name
+
" 在C2/4
/6
进入空料串,检测到C7需要料串,开始执行"
);
Common
.
log
.
Info
(
agv
.
Name
+
" 在C2/4进入空料串,检测到C7需要料串,开始执行"
);
return
true
;
return
true
;
}
}
...
@@ -2106,7 +2259,7 @@ namespace BLL
...
@@ -2106,7 +2259,7 @@ namespace BLL
if
(
rtn
)
if
(
rtn
)
{
{
agv
.
NextMission
=
""
;
agv
.
NextMission
=
""
;
Common
.
log
.
Info
(
agv
.
Name
+
" 在C2/4
/6
进入空料串,检测到D1需要料串,开始执行"
);
Common
.
log
.
Info
(
agv
.
Name
+
" 在C2/4进入空料串,检测到D1需要料串,开始执行"
);
return
true
;
return
true
;
}
}
...
@@ -2114,7 +2267,7 @@ namespace BLL
...
@@ -2114,7 +2267,7 @@ namespace BLL
if
(
rtn
)
if
(
rtn
)
{
{
agv
.
NextMission
=
""
;
agv
.
NextMission
=
""
;
Common
.
log
.
Info
(
agv
.
Name
+
" 在C2/4
/6
进入空料串,检测到A2需要料串,开始执行"
);
Common
.
log
.
Info
(
agv
.
Name
+
" 在C2/4进入空料串,检测到A2需要料串,开始执行"
);
return
true
;
return
true
;
}
}
...
@@ -2124,7 +2277,33 @@ namespace BLL
...
@@ -2124,7 +2277,33 @@ namespace BLL
agv
.
NextMission
=
"A2"
;
agv
.
NextMission
=
"A2"
;
rtn
=
Common
.
mir
.
Add_Mission_Fleet
(
agv
,
Common
.
agvMission
[
"MoveStandbyTemp"
]);
rtn
=
Common
.
mir
.
Add_Mission_Fleet
(
agv
,
Common
.
agvMission
[
"MoveStandbyTemp"
]);
if
(
rtn
)
if
(
rtn
)
Common
.
log
.
Info
(
agv
.
Name
+
" 在C2/4/6进入空料串,C7,D1,A2不需要料串,回待机位"
);
Common
.
log
.
Info
(
agv
.
Name
+
" 在C2/4进入空料串,C7,D1,A2不需要料串,回待机位"
);
return
false
;
}
return
false
;
}
private
bool
C6Enter
(
Agv_Info
agv
)
{
string
log
;
bool
rtn
;
//C7紧急料优先放架子
rtn
=
FindNeedEnter
(
agv
,
"A2"
);
if
(
rtn
)
{
agv
.
NextMission
=
""
;
Common
.
log
.
Info
(
agv
.
Name
+
" 在C6进入空料串,检测到A2需要料串,开始执行"
);
return
true
;
}
if
(!
agv
.
StandbyTemp
)
{
agv
.
StandbyTemp
=
true
;
agv
.
NextMission
=
"A2"
;
rtn
=
Common
.
mir
.
Add_Mission_Fleet
(
agv
,
Common
.
agvMission
[
"MoveStandbyTemp"
]);
if
(
rtn
)
Common
.
log
.
Info
(
agv
.
Name
+
" 在C6进入空料串,A2不需要料串,回待机位"
);
return
false
;
return
false
;
}
}
return
false
;
return
false
;
...
@@ -2216,16 +2395,48 @@ namespace BLL
...
@@ -2216,16 +2395,48 @@ namespace BLL
nodeIdx
=
FindAreaC
();
nodeIdx
=
FindAreaC
();
if
(
nodeIdx
>
-
1
)
if
(
nodeIdx
>
-
1
)
{
{
rtn
=
MoveNode
(
agv
,
nodeIdx
)
;
string
nodeName
=
Common
.
nodeInfo
[
nodeIdx
].
Name
;
if
(
rtn
)
if
(
nodeName
.
Equals
(
"C5"
)
&&
agv
.
IP
.
Equals
(
Common
.
No1_IP
)
)
{
{
agv
.
NextMission
=
""
;
rtn
=
MoveNode
(
agv
,
nodeIdx
);
Common
.
log
.
Info
(
agv
.
Name
+
" 在D2进入料串,送往C区"
);
if
(
rtn
)
{
agv
.
NextMission
=
""
;
Common
.
log
.
Info
(
agv
.
Name
+
" 在D2进入料串,送往C区"
);
}
else
{
agv
.
NextMission
=
"C区"
;
//Common.mir.Add_Mission_Fleet(agv, "Common.agvMission["MoveStandbyTemp"]");
}
}
else
if
(!
nodeName
.
Equals
(
"C5"
)
&&
!
agv
.
IP
.
Equals
(
Common
.
No1_IP
))
{
rtn
=
MoveNode
(
agv
,
nodeIdx
);
if
(
rtn
)
{
agv
.
NextMission
=
""
;
Common
.
log
.
Info
(
agv
.
Name
+
" 在D2进入料串,送往C区"
);
}
else
{
agv
.
NextMission
=
"C区"
;
//Common.mir.Add_Mission_Fleet(agv, "Common.agvMission["MoveStandbyTemp"]");
}
}
}
else
else
{
{
agv
.
NextMission
=
"C区"
;
//Common.mir.Add_Mission_Fleet(agv, "Common.agvMission["MoveStandbyTemp"]");
if
(!
agv
.
StandbyTemp
)
{
agv
.
StandbyTemp
=
true
;
log
=
agv
.
Name
+
" D2[点料机]出料架 C区暂时没有位置"
;
agv
.
NextMission
=
"C区"
;
Common
.
mir
.
Add_Mission_Fleet
(
agv
,
Common
.
agvMission
[
"MoveStandbyTemp"
]);
Common
.
log
.
Info
(
log
);
Common
.
ShowLog
(
log
);
}
}
}
}
}
else
else
...
@@ -3129,7 +3340,7 @@ namespace BLL
...
@@ -3129,7 +3340,7 @@ namespace BLL
agv
.
CloseDoor
=
false
;
agv
.
CloseDoor
=
false
;
Common
.
nodeInfo
[
nodeIdx
].
AgvName
=
agv
.
Name
;
Common
.
nodeInfo
[
nodeIdx
].
AgvName
=
agv
.
Name
;
agv
.
TaskSend
=
true
;
agv
.
TaskSend
=
true
;
log
=
string
.
Format
(
"{0} MoveT
t
oNode {1} {2}"
,
agv
.
Name
,
agv
.
Place
,
Common
.
nodeInfo
[
nodeIdx
].
Action
.
ToString
());
log
=
string
.
Format
(
"{0} MoveToNode {1} {2}"
,
agv
.
Name
,
agv
.
Place
,
Common
.
nodeInfo
[
nodeIdx
].
Action
.
ToString
());
Common
.
log
.
Info
(
log
);
Common
.
log
.
Info
(
log
);
Common
.
ShowLog
(
log
);
Common
.
ShowLog
(
log
);
Common
.
mir
.
State_Ready
(
agv
);
Common
.
mir
.
State_Ready
(
agv
);
...
@@ -3138,7 +3349,7 @@ namespace BLL
...
@@ -3138,7 +3349,7 @@ namespace BLL
else
else
{
{
agv
.
TaskSend
=
false
;
agv
.
TaskSend
=
false
;
log
=
string
.
Format
(
"{0} MoveT
t
oNode {1} 失败"
,
agv
.
Name
,
agv
.
Place
);
log
=
string
.
Format
(
"{0} MoveToNode {1} 失败"
,
agv
.
Name
,
agv
.
Place
);
//防止上一个任务已执行但返回失败时,删除任务
//防止上一个任务已执行但返回失败时,删除任务
//Common.mir.Del_Mission(agv);
//Common.mir.Del_Mission(agv);
Common
.
log
.
Info
(
log
);
Common
.
log
.
Info
(
log
);
...
...
AGVControl/BLL/MiR_API.cs
查看文件 @
4a17d76
...
@@ -385,7 +385,7 @@ namespace BLL
...
@@ -385,7 +385,7 @@ namespace BLL
string
url
=
"http://"
+
info
.
IP
+
"/api/v2.0.0/status?whitelist=state_id,state_text,battery_percentage,mission_text"
;
string
url
=
"http://"
+
info
.
IP
+
"/api/v2.0.0/status?whitelist=state_id,state_text,battery_percentage,mission_text"
;
string
json
=
HttpGet
(
url
,
info
.
IP
,
info
.
Authorization
);
string
json
=
HttpGet
(
url
,
info
.
IP
,
info
.
Authorization
);
Common
.
log
.
Info
(
"URL: "
+
url
+
"\n"
+
"Return: "
+
json
);
Common
.
log
.
Debug
(
"URL: "
+
url
+
"\n"
+
"Return: "
+
json
);
if
(
string
.
IsNullOrWhiteSpace
(
json
))
return
false
;
if
(
string
.
IsNullOrWhiteSpace
(
json
))
return
false
;
JavaScriptSerializer
serializer
=
new
JavaScriptSerializer
();
JavaScriptSerializer
serializer
=
new
JavaScriptSerializer
();
...
...
AGVControl/Common.cs
查看文件 @
4a17d76
...
@@ -22,6 +22,7 @@ namespace AGVControl
...
@@ -22,6 +22,7 @@ namespace AGVControl
public
static
readonly
string
LOG_PATH
=
AppDomain
.
CurrentDomain
.
BaseDirectory
+
"Log"
;
public
static
readonly
string
LOG_PATH
=
AppDomain
.
CurrentDomain
.
BaseDirectory
+
"Log"
;
public
static
readonly
string
CONFIG_PATH
=
AppDomain
.
CurrentDomain
.
BaseDirectory
+
"Config\\"
;
public
static
readonly
string
CONFIG_PATH
=
AppDomain
.
CurrentDomain
.
BaseDirectory
+
"Config\\"
;
public
static
string
No1_IP
=
"10.85.199.67"
;
public
static
void
ShowLog
(
string
s
)
public
static
void
ShowLog
(
string
s
)
{
{
if
(
txtLog
==
null
)
return
;
if
(
txtLog
==
null
)
return
;
...
...
AGVControl/bin/Debug/AGVControl.exe
查看文件 @
4a17d76
此文件类型无法预览
AGVControl/bin/Debug/AGVControl.pdb
查看文件 @
4a17d76
此文件类型无法预览
AGVControl/dll/log4net.dll
0 → 100644
查看文件 @
4a17d76
此文件类型无法预览
AGVControl/obj/Debug/AGVControl.csproj.CoreCompileInputs.cache
查看文件 @
4a17d76
6e0a935f2fc071fe41a8b4e4966fbe7ca4dacc89
8da7a79df2cfe73788bf4aeb9a8db9dab2618e7c
AGVControl/obj/Debug/AGVControl.csproj.FileListAbsolute.txt
查看文件 @
4a17d76
...
@@ -94,3 +94,20 @@ C:\ZDL\Gitee\AGVControl\AGVControl\obj\Debug\AGVControl.csprojAssemblyReference.
...
@@ -94,3 +94,20 @@ C:\ZDL\Gitee\AGVControl\AGVControl\obj\Debug\AGVControl.csprojAssemblyReference.
D:\OneDrive - 上海挚锦科技有限公司\SMD\AGVControl\AGVControl\bin\Debug\Newtonsoft.Json.dll
D:\OneDrive - 上海挚锦科技有限公司\SMD\AGVControl\AGVControl\bin\Debug\Newtonsoft.Json.dll
D:\OneDrive - 上海挚锦科技有限公司\SMD\AGVControl\AGVControl\bin\Debug\log4net.dll
D:\OneDrive - 上海挚锦科技有限公司\SMD\AGVControl\AGVControl\bin\Debug\log4net.dll
D:\OneDrive - 上海挚锦科技有限公司\SMD\AGVControl\AGVControl\obj\Debug\AGVControl.csprojAssemblyReference.cache
D:\OneDrive - 上海挚锦科技有限公司\SMD\AGVControl\AGVControl\obj\Debug\AGVControl.csprojAssemblyReference.cache
C:\Users\dolen\Desktop\AGVControl-Temp\AGVControl\bin\Debug\AGVControl.exe.config
C:\Users\dolen\Desktop\AGVControl-Temp\AGVControl\bin\Debug\AGVControl.exe
C:\Users\dolen\Desktop\AGVControl-Temp\AGVControl\bin\Debug\AGVControl.pdb
C:\Users\dolen\Desktop\AGVControl-Temp\AGVControl\bin\Debug\log4net.dll
C:\Users\dolen\Desktop\AGVControl-Temp\AGVControl\bin\Debug\Newtonsoft.Json.dll
C:\Users\dolen\Desktop\AGVControl-Temp\AGVControl\bin\Debug\RestSharp.dll
C:\Users\dolen\Desktop\AGVControl-Temp\AGVControl\bin\Debug\RestSharp.xml
C:\Users\dolen\Desktop\AGVControl-Temp\AGVControl\obj\Debug\Interop.IWshRuntimeLibrary.dll
C:\Users\dolen\Desktop\AGVControl-Temp\AGVControl\obj\Debug\AGVControl.csproj.ResolveComReference.cache
C:\Users\dolen\Desktop\AGVControl-Temp\AGVControl\obj\Debug\AGVControl.FrmMain.resources
C:\Users\dolen\Desktop\AGVControl-Temp\AGVControl\obj\Debug\AGVControl.Properties.Resources.resources
C:\Users\dolen\Desktop\AGVControl-Temp\AGVControl\obj\Debug\AGVControl.csproj.GenerateResource.cache
C:\Users\dolen\Desktop\AGVControl-Temp\AGVControl\obj\Debug\AGVControl.csproj.CoreCompileInputs.cache
C:\Users\dolen\Desktop\AGVControl-Temp\AGVControl\obj\Debug\AGVControl.csproj.CopyComplete
C:\Users\dolen\Desktop\AGVControl-Temp\AGVControl\obj\Debug\AGVControl.exe
C:\Users\dolen\Desktop\AGVControl-Temp\AGVControl\obj\Debug\AGVControl.pdb
C:\Users\dolen\Desktop\AGVControl-Temp\AGVControl\obj\Debug\AGVControl.csprojAssemblyReference.cache
AGVControl/obj/Debug/AGVControl.csproj.GenerateResource.cache
查看文件 @
4a17d76
此文件类型无法预览
AGVControl/obj/Debug/AGVControl.csproj.ResolveComReference.cache
查看文件 @
4a17d76
此文件类型无法预览
AGVControl/obj/Debug/AGVControl.exe
查看文件 @
4a17d76
此文件类型无法预览
AGVControl/obj/Debug/AGVControl.pdb
查看文件 @
4a17d76
此文件类型无法预览
AGVControl/obj/Debug/DesignTimeResolveAssemblyReferences.cache
查看文件 @
4a17d76
此文件类型无法预览
AGVControl/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
查看文件 @
4a17d76
此文件类型无法预览
AGVControl/obj/Debug/Interop.IWshRuntimeLibrary.dll
查看文件 @
4a17d76
此文件类型无法预览
AgvClient/obj/Debug/AgvClient.csprojAssemblyReference.cache
查看文件 @
4a17d76
此文件类型无法预览
AgvClientTest/obj/Debug/AgvClientTest.csprojAssemblyReference.cache
查看文件 @
4a17d76
此文件类型无法预览
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论