Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
顾剑亮
/
AGVControl-Qisda-ProductionLine
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit c0e49397
由
张东亮
编写于
2020-12-02 14:14:14 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
料架通过rfid解绑
1 个父辈
9ea1b3d5
显示空白字符变更
内嵌
并排
正在显示
31 个修改的文件
包含
637 行增加
和
215 行删除
.vs/AGVControl-ProductionLine/v16/.suo
AGVControl-ProductionLine/App.config
AGVControl-ProductionLine/BLL/AGVManager.cs
AGVControl-ProductionLine/BLL/Common.cs
AGVControl-ProductionLine/BLL/Control.cs
AGVControl-ProductionLine/BLL/JsonHelper.cs
AGVControl-ProductionLine/BLL/LineWebService.cs
AGVControl-ProductionLine/BLL/UnlockMissionManager.cs
AGVControl-ProductionLine/FrmMain.Designer.cs
AGVControl-ProductionLine/FrmMain.cs
AGVControl-ProductionLine/Program.cs
AGVControl-ProductionLine/bean/UnlockedShelf.cs
AGVControl-ProductionLine/bean/job/EmptyAGVBackJob.cs
AGVControl-ProductionLine/bean/job/EnterLeaveShelfJob.cs
AGVControl-ProductionLine/bean/job/GoEmptyShelfLineJob.cs
AGVControl-ProductionLine/bean/node/ClientNode.cs
AGVControl-ProductionLine/bean/node/DoubleLineNodeFor4C.cs
AGVControl-ProductionLine/bean/node/DoubleLineNodeFor4D.cs
AGVControl-ProductionLine/bin/Debug/AGVControl-ProductionLine.exe
AGVControl-ProductionLine/bin/Debug/AGVControl-ProductionLine.exe.config
AGVControl-ProductionLine/bin/Debug/AGVControl-ProductionLine.pdb
AGVControl-ProductionLine/bin/Debug/Config/AgvProductionLine.csv
AGVControl-ProductionLine/bin/Debug/Config/LinePlace.txt
AGVControl-ProductionLine/bin/Debug/Config/UnlockInfo.json
AGVControl-ProductionLine/bin/Debug/Config/tempData.ini
AGVControl-ProductionLine/bin/Debug/logs/AgvServer.log
AGVControl-ProductionLine/obj/Debug/AGVControl-ProductionLine.csproj.CoreCompileInputs.cache
AGVControl-ProductionLine/obj/Debug/AGVControl-ProductionLine.csproj.GenerateResource.cache
AGVControl-ProductionLine/obj/Debug/AGVControl-ProductionLine.exe
AGVControl-ProductionLine/obj/Debug/AGVControl-ProductionLine.pdb
AGVControl-ProductionLine/obj/Debug/DesignTimeResolveAssemblyReferences.cache
.vs/AGVControl-ProductionLine/v16/.suo
查看文件 @
c0e4939
此文件类型无法预览
AGVControl-ProductionLine/App.config
查看文件 @
c0e4939
...
...
@@ -43,7 +43,8 @@
<
add
key
=
"FLEET"
value
=
"10.85.199.3"
/>
<
add
key
=
"AutoCharge"
value
=
"True"
/>
<
add
key
=
"ChargeWait"
value
=
"1"
/>
<
add
key
=
"ChargeThreshold"
value
=
"20,70"
/>
<
add
key
=
"ChargeThreshold"
value
=
"20,90"
/>
<
add
key
=
"IP_4D_Light"
value
=
"10.85.196.40:8088"
/>
<
add
key
=
"IP_4C_Light"
value
=
"10.85.197.40:8088"
/>
</
appSettings
>
</
configuration
>
\ No newline at end of file
AGVControl-ProductionLine/BLL/AGVManager.cs
查看文件 @
c0e4939
...
...
@@ -5,9 +5,10 @@ using System.Linq;
using
System.Text
;
using
System.Threading.Tasks
;
using
AGVControl
;
using
BLL
;
using
RestSharp
;
namespace
BLL
namespace
AGVControl
{
public
class
AGVManager
{
...
...
@@ -331,7 +332,12 @@ namespace BLL
{
public
string
msg
{
get
;
set
;
}
}
public
class
Msg1
{
//{"Code":0,"Msg":"D14,,D7,D33"}
public
int
Code
{
get
;
set
;
}
public
string
Msg
{
get
;
set
;
}
}
private
static
string
Addr_updateDeviceAlarmMsg
=
"/rest/api/qisda/device/updateDeviceAlarmMsg"
;
/// <summary>
/// 异常看板
...
...
@@ -420,6 +426,88 @@ namespace BLL
return
e
.
ToString
();
}
}
/// <summary>
/// 获取接驳台料架情况
/// </summary>
/// <param name="lineName"></param>
/// <returns></returns>
public
static
string
GetRFIDs
(
string
lineName
)
{
string
addr
=
""
;
if
(
lineName
.
StartsWith
(
SettingString
.
D4_Name_Prefix
))
{
addr
=
string
.
Format
(
"http://{0}/LineGetRFID?line={1}"
,
ConfigAppSettings
.
GetValue
(
SettingString
.
IP_4D_Light
),
lineName
);
}
else
if
(
lineName
.
StartsWith
(
SettingString
.
C4_Name_Prefix
))
{
addr
=
string
.
Format
(
"http://{0}/LineGetRFID?line={1}"
,
ConfigAppSettings
.
GetValue
(
SettingString
.
IP_4C_Light
),
lineName
);
}
try
{
string
result
=
HttpHelper
.
Get
(
addr
);
if
(!
result
.
Equals
(
""
))
{
Msg1
msgs
=
JsonHelper
.
DeserializeJsonToObject
<
Msg1
>(
result
);
if
(
msgs
==
null
)
return
",,,D22"
;
else
{
Common
.
log
.
Debug
(
string
.
Format
(
"{0}接驳台状态:{1}"
,
lineName
,
msgs
.
Msg
));
return
msgs
.
Msg
;
}
}
}
catch
(
Exception
ex
)
{
Common
.
log
.
Error
(
ex
.
Message
);
return
",,,D22"
;
}
return
",,,D22"
;
}
/// <summary>
/// 删除接驳台料架
/// </summary>
/// <param name="lineName"></param>
/// <param name="rfid"></param>
/// <returns></returns>
public
static
bool
ClearRFID
(
string
lineName
,
string
rfid
)
{
string
addr
=
""
;
if
(
lineName
.
StartsWith
(
SettingString
.
D4_Name_Prefix
))
{
addr
=
string
.
Format
(
"http://{0}/LineClearRFID?line={1}&rfid={2}"
,
ConfigAppSettings
.
GetValue
(
SettingString
.
IP_4D_Light
),
lineName
,
rfid
);
}
else
if
(
lineName
.
StartsWith
(
SettingString
.
C4_Name_Prefix
))
{
addr
=
string
.
Format
(
"http://{0}/LineClearRFID?line={1}&rfid={2}"
,
ConfigAppSettings
.
GetValue
(
SettingString
.
IP_4C_Light
),
lineName
,
rfid
);
}
try
{
string
result
=
HttpHelper
.
Get
(
addr
);
if
(!
result
.
Equals
(
""
))
{
Msg1
msgs
=
JsonHelper
.
DeserializeJsonToObject
<
Msg1
>(
result
);
if
(
msgs
==
null
)
return
false
;
else
{
Common
.
log
.
Info
(
string
.
Format
(
"删除{0}接驳台料架{1}:{2}"
,
lineName
,
rfid
,
msgs
.
Msg
));
return
true
;
}
}
}
catch
(
Exception
ex
)
{
Common
.
log
.
Error
(
ex
.
Message
);
return
false
;
}
return
false
;
}
}
public
class
ShelfLockInfo
{
...
...
AGVControl-ProductionLine/BLL/Common.cs
查看文件 @
c0e4939
...
...
@@ -64,6 +64,9 @@ namespace AGVControl
public
const
string
A5
=
"A5"
;
public
const
string
D4_Name_Prefix
=
"D"
;
public
const
string
C4_Name_Prefix
=
"C"
;
public
const
string
IP_4D_Light
=
"IP_4D_Light"
;
public
const
string
IP_4C_Light
=
"IP_4C_Light"
;
}
...
...
@@ -94,7 +97,7 @@ namespace AGVControl
public
static
Dictionary
<
string
,
string
>
showNameMissionName
;
//public static Dictionary<string, string> agvProductionLine;
public
static
System
.
Configuration
.
Configuration
appConfig
;
public
static
MissionManager
missionManager
;
public
static
Unlock
MissionManager
missionManager
;
public
static
StandbyStation
StandbyStation
=
new
StandbyStation
()
{
C4_Station1
=
""
,
C4_Station2
=
""
};
private
static
List
<
string
>
msg
=
new
List
<
string
>();
...
...
@@ -202,9 +205,9 @@ namespace AGVControl
}
else
{
tarIdx
=
Common
.
agvInfo
.
FindIndex
(
s
=>
!
s
.
IP
.
Equals
(
agv
.
IP
)
&&
s
.
CurJob
!=
null
&&
s
.
CurJob
is
EmptyShelfBackJob
&&
((((
EmptyShelfBackJob
)
s
.
CurJob
).
EmptyShelfTargetPlace
)
!=
null
)
&&
((
EmptyShelfBackJob
)
s
.
CurJob
).
EmptyShelfTargetPlace
.
Equals
(
SettingString
.
A5
));
if
(
tarIdx
==
-
1
)
tarIdx
=
Common
.
agvInfo
.
FindIndex
(
s
=>
!
s
.
IP
.
Equals
(
agv
.
IP
)
&&
s
.
CurJob
!=
null
&&
s
.
CurJob
is
EmptyShelfBackJob
&&
((((
EmptyShelfBackJob
)
s
.
CurJob
).
EmptyShelfTargetPlace
)
!=
null
)
&&
((
EmptyShelfBackJob
)
s
.
CurJob
).
EmptyShelfTargetPlace
.
Equals
(
SettingString
.
A5
));
if
(
tarIdx
==
-
1
)
{
nodeName
=
SettingString
.
A5
;
Common
.
log
.
Debug
(
string
.
Format
(
"{0} {1}需要小料架"
,
agv
.
Name
,
SettingString
.
A5
));
...
...
@@ -232,7 +235,7 @@ namespace AGVControl
{
tarIdx
=
Common
.
agvInfo
.
FindIndex
(
s
=>
!
s
.
IP
.
Equals
(
agv
.
IP
)
&&
s
.
CurJob
!=
null
&&
s
.
CurJob
is
EmptyShelfBackJob
&&
((((
EmptyShelfBackJob
)
s
.
CurJob
).
EmptyShelfTargetPlace
)
!=
null
)
&&
((
EmptyShelfBackJob
)
s
.
CurJob
).
EmptyShelfTargetPlace
.
Equals
(
SettingString
.
A6
));
if
(
tarIdx
==
-
1
)
if
(
tarIdx
==
-
1
)
{
nodeName
=
SettingString
.
A6
;
Common
.
log
.
Debug
(
string
.
Format
(
"{0} {1}需要小料架"
,
agv
.
Name
,
SettingString
.
A6
));
...
...
@@ -265,7 +268,7 @@ namespace AGVControl
{
tarIdx
=
Common
.
agvInfo
.
FindIndex
(
s
=>
!
s
.
IP
.
Equals
(
agv
.
IP
)
&&
s
.
CurJob
!=
null
&&
s
.
CurJob
is
EmptyShelfBackJob
&&
((((
EmptyShelfBackJob
)
s
.
CurJob
).
EmptyShelfTargetPlace
)
!=
null
)
&&
((
EmptyShelfBackJob
)
s
.
CurJob
).
EmptyShelfTargetPlace
.
Equals
(
SettingString
.
A5
));
if
(
tarIdx
==
-
1
)
if
(
tarIdx
==
-
1
)
{
nodeName
=
SettingString
.
A5
;
Common
.
log
.
Debug
(
string
.
Format
(
"{0} {1}需要大料架"
,
agv
.
Name
,
SettingString
.
A5
));
...
...
@@ -293,7 +296,7 @@ namespace AGVControl
{
tarIdx
=
Common
.
agvInfo
.
FindIndex
(
s
=>
!
s
.
IP
.
Equals
(
agv
.
IP
)
&&
s
.
CurJob
!=
null
&&
s
.
CurJob
is
EmptyShelfBackJob
&&
((((
EmptyShelfBackJob
)
s
.
CurJob
).
EmptyShelfTargetPlace
)
!=
null
)
&&
((
EmptyShelfBackJob
)
s
.
CurJob
).
EmptyShelfTargetPlace
.
Equals
(
SettingString
.
A6
));
if
(
tarIdx
==
-
1
)
if
(
tarIdx
==
-
1
)
{
nodeName
=
SettingString
.
A6
;
Common
.
log
.
Debug
(
string
.
Format
(
"{0} {1}需要大料架"
,
agv
.
Name
,
SettingString
.
A6
));
...
...
@@ -563,10 +566,10 @@ namespace AGVControl
/// <param name="taskName">任务名称</param>
/// <param name="taskGUID">任务GUID</param>
/// <returns></returns>
public
static
bool
CheckTaskFinished
(
Agv_Info
agv
,
string
nodeName
,
string
curTaskState
)
public
static
bool
CheckTaskFinished
(
Agv_Info
agv
,
string
nodeName
,
string
curTaskState
)
{
log
.
Debug
(
agv
.
Name
+
" 检查当前任务是否结束: "
+
SettingString
.
Move
+
nodeName
+
" "
+
curTaskState
);
return
Common
.
agvMission
[
SettingString
.
Move
+
nodeName
].
Equals
(
agv
.
CurTaskGUID
)
&&
curTaskState
.
Equals
(
SettingString
.
Done
);
log
.
Debug
(
agv
.
Name
+
" 检查当前任务是否结束: "
+
SettingString
.
Move
+
nodeName
+
" "
+
curTaskState
);
return
Common
.
agvMission
[
SettingString
.
Move
+
nodeName
].
Equals
(
agv
.
CurTaskGUID
)
&&
curTaskState
.
Equals
(
SettingString
.
Done
);
}
/// <summary>
/// 检查充电任务是否分配完成
...
...
@@ -585,6 +588,7 @@ namespace AGVControl
}
//双层线工单信息
public
static
string
doubleLine_WO
=
""
;
public
static
string
warnMsg
=
""
;
/// <summary>
/// 查找空架任务
/// </summary>
...
...
@@ -592,12 +596,15 @@ namespace AGVControl
/// <param name="nodeName">出空料架的节点名</param>
/// <param name="emptyAGVbACK">agv空车返回,带一个料架</param>
/// <returns></returns>
public
static
bool
FindEmptyShelfNode
(
Agv_Info
agv
,
out
string
nodeName
,
bool
emptyAGVbACK
=
false
)
public
static
bool
FindEmptyShelfNode
(
Agv_Info
agv
,
out
string
nodeName
,
out
string
rfid
,
bool
emptyAGVbACK
=
false
)
{
nodeName
=
""
;
rfid
=
""
;
if
(!
Common
.
CheckCanExecuteMission
(
agv
))
return
false
;
///双层线出口检查
int
idx
=
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
.
Equals
(
SettingString
.
A6
)
&&
(
s
.
StateEquals
(
eNodeStatus
.
NeedEnterLeave
)
||
(
s
.
StateEquals
(
eNodeStatus
.
NeedLeave
)))
&&
!
s
.
RFID
.
Equals
(
""
));
if
(
idx
>
-
1
)
...
...
@@ -607,6 +614,14 @@ namespace AGVControl
idx
=
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
.
Equals
(
FullShelfDestInfo
.
location
)
&&
s
.
EmptyShelfCnt
>
0
);
if
(
idx
>
-
1
)
{
if
(!
Common
.
missionManager
.
GetUnlockRfids
(
Common
.
nodeInfo
[
idx
].
Name
).
Contains
(
nodeInfo
[
idx
].
RFID
))
{
warnMsg
=
string
.
Format
(
"料架{0}在接驳台{1}最外侧,但没有解绑信息,请检查"
,
nodeInfo
[
idx
].
RFID
,
nodeInfo
[
idx
].
Name
);
Common
.
log
.
Error
(
warnMsg
);
return
false
;
}
rfid
=
nodeInfo
[
idx
].
RFID
;
warnMsg
=
""
;
if
(
FullShelfDestInfo
.
location
.
StartsWith
(
SettingString
.
C4_Name_Prefix
)
&&
SettingString
.
C4_AGV_IPs
.
Contains
(
agv
.
IP
))
{
nodeName
=
FullShelfDestInfo
.
location
;
...
...
@@ -646,6 +661,14 @@ namespace AGVControl
if
(
idx
>
-
1
)
{
if
(!
Common
.
missionManager
.
GetUnlockRfids
(
Common
.
nodeInfo
[
idx
].
Name
).
Contains
(
nodeInfo
[
idx
].
RFID
))
{
warnMsg
=
string
.
Format
(
"料架{0}在接驳台{1}最外侧,但没有解绑信息,请检查"
,
nodeInfo
[
idx
].
RFID
,
nodeInfo
[
idx
].
Name
);
Common
.
log
.
Error
(
warnMsg
);
return
false
;
}
rfid
=
nodeInfo
[
idx
].
RFID
;
warnMsg
=
""
;
if
(
loc
.
StartsWith
(
SettingString
.
C4_Name_Prefix
)
&&
SettingString
.
C4_AGV_IPs
.
Contains
(
agv
.
IP
))
{
nodeName
=
loc
;
...
...
@@ -669,8 +692,6 @@ namespace AGVControl
//双层线是否需要小料架
if
(
CheckA5A6State
(
agv
,
eShelfType
.
SmallShelf
,
out
string
lineNodeName
))
{
//if (curPlace.Equals(""))//待机位
// {
//4C车间寻找
if
(
SettingString
.
C4_AGV_IPs
.
Contains
(
agv
.
IP
))
...
...
@@ -680,6 +701,15 @@ namespace AGVControl
{
return
false
;
}
idx
=
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
.
Equals
(
nearNodeName
));
if
(!
Common
.
missionManager
.
GetUnlockRfids
(
Common
.
nodeInfo
[
idx
].
Name
).
Contains
(
nodeInfo
[
idx
].
RFID
))
{
warnMsg
=
string
.
Format
(
"料架{0}在接驳台{1}最外侧,但没有解绑信息,请检查"
,
nodeInfo
[
idx
].
RFID
,
nodeInfo
[
idx
].
Name
);
Common
.
log
.
Error
(
warnMsg
);
return
false
;
}
rfid
=
nodeInfo
[
idx
].
RFID
;
warnMsg
=
""
;
nodeName
=
nearNodeName
;
Common
.
log
.
Debug
(
agv
.
Name
+
" 双层线需要小料架,准备去4C-"
+
nearNodeName
);
return
true
;
...
...
@@ -693,6 +723,15 @@ namespace AGVControl
{
return
false
;
}
idx
=
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
.
Equals
(
nearNodeName
));
if
(!
Common
.
missionManager
.
GetUnlockRfids
(
Common
.
nodeInfo
[
idx
].
Name
).
Contains
(
nodeInfo
[
idx
].
RFID
))
{
warnMsg
=
string
.
Format
(
"料架{0}在接驳台{1}最外侧,但没有解绑信息,请检查"
,
nodeInfo
[
idx
].
RFID
,
nodeInfo
[
idx
].
Name
);
Common
.
log
.
Error
(
warnMsg
);
return
false
;
}
rfid
=
nodeInfo
[
idx
].
RFID
;
warnMsg
=
""
;
nodeName
=
nearNodeName
;
Common
.
log
.
Debug
(
agv
.
Name
+
" 双层线需要小料架,准备去4D-"
+
nearNodeName
);
return
true
;
...
...
@@ -714,6 +753,15 @@ namespace AGVControl
string
nearNodeName
=
CalculateNearNode
(
agv
,
SettingString
.
C4_Name_Prefix
);
if
(!
nearNodeName
.
Equals
(
""
))
{
idx
=
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
.
Equals
(
nearNodeName
));
if
(!
Common
.
missionManager
.
GetUnlockRfids
(
Common
.
nodeInfo
[
idx
].
Name
).
Contains
(
nodeInfo
[
idx
].
RFID
))
{
warnMsg
=
string
.
Format
(
"料架{0}在接驳台{1}最外侧,但没有解绑信息,请检查"
,
nodeInfo
[
idx
].
RFID
,
nodeInfo
[
idx
].
Name
);
Common
.
log
.
Error
(
warnMsg
);
return
false
;
}
rfid
=
nodeInfo
[
idx
].
RFID
;
warnMsg
=
""
;
nodeName
=
nearNodeName
;
Common
.
log
.
Debug
(
agv
.
Name
+
" 双层线需要小料架,准备去4C-"
+
nearNodeName
);
return
true
;
...
...
@@ -727,6 +775,15 @@ namespace AGVControl
string
nearNodeName
=
CalculateNearNode
(
agv
,
SettingString
.
D4_Name_Prefix
);
if
(!
nearNodeName
.
Equals
(
""
))
{
idx
=
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
.
Equals
(
nearNodeName
));
if
(!
Common
.
missionManager
.
GetUnlockRfids
(
Common
.
nodeInfo
[
idx
].
Name
).
Contains
(
nodeInfo
[
idx
].
RFID
))
{
warnMsg
=
string
.
Format
(
"料架{0}在接驳台{1}最外侧,但没有解绑信息,请检查"
,
nodeInfo
[
idx
].
RFID
,
nodeInfo
[
idx
].
Name
);
Common
.
log
.
Error
(
warnMsg
);
return
false
;
}
rfid
=
nodeInfo
[
idx
].
RFID
;
warnMsg
=
""
;
nodeName
=
nearNodeName
;
Common
.
log
.
Debug
(
agv
.
Name
+
" 双层线需要小料架,准备去4D-"
+
nearNodeName
);
return
true
;
...
...
@@ -736,30 +793,30 @@ namespace AGVControl
}
else
if
(
CheckA6State
(
agv
,
eShelfType
.
SmallShelf
,
out
string
lineNodeName1
))
{
//4C车间寻找
//4C车间
备料区
寻找
if
(
SettingString
.
C4_AGV_IPs
.
Contains
(
agv
.
IP
))
{
idx
=
nodeInfo
.
FindIndex
(
s
=>
s
.
EmptyShelfCnt
>
0
&&
s
.
Name
.
Equals
(
SettingString
.
C4FeederOut
)
&&
s
.
IsUse
);
if
(
idx
>
-
1
)
{
int
idx1
=
agvInfo
.
FindIndex
(
s
=>
s
.
CurJob
is
EnterLeaveShelfJob
&&
((
EnterLeaveShelfJob
)
s
.
CurJob
).
LineName
.
Equals
(
SettingString
.
C4FeederOut
));
if
(
idx1
==
-
1
)
if
(
idx1
==
-
1
)
{
nodeName
=
nodeInfo
[
idx
].
Name
;
Common
.
log
.
Debug
(
agv
.
Name
+
" 双层线
需要小
料架,准备去4C-"
+
nodeName
);
Common
.
log
.
Debug
(
agv
.
Name
+
" 双层线
右侧需要
料架,准备去4C-"
+
nodeName
);
return
true
;
}
}
}
//4D车间寻找
//4D车间
备料区
寻找
if
(!
SettingString
.
C4_AGV_IPs
.
Contains
(
agv
.
IP
))
{
idx
=
nodeInfo
.
FindIndex
(
s
=>
s
.
EmptyShelfCnt
>
0
&&
s
.
Name
.
Equals
(
SettingString
.
D4FeederOut
)
&&
s
.
IsUse
);
if
(
idx
>
-
1
)
{
nodeName
=
nodeInfo
[
idx
].
Name
;
Common
.
log
.
Debug
(
agv
.
Name
+
" 双层线
需要小
料架,准备去4D-"
+
nodeName
);
Common
.
log
.
Debug
(
agv
.
Name
+
" 双层线
右侧需要
料架,准备去4D-"
+
nodeName
);
return
true
;
}
...
...
@@ -818,9 +875,10 @@ namespace AGVControl
/// </summary>
/// <param name="agv"></param>
/// <returns></returns>
public
static
bool
FindEmptyShelfBeforeSendFullShelf
(
out
string
nodeName
)
public
static
bool
FindEmptyShelfBeforeSendFullShelf
(
out
string
nodeName
,
out
string
rfid
)
{
nodeName
=
""
;
rfid
=
""
;
int
idx
=
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
.
Equals
(
SettingString
.
A6
)
&&
(
s
.
StateEquals
(
eNodeStatus
.
NeedEnterLeave
)
||
(
s
.
StateEquals
(
eNodeStatus
.
NeedLeave
)))
&&
!
s
.
RFID
.
Equals
(
""
)
&&
s
.
IsUse
);
if
(
idx
>
-
1
)
...
...
@@ -830,6 +888,14 @@ namespace AGVControl
idx
=
nodeInfo
.
FindIndex
(
s
=>
s
.
Name
.
Equals
(
FullShelfDestInfo
.
location
)
&&
s
.
EmptyShelfCnt
>
0
&&
s
.
IsUse
);
if
(
idx
>
-
1
)
{
if
(!
Common
.
missionManager
.
GetUnlockRfids
(
Common
.
nodeInfo
[
idx
].
Name
).
Contains
(
nodeInfo
[
idx
].
RFID
))
{
warnMsg
=
string
.
Format
(
"料架{0}在接驳台{1}最外侧,但没有解绑信息,请检查"
,
nodeInfo
[
idx
].
RFID
,
nodeInfo
[
idx
].
Name
);
Common
.
log
.
Error
(
warnMsg
);
return
false
;
}
rfid
=
nodeInfo
[
idx
].
RFID
;
warnMsg
=
""
;
nodeName
=
FullShelfDestInfo
.
location
;
Common
.
GetLineNameByNodeName
(
nodeName
,
out
string
line
);
Common
.
log
.
Debug
(
"A6出满料架的产线有空料架,优先处理 "
+
FullShelfDestInfo
.
ShowInfo
(
line
));
...
...
@@ -1054,25 +1120,24 @@ namespace AGVControl
//logTextBox.ScrollToCaret();
}
}
public
static
void
ReadLinePlace
()
/// <summary>
/// 读取料架解绑信息
/// </summary>
public
static
void
ReadUnlockLineInfo
()
{
if
(!
System
.
IO
.
File
.
Exists
(
C
ONFIG_PATH
+
"LinePlace.txt
"
))
if
(!
System
.
IO
.
File
.
Exists
(
C
ommon
.
CONFIG_PATH
+
"UnlockInfo.json
"
))
{
File
.
Create
(
CONFIG_PATH
+
"LinePlace.txt"
);
File
.
Create
(
Common
.
CONFIG_PATH
+
"UnlockInfo.json"
);
missionManager
=
new
UnlockMissionManager
(
nodeInfo
);
return
;
}
string
[]
s
=
System
.
IO
.
File
.
ReadAllLines
(
CONFIG_PATH
+
"LinePlace.txt"
);
for
(
int
i
=
0
;
i
<
s
.
Count
();
i
++)
{
string
[]
mission
=
s
[
i
].
Split
(
','
);
if
(
mission
.
Length
!=
3
)
continue
;
//missionManager.missionList.Add(new MissionStru(mission[0], mission[1]));
missionManager
.
AddMission
(
new
MissionStru
(
mission
[
0
],
mission
[
1
],
mission
[
2
]));
string
s
=
File
.
ReadAllText
(
Common
.
CONFIG_PATH
+
"UnlockInfo.json"
);
missionManager
=
JsonHelper
.
DeserializeJsonToObject
<
UnlockMissionManager
>(
s
);
if
(
missionManager
==
null
)
missionManager
=
new
UnlockMissionManager
(
nodeInfo
);
missionManager
.
Init
();
}
}
public
static
void
GetNodesPosition
()
{
Agv_Info
agv
=
agvInfo
[
0
];
...
...
@@ -1088,7 +1153,7 @@ namespace AGVControl
}
else
{
Common
.
log
.
Error
(
clientNode
.
Name
+
" GetNodesPosition 获取节点位置失败"
);
Common
.
log
.
Error
(
clientNode
.
Name
+
" GetNodesPosition 获取节点位置失败"
);
}
}
}
...
...
AGVControl-ProductionLine/BLL/Control.cs
查看文件 @
c0e4939
...
...
@@ -22,10 +22,9 @@ namespace AGVControl.BLL
private
const
int
REG_STATUS
=
20
;
//private List<string> shelfLockedNodeNames;
public
delegate
void
AgvChangedEvent
(
int
agvIndex
);
public
delegate
void
AgvMissionEvent
();
public
event
AgvChangedEvent
AgvChanged
;
public
event
AgvChangedEvent
AgvOnline
;
public
event
AgvChangedEvent
NodeChangedEvent
;
public
Control
()
{
AgvCallTimer
=
new
System
.
Timers
.
Timer
...
...
@@ -38,7 +37,7 @@ namespace AGVControl.BLL
AgvStateTimer
=
new
System
.
Timers
.
Timer
{
Interval
=
15
00
,
Interval
=
30
00
,
AutoReset
=
true
,
Enabled
=
false
};
...
...
@@ -71,8 +70,23 @@ namespace AGVControl.BLL
if
(
AgvStateInProcess
)
return
;
AgvStateInProcess
=
true
;
List
<
AlarmMsg
>
msglist
=
new
List
<
AlarmMsg
>();
String
tmp
=
""
;
for
(
int
j
=
0
;
j
<
Common
.
nodeInfo
.
Count
;
j
++)
{
if
(
Common
.
nodeInfo
[
j
].
Name
.
StartsWith
(
SettingString
.
D4_Name_Prefix
)
||
Common
.
nodeInfo
[
j
].
Name
.
StartsWith
(
SettingString
.
C4_Name_Prefix
))
{
if
(!
Common
.
nodeInfo
[
j
].
Name
.
Equals
(
SettingString
.
C4FeederIn
)
&&
!
Common
.
nodeInfo
[
j
].
Name
.
Equals
(
SettingString
.
C4FeederOut
)
&&
!
Common
.
nodeInfo
[
j
].
Name
.
Equals
(
SettingString
.
D4FeederIn
)
&&
!
Common
.
nodeInfo
[
j
].
Name
.
Equals
(
SettingString
.
D4FeederOut
))
{
tmp
=
AGVManager
.
GetRFIDs
(
Common
.
nodeInfo
[
j
].
Name
).
Split
(
','
)[
3
];
if
(!
tmp
.
Equals
(
Common
.
nodeInfo
[
j
].
RFID
))
{
Common
.
nodeInfo
[
j
].
RFID
=
tmp
;
NodeChangedEvent
?.
Invoke
(
j
);
}
}
}
if
(!
Common
.
nodeInfo
[
j
].
Online
)
{
msglist
.
Add
(
new
AlarmMsg
(
Common
.
nodeInfo
[
j
].
AliceName
,
"lineAgv."
+
Common
.
nodeInfo
[
j
].
Name
+
".OffLine"
,
"离线"
));
...
...
@@ -148,7 +162,6 @@ namespace AGVControl.BLL
}
}
AgvStateInProcess
=
false
;
}
...
...
AGVControl-ProductionLine/BLL/JsonHelper.cs
查看文件 @
c0e4939
...
...
@@ -4,7 +4,7 @@ using System;
using
System.Collections.Generic
;
using
System.IO
;
namespace
BLL
namespace
AGVControl
{
/// <summary>
/// Json帮助类
...
...
AGVControl-ProductionLine/BLL/LineWebService.cs
查看文件 @
c0e4939
...
...
@@ -79,7 +79,7 @@ namespace BLL
{
res
=
new
Result
()
{
Succeed
=
true
,
ResultData
=
rfid
,
ErrorMessage
=
""
};
Log
.
Info
(
string
.
Format
(
"Unlock Request(POST) [emptyStation={0},rfid={1}]"
,
emptyStation
,
rfid
.
ToUpper
()));
if
(!
Common
.
AddEmptyShelfTask
(
value
,
rfid
.
ToUpper
()))
if
(!
Common
.
missionManager
.
AddMission
(
value
,
rfid
.
ToUpper
()))
{
Common
.
log
.
Error
(
"CreateEmptyRecycleTask(POST) 节点["
+
value
+
"]不存在"
);
res
=
new
Result
()
{
Succeed
=
false
,
ResultData
=
null
,
ErrorMessage
=
"CreateEmptyRecycleTask failed: "
+
emptyStation
+
" rfid="
+
rfid
};
...
...
@@ -112,7 +112,7 @@ namespace BLL
if
(
Common
.
GetNodeNameByLineName
(
line
,
out
string
value
))
{
if
(!
Common
.
AddEmptyShelfTask
(
value
,
RFID
.
ToUpper
()))
if
(!
Common
.
missionManager
.
AddMission
(
value
,
RFID
.
ToUpper
()))
{
Common
.
log
.
Error
(
"CreateEmptyRecycleTask 节点["
+
value
+
"]不存在"
);
res
=
new
Result
()
{
Succeed
=
false
,
ResultData
=
null
,
ErrorMessage
=
"CreateEmptyRecycleTask failed: "
+
line
};
...
...
AGVControl-ProductionLine/BLL/UnlockMissionManager.cs
查看文件 @
c0e4939
using
System
;
using
System.Collections.Generic
;
using
System.IO
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
namespace
AGVControl
.BLL
namespace
AGVControl
{
/// <summary>
///解绑料架任务管理
/// </summary>
public
class
UnlockMissionManager
{
public
delegate
void
MissionChangedHandler
();
public
delegate
void
MissionChangedHandler
(
Dictionary
<
string
,
UnlockInfo
>
pairs
);
public
event
MissionChangedHandler
MissionChanged
;
/// <summary>
/// 任务列表
/// </summary>
public
Dictionary
<
string
,
UnlockedShelf
>
NodeUnlockMissions
{
get
;
private
set
;
}
Dictionary
<
string
,
UnlockInfo
>
UnlockMissions
;
public
UnlockMissionManager
(
List
<
ClientNode
>
clientNodes
)
{
NodeUnlockMissions
=
new
Dictionary
<
string
,
UnlockedShelf
>();
UnlockMissions
=
new
Dictionary
<
string
,
UnlockInfo
>();
foreach
(
ClientNode
item
in
clientNodes
)
{
if
(
item
.
Name
.
StartsWith
(
"A"
)
||
item
.
Name
.
Equals
(
SettingString
.
D4FeederIn
)
||
item
.
Name
.
Equals
(
SettingString
.
C4FeederIn
))
continue
;
NodeUnlockMissions
.
Add
(
item
.
Name
,
new
UnlockedShelf
(
item
.
Name
));
UnlockMissions
=
new
Dictionary
<
string
,
UnlockInfo
>();
}
}
public
UnlockMissionManager
()
{
NodeUnlockMissions
=
new
Dictionary
<
string
,
UnlockedShelf
>();
UnlockMissions
=
new
Dictionary
<
string
,
UnlockInfo
>();
}
public
void
Init
()
{
foreach
(
var
item
in
NodeUnlockMissions
.
Keys
)
{
UnlockMissions
.
Add
(
item
,
new
UnlockInfo
(
item
,
NodeUnlockMissions
[
item
].
EmptyCnt
,
NodeUnlockMissions
[
item
].
GetRfidWithTime
()));
}
MissionChanged
?.
Invoke
(
UnlockMissions
);
}
public
UnlockedShelf
GetUnlockInfo
(
string
nodeName
)
{
...
...
@@ -30,16 +52,92 @@ namespace AGVControl.BLL
}
return
null
;
}
public
int
GetUnlockCnt
(
string
nodeName
)
{
if
(
NodeUnlockMissions
.
ContainsKey
(
nodeName
))
{
return
NodeUnlockMissions
[
nodeName
].
EmptyCnt
;
}
return
-
1
;
}
public
List
<
string
>
GetUnlockRfids
(
string
nodeName
)
{
if
(
NodeUnlockMissions
.
ContainsKey
(
nodeName
))
{
return
NodeUnlockMissions
[
nodeName
].
GetRfids
();
}
return
new
List
<
string
>();
}
public
bool
AddMission
(
string
nodeName
,
string
rfid
)
{
bool
rtn
=
NodeUnlockMissions
[
nodeName
].
Add
(
rfid
);
if
(
rtn
)
{
UnlockMissions
[
nodeName
]
=
new
UnlockInfo
(
nodeName
,
NodeUnlockMissions
[
nodeName
].
EmptyCnt
,
NodeUnlockMissions
[
nodeName
].
GetRfidWithTime
());
WriteUnlockLineInfo
();
MissionChanged
?.
Invoke
(
UnlockMissions
);
}
return
rtn
;
}
public
bool
DelMission
(
string
nodeName
,
string
rfid
)
{
bool
rtn
=
NodeUnlockMissions
[
nodeName
].
Delete
(
rfid
);
if
(
rtn
)
{
UnlockMissions
[
nodeName
]
=
new
UnlockInfo
(
nodeName
,
NodeUnlockMissions
[
nodeName
].
EmptyCnt
,
NodeUnlockMissions
[
nodeName
].
GetRfidWithTime
());
WriteUnlockLineInfo
();
MissionChanged
?.
Invoke
(
UnlockMissions
);
}
return
rtn
;
}
/// <summary>
/// 保存料架解绑信息
/// </summary>
void
WriteUnlockLineInfo
()
{
using
(
System
.
IO
.
StreamWriter
file
=
new
System
.
IO
.
StreamWriter
(
Common
.
CONFIG_PATH
+
"UnlockInfo.json"
))
{
string
s
=
JsonHelper
.
SerializeObject
(
this
);
file
.
WriteLine
(
s
);
}
}
}
public
void
AddMission
(
string
nodeName
,
string
rfid
)
public
class
UnlockInfo
{
public
string
Line
{
get
;
set
;
}
public
int
Count
{
get
;
set
;
}
public
string
RFID
{
get
;
set
;
}
public
List
<
UnlockRfid
>
UnlockRfids
{
get
;
private
set
;
}
public
UnlockInfo
(
string
nodeName
,
int
count
,
Dictionary
<
string
,
string
>
rfids
)
{
if
(
Common
.
GetLineNameByNodeName
(
nodeName
,
out
string
line
))
{
Line
=
line
;
}
else
{
NodeUnlockMissions
[
nodeName
].
Add
(
rfid
);
MissionChanged
?.
Invoke
();
Line
=
nodeName
;
}
public
void
DelMission
(
string
nodeName
,
string
rfid
)
Count
=
count
;
RFID
=
string
.
Join
(
","
,
rfids
.
Keys
);
UnlockRfids
=
new
List
<
UnlockRfid
>();
foreach
(
var
item
in
rfids
.
Keys
)
{
UnlockRfids
.
Add
(
new
UnlockRfid
(
nodeName
,
rfids
[
item
],
item
));
}
}
}
public
class
UnlockRfid
{
public
String
Line
{
get
;
set
;
}
public
string
RFID
{
get
;
set
;
}
public
string
Time
{
get
;
set
;
}
public
UnlockRfid
(
string
line
,
string
time
,
string
rfid
)
{
NodeUnlockMissions
[
nodeName
].
Delete
(
rfid
);
MissionChanged
?.
Invoke
();
Time
=
time
;
RFID
=
rfid
;
Line
=
line
;
}
}
}
AGVControl-ProductionLine/FrmMain.Designer.cs
查看文件 @
c0e4939
...
...
@@ -61,8 +61,18 @@
this
.
groupBox3
=
new
System
.
Windows
.
Forms
.
GroupBox
();
this
.
lblWO
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
tableLayoutPanel7
=
new
System
.
Windows
.
Forms
.
TableLayoutPanel
();
this
.
lblWarn
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
grpUnlock
=
new
System
.
Windows
.
Forms
.
GroupBox
();
this
.
tblLayoutUnlock
=
new
System
.
Windows
.
Forms
.
TableLayoutPanel
();
this
.
dgvUnlockDetail
=
new
System
.
Windows
.
Forms
.
DataGridView
();
this
.
dgvUnlockInfo
=
new
System
.
Windows
.
Forms
.
DataGridView
();
this
.
tabPage2
=
new
System
.
Windows
.
Forms
.
TabPage
();
this
.
tableLayoutPanel1
=
new
System
.
Windows
.
Forms
.
TableLayoutPanel
();
this
.
groupBox8
=
new
System
.
Windows
.
Forms
.
GroupBox
();
this
.
lblStandy2
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
lblStandy1
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
lblCharge4
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
lblCharge3
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
TxtLog
=
new
System
.
Windows
.
Forms
.
TextBox
();
this
.
tabPage3
=
new
System
.
Windows
.
Forms
.
TabPage
();
this
.
groupBox6
=
new
System
.
Windows
.
Forms
.
GroupBox
();
...
...
@@ -93,12 +103,6 @@
this
.
label3
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label2
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label1
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
groupBox4
=
new
System
.
Windows
.
Forms
.
GroupBox
();
this
.
groupBox8
=
new
System
.
Windows
.
Forms
.
GroupBox
();
this
.
lblStandy2
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
lblStandy1
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
lblCharge4
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
lblCharge3
=
new
System
.
Windows
.
Forms
.
Label
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
DgvAgv
)).
BeginInit
();
this
.
tableLayoutPanel3
.
SuspendLayout
();
this
.
tabControl1
.
SuspendLayout
();
...
...
@@ -110,15 +114,19 @@
this
.
groupBox5
.
SuspendLayout
();
this
.
groupBox3
.
SuspendLayout
();
this
.
tableLayoutPanel7
.
SuspendLayout
();
this
.
grpUnlock
.
SuspendLayout
();
this
.
tblLayoutUnlock
.
SuspendLayout
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
dgvUnlockDetail
)).
BeginInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
dgvUnlockInfo
)).
BeginInit
();
this
.
tabPage2
.
SuspendLayout
();
this
.
tableLayoutPanel1
.
SuspendLayout
();
this
.
groupBox8
.
SuspendLayout
();
this
.
tabPage3
.
SuspendLayout
();
this
.
groupBox6
.
SuspendLayout
();
this
.
groupBox7
.
SuspendLayout
();
this
.
groupBox2
.
SuspendLayout
();
this
.
tableLayoutPanel4
.
SuspendLayout
();
this
.
tableLayoutPanel6
.
SuspendLayout
();
this
.
groupBox8
.
SuspendLayout
();
this
.
SuspendLayout
();
//
// DgvAgv
...
...
@@ -424,14 +432,16 @@
this
.
tableLayoutPanel5
.
Controls
.
Add
(
this
.
groupBox5
,
0
,
1
);
this
.
tableLayoutPanel5
.
Controls
.
Add
(
this
.
groupBox3
,
0
,
0
);
this
.
tableLayoutPanel5
.
Controls
.
Add
(
this
.
tableLayoutPanel7
,
0
,
2
);
this
.
tableLayoutPanel5
.
Controls
.
Add
(
this
.
grpUnlock
,
0
,
3
);
this
.
tableLayoutPanel5
.
Dock
=
System
.
Windows
.
Forms
.
DockStyle
.
Fill
;
this
.
tableLayoutPanel5
.
Location
=
new
System
.
Drawing
.
Point
(
2
,
19
);
this
.
tableLayoutPanel5
.
Margin
=
new
System
.
Windows
.
Forms
.
Padding
(
2
);
this
.
tableLayoutPanel5
.
Name
=
"tableLayoutPanel5"
;
this
.
tableLayoutPanel5
.
RowCount
=
3
;
this
.
tableLayoutPanel5
.
RowCount
=
4
;
this
.
tableLayoutPanel5
.
RowStyles
.
Add
(
new
System
.
Windows
.
Forms
.
RowStyle
(
System
.
Windows
.
Forms
.
SizeType
.
Percent
,
15F
));
this
.
tableLayoutPanel5
.
RowStyles
.
Add
(
new
System
.
Windows
.
Forms
.
RowStyle
(
System
.
Windows
.
Forms
.
SizeType
.
Percent
,
15F
));
this
.
tableLayoutPanel5
.
RowStyles
.
Add
(
new
System
.
Windows
.
Forms
.
RowStyle
(
System
.
Windows
.
Forms
.
SizeType
.
Percent
,
70F
));
this
.
tableLayoutPanel5
.
RowStyles
.
Add
(
new
System
.
Windows
.
Forms
.
RowStyle
(
System
.
Windows
.
Forms
.
SizeType
.
Percent
,
15F
));
this
.
tableLayoutPanel5
.
RowStyles
.
Add
(
new
System
.
Windows
.
Forms
.
RowStyle
(
System
.
Windows
.
Forms
.
SizeType
.
Percent
,
55F
));
this
.
tableLayoutPanel5
.
Size
=
new
System
.
Drawing
.
Size
(
449
,
266
);
this
.
tableLayoutPanel5
.
TabIndex
=
2
;
//
...
...
@@ -488,16 +498,85 @@
this
.
tableLayoutPanel7
.
ColumnCount
=
1
;
this
.
tableLayoutPanel7
.
ColumnStyles
.
Add
(
new
System
.
Windows
.
Forms
.
ColumnStyle
(
System
.
Windows
.
Forms
.
SizeType
.
Percent
,
100F
));
this
.
tableLayoutPanel7
.
ColumnStyles
.
Add
(
new
System
.
Windows
.
Forms
.
ColumnStyle
(
System
.
Windows
.
Forms
.
SizeType
.
Absolute
,
20F
));
this
.
tableLayoutPanel7
.
Controls
.
Add
(
this
.
groupBox4
,
0
,
0
);
this
.
tableLayoutPanel7
.
Controls
.
Add
(
this
.
lblWarn
,
0
,
0
);
this
.
tableLayoutPanel7
.
Dock
=
System
.
Windows
.
Forms
.
DockStyle
.
Fill
;
this
.
tableLayoutPanel7
.
Location
=
new
System
.
Drawing
.
Point
(
2
,
80
);
this
.
tableLayoutPanel7
.
Margin
=
new
System
.
Windows
.
Forms
.
Padding
(
2
);
this
.
tableLayoutPanel7
.
Name
=
"tableLayoutPanel7"
;
this
.
tableLayoutPanel7
.
RowCount
=
1
;
this
.
tableLayoutPanel7
.
RowStyles
.
Add
(
new
System
.
Windows
.
Forms
.
RowStyle
(
System
.
Windows
.
Forms
.
SizeType
.
Percent
,
100F
));
this
.
tableLayoutPanel7
.
Size
=
new
System
.
Drawing
.
Size
(
445
,
184
);
this
.
tableLayoutPanel7
.
Size
=
new
System
.
Drawing
.
Size
(
445
,
35
);
this
.
tableLayoutPanel7
.
TabIndex
=
3
;
//
// lblWarn
//
this
.
lblWarn
.
Dock
=
System
.
Windows
.
Forms
.
DockStyle
.
Fill
;
this
.
lblWarn
.
Font
=
new
System
.
Drawing
.
Font
(
"宋体"
,
9F
,
System
.
Drawing
.
FontStyle
.
Regular
,
System
.
Drawing
.
GraphicsUnit
.
Point
,
((
byte
)(
134
)));
this
.
lblWarn
.
ForeColor
=
System
.
Drawing
.
Color
.
Red
;
this
.
lblWarn
.
Location
=
new
System
.
Drawing
.
Point
(
2
,
0
);
this
.
lblWarn
.
Margin
=
new
System
.
Windows
.
Forms
.
Padding
(
2
,
0
,
2
,
0
);
this
.
lblWarn
.
Name
=
"lblWarn"
;
this
.
lblWarn
.
Size
=
new
System
.
Drawing
.
Size
(
441
,
35
);
this
.
lblWarn
.
TabIndex
=
41
;
this
.
lblWarn
.
TextAlign
=
System
.
Drawing
.
ContentAlignment
.
MiddleLeft
;
//
// grpUnlock
//
this
.
grpUnlock
.
Controls
.
Add
(
this
.
tblLayoutUnlock
);
this
.
grpUnlock
.
Dock
=
System
.
Windows
.
Forms
.
DockStyle
.
Fill
;
this
.
grpUnlock
.
Font
=
new
System
.
Drawing
.
Font
(
"宋体"
,
10.5F
,
System
.
Drawing
.
FontStyle
.
Regular
,
System
.
Drawing
.
GraphicsUnit
.
Point
,
((
byte
)(
134
)));
this
.
grpUnlock
.
Location
=
new
System
.
Drawing
.
Point
(
3
,
120
);
this
.
grpUnlock
.
Name
=
"grpUnlock"
;
this
.
grpUnlock
.
Size
=
new
System
.
Drawing
.
Size
(
443
,
143
);
this
.
grpUnlock
.
TabIndex
=
4
;
this
.
grpUnlock
.
TabStop
=
false
;
this
.
grpUnlock
.
Text
=
"解绑信息"
;
//
// tblLayoutUnlock
//
this
.
tblLayoutUnlock
.
AutoSize
=
true
;
this
.
tblLayoutUnlock
.
ColumnCount
=
2
;
this
.
tblLayoutUnlock
.
ColumnStyles
.
Add
(
new
System
.
Windows
.
Forms
.
ColumnStyle
(
System
.
Windows
.
Forms
.
SizeType
.
Percent
,
50F
));
this
.
tblLayoutUnlock
.
ColumnStyles
.
Add
(
new
System
.
Windows
.
Forms
.
ColumnStyle
(
System
.
Windows
.
Forms
.
SizeType
.
Percent
,
50F
));
this
.
tblLayoutUnlock
.
Controls
.
Add
(
this
.
dgvUnlockDetail
,
1
,
0
);
this
.
tblLayoutUnlock
.
Controls
.
Add
(
this
.
dgvUnlockInfo
,
0
,
0
);
this
.
tblLayoutUnlock
.
Dock
=
System
.
Windows
.
Forms
.
DockStyle
.
Fill
;
this
.
tblLayoutUnlock
.
Location
=
new
System
.
Drawing
.
Point
(
3
,
19
);
this
.
tblLayoutUnlock
.
Name
=
"tblLayoutUnlock"
;
this
.
tblLayoutUnlock
.
RowCount
=
1
;
this
.
tblLayoutUnlock
.
RowStyles
.
Add
(
new
System
.
Windows
.
Forms
.
RowStyle
(
System
.
Windows
.
Forms
.
SizeType
.
Percent
,
50F
));
this
.
tblLayoutUnlock
.
Size
=
new
System
.
Drawing
.
Size
(
437
,
121
);
this
.
tblLayoutUnlock
.
TabIndex
=
1
;
//
// dgvUnlockDetail
//
this
.
dgvUnlockDetail
.
AutoSizeColumnsMode
=
System
.
Windows
.
Forms
.
DataGridViewAutoSizeColumnsMode
.
AllCells
;
this
.
dgvUnlockDetail
.
AutoSizeRowsMode
=
System
.
Windows
.
Forms
.
DataGridViewAutoSizeRowsMode
.
AllCells
;
this
.
dgvUnlockDetail
.
ColumnHeadersHeightSizeMode
=
System
.
Windows
.
Forms
.
DataGridViewColumnHeadersHeightSizeMode
.
AutoSize
;
this
.
dgvUnlockDetail
.
Dock
=
System
.
Windows
.
Forms
.
DockStyle
.
Fill
;
this
.
dgvUnlockDetail
.
Location
=
new
System
.
Drawing
.
Point
(
221
,
3
);
this
.
dgvUnlockDetail
.
Name
=
"dgvUnlockDetail"
;
this
.
dgvUnlockDetail
.
ReadOnly
=
true
;
this
.
dgvUnlockDetail
.
RowHeadersVisible
=
false
;
this
.
dgvUnlockDetail
.
RowHeadersWidthSizeMode
=
System
.
Windows
.
Forms
.
DataGridViewRowHeadersWidthSizeMode
.
AutoSizeToAllHeaders
;
this
.
dgvUnlockDetail
.
RowTemplate
.
Height
=
23
;
this
.
dgvUnlockDetail
.
Size
=
new
System
.
Drawing
.
Size
(
213
,
115
);
this
.
dgvUnlockDetail
.
TabIndex
=
1
;
//
// dgvUnlockInfo
//
this
.
dgvUnlockInfo
.
AutoSizeColumnsMode
=
System
.
Windows
.
Forms
.
DataGridViewAutoSizeColumnsMode
.
AllCells
;
this
.
dgvUnlockInfo
.
AutoSizeRowsMode
=
System
.
Windows
.
Forms
.
DataGridViewAutoSizeRowsMode
.
AllCells
;
this
.
dgvUnlockInfo
.
ColumnHeadersHeightSizeMode
=
System
.
Windows
.
Forms
.
DataGridViewColumnHeadersHeightSizeMode
.
AutoSize
;
this
.
dgvUnlockInfo
.
Dock
=
System
.
Windows
.
Forms
.
DockStyle
.
Fill
;
this
.
dgvUnlockInfo
.
Location
=
new
System
.
Drawing
.
Point
(
3
,
3
);
this
.
dgvUnlockInfo
.
Name
=
"dgvUnlockInfo"
;
this
.
dgvUnlockInfo
.
ReadOnly
=
true
;
this
.
dgvUnlockInfo
.
RowHeadersVisible
=
false
;
this
.
dgvUnlockInfo
.
RowTemplate
.
Height
=
23
;
this
.
dgvUnlockInfo
.
Size
=
new
System
.
Drawing
.
Size
(
212
,
115
);
this
.
dgvUnlockInfo
.
TabIndex
=
0
;
//
// tabPage2
//
this
.
tabPage2
.
Controls
.
Add
(
this
.
tableLayoutPanel1
);
...
...
@@ -525,6 +604,67 @@
this
.
tableLayoutPanel1
.
Size
=
new
System
.
Drawing
.
Size
(
1047
,
291
);
this
.
tableLayoutPanel1
.
TabIndex
=
6
;
//
// groupBox8
//
this
.
groupBox8
.
Controls
.
Add
(
this
.
lblStandy2
);
this
.
groupBox8
.
Controls
.
Add
(
this
.
lblStandy1
);
this
.
groupBox8
.
Controls
.
Add
(
this
.
lblCharge4
);
this
.
groupBox8
.
Controls
.
Add
(
this
.
lblCharge3
);
this
.
groupBox8
.
Dock
=
System
.
Windows
.
Forms
.
DockStyle
.
Fill
;
this
.
groupBox8
.
Font
=
new
System
.
Drawing
.
Font
(
"宋体"
,
9F
,
System
.
Drawing
.
FontStyle
.
Regular
,
System
.
Drawing
.
GraphicsUnit
.
Point
,
((
byte
)(
134
)));
this
.
groupBox8
.
Location
=
new
System
.
Drawing
.
Point
(
868
,
2
);
this
.
groupBox8
.
Margin
=
new
System
.
Windows
.
Forms
.
Padding
(
2
);
this
.
groupBox8
.
Name
=
"groupBox8"
;
this
.
groupBox8
.
Padding
=
new
System
.
Windows
.
Forms
.
Padding
(
2
);
this
.
groupBox8
.
Size
=
new
System
.
Drawing
.
Size
(
177
,
287
);
this
.
groupBox8
.
TabIndex
=
6
;
this
.
groupBox8
.
TabStop
=
false
;
this
.
groupBox8
.
Text
=
"位置占用情况"
;
//
// lblStandy2
//
this
.
lblStandy2
.
AutoSize
=
true
;
this
.
lblStandy2
.
Dock
=
System
.
Windows
.
Forms
.
DockStyle
.
Top
;
this
.
lblStandy2
.
Location
=
new
System
.
Drawing
.
Point
(
2
,
52
);
this
.
lblStandy2
.
Margin
=
new
System
.
Windows
.
Forms
.
Padding
(
2
,
0
,
2
,
0
);
this
.
lblStandy2
.
Name
=
"lblStandy2"
;
this
.
lblStandy2
.
Size
=
new
System
.
Drawing
.
Size
(
65
,
12
);
this
.
lblStandy2
.
TabIndex
=
3
;
this
.
lblStandy2
.
Text
=
"lblStandy2"
;
//
// lblStandy1
//
this
.
lblStandy1
.
AutoSize
=
true
;
this
.
lblStandy1
.
Dock
=
System
.
Windows
.
Forms
.
DockStyle
.
Top
;
this
.
lblStandy1
.
Location
=
new
System
.
Drawing
.
Point
(
2
,
40
);
this
.
lblStandy1
.
Margin
=
new
System
.
Windows
.
Forms
.
Padding
(
2
,
0
,
2
,
0
);
this
.
lblStandy1
.
Name
=
"lblStandy1"
;
this
.
lblStandy1
.
Size
=
new
System
.
Drawing
.
Size
(
65
,
12
);
this
.
lblStandy1
.
TabIndex
=
2
;
this
.
lblStandy1
.
Text
=
"lblStandy1"
;
//
// lblCharge4
//
this
.
lblCharge4
.
AutoSize
=
true
;
this
.
lblCharge4
.
Dock
=
System
.
Windows
.
Forms
.
DockStyle
.
Top
;
this
.
lblCharge4
.
Location
=
new
System
.
Drawing
.
Point
(
2
,
28
);
this
.
lblCharge4
.
Margin
=
new
System
.
Windows
.
Forms
.
Padding
(
2
,
0
,
2
,
0
);
this
.
lblCharge4
.
Name
=
"lblCharge4"
;
this
.
lblCharge4
.
Size
=
new
System
.
Drawing
.
Size
(
65
,
12
);
this
.
lblCharge4
.
TabIndex
=
1
;
this
.
lblCharge4
.
Text
=
"lblCharge4"
;
//
// lblCharge3
//
this
.
lblCharge3
.
AutoSize
=
true
;
this
.
lblCharge3
.
Dock
=
System
.
Windows
.
Forms
.
DockStyle
.
Top
;
this
.
lblCharge3
.
Location
=
new
System
.
Drawing
.
Point
(
2
,
16
);
this
.
lblCharge3
.
Margin
=
new
System
.
Windows
.
Forms
.
Padding
(
2
,
0
,
2
,
0
);
this
.
lblCharge3
.
Name
=
"lblCharge3"
;
this
.
lblCharge3
.
Size
=
new
System
.
Drawing
.
Size
(
65
,
12
);
this
.
lblCharge3
.
TabIndex
=
0
;
this
.
lblCharge3
.
Text
=
"lblCharge3"
;
//
// TxtLog
//
this
.
TxtLog
.
Dock
=
System
.
Windows
.
Forms
.
DockStyle
.
Fill
;
...
...
@@ -875,78 +1015,6 @@
this
.
label1
.
TabIndex
=
0
;
this
.
label1
.
Text
=
"label1"
;
//
// groupBox4
//
this
.
groupBox4
.
Dock
=
System
.
Windows
.
Forms
.
DockStyle
.
Fill
;
this
.
groupBox4
.
Font
=
new
System
.
Drawing
.
Font
(
"宋体"
,
9F
,
System
.
Drawing
.
FontStyle
.
Regular
,
System
.
Drawing
.
GraphicsUnit
.
Point
,
((
byte
)(
134
)));
this
.
groupBox4
.
Location
=
new
System
.
Drawing
.
Point
(
3
,
3
);
this
.
groupBox4
.
Name
=
"groupBox4"
;
this
.
groupBox4
.
Size
=
new
System
.
Drawing
.
Size
(
439
,
178
);
this
.
groupBox4
.
TabIndex
=
4
;
this
.
groupBox4
.
TabStop
=
false
;
this
.
groupBox4
.
Text
=
"groupBox4"
;
//
// groupBox8
//
this
.
groupBox8
.
Controls
.
Add
(
this
.
lblStandy2
);
this
.
groupBox8
.
Controls
.
Add
(
this
.
lblStandy1
);
this
.
groupBox8
.
Controls
.
Add
(
this
.
lblCharge4
);
this
.
groupBox8
.
Controls
.
Add
(
this
.
lblCharge3
);
this
.
groupBox8
.
Dock
=
System
.
Windows
.
Forms
.
DockStyle
.
Fill
;
this
.
groupBox8
.
Font
=
new
System
.
Drawing
.
Font
(
"宋体"
,
9F
,
System
.
Drawing
.
FontStyle
.
Regular
,
System
.
Drawing
.
GraphicsUnit
.
Point
,
((
byte
)(
134
)));
this
.
groupBox8
.
Location
=
new
System
.
Drawing
.
Point
(
868
,
2
);
this
.
groupBox8
.
Margin
=
new
System
.
Windows
.
Forms
.
Padding
(
2
);
this
.
groupBox8
.
Name
=
"groupBox8"
;
this
.
groupBox8
.
Padding
=
new
System
.
Windows
.
Forms
.
Padding
(
2
);
this
.
groupBox8
.
Size
=
new
System
.
Drawing
.
Size
(
177
,
287
);
this
.
groupBox8
.
TabIndex
=
6
;
this
.
groupBox8
.
TabStop
=
false
;
this
.
groupBox8
.
Text
=
"位置占用情况"
;
//
// lblStandy2
//
this
.
lblStandy2
.
AutoSize
=
true
;
this
.
lblStandy2
.
Dock
=
System
.
Windows
.
Forms
.
DockStyle
.
Top
;
this
.
lblStandy2
.
Location
=
new
System
.
Drawing
.
Point
(
2
,
52
);
this
.
lblStandy2
.
Margin
=
new
System
.
Windows
.
Forms
.
Padding
(
2
,
0
,
2
,
0
);
this
.
lblStandy2
.
Name
=
"lblStandy2"
;
this
.
lblStandy2
.
Size
=
new
System
.
Drawing
.
Size
(
65
,
12
);
this
.
lblStandy2
.
TabIndex
=
3
;
this
.
lblStandy2
.
Text
=
"lblStandy2"
;
//
// lblStandy1
//
this
.
lblStandy1
.
AutoSize
=
true
;
this
.
lblStandy1
.
Dock
=
System
.
Windows
.
Forms
.
DockStyle
.
Top
;
this
.
lblStandy1
.
Location
=
new
System
.
Drawing
.
Point
(
2
,
40
);
this
.
lblStandy1
.
Margin
=
new
System
.
Windows
.
Forms
.
Padding
(
2
,
0
,
2
,
0
);
this
.
lblStandy1
.
Name
=
"lblStandy1"
;
this
.
lblStandy1
.
Size
=
new
System
.
Drawing
.
Size
(
65
,
12
);
this
.
lblStandy1
.
TabIndex
=
2
;
this
.
lblStandy1
.
Text
=
"lblStandy1"
;
//
// lblCharge4
//
this
.
lblCharge4
.
AutoSize
=
true
;
this
.
lblCharge4
.
Dock
=
System
.
Windows
.
Forms
.
DockStyle
.
Top
;
this
.
lblCharge4
.
Location
=
new
System
.
Drawing
.
Point
(
2
,
28
);
this
.
lblCharge4
.
Margin
=
new
System
.
Windows
.
Forms
.
Padding
(
2
,
0
,
2
,
0
);
this
.
lblCharge4
.
Name
=
"lblCharge4"
;
this
.
lblCharge4
.
Size
=
new
System
.
Drawing
.
Size
(
65
,
12
);
this
.
lblCharge4
.
TabIndex
=
1
;
this
.
lblCharge4
.
Text
=
"lblCharge4"
;
//
// lblCharge3
//
this
.
lblCharge3
.
AutoSize
=
true
;
this
.
lblCharge3
.
Dock
=
System
.
Windows
.
Forms
.
DockStyle
.
Top
;
this
.
lblCharge3
.
Location
=
new
System
.
Drawing
.
Point
(
2
,
16
);
this
.
lblCharge3
.
Margin
=
new
System
.
Windows
.
Forms
.
Padding
(
2
,
0
,
2
,
0
);
this
.
lblCharge3
.
Name
=
"lblCharge3"
;
this
.
lblCharge3
.
Size
=
new
System
.
Drawing
.
Size
(
65
,
12
);
this
.
lblCharge3
.
TabIndex
=
0
;
this
.
lblCharge3
.
Text
=
"lblCharge3"
;
//
// FrmMain
//
this
.
AutoScaleDimensions
=
new
System
.
Drawing
.
SizeF
(
6F
,
12F
);
...
...
@@ -970,9 +1038,16 @@
this
.
groupBox5
.
ResumeLayout
(
false
);
this
.
groupBox3
.
ResumeLayout
(
false
);
this
.
tableLayoutPanel7
.
ResumeLayout
(
false
);
this
.
grpUnlock
.
ResumeLayout
(
false
);
this
.
grpUnlock
.
PerformLayout
();
this
.
tblLayoutUnlock
.
ResumeLayout
(
false
);
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
dgvUnlockDetail
)).
EndInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
dgvUnlockInfo
)).
EndInit
();
this
.
tabPage2
.
ResumeLayout
(
false
);
this
.
tableLayoutPanel1
.
ResumeLayout
(
false
);
this
.
tableLayoutPanel1
.
PerformLayout
();
this
.
groupBox8
.
ResumeLayout
(
false
);
this
.
groupBox8
.
PerformLayout
();
this
.
tabPage3
.
ResumeLayout
(
false
);
this
.
groupBox6
.
ResumeLayout
(
false
);
this
.
groupBox6
.
PerformLayout
();
...
...
@@ -982,8 +1057,6 @@
this
.
tableLayoutPanel4
.
ResumeLayout
(
false
);
this
.
tableLayoutPanel6
.
ResumeLayout
(
false
);
this
.
tableLayoutPanel6
.
PerformLayout
();
this
.
groupBox8
.
ResumeLayout
(
false
);
this
.
groupBox8
.
PerformLayout
();
this
.
ResumeLayout
(
false
);
}
...
...
@@ -1053,12 +1126,16 @@
private
System
.
Windows
.
Forms
.
Button
btnDeleteMission
;
private
System
.
Windows
.
Forms
.
Button
btnAddMission
;
private
System
.
Windows
.
Forms
.
ComboBox
cmbBoxLineName
;
private
System
.
Windows
.
Forms
.
GroupBox
groupBox4
;
private
System
.
Windows
.
Forms
.
GroupBox
groupBox8
;
private
System
.
Windows
.
Forms
.
Label
lblStandy2
;
private
System
.
Windows
.
Forms
.
Label
lblStandy1
;
private
System
.
Windows
.
Forms
.
Label
lblCharge4
;
private
System
.
Windows
.
Forms
.
Label
lblCharge3
;
private
System
.
Windows
.
Forms
.
Label
lblWarn
;
private
System
.
Windows
.
Forms
.
GroupBox
grpUnlock
;
private
System
.
Windows
.
Forms
.
DataGridView
dgvUnlockInfo
;
private
System
.
Windows
.
Forms
.
TableLayoutPanel
tblLayoutUnlock
;
private
System
.
Windows
.
Forms
.
DataGridView
dgvUnlockDetail
;
}
}
AGVControl-ProductionLine/FrmMain.cs
查看文件 @
c0e4939
...
...
@@ -5,6 +5,7 @@ using System.Collections.Generic;
using
System.ComponentModel
;
using
System.Data
;
using
System.Drawing
;
using
System.IO
;
using
System.Linq
;
using
System.Text
;
using
System.Threading
;
...
...
@@ -61,7 +62,7 @@ namespace AGVControl
cmbBoxLineName
.
Items
.
Add
(
"产线名称"
);
foreach
(
var
item
in
Common
.
nodeInfo
)
{
if
(
item
.
Name
.
StartsWith
(
"A"
))
if
(
item
.
Name
.
StartsWith
(
"A"
)
||
item
.
Name
.
Equals
(
SettingString
.
D4FeederIn
)
||
item
.
Name
.
Equals
(
SettingString
.
C4FeederIn
)
)
continue
;
cmbBoxLineName
.
Items
.
Add
(
item
.
AliceName
);
}
...
...
@@ -172,13 +173,59 @@ namespace AGVControl
Common
.
control
.
AgvChanged
+=
Control_AgvChanged
;
Common
.
control
.
AgvOnline
+=
Control_AgvOnline
;
Common
.
server
.
NodeChanged
+=
Server_NodeChanged
;
Common
.
control
.
NodeChangedEvent
+=
Server_NodeChanged
;
Common
.
server
.
NodeOnline
+=
Server_NodeOnline
;
//foreach (var item in Common.agvInfo)
//{
// cmbBoxAGVName.Items.Add(item.Name);
//}
//cmbBoxAGVName.Items.Add("None");
//cmbBoxAGVName.SelectedIndex = Common.agvInfo.Count;
ReadUnlockLineInfo
();
}
void
ReadUnlockLineInfo
()
{
if
(!
System
.
IO
.
File
.
Exists
(
Common
.
CONFIG_PATH
+
"UnlockInfo.json"
))
{
File
.
Create
(
Common
.
CONFIG_PATH
+
"UnlockInfo.json"
);
Common
.
missionManager
=
new
UnlockMissionManager
(
Common
.
nodeInfo
);
Common
.
missionManager
.
MissionChanged
+=
MissionManager_MissionChanged
;
return
;
}
string
s
=
File
.
ReadAllText
(
Common
.
CONFIG_PATH
+
"UnlockInfo.json"
);
Common
.
missionManager
=
JsonHelper
.
DeserializeJsonToObject
<
UnlockMissionManager
>(
s
);
if
(
Common
.
missionManager
==
null
)
Common
.
missionManager
=
new
UnlockMissionManager
(
Common
.
nodeInfo
);
Common
.
missionManager
.
MissionChanged
+=
MissionManager_MissionChanged
;
Common
.
missionManager
.
Init
();
}
private
void
MissionManager_MissionChanged
(
Dictionary
<
string
,
UnlockInfo
>
pairs
)
{
BindingSource
bs
=
new
BindingSource
();
BindingSource
bs2
=
new
BindingSource
();
try
{
dgvUnlockInfo
.
BeginInvoke
(
new
MethodInvoker
(
delegate
{
foreach
(
var
item
in
pairs
.
Values
)
{
if
(
item
.
Count
>
0
)
{
bs
.
Add
(
item
);
foreach
(
var
item1
in
item
.
UnlockRfids
)
{
bs2
.
Add
(
item1
);
}
}
}
dgvUnlockInfo
.
DataSource
=
bs
;
//赋值控件自动更新
dgvUnlockDetail
.
DataSource
=
bs2
;
}));
this
.
Invoke
(
new
Action
(()=>
{
//grpUnlock.Text = "解绑总数:"+count;
}
));
}
catch
(
Exception
e
)
{
Common
.
log
.
Error
(
"ShowUnlockInfo"
,
e
);
}
}
private
void
FrmMain_FormClosing
(
object
sender
,
FormClosingEventArgs
e
)
...
...
@@ -231,7 +278,8 @@ namespace AGVControl
Common
.
LogInfo
(
string
.
Format
(
"手动开启小车自动模式,并清除上一次的自动模式的运行信息{0} {1}"
,
Common
.
agvInfo
[
e
.
RowIndex
].
Name
,
Common
.
agvInfo
[
e
.
RowIndex
].
RunInfo
()));
//Common.agvInfo[e.RowIndex].CurJob = null;
Common
.
agvInfo
[
e
.
RowIndex
].
RFID
=
""
;
// Common.agvInfo[e.RowIndex].Place = "";
if
(
Common
.
agvInfo
[
e
.
RowIndex
].
Place
.
Equals
(
SettingString
.
AutoCharge
)
||
Common
.
agvInfo
[
e
.
RowIndex
].
Place
.
Equals
(
SettingString
.
Standby
))
Common
.
agvInfo
[
e
.
RowIndex
].
Place
=
""
;
Common
.
agvInfo
[
e
.
RowIndex
].
IsUse
=
true
;
// }
//else
...
...
@@ -264,8 +312,7 @@ namespace AGVControl
else
if
(
e
.
ColumnIndex
==
8
)
//清除缓存
{
//清除节点缓存
Common
.
LogInfo
(
string
.
Format
(
"手动清除缓存,{0}"
,
Common
.
nodeInfo
[
e
.
RowIndex
].
Name
));
Common
.
nodeInfo
[
e
.
RowIndex
].
AgvName
=
""
;
Common
.
LogInfo
(
string
.
Format
(
"手动清除缓存,{0}"
,
Common
.
nodeInfo
[
e
.
RowIndex
].
Name
));
DgvNode
.
Rows
[
e
.
RowIndex
].
Cells
[
5
].
Value
=
""
;
Common
.
nodeInfo
[
e
.
RowIndex
].
RFID
=
""
;
DgvNode
.
Rows
[
e
.
RowIndex
].
Cells
[
4
].
Value
=
""
;
...
...
@@ -360,18 +407,19 @@ namespace AGVControl
}
catch
(
Exception
ex
)
{
Common
.
log
.
Error
(
"显示"
+
Common
.
agvInfo
[
i
].
Name
+
"运行信息异常"
);
Common
.
log
.
Error
(
"显示"
+
Common
.
agvInfo
[
i
].
Name
+
"运行信息异常"
);
}
}
if
(!
Common
.
doubleLine_WO
.
Equals
(
""
))
//
if (!Common.doubleLine_WO.Equals(""))
lblWO
.
Text
=
Common
.
doubleLine_WO
;
if
(!
AGVManager
.
A6_Target
.
Equals
(
""
))
//
if (!AGVManager.A6_Target.Equals(""))
lblDestInfo
.
Text
=
AGVManager
.
A6_Target
;
lblCharge3
.
Text
=
"充电桩3:"
+
Common
.
chargeStatus
.
charge3
;
lblCharge4
.
Text
=
"充电桩6:"
+
Common
.
chargeStatus
.
charge6
;
lblStandy1
.
Text
=
"4C待机位1:"
+
Common
.
StandbyStation
.
C4_Station1
;
lblStandy2
.
Text
=
"4C待机位2:"
+
Common
.
StandbyStation
.
C4_Station2
;
lblWarn
.
Text
=
Common
.
warnMsg
;
}));
InShhow
=
false
;
...
...
@@ -400,9 +448,9 @@ namespace AGVControl
int
idx
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
AliceName
.
Equals
(
cmbBoxLineName
.
SelectedItem
.
ToString
()));
if
(
idx
>
-
1
)
{
if
(
Common
.
nodeInfo
[
idx
].
UnlockedShelf
.
Delete
(
txtRfid
.
Text
.
ToUpper
()))
if
(
Common
.
missionManager
.
DelMission
(
Common
.
nodeInfo
[
idx
].
Name
,
txtRfid
.
Text
.
ToUpper
()))
{
Common
.
LogInfo
(
string
.
Format
(
"手动删除任务成功:{0} {1}"
,
cmbBoxLineName
.
SelectedItem
.
ToString
(),
txtRfid
.
Text
.
ToUpper
()));
Common
.
LogInfo
(
string
.
Format
(
"手动删除任务成功:{0} {1}"
,
cmbBoxLineName
.
SelectedItem
.
ToString
(),
txtRfid
.
Text
.
ToUpper
()));
}
else
{
...
...
@@ -437,9 +485,9 @@ namespace AGVControl
int
idx
=
Common
.
nodeInfo
.
FindIndex
(
s
=>
s
.
AliceName
.
Equals
(
cmbBoxLineName
.
SelectedItem
.
ToString
()));
if
(
idx
>
-
1
)
{
if
(
Common
.
nodeInfo
[
idx
].
UnlockedShelf
.
Add
(
txtRfid
.
Text
.
ToUpper
()))
if
(
Common
.
missionManager
.
AddMission
(
Common
.
nodeInfo
[
idx
].
Name
,
txtRfid
.
Text
.
ToUpper
()))
{
Common
.
LogInfo
(
string
.
Format
(
"手动添加任务成功:{0} {1}"
,
cmbBoxLineName
.
SelectedItem
.
ToString
(),
txtRfid
.
Text
.
ToUpper
()));
Common
.
LogInfo
(
string
.
Format
(
"手动添加任务成功:{0} {1}"
,
cmbBoxLineName
.
SelectedItem
.
ToString
(),
txtRfid
.
Text
.
ToUpper
()));
}
else
{
...
...
@@ -613,5 +661,6 @@ namespace AGVControl
DgvAgv
.
Rows
[
idx
].
SetValues
(
Common
.
agvInfo
[
idx
].
ToRow
());
}
}
}
}
AGVControl-ProductionLine/Program.cs
查看文件 @
c0e4939
...
...
@@ -42,17 +42,16 @@ namespace AGVControl
}
//Common.logTextBox = new TextBox();
//Common.missionView = new DataGridView();
Common
.
missionManager
=
new
MissionManager
();
Common
.
log
=
log4net
.
LogManager
.
GetLogger
(
"AgvServer"
);
Common
.
log
.
Info
(
"=====程序开始====="
);
ReadConfig
();
Common
.
ReadLinePlace
();
//Common.ReadUnlockLineInfo
();
Common
.
mir
=
new
MiR_API
();
Common
.
control
=
new
BLL
.
Control
();
//获取节点位置
Common
.
GetNodesPosition
();
//
Common.GetNodesPosition();
Common
.
control
.
Start
();
Common
.
server
=
new
AgvServer
();
Common
.
server
.
Start
();
...
...
AGVControl-ProductionLine/bean/UnlockedShelf.cs
查看文件 @
c0e4939
...
...
@@ -14,42 +14,57 @@ namespace AGVControl
/// <param name="nodeName"></param>
public
UnlockedShelf
(
string
nodeName
)
{
NodeName
=
nodeName
;
this
.
NodeName
=
nodeName
;
Rfids
=
new
Dictionary
<
string
,
string
>();
}
/// <summary>
/// 空料架数量
/// </summary>
public
int
EmptyCnt
{
get
{
return
emptyCnt
;
}
public
int
EmptyCnt
{
get
;
set
;
}
public
string
NodeName
;
/// <summary>
/// 解绑的RFID及时间
/// </summary>
public
Dictionary
<
string
,
string
>
Rfids
{
get
;
set
;
}
set
public
List
<
string
>
GetRfids
()
{
EmptyCnt
=
emptyCnt
;
if
(
Rfids
==
null
||
Rfids
.
Count
<=
0
)
return
new
List
<
string
>();
return
Rfids
.
Keys
.
ToList
<
string
>();
}
public
Dictionary
<
string
,
string
>
GetRfidWithTime
()
{
if
(
Rfids
==
null
||
Rfids
.
Count
<=
0
)
return
new
Dictionary
<
string
,
string
>();
return
Rfids
;
}
/// <summary>
/// 节点名
/// </summary>
public
string
NodeName
{
get
;
private
set
;
}
private
int
emptyCnt
=
0
;
/// <summary>
/// 解绑的所有RFID
/// </summary>
private
Dictionary
<
string
,
string
>
Rfids
;
/// <summary>
///添加解绑的空料架,如果RFID相同,不增加数量
/// </summary>
public
bool
Add
(
string
rfid
)
{
if
(!
rfid
.
Equals
(
""
)
&&
!
Rfids
.
Keys
.
Contains
(
rfid
))
{
System
.
Threading
.
Interlocked
.
Increment
(
ref
emptyCnt
);
Rfids
.
Add
(
rfid
,
DateTime
.
Now
.
ToString
(
"yyyy/MM/dd/HH:mm:ss,fff"
));
Common
.
WriteIni
(
NodeName
,
SettingString
.
EmptyShelfRFIDs
,
string
.
Join
(
","
,
Rfids
.
Keys
.
ToArray
()));
Common
.
WriteIni
(
NodeName
,
SettingString
.
EmptyShelfCnt
,
emptyCnt
.
ToString
());
if
(
EmptyCnt
<
0
)
{
EmptyCnt
=
0
;
if
(
Rfids
.
Count
>
0
)
Rfids
.
Clear
();
}
int
tmp
=
EmptyCnt
;
System
.
Threading
.
Interlocked
.
Increment
(
ref
tmp
);
EmptyCnt
=
tmp
;
Rfids
.
Add
(
rfid
,
DateTime
.
Now
.
ToString
(
"yyyy/MM/dd/HH:mm:ss,fff"
));
// Common.WriteIni(NodeName, SettingString.EmptyShelfCnt, emptyCnt.ToString());
//using (System.IO.StreamWriter file = new System.IO.StreamWriter(Common.CONFIG_PATH + "UnlockInfo.txt"))
//{
// foreach (var item in Rfids.Keys)
// {
// file.WriteLine(string.Format("{0},{1}", Rfids[item], item));
// }
//}
Common
.
LogInfo
(
string
.
Format
(
"{0}解绑任务添加成功:RFID={1}"
,
NodeName
,
rfid
));
return
true
;
}
...
...
@@ -61,24 +76,30 @@ namespace AGVControl
/// </summary>
public
bool
Delete
(
string
rfid
)
{
if
(
e
mptyCnt
>
0
)
if
(
E
mptyCnt
>
0
)
{
if
(!
rfid
.
Equals
(
""
)
&&
Rfids
.
Keys
.
Contains
(
rfid
))
{
System
.
Threading
.
Interlocked
.
Decrement
(
ref
emptyCnt
);
int
tmp
=
EmptyCnt
;
System
.
Threading
.
Interlocked
.
Decrement
(
ref
tmp
);
EmptyCnt
=
tmp
;
Rfids
.
Remove
(
rfid
);
Common
.
WriteIni
(
NodeName
,
SettingString
.
EmptyShelfCnt
,
emptyCnt
.
ToString
());
Common
.
WriteIni
(
NodeName
,
SettingString
.
EmptyShelfRFIDs
,
string
.
Join
(
","
,
Rfids
.
Keys
.
ToArray
()));
using
()
{
//Common.WriteIni(nodeName, SettingString.EmptyShelfCnt, emptyCnt.ToString());
//using (System.IO.StreamWriter file = new System.IO.StreamWriter(Common.CONFIG_PATH + "UnlockInfo.txt"))
//{
// foreach (var item in Rfids.Keys)
// {
// file.WriteLine(string.Format("{0},{1}", Rfids[item], item));
// }
}
//
}
Common
.
LogInfo
(
string
.
Format
(
"{0}解绑任务删除成功:RFID={1}"
,
NodeName
,
rfid
));
return
true
;
}
}
else
if
(
Rfids
.
Count
>
0
)
{
EmptyCnt
=
0
;
Rfids
.
Clear
();
return
true
;
}
...
...
AGVControl-ProductionLine/bean/job/EmptyAGVBackJob.cs
查看文件 @
c0e4939
...
...
@@ -58,7 +58,7 @@ namespace AGVControl
if
(
EmptyAGVBackStep
.
IsStep
(
EMPTY_AGV_BACK_STEP
.
NONE
))
{
if
(
Common
.
FindEmptyShelfNode
(
agv
,
out
string
nodeName
,
true
))
if
(
Common
.
FindEmptyShelfNode
(
agv
,
out
string
nodeName
,
out
string
rfid
,
true
))
{
int
i
=
Common
.
agvInfo
.
FindIndex
(
s
=>
s
.
CurJob
is
GoEmptyShelfLineJob
&&
((
GoEmptyShelfLineJob
)
s
.
CurJob
).
EmptyShelfPlace
.
Equals
(
nodeName
));
if
(
i
==-
1
)
...
...
@@ -66,7 +66,7 @@ namespace AGVControl
runInfo
=
"小车在产线 "
+
agvPlace
+
" 准备返回时检测到 "
+
nodeName
+
" 有空料架"
;
msg
+=
runInfo
;
EmptyAGVBackStep
.
Msg
=
msg
;
return
new
GoEmptyShelfLineJob
(
agvPlace
,
nodeName
);
return
new
GoEmptyShelfLineJob
(
agvPlace
,
nodeName
,
rfid
);
}
else
{
...
...
AGVControl-ProductionLine/bean/job/EnterLeaveShelfJob.cs
查看文件 @
c0e4939
...
...
@@ -176,7 +176,7 @@ namespace AGVControl
runInfo
=
"料架在"
+
LineName
+
"出去完成 ["
+
RFID
+
"]"
;
msg
+=
runInfo
;
EnterLeaveShelfStep
.
Msg
=
msg
;
Common
.
DelEmptyShelfTask
(
LineName
,
RFID
);
Common
.
missionManager
.
DelMission
(
LineName
,
RFID
);
return
new
EmptyShelfBackJob
(
LineName
,
eShelfType
.
BigShelf
);
}
else
if
(
EnterLeaveShelfStep
.
IsTimeOut
(
60000
,
out
double
timeOutValue
))
...
...
AGVControl-ProductionLine/bean/job/GoEmptyShelfLineJob.cs
查看文件 @
c0e4939
...
...
@@ -259,9 +259,8 @@ namespace AGVControl
if
(
Common
.
CheckEnterOrLeaveFinished
(
agv
,
"Enter"
,
CurTaskState
))
{
ClientNode
node
=
Common
.
nodeInfo
[
nodeIdx
];
node
.
AgvName
=
""
;
//回收空料架数量减少1
Common
.
DelEmptyShelfTask
(
EmptyShelfPlace
,
RFID
);
Common
.
missionManager
.
DelMission
(
EmptyShelfPlace
,
RFID
);
runInfo
=
"空料架在["
+
EmptyShelfPlace
+
"]进入小车完成"
+
"[RFID="
+
RFID
+
"]"
;
msg
+=
runInfo
;
TakeEmptyStep
.
Msg
=
msg
;
...
...
@@ -271,7 +270,10 @@ namespace AGVControl
else
if
(
agv
.
Place
.
Equals
(
SettingString
.
C4FeederOut
))
return
new
EmptyShelfBackJob
(
EmptyShelfPlace
,
eShelfType
.
BigShelf
);
else
if
(
agv
.
RFID
.
StartsWith
(
"D"
))
{
AGVManager
.
ClearRFID
(
EmptyShelfPlace
,
RFID
);
return
new
EmptyShelfBackJob
(
EmptyShelfPlace
,
eShelfType
.
SmallShelf
);
}
else
if
(
agv
.
RFID
.
StartsWith
(
"C"
))
{
return
new
EmptyShelfBackJob
(
EmptyShelfPlace
,
eShelfType
.
BigShelf
);
...
...
AGVControl-ProductionLine/bean/node/ClientNode.cs
查看文件 @
c0e4939
...
...
@@ -50,9 +50,19 @@ namespace AGVControl
/// </summary>
public
PositionStru
position
;
/// <summary>
/// 料架
解绑
信息
/// 料架
数量
信息
/// </summary>
public
UnlockedShelf
UnlockedShelf
{
get
;
set
;
}
public
int
EmptyShelfCnt
{
get
{
if
(
Common
.
missionManager
!=
null
&&
Common
.
missionManager
.
GetUnlockInfo
(
Name
)
!=
null
)
{
return
Common
.
missionManager
.
GetUnlockCnt
(
Name
);
}
return
-
1
;
}
}
public
string
AliceName
{
get
;
set
;
}
/// <summary>
/// 客户端节点
...
...
@@ -70,7 +80,6 @@ namespace AGVControl
this
.
Pos_name
=
pos_name
;
this
.
Pos_guid
=
pos_guid
;
LineName
=
lineName
;
UnlockedShelf
=
new
UnlockedShelf
(
name
);
}
/// <summary>
...
...
AGVControl-ProductionLine/bean/node/DoubleLineNodeFor4C.cs
查看文件 @
c0e4939
...
...
@@ -30,6 +30,7 @@ namespace AGVControl
return
null
;
//执行空料架任务的小车数量
int
emptyJobCnt
=
0
;
string
rfid
=
""
;
foreach
(
Agv_Info
agv
in
Common
.
agvInfo
)
{
if
(!
SettingString
.
C4_AGV_IPs
.
Contains
(
agv
.
IP
))
...
...
@@ -44,7 +45,7 @@ namespace AGVControl
return
null
;
}
//出工单料的目的地是否有空料架
if
(
Common
.
FindEmptyShelfBeforeSendFullShelf
(
out
string
nodeName
))
if
(
Common
.
FindEmptyShelfBeforeSendFullShelf
(
out
string
nodeName
,
out
rfid
))
{
if
(
nodeName
.
StartsWith
(
SettingString
.
C4_Name_Prefix
)
&&
SettingString
.
C4_AGV_IPs
.
Contains
(
currentAgv
.
IP
))
{
...
...
@@ -60,20 +61,20 @@ namespace AGVControl
}
if
(
cnt
<
clientNode
.
EmptyShelfCnt
)
{
return
new
GoEmptyShelfLineJob
(
currentAgv
.
Place
,
nodeName
);
return
new
GoEmptyShelfLineJob
(
currentAgv
.
Place
,
nodeName
,
rfid
);
}
}
}
//回收空料架
if
(
Common
.
FindEmptyShelfNode
(
currentAgv
,
out
string
emptyNodeName
))
if
(
Common
.
FindEmptyShelfNode
(
currentAgv
,
out
string
emptyNodeName
,
out
rfid
))
{
if
(
SettingString
.
C4_AGV_IPs
.
Contains
(
currentAgv
.
IP
))
{
int
i
=
Common
.
agvInfo
.
FindIndex
(
s
=>
s
.
CurJob
is
GoEmptyShelfLineJob
&&
((
GoEmptyShelfLineJob
)
s
.
CurJob
).
EmptyShelfPlace
.
Equals
(
emptyNodeName
));
if
(
i
==
-
1
)
return
new
GoEmptyShelfLineJob
(
currentAgv
.
Place
,
emptyNodeName
);
return
new
GoEmptyShelfLineJob
(
currentAgv
.
Place
,
emptyNodeName
,
rfid
);
}
}
...
...
AGVControl-ProductionLine/bean/node/DoubleLineNodeFor4D.cs
查看文件 @
c0e4939
...
...
@@ -33,6 +33,7 @@ namespace AGVControl
return
null
;
//执行空料架任务的小车数量
int
emptyJobCnt
=
0
;
string
rfid
=
""
;
foreach
(
Agv_Info
agv
in
Common
.
agvInfo
)
{
if
(
SettingString
.
C4_AGV_IPs
.
Contains
(
agv
.
IP
))
...
...
@@ -47,7 +48,7 @@ namespace AGVControl
return
null
;
}
//出工单料的目的地是否有空料架
if
(
Common
.
FindEmptyShelfBeforeSendFullShelf
(
out
string
nodeName
))
if
(
Common
.
FindEmptyShelfBeforeSendFullShelf
(
out
string
nodeName
,
out
rfid
))
{
if
(
nodeName
.
StartsWith
(
SettingString
.
D4_Name_Prefix
)
&&
!
SettingString
.
C4_AGV_IPs
.
Contains
(
currentAgv
.
IP
))
{
...
...
@@ -65,19 +66,19 @@ namespace AGVControl
}
if
(
cnt
<
clientNode
.
EmptyShelfCnt
)
{
return
new
GoEmptyShelfLineJob
(
currentAgv
.
Place
,
nodeName
);
return
new
GoEmptyShelfLineJob
(
currentAgv
.
Place
,
nodeName
,
rfid
);
}
}
}
//回收空料架
if
(
Common
.
FindEmptyShelfNode
(
currentAgv
,
out
string
emptyNodeName
))
if
(
Common
.
FindEmptyShelfNode
(
currentAgv
,
out
string
emptyNodeName
,
out
rfid
))
{
if
(!
SettingString
.
C4_AGV_IPs
.
Contains
(
currentAgv
.
IP
))
{
int
i
=
Common
.
agvInfo
.
FindIndex
(
s
=>
s
.
CurJob
is
GoEmptyShelfLineJob
&&
((
GoEmptyShelfLineJob
)
s
.
CurJob
).
EmptyShelfPlace
.
Equals
(
emptyNodeName
));
if
(
i
==
-
1
)
return
new
GoEmptyShelfLineJob
(
currentAgv
.
Place
,
emptyNodeName
);
return
new
GoEmptyShelfLineJob
(
currentAgv
.
Place
,
emptyNodeName
,
rfid
);
}
}
...
...
AGVControl-ProductionLine/bin/Debug/AGVControl-ProductionLine.exe
查看文件 @
c0e4939
此文件类型无法预览
AGVControl-ProductionLine/bin/Debug/AGVControl-ProductionLine.exe.config
查看文件 @
c0e4939
...
...
@@ -43,7 +43,8 @@
<
add
key
=
"FLEET"
value
=
"10.85.199.3"
/>
<
add
key
=
"AutoCharge"
value
=
"True"
/>
<
add
key
=
"ChargeWait"
value
=
"1"
/>
<
add
key
=
"ChargeThreshold"
value
=
"20,70"
/>
<
add
key
=
"ChargeThreshold"
value
=
"20,90"
/>
<
add
key
=
"IP_4D_Light"
value
=
"10.85.196.40:8088"
/>
<
add
key
=
"IP_4C_Light"
value
=
"10.85.197.40:8088"
/>
</
appSettings
>
</
configuration
>
\ No newline at end of file
AGVControl-ProductionLine/bin/Debug/AGVControl-ProductionLine.pdb
查看文件 @
c0e4939
此文件类型无法预览
AGVControl-ProductionLine/bin/Debug/Config/AgvProductionLine.csv
查看文件 @
c0e4939
...
...
@@ -15,8 +15,8 @@ D12,D12,10.85.199.183,4D-12,DL12,d6e0b92a-b432-11ea-a1a5-00012999830e
D14,D14,10.85.199.184,4D-14线,DL14,efb04c55-b432-11ea-a1a5-00012999830e
D15,D15,10.85.199.185,4D-15线,DL15,fd6b1f95-b432-11ea-a1a5-00012999830e
D16,D16,10.85.199.96,4D-16线,line_16,ac6c413e-895e-11ea-9374-000129922ca6
FeederIn,
FeederIn
,10.85.199.1,4D-FeedeerIn,FI,1e546c3a-8abe-11ea-ab63-000129922ca6
FeederOut,
FeederOut
,10.85.199.1,4D-FeederOut,FO,431649a4-8abe-11ea-ab63-000129922ca6
FeederIn,
D21
,10.85.199.1,4D-FeedeerIn,FI,1e546c3a-8abe-11ea-ab63-000129922ca6
FeederOut,
D22
,10.85.199.1,4D-FeederOut,FO,431649a4-8abe-11ea-ab63-000129922ca6
C1,C1,10.85.199.50,4C-1线,G1,d402fbc2-cdac-11ea-a3e4-94c691a7387d
C2,C2,10.85.199.51,4C-2线,G2,ce0d60e9-cdac-11ea-a3e4-94c691a7387d
C3,C3,10.85.199.52,4C-3线,G3,c768170a-cdac-11ea-a3e4-94c691a7387d
...
...
@@ -29,5 +29,5 @@ C9,C9,10.85.199.62,4C-9,G9,a64bdbbb-cdac-11ea-a3e4-94c691a7387d
C10,C10,10.85.199.59,4C-10线,G10,604b1c3c-ca4e-11ea-810b-00012999830e
C14,C14,10.85.199.60,4C-14线,G14,07841fc6-d0d4-11ea-a3e4-94c691a7387d
C15,C15,10.85.199.61,4C-15线,G15,0efca2c6-d0d4-11ea-a3e4-94c691a7387d
4CFeederIn,
4CFeederIn
,10.85.199.1,4C-FeederIn,G21,cb7f117b-ca88-11ea-9b28-0001299981d4
4CFeederOut,
4CFeederOut
,10.85.199.1,4C-FeederOut,G22,0fcf606c-d417-11ea-9b6b-0001299981d4
4CFeederIn,
C21
,10.85.199.1,4C-FeederIn,G21,cb7f117b-ca88-11ea-9b28-0001299981d4
4CFeederOut,
C22
,10.85.199.1,4C-FeederOut,G22,0fcf606c-d417-11ea-9b6b-0001299981d4
AGVControl-ProductionLine/bin/Debug/Config/LinePlace.txt
deleted
100644 → 0
查看文件 @
9ea1b3d
2020-11-03 14:08:42,D1,D11
2020-11-03 14:10:26,D1,D4
2020-11-03 14:12:43,D1,D5
AGVControl-ProductionLine/bin/Debug/Config/UnlockInfo.json
0 → 100644
查看文件 @
c0e4939
{
"NodeUnlockMissions"
:{
"D1"
:{
"NodeName"
:
"D1"
,
"EmptyCnt"
:
1
,
"Rfids"
:{
"D3"
:
"2020/12/02/14:12:20,387"
}},
"D2"
:{
"NodeName"
:
"D2"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"D3"
:{
"NodeName"
:
"D3"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"D4"
:{
"NodeName"
:
"D4"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"D5"
:{
"NodeName"
:
"D5"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"D6"
:{
"NodeName"
:
"D6"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"D8"
:{
"NodeName"
:
"D8"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"D9"
:{
"NodeName"
:
"D9"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"D10"
:{
"NodeName"
:
"D10"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"D11"
:{
"NodeName"
:
"D11"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"D12"
:{
"NodeName"
:
"D12"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"D14"
:{
"NodeName"
:
"D14"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"D15"
:{
"NodeName"
:
"D15"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"D16"
:{
"NodeName"
:
"D16"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"D22"
:{
"NodeName"
:
"D22"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"C1"
:{
"NodeName"
:
"C1"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"C2"
:{
"NodeName"
:
"C2"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"C3"
:{
"NodeName"
:
"C3"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"C4"
:{
"NodeName"
:
"C4"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"C5"
:{
"NodeName"
:
"C5"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"C6"
:{
"NodeName"
:
"C6"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"C7"
:{
"NodeName"
:
"C7"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"C8"
:{
"NodeName"
:
"C8"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"C9"
:{
"NodeName"
:
"C9"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"C10"
:{
"NodeName"
:
"C10"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"C14"
:{
"NodeName"
:
"C14"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"C15"
:{
"NodeName"
:
"C15"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}},
"C22"
:{
"NodeName"
:
"C22"
,
"EmptyCnt"
:
0
,
"Rfids"
:{}}}}
AGVControl-ProductionLine/bin/Debug/Config/tempData.ini
查看文件 @
c0e4939
...
...
@@ -10,5 +10,4 @@ RFID=
RFID
=
[MiR_R1580]
RFID
=
[D1]
EmptyShelfCnt
=
9
AGVControl-ProductionLine/bin/Debug/logs/AgvServer.log
查看文件 @
c0e4939
此文件的差异太大,无法显示。
AGVControl-ProductionLine/obj/Debug/AGVControl-ProductionLine.csproj.CoreCompileInputs.cache
查看文件 @
c0e4939
c
e147cdc7d5f84ac5eea7abfb5866dce563042b6
c
1dcc8c90bc02014bb2dcb74bc1a4ab9d348762e
AGVControl-ProductionLine/obj/Debug/AGVControl-ProductionLine.csproj.GenerateResource.cache
查看文件 @
c0e4939
此文件类型无法预览
AGVControl-ProductionLine/obj/Debug/AGVControl-ProductionLine.exe
查看文件 @
c0e4939
此文件类型无法预览
AGVControl-ProductionLine/obj/Debug/AGVControl-ProductionLine.pdb
查看文件 @
c0e4939
此文件类型无法预览
AGVControl-ProductionLine/obj/Debug/DesignTimeResolveAssemblyReferences.cache
查看文件 @
c0e4939
此文件类型无法预览
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论