Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
RC1250-ACPackingStore
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 134a19b4
由
LN
编写于
2020-04-13 11:14:21 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
紧急料分盘料送出料架逻辑修改
1 个父辈
3806a146
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
217 行增加
和
65 行删除
source/ACPackingStore/记录.txt
source/DeviceLibrary/ACPackingStore/AC_BOX_Bean.cs
source/DeviceLibrary/ACPackingStore/AC_BOX_Bean_Partial.cs
source/DeviceLibrary/ACPackingStore/StoreManager.cs
source/ACPackingStore/记录.txt
查看文件 @
134a19b
...
...
@@ -117,9 +117,11 @@ PRO,压紧轴(轴4)七寸盘压紧前点相对压紧点的位置,CompAxis7_P
agv到达时,根据rfid判断是否有料架
20200411
出库时未读到料架号,直接送出料架
紧急料分盘料料架送出逻辑修改。
分盘料/紧急料放上料串或料架时调用 /rest/api/qisda/device/afterPutCut 参数: cid: 料仓cid,流水线可传入空 barcode : 条码 rfid : RFID rfidLoc: 料架位置,流水线可传-1 > 返回: >>` {"code": 0, "msg":"ok", "data":{"cutPackageTask":"0","urgentPackageTask":"20","cutTask":"21","urgentTask":"22"}} ` >> >> - code: 0为正常,其他为异常, >> - msg:消息, >> - data:为包装料仓的空闲仓位数(key为与客户端一致的料仓标识,value为空闲仓位) >> - cutPackageTask: 表示当前包装仓的分盘任务数 >> - urgentPackageTask: 表示当前包装仓的紧急料任务数 >> - cutTask: 表示流水线分盘任务数 >> - urgentTask: 表示流水线紧急料任务数
...
...
source/DeviceLibrary/ACPackingStore/AC_BOX_Bean.cs
查看文件 @
134a19b
...
...
@@ -18,7 +18,7 @@ namespace OnlineStore.DeviceLibrary
/// </summary>
public
partial
class
AC_BOX_Bean
:
KTK_Store
{
private
ShelfData
serverShelf
Data
=
null
;
private
TaskData
task
Data
=
null
;
public
EnteryDoorBean
DoorBean
=
null
;
private
bool
IsIntSlvBlock
=
false
;
public
AutoInoutInfo
AutoInout
=
new
AutoInoutInfo
();
...
...
@@ -35,10 +35,7 @@ namespace OnlineStore.DeviceLibrary
/// 所有料架库位列表
/// </summary>
public
List
<
string
>
ShelfPosList
=
new
List
<
string
>();
///// <summary>
///// 料架未放料盘的位置列表
///// </summary>
// public ConcurrentQueue<string> EmprtShelfList = new ConcurrentQueue<string>();
public
HumitureBean
humBean
=
null
;
private
System
.
Timers
.
Timer
serverConnectTimer
=
new
System
.
Timers
.
Timer
();
...
...
source/DeviceLibrary/ACPackingStore/AC_BOX_Bean_Partial.cs
查看文件 @
134a19b
...
...
@@ -785,7 +785,7 @@ namespace OnlineStore.DeviceLibrary
return
false
;
}
serverShelf
Data
=
null
;
task
Data
=
null
;
storeStatus
=
StoreStatus
.
OutStoreExecute
;
storeRunStatus
=
StoreRunStatus
.
Busy
;
MoveInfo
.
NewMove
(
StoreMoveType
.
OutStore
,
param
);
...
...
@@ -945,18 +945,17 @@ namespace OnlineStore.DeviceLibrary
ACAxisMove
(
Config
.
Comp_Axis
,
moveP
.
ComPress_P1
,
Config
.
CompAxis_P1_Speed
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_LP101
,
Config
.
UpDownAxis_P101_Speed
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
1000
));
serverShelf
Data
=
null
;
task
Data
=
null
;
Task
.
Factory
.
StartNew
(
delegate
{
int
posLoc
=
StoreManager
.
GetShelfPosIndex
(
MoveInfo
.
MoveParam
.
ShelfPosID
,
ShelfPosList
);
//分盘料和紧急料发PutFinished
if
(
MoveInfo
.
MoveParam
.
cutReel
||
MoveInfo
.
MoveParam
.
urgentReel
)
{
string
msg
=
StoreManager
.
PutShelfFinished
(
Name
,
MoveInfo
.
MoveParam
.
WareCode
,
CurrShelfID
,
posLoc
.
ToString
(),
out
serverShelf
Data
);
string
msg
=
StoreManager
.
afterPutCut
(
Name
,
CurrShelfID
,
MoveInfo
.
MoveParam
.
WareCode
,
CID
,
posLoc
,
out
task
Data
);
if
(
String
.
IsNullOrEmpty
(
msg
).
Equals
(
false
))
{
LogUtil
.
error
(
Name
+
"【"
+
MoveInfo
.
MoveParam
.
WareCode
+
"】【"
+
CurrShelfID
+
"】【"
+
posLoc
+
"】【"
+
GetLastRfid
()+
"】PutShelfFinished 结果:"
+
msg
);
serverShelfData
=
null
;
LogUtil
.
error
(
Name
+
"["
+
MoveInfo
.
MoveParam
.
WareCode
+
"] ["
+
CurrShelfID
+
"_"
+
GetLastRfid
()
+
"] ["
+
posLoc
+
"] afterPutCut 结果:"
+
msg
);
}
}
else
...
...
@@ -965,8 +964,7 @@ namespace OnlineStore.DeviceLibrary
string
msg
=
StoreManager
.
UpdateTrayLoc
(
Name
,
MoveInfo
.
MoveParam
.
WareCode
,
CurrShelfID
+
"@"
+
posLoc
.
ToString
(),
out
newTaskCount
);
if
(
String
.
IsNullOrEmpty
(
msg
).
Equals
(
false
))
{
LogUtil
.
error
(
Name
+
"【"
+
MoveInfo
.
MoveParam
.
WareCode
+
"】【"
+
CurrShelfID
+
"】【"
+
posLoc
+
"】【"
+
GetLastRfid
()
+
"】UpdateTrayLoc 结果:"
+
msg
);
serverShelfData
=
null
;
LogUtil
.
error
(
Name
+
"["
+
MoveInfo
.
MoveParam
.
WareCode
+
"] ["
+
CurrShelfID
+
"_"
+
GetLastRfid
()
+
"] ["
+
posLoc
+
"] UpdateTrayLoc 结果:"
+
msg
);
}
if
(
newTaskCount
>
MoveInfo
.
MoveParam
.
taskCount
)
{
...
...
@@ -995,29 +993,42 @@ namespace OnlineStore.DeviceLibrary
{
//判断是否需要送出料架
bool
isNeedSend
=
false
;
string
logName
=
"【"
+
CurrShelfID
+
"
】【
"
+
GetLastRfid
()
+
"】"
;
string
logName
=
"【"
+
CurrShelfID
+
"
_
"
+
GetLastRfid
()
+
"】"
;
//只有rfid不为空才需要送出料架
if
(
String
.
IsNullOrEmpty
(
MoveInfo
.
MoveParam
.
rfid
))
{
InOutStoreLog
(
"出库完成,未设置rfid,不需要送出料架"
);
isNeedSend
=
false
;
}
else
if
(
serverShelfData
!=
nul
l
)
else
if
(
MoveInfo
.
MoveParam
.
cutRee
l
)
{
if
(
serverShelfData
.
packageEmpty
<=
0
)
if
(
taskData
!=
null
&&
taskData
.
cutPackageTask
<=
0
)
{
InOutStoreLog
(
"出库完成,料架"
+
logName
+
"没有位置,packageEmpty="
+
serverShelfData
.
packageEmpty
+
",送出料架"
);
InOutStoreLog
(
logName
+
"分盘料出库完成,cutPackageTask="
+
taskData
.
cutPackageTask
+
",送出料架"
);
isNeedSend
=
true
;
}
else
if
(
(
serverShelfData
.
cutPackageTask
+
serverShelfData
.
packageTask
)
<=
0
)
else
if
(
taskData
==
null
)
{
InOutStoreLog
(
"出库完成,料架"
+
logName
+
"没有出库任务,cutPackageTask="
+
serverShelfData
.
cutPackageTask
+
",packageTask="
+
serverShelfData
.
packageTask
+
"
,送出料架"
);
InOutStoreLog
(
logName
+
"分盘料出库完成,taskData=null
,送出料架"
);
isNeedSend
=
true
;
}
}
else
if
(
MoveInfo
.
MoveParam
.
taskCount
<=
0
)
else
if
(
MoveInfo
.
MoveParam
.
urgentReel
)
{
InOutStoreLog
(
"出库完成,料架"
+
logName
+
"没有出库任务,taskCount="
+
MoveInfo
.
MoveParam
.
taskCount
+
" 送出料架"
);
if
(
taskData
!=
null
&&
taskData
.
urgentPackageTask
<=
0
)
{
InOutStoreLog
(
logName
+
"紧急料出库完成,urgentPackageTask="
+
taskData
.
urgentPackageTask
+
",送出料架"
);
isNeedSend
=
true
;
}
else
if
(
taskData
==
null
)
{
InOutStoreLog
(
logName
+
"紧急料出库完成,taskData=null,送出料架"
);
isNeedSend
=
true
;
}
}
else
if
(
MoveInfo
.
MoveParam
.
taskCount
<=
0
)
{
InOutStoreLog
(
logName
+
"出库完成,taskCount="
+
MoveInfo
.
MoveParam
.
taskCount
+
" 送出料架"
);
isNeedSend
=
true
;
}
if
(
isNeedSend
)
...
...
@@ -1029,7 +1040,7 @@ namespace OnlineStore.DeviceLibrary
TimeSpan
span
=
DateTime
.
Now
-
startOutStoreTime
;
string
posId
=
MoveInfo
.
MoveParam
!=
null
?
MoveInfo
.
MoveParam
.
PosID
:
""
;
storeStatus
=
StoreStatus
.
StoreOnline
;
LogInfo
(
" 【"
+
posId
+
"】 "
+
logName
+
"
整个出库流程
结束,耗时【"
+
FormUtil
.
GetSpanStr
(
span
)
+
"】!"
);
LogInfo
(
" 【"
+
posId
+
"】 "
+
logName
+
"
出库
结束,耗时【"
+
FormUtil
.
GetSpanStr
(
span
)
+
"】!"
);
if
(!
String
.
IsNullOrEmpty
(
MoveInfo
.
MoveParam
.
rfid
))
{
if
(
StoreManager
.
Store
.
AutoShelfInstore
)
...
...
@@ -1041,7 +1052,7 @@ namespace OnlineStore.DeviceLibrary
}
MoveEndToRuningStatus
();
AutoInout
.
InOutEndProcess
(
this
,
StoreMoveType
.
OutStore
);
}
}
#
endregion
...
...
source/DeviceLibrary/ACPackingStore/StoreManager.cs
查看文件 @
134a19b
...
...
@@ -284,47 +284,47 @@ namespace OnlineStore.DeviceLibrary
path
=
path
.
Substring
(
0
,
path
.
Length
-
1
);
return
path
;
}
/// <summary>
/// 3 放入料架(A,B,C,D)后调用,根据返回值决定当前料架是否放满,以及后续是否还有任务
// 地址: /rest/api/qisda/device/putShelfFinished
/// </summary>
private
static
string
Addr_putShelfFinished
=
"/rest/api/qisda/device/putShelfFinished"
;
public
static
string
PutShelfFinished
(
string
deviceName
,
string
barcode
,
string
rfid
,
string
rfidPosId
,
out
ShelfData
shelfData
)
{
string
msg
=
""
;
shelfData
=
null
;
try
{
Dictionary
<
string
,
string
>
paramMap
=
new
Dictionary
<
string
,
string
>();
paramMap
.
Add
(
"barcode"
,
barcode
);
// 参数: barcode=料盘的条码
paramMap
.
Add
(
"rfid"
,
rfid
);
// rfid = 料架的RFID信息
paramMap
.
Add
(
"rfidLoc"
,
rfidPosId
);
// rfidLoc=料架的架位信息
// paramMap.Add("robotIndex", "0"); // robotIndex = 机器人编号(非机器人放置时不传此参数), IP为51的机器人为1, 52的机器人为2, 53的机器人为3
string
server
=
GetAddr
(
Addr_putShelfFinished
,
paramMap
);
string
resultStr
=
HttpHelper
.
Post
(
server
,
""
);
LogUtil
.
info
(
"PutShelfFinished 【"
+
server
+
"】【"
+
resultStr
+
"】"
);
// 返回: {"code": 0, "msg":"ok", "data":{"rfid":"xxx","smallEmpty":0,"bigEmpty":0, "packageEmpty":0,"cutPackageTask":0,"packageTask":10,"cutTask":10, "smallTask":5, "bigTask":5}
ServerData
serverResult
=
JsonHelper
.
DeserializeJsonToObject
<
ServerData
>(
resultStr
);
if
(
serverResult
==
null
)
{
return
msg
=
deviceName
+
"PutShelfFinished【 "
+
barcode
+
"】【"
+
rfid
+
"】【"
+
rfidPosId
+
"】没有收到服务器反馈"
;
}
else
if
(
serverResult
.
code
.
Equals
(
0
).
Equals
(
false
))
{
return
msg
=
deviceName
+
" PutShelfFinished【 "
+
barcode
+
"】【"
+
rfid
+
"】【"
+
rfidPosId
+
"】 :"
+
serverResult
.
msg
;
}
//if (String.IsNullOrEmpty(serverResult.data).Equals(false))
//{
// shelfData = JsonHelper.DeserializeJsonToObject<ShelfData>(serverResult.data);
//}
shelfData
=
serverResult
.
data
;
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
deviceName
+
" PutShelfFinished error : "
+
ex
.
ToString
());
}
return
""
;
}
///
//
<summary>
///
//
3 放入料架(A,B,C,D)后调用,根据返回值决定当前料架是否放满,以及后续是否还有任务
//
//
地址: /rest/api/qisda/device/putShelfFinished
///
//
</summary>
//
private static string Addr_putShelfFinished = "/rest/api/qisda/device/putShelfFinished";
//
public static string PutShelfFinished(string deviceName, string barcode, string rfid, string rfidPosId, out ShelfData shelfData)
//
{
//
string msg = "";
//
shelfData = null;
//
try
//
{
//
Dictionary<string, string> paramMap = new Dictionary<string, string>();
//
paramMap.Add("barcode", barcode); // 参数: barcode=料盘的条码
//
paramMap.Add("rfid", rfid); // rfid = 料架的RFID信息
//
paramMap.Add("rfidLoc", rfidPosId); // rfidLoc=料架的架位信息
//
// paramMap.Add("robotIndex", "0"); // robotIndex = 机器人编号(非机器人放置时不传此参数), IP为51的机器人为1, 52的机器人为2, 53的机器人为3
//
string server = GetAddr(Addr_putShelfFinished, paramMap);
//
string resultStr = HttpHelper.Post(server, "");
//
LogUtil.info("PutShelfFinished 【" + server + "】【" + resultStr + "】");
//
// 返回: {"code": 0, "msg":"ok", "data":{"rfid":"xxx","smallEmpty":0,"bigEmpty":0, "packageEmpty":0,"cutPackageTask":0,"packageTask":10,"cutTask":10, "smallTask":5, "bigTask":5}
//
ServerData serverResult = JsonHelper.DeserializeJsonToObject<ServerData>(resultStr);
//
if (serverResult == null)
//
{
//
return msg = deviceName + "PutShelfFinished【 " + barcode + "】【" + rfid + "】【" + rfidPosId + "】没有收到服务器反馈";
//
}
//
else if (serverResult.code.Equals(0).Equals(false))
//
{
//
return msg = deviceName + " PutShelfFinished【 " + barcode + "】【" + rfid + "】【" + rfidPosId + "】 :" + serverResult.msg;
//
}
//
//if (String.IsNullOrEmpty(serverResult.data).Equals(false))
//
//{
//
// shelfData = JsonHelper.DeserializeJsonToObject<ShelfData>(serverResult.data);
//
//}
//
shelfData = serverResult.data;
//
}
//
catch (Exception ex)
//
{
//
LogUtil.error(deviceName + " PutShelfFinished error : " + ex.ToString());
//
}
//
return "";
//
}
/// <summary>
/// 2 料盘流转位置信息更新
/// 地址: /rest/api/qisda/device/updateLocInfo
...
...
@@ -463,7 +463,141 @@ namespace OnlineStore.DeviceLibrary
}
}
// 分盘料/紧急料放上料串或料架时调用 /rest/api/qisda/device/afterPutCut
private
static
string
Addr_afterPutCut
=
"/rest/api/qisda/device/afterPutCut"
;
public
static
string
afterPutCut
(
string
deviceName
,
string
rfid
,
string
barcode
,
string
cid
,
int
rfidLoc
,
out
TaskData
afterData
)
{
afterData
=
null
;
string
msg
=
""
;
try
{
//参数:
//cid: 料仓cid,流水线可传入空
//barcode : 条码
//rfid : RFID
//rfidLoc: 料架位置,流水线可传-1
Dictionary
<
string
,
string
>
paramMap
=
new
Dictionary
<
string
,
string
>();
paramMap
.
Add
(
"barcode"
,
barcode
);
// 参数: barcode=料盘的条码
paramMap
.
Add
(
"rfid"
,
rfid
);
// rfid = 料架的RFID信息
paramMap
.
Add
(
"rfidLoc"
,
rfidLoc
.
ToString
());
// rfidLoc=料架的架位信息
paramMap
.
Add
(
"cid"
,
cid
);
// 料仓cid,流水线可传入空
string
server
=
GetAddr
(
Addr_afterPutCut
,
paramMap
);
DateTime
startTime
=
DateTime
.
Now
;
string
resultStr
=
HttpHelper
.
Post
(
server
,
""
);
LogUtil
.
info
(
"afterPutCut "
+
FormUtil
.
GetSpanStr
(
DateTime
.
Now
-
startTime
)
+
" 【"
+
server
+
"】【"
+
resultStr
+
"】"
);
//> 返回:
//>>` {"code": 0, "msg":"ok", "data":{"cutPackageTask":"0","urgentPackageTask":"20","cutTask":"21","urgentTask":"22"}} `
//>>
//>> - code: 0为正常,其他为异常,
//>> - msg:消息,
//>> - data:为包装料仓的空闲仓位数(key为与客户端一致的料仓标识, value为空闲仓位)
//>> - cutPackageTask: 表示当前包装仓的分盘任务数
//>> - urgentPackageTask: 表示当前包装仓的紧急料任务数
//>> - cutTask: 表示流水线分盘任务数
//>> - urgentTask: 表示流水线紧急料任务数
AfterPutData
serverResult
=
JsonHelper
.
DeserializeJsonToObject
<
AfterPutData
>(
resultStr
);
if
(
serverResult
==
null
)
{
return
msg
=
deviceName
+
"afterPutCut【 "
+
barcode
+
"】【"
+
rfid
+
"】【"
+
rfidLoc
+
"】没有收到服务器反馈"
;
}
else
if
(
serverResult
.
code
.
Equals
(
0
).
Equals
(
false
))
{
return
msg
=
deviceName
+
" afterPutCut【 "
+
barcode
+
"】【"
+
rfid
+
"】【"
+
rfidLoc
+
"】 :"
+
serverResult
.
msg
;
}
afterData
=
serverResult
.
data
;
return
""
;
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
deviceName
+
" "
+
ex
.
ToString
());
}
return
msg
;
}
// 分盘料/紧急料启动时获取料架的虚拟RFID调用 地址: /rest/api/qisda/device/findTempRfid
private
static
string
Addr_findTempRfid
=
"/rest/api/qisda/device/findTempRfid"
;
public
static
string
findTempRfid
(
string
deviceName
,
string
rfid
,
out
string
tempRfid
)
{
tempRfid
=
""
;
string
msg
=
""
;
try
{
// 参数: rfid: RFID
// 返回: "code": 0, "msg":"ok", "data":{ "tempRfid":""}
// code: 0为正常,其他为异常,
//msg: 消息,
//data: tempRfid: 表示当前料架(料串)对应的虚拟RFID
Dictionary
<
string
,
string
>
paramMap
=
new
Dictionary
<
string
,
string
>();
paramMap
.
Add
(
"rfid"
,
rfid
);
// rfid: RFID
string
server
=
GetAddr
(
Addr_findTempRfid
,
paramMap
);
DateTime
startTime
=
DateTime
.
Now
;
string
resultStr
=
HttpHelper
.
Post
(
server
,
""
);
LogUtil
.
info
(
"findTempRfid "
+
FormUtil
.
GetSpanStr
(
DateTime
.
Now
-
startTime
)
+
" 【"
+
server
+
"】【"
+
resultStr
+
"】"
);
RfidData
data
=
JsonHelper
.
DeserializeJsonToObject
<
RfidData
>(
resultStr
);
if
(
data
==
null
)
{
return
msg
=
deviceName
+
"findTempRfid【 "
+
rfid
+
"】 没有收到服务器反馈"
;
}
else
if
(
data
.
code
.
Equals
(
0
).
Equals
(
false
))
{
return
msg
=
deviceName
+
" findTempRfid【 "
+
rfid
+
"】 :"
+
data
.
msg
;
}
if
(
data
.
data
!=
null
&&
data
.
data
.
ContainsKey
(
"tempRfid"
))
{
tempRfid
=
data
.
data
[
"tempRfid"
];
}
return
""
;
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
deviceName
+
" "
+
ex
.
ToString
());
}
return
msg
;
}
}
public
class
AfterPutData
{
//>>` {"code": 0, "msg":"ok", "data":{"cutPackageTask":"0","urgentPackageTask":"20","cutTask":"21","urgentTask":"22"}} `
//>>
//>> - code: 0为正常,其他为异常,
//>> - msg:消息,
//>> - data:为包装料仓的空闲仓位数(key为与客户端一致的料仓标识, value为空闲仓位)
//>> - cutPackageTask: 表示当前包装仓的分盘任务数
//>> - urgentPackageTask: 表示当前包装仓的紧急料任务数
//>> - cutTask: 表示流水线分盘任务数
//>> - urgentTask: 表示流水线紧急料任务数
public
int
code
{
get
;
set
;
}
public
string
msg
{
get
;
set
;
}
public
TaskData
data
{
get
;
set
;
}
}
public
class
TaskData
{
/// <summary>
/// urgentPackageTask: 表示当前包装仓的紧急料任务数
/// </summary>
public
int
urgentPackageTask
{
get
;
set
;
}
/// <summary>
/// cutPackageTask: 表示当前包装仓的分盘任务数
/// </summary>
public
int
cutPackageTask
{
get
;
set
;
}
/// <summary>
/// cutTask: 表示流水线分盘任务数
/// </summary>
public
int
cutTask
{
get
;
set
;
}
/// <summary>
/// urgentTask: 表示流水线紧急料任务数
/// </summary>
public
int
urgentTask
{
get
;
set
;
}
}
public
class
ServerData
{
//{"code":0,"msg":"ok","data":"7"}
...
...
@@ -474,7 +608,15 @@ namespace OnlineStore.DeviceLibrary
public
ShelfData
data
{
get
;
set
;
}
}
public
class
RfidData
{
//{"code":0,"msg":"ok","data":"7"}
public
int
code
{
get
;
set
;
}
public
string
msg
{
get
;
set
;
}
public
Dictionary
<
string
,
string
>
data
{
get
;
set
;
}
}
public
class
ShelfData
{
/// <summary>
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论