Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
RC1250-AssemblyLine
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 3296b7e2
由
LN
编写于
2020-04-13 09:14:36 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
紧急料分盘料料架送出逻辑修改。
1 个父辈
8c01bce9
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
349 行增加
和
110 行删除
source/AssemblyLineClient/记录.txt
source/DeviceLibrary/assemblyLine/FeedingEquip.cs
source/DeviceLibrary/assemblyLine/FeedingEquip_OutStore.cs
source/DeviceLibrary/assemblymanager/SServerManager.cs
source/DeviceLibrary/assemblymanager/TrayManager.cs
source/AssemblyLineClient/记录.txt
查看文件 @
3296b7e
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: 表示流水线紧急料任务数
分盘料/紧急料启动时获取料架的虚拟RFID调用
地址:
/rest/api/qisda/device/findTempRfid
参数:
rfid : RFID
返回:
{"code": 0, "msg":"ok", "data":{"tempRfid":""}}
code: 0为正常,其他为异常,
msg:消息,
data:
tempRfid: 表示当前料架(料串)对应的虚拟RFID
20200410
20200410
上料模块,RFID读取改为扫描模式,如果没有读到料架号,直接送出料架。
上料模块,RFID读取改为扫描模式,如果没有读到料架号,直接送出料架。
大盘>30mm的料入库时,托盘先不顶升,等待横移机构到达托盘上方后,升降下降,顶升上升。
大盘>30mm的料入库时,托盘先不顶升,等待横移机构到达托盘上方后,升降下降,顶升上升。
...
...
source/DeviceLibrary/assemblyLine/FeedingEquip.cs
查看文件 @
3296b7e
...
@@ -718,7 +718,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -718,7 +718,7 @@ namespace OnlineStore.DeviceLibrary
AgvClient
.
SetStatus
(
Config
.
AgvOutName
,
""
,
ClientAction
.
None
,
ClientLevel
.
High
,
true
);
AgvClient
.
SetStatus
(
Config
.
AgvOutName
,
""
,
ClientAction
.
None
,
ClientLevel
.
High
,
true
);
});
});
ProcessShelfOut
=
false
;
ProcessShelfOut
=
false
;
LogUtil
.
info
(
logName
+
",停止转动, 结束"
);
LogUtil
.
info
(
logName
+
",停止转动,
清空料架["
+
LastOutShelfId
+
"],
结束"
);
}
}
else
else
{
{
...
...
source/DeviceLibrary/assemblyLine/FeedingEquip_OutStore.cs
查看文件 @
3296b7e
...
@@ -13,7 +13,9 @@ namespace OnlineStore.DeviceLibrary
...
@@ -13,7 +13,9 @@ namespace OnlineStore.DeviceLibrary
#
region
出料流程
#
region
出料流程
private
int
OutStoreHeight
=
-
1
;
private
int
OutStoreHeight
=
-
1
;
private
int
OutStoreCount
=
-
1
;
private
int
OutStoreCount
=
-
1
;
private
ShelfData
serverShelfData
=
null
;
private
TaskData
taskData
=
null
;
private
InOutParam
LastOutParam
=
new
InOutParam
();
internal
bool
CanStartCheckOut
(
int
trayNum
)
internal
bool
CanStartCheckOut
(
int
trayNum
)
{
{
preTrayNum
=
currTrayNum
;
preTrayNum
=
currTrayNum
;
...
@@ -48,7 +50,39 @@ namespace OnlineStore.DeviceLibrary
...
@@ -48,7 +50,39 @@ namespace OnlineStore.DeviceLibrary
}
}
runStatus
=
LineRunStatus
.
Busy
;
runStatus
=
LineRunStatus
.
Busy
;
lineStatus
=
LineStatus
.
OutStoreExecute
;
lineStatus
=
LineStatus
.
OutStoreExecute
;
string
lastXuniRfid
=
LastOutParam
.
rfid
;
if
(
lastXuniRfid
.
Equals
(
""
)
||
lastXuniRfid
.
Equals
(
outParam
.
rfid
))
{
//如果虚拟料架号为空,或者虚拟料架号与当前一致才可以出库
}
else
{
//料架号不一致时,直接送出料架
//如果流水线还有次料架的任务,暂不送出
int
count
=
TrayManager
.
GetOutTaskByRfid
(
lastXuniRfid
);
if
(
count
<
0
)
{
LogUtil
.
info
(
Name
+
"出库"
+
outParam
.
ToStr
()
+
"失败,料架号不一致["
+
lastXuniRfid
+
"]["
+
outParam
.
rfid
+
"],当前料架暂时无任务,送出料架,托盘先离开"
);
TrayMoveOk
();
MoveInfo
.
NewMove
(
LineMoveType
.
OutStore
,
LastOutParam
);
SendOutShelfOut
(
"料架号["
+
lastXuniRfid
+
"]["
+
outParam
.
rfid
+
"]不一致"
);
return
false
;
}
else
{
LogUtil
.
info
(
Name
+
"出库"
+
outParam
.
ToStr
()
+
"失败,料架号不一致["
+
lastXuniRfid
+
"]["
+
outParam
.
rfid
+
"],当前料架还有【"
+
count
+
"】个任务,托盘先离开"
);
TrayMoveOk
();
return
false
;
}
}
MoveInfo
.
NewMove
(
LineMoveType
.
OutStore
,
outParam
);
MoveInfo
.
NewMove
(
LineMoveType
.
OutStore
,
outParam
);
LastOutParam
=
outParam
;
//可以开始出库啦
//可以开始出库啦
MoveInfo
.
NextMoveStep
(
LineMoveStep
.
FO_211_AxisDownMove
);
MoveInfo
.
NextMoveStep
(
LineMoveStep
.
FO_211_AxisDownMove
);
int
height
=
outParam
.
PlateH
+
4
;
int
height
=
outParam
.
PlateH
+
4
;
...
@@ -116,7 +150,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -116,7 +150,7 @@ namespace OnlineStore.DeviceLibrary
lineStatus
=
LineStatus
.
OutStoreExecute
;
lineStatus
=
LineStatus
.
OutStoreExecute
;
MoveInfo
.
NewMove
(
LineMoveType
.
OutStore
);
MoveInfo
.
NewMove
(
LineMoveType
.
OutStore
);
MoveInfo
.
MoveParam
=
new
InOutParam
();
MoveInfo
.
MoveParam
=
new
InOutParam
();
serverShelf
Data
=
null
;
task
Data
=
null
;
if
(
IOValue
(
IO_Type
.
SL_Location_Check
).
Equals
(
IO_VALUE
.
HIGH
))
if
(
IOValue
(
IO_Type
.
SL_Location_Check
).
Equals
(
IO_VALUE
.
HIGH
))
{
{
FO_04_WaitTime
();
FO_04_WaitTime
();
...
@@ -230,15 +264,33 @@ namespace OnlineStore.DeviceLibrary
...
@@ -230,15 +264,33 @@ namespace OnlineStore.DeviceLibrary
if
(
CurrShelfId
.
EndsWith
(
"00"
))
if
(
CurrShelfId
.
EndsWith
(
"00"
))
{
{
SendOutShelfOut
(
"料架号【"
+
CurrShelfId
+
"】无效"
);
SendOutShelfOut
(
"料架号【"
+
CurrShelfId
+
"】无效"
);
return
;
}
}
else
//判断是否是第一次获取料架,需要从服务器获取此料架的虚拟料架号,若无虚拟料架号,料架可以用
//有虚拟料架号,从服务器获取此料架剩余任务,若无任务,需要送出料架
if
(
LastOutParam
.
rfid
.
Equals
(
""
))
{
{
//定位工位有料架,直接开始入料
string
tempRfid
=
""
;
MoveInfo
.
NextMoveStep
(
LineMoveStep
.
FO_05_LocationUp
);
string
msg
=
SServerManager
.
findTempRfid
(
Name
,
CurrShelfId
,
out
tempRfid
);
OutLog
(
"定位工位检测到料架: "
+
MoveInfo
.
SLog
+
" 缓冲阻挡下降, 定位气缸上升,读取料架号"
);
if
(!
String
.
IsNullOrEmpty
(
msg
))
IOMove
(
IO_Type
.
SL_Buffer_StopDown
,
IO_VALUE
.
LOW
);
//缓冲阻挡下降
{
CylinderMove
(
MoveInfo
,
IO_Type
.
SL_LocationCylinder_Down
,
IO_Type
.
SW4_LocationCylinder_Up
);
LogUtil
.
error
(
Name
+
"findTempRfid 【"
+
CurrShelfId
+
"】【"
+
tempRfid
+
"】结果:"
+
msg
);
}
if
(!
String
.
IsNullOrEmpty
(
tempRfid
))
{
//如果虚拟料架号存在,直接送出料架
SendOutShelfOut
(
"料架【"
+
CurrShelfId
+
"】【"
+
tempRfid
+
"】已绑定,不再使用"
);
return
;
}
}
}
//定位工位有料架,直接开始入料
MoveInfo
.
NextMoveStep
(
LineMoveStep
.
FO_05_LocationUp
);
OutLog
(
"定位工位检测到料架: "
+
MoveInfo
.
SLog
+
" 缓冲阻挡下降, 定位气缸上升,读取料架号"
);
IOMove
(
IO_Type
.
SL_Buffer_StopDown
,
IO_VALUE
.
LOW
);
//缓冲阻挡下降
CylinderMove
(
MoveInfo
,
IO_Type
.
SL_LocationCylinder_Down
,
IO_Type
.
SW4_LocationCylinder_Up
);
}
}
else
else
{
{
...
@@ -326,7 +378,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -326,7 +378,7 @@ namespace OnlineStore.DeviceLibrary
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
FO_32_BatchAxisToP1
))
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
FO_32_BatchAxisToP1
))
{
{
MoveInfo
.
NextMoveStep
(
LineMoveStep
.
FO_34_OutCheck
);
MoveInfo
.
NextMoveStep
(
LineMoveStep
.
FO_34_OutCheck
);
OutLog
(
"送出料串: "
+
MoveInfo
.
SLog
+
",等待出料线体无料架"
);
OutLog
(
"送出料串: "
+
MoveInfo
.
SLog
+
",等待出料线体无料架"
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
SL_Out_Check
,
IO_VALUE
.
LOW
));
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
SL_Out_Check
,
IO_VALUE
.
LOW
));
}
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
FO_34_OutCheck
))
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
FO_34_OutCheck
))
...
@@ -367,9 +419,10 @@ namespace OnlineStore.DeviceLibrary
...
@@ -367,9 +419,10 @@ namespace OnlineStore.DeviceLibrary
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
FO_37_LineStop
))
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
FO_37_LineStop
))
{
{
MoveInfo
.
NextMoveStep
(
LineMoveStep
.
FO_38_TopDown
);
MoveInfo
.
NextMoveStep
(
LineMoveStep
.
FO_38_TopDown
);
OutLog
(
"送出料串: "
+
MoveInfo
.
SLog
+
", 料架到达出口,出口顶升下降 , "
);
OutLog
(
"送出料串: "
+
MoveInfo
.
SLog
+
", 料架到达出口,出口顶升下降 ,
清空LastOutParam
"
);
CylinderMove
(
MoveInfo
,
IO_Type
.
SL_OutTopCylinder_Up
,
IO_Type
.
SL_OutTopCylinder_Down
);
CylinderMove
(
MoveInfo
,
IO_Type
.
SL_OutTopCylinder_Up
,
IO_Type
.
SL_OutTopCylinder_Down
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
300
));
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
300
));
LastOutParam
=
new
InOutParam
();
}
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
FO_38_TopDown
))
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
FO_38_TopDown
))
{
{
...
@@ -553,11 +606,11 @@ namespace OnlineStore.DeviceLibrary
...
@@ -553,11 +606,11 @@ namespace OnlineStore.DeviceLibrary
UpdownAxis
.
AbsMove
(
MoveInfo
,
Config
.
UpDownAxisP1
,
Config
.
UpdownAxis_P1Speed
);
UpdownAxis
.
AbsMove
(
MoveInfo
,
Config
.
UpDownAxisP1
,
Config
.
UpdownAxis_P1Speed
);
Task
.
Factory
.
StartNew
(
delegate
Task
.
Factory
.
StartNew
(
delegate
{
{
string
msg
=
SServerManager
.
PutShelfFinished
(
Name
,
MoveInfo
.
MoveParam
.
WareCode
,
CurrShelfId
,
OutStoreCount
.
ToString
(),
out
serverShelf
Data
);
string
msg
=
SServerManager
.
afterPutCut
(
Name
,
CurrShelfId
,
MoveInfo
.
MoveParam
.
WareCode
,
""
,
OutStoreCount
,
out
task
Data
);
if
(
String
.
IsNullOrEmpty
(
msg
).
Equals
(
false
))
if
(
String
.
IsNullOrEmpty
(
msg
).
Equals
(
false
))
{
{
LogUtil
.
error
(
Name
+
"【"
+
MoveInfo
.
MoveParam
.
WareCode
+
"】【"
+
CurrShelfId
+
"】【"
+
OutStoreCount
.
ToString
()
+
"】
PutShelfFinished
结果:"
+
msg
);
LogUtil
.
error
(
Name
+
"【"
+
MoveInfo
.
MoveParam
.
WareCode
+
"】【"
+
CurrShelfId
+
"】【"
+
OutStoreCount
.
ToString
()
+
"】
afterPutCut
结果:"
+
msg
);
serverShelf
Data
=
null
;
task
Data
=
null
;
}
}
});
});
}
}
...
@@ -603,14 +656,22 @@ namespace OnlineStore.DeviceLibrary
...
@@ -603,14 +656,22 @@ namespace OnlineStore.DeviceLibrary
}
}
else
else
{
{
//判断是否需要送出料架
//判断是否需要送出料架'
if
(
serverShelfData
!=
null
&&
serverShelfData
.
cutTask
<=
0
)
if
(
taskData
==
null
)
{
SendOutShelfOut
(
"出料结束,taskData=null,需要送出料架"
);
}
else
if
(
MoveInfo
.
MoveParam
.
cutReel
&&
taskData
.
cutTask
<=
0
)
{
SendOutShelfOut
(
"分盘料,cutTask="
+
taskData
.
cutTask
+
",需要送出料架"
);
}
else
if
(
MoveInfo
.
MoveParam
.
urgentReel
&&
taskData
.
urgentTask
<=
0
)
{
{
SendOutShelfOut
(
"
服务器返回cutTask="
+
serverShelfData
.
cu
tTask
+
",需要送出料架"
);
SendOutShelfOut
(
"
紧急料,urgentTask="
+
taskData
.
urgen
tTask
+
",需要送出料架"
);
}
}
else
else
{
{
OutLog
(
"
紧急
出料完成,出料结束"
);
OutLog
(
"出料完成,出料结束"
);
MoveEndS
();
MoveEndS
();
}
}
}
}
...
...
source/DeviceLibrary/assemblymanager/SServerManager.cs
查看文件 @
3296b7e
...
@@ -271,48 +271,48 @@ namespace OnlineStore.DeviceLibrary
...
@@ -271,48 +271,48 @@ namespace OnlineStore.DeviceLibrary
}
}
public
static
string
PutShelfFinished
(
string
deviceName
,
string
barcode
,
string
rfid
,
string
rfidPosId
,
out
ShelfData
shelfData
)
//
public static string PutShelfFinished(string deviceName, string barcode, string rfid, string rfidPosId, out ShelfData shelfData)
{
//
{
string
msg
=
""
;
//
string msg = "";
shelfData
=
null
;
//
shelfData = null;
try
//
try
{
//
{
Dictionary
<
string
,
string
>
paramMap
=
new
Dictionary
<
string
,
string
>();
//
Dictionary<string, string> paramMap = new Dictionary<string, string>();
paramMap
.
Add
(
"barcode"
,
barcode
);
// 参数: barcode=料盘的条码
//
paramMap.Add("barcode", barcode); // 参数: barcode=料盘的条码
paramMap
.
Add
(
"rfid"
,
rfid
);
// rfid = 料架的RFID信息
//
paramMap.Add("rfid", rfid); // rfid = 料架的RFID信息
paramMap
.
Add
(
"rfidLoc"
,
rfidPosId
);
// rfidLoc=料架的架位信息
//
paramMap.Add("rfidLoc", rfidPosId); // rfidLoc=料架的架位信息
// paramMap.Add("robotIndex", "0"); // robotIndex = r机器人编号(非机器人放置时不传此参数), IP为51的机器人为1, 52的机器人为2, 53的机器人为3
//
// paramMap.Add("robotIndex", "0"); // robotIndex = r机器人编号(非机器人放置时不传此参数), IP为51的机器人为1, 52的机器人为2, 53的机器人为3
string
server
=
GetAddr
(
Addr_putShelfFinished
,
paramMap
);
//
string server = GetAddr(Addr_putShelfFinished, paramMap);
DateTime
startTime
=
DateTime
.
Now
;
//
DateTime startTime = DateTime.Now;
string
resultStr
=
HttpHelper
.
Post
(
server
,
""
);
//
string resultStr = HttpHelper.Post(server, "");
LogUtil
.
info
(
"PutShelfFinished "
+
FormUtil
.
GetSpanStr
(
DateTime
.
Now
-
startTime
)
+
" 【"
+
server
+
"】【"
+
resultStr
+
"】"
);
//
LogUtil.info("PutShelfFinished " + FormUtil.GetSpanStr(DateTime.Now - startTime) + " 【" + 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}
//
// 返回: {"code": 0, "msg":"ok", "data":{"rfid":"xxx","smallEmpty":0,"bigEmpty":0, "packageEmpty":0,"cutPackageTask":0,"packageTask":10,"cutTask":10, "smallTask":5, "bigTask":5}
PutFinishedData
serverResult
=
JsonHelper
.
DeserializeJsonToObject
<
PutFinishedData
>(
resultStr
);
//
PutFinishedData serverResult = JsonHelper.DeserializeJsonToObject<PutFinishedData>(resultStr);
// string str = "{"code":0,"msg":"ok","data":{"smallTask":"1","cutPackageTask":"0","packageTask":"0","bigTask":"0","smallEmpty":"0","bigEmpty":"0","packageEmpty":"0","rfid":" - 1 - 1","cutTask":"0"}}";
//
// string str = "{"code":0,"msg":"ok","data":{"smallTask":"1","cutPackageTask":"0","packageTask":"0","bigTask":"0","smallEmpty":"0","bigEmpty":"0","packageEmpty":"0","rfid":" - 1 - 1","cutTask":"0"}}";
//PutShelfFinished 【http://localhost/myproject/rest/api/qisda/device/putShelfFinished?barcode=R008062019120301889&rfid=-1-1&rfidLoc=4】
//
//PutShelfFinished 【http://localhost/myproject/rest/api/qisda/device/putShelfFinished?barcode=R008062019120301889&rfid=-1-1&rfidLoc=4】
//【{"code":0,"msg":"ok","data":{"smallTask":"1","cutPackageTask":"0","packageTask":"0","bigTask":"0","smallEmpty":"0","bigEmpty":"0","packageEmpty":"0","rfid":"-1-1","cutTask":"0"}}】
//
//【{"code":0,"msg":"ok","data":{"smallTask":"1","cutPackageTask":"0","packageTask":"0","bigTask":"0","smallEmpty":"0","bigEmpty":"0","packageEmpty":"0","rfid":"-1-1","cutTask":"0"}}】
if
(
serverResult
==
null
)
//
if (serverResult == null)
{
//
{
return
msg
=
deviceName
+
"PutShelfFinished【 "
+
barcode
+
"】【"
+
rfid
+
"】【"
+
rfidPosId
+
"】没有收到服务器反馈"
;
//
return msg = deviceName + "PutShelfFinished【 " + barcode + "】【" + rfid + "】【" + rfidPosId + "】没有收到服务器反馈";
}
//
}
else
if
(
serverResult
.
code
.
Equals
(
0
).
Equals
(
false
))
//
else if (serverResult.code.Equals(0).Equals(false))
{
//
{
return
msg
=
deviceName
+
" PutShelfFinished【 "
+
barcode
+
"】【"
+
rfid
+
"】【"
+
rfidPosId
+
"】 :"
+
serverResult
.
msg
;
//
return msg = deviceName + " PutShelfFinished【 " + barcode + "】【" + rfid + "】【" + rfidPosId + "】 :" + serverResult.msg;
}
//
}
//if (String.IsNullOrEmpty(serverResult.data).Equals(false))
//
//if (String.IsNullOrEmpty(serverResult.data).Equals(false))
//{
//
//{
// shelfData = JsonHelper.DeserializeJsonToObject<ShelfData>(serverResult.data);
//
// shelfData = JsonHelper.DeserializeJsonToObject<ShelfData>(serverResult.data);
//}
//
//}
shelfData
=
serverResult
.
data
;
//
shelfData = serverResult.data;
}
//
}
catch
(
Exception
ex
)
//
catch (Exception ex)
{
//
{
LogUtil
.
error
(
deviceName
+
" "
,
ex
);
//
LogUtil.error(deviceName + " ", ex);
}
//
}
return
""
;
//
return "";
}
//
}
private
static
string
Addr_clearPutInRfid
=
"/service/store/qisda/clearPutInRfid"
;
private
static
string
Addr_clearPutInRfid
=
"/service/store/qisda/clearPutInRfid"
;
public
static
string
clearPutInRfid
(
string
deviceName
,
string
rfid
)
public
static
string
clearPutInRfid
(
string
deviceName
,
string
rfid
)
{
{
...
@@ -351,7 +351,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -351,7 +351,7 @@ namespace OnlineStore.DeviceLibrary
//> 返回:
//> 返回:
//>>``
//>>``
private
static
string
Addr_arriveRobotLocation
=
"/rest/api/qisda/device/arriveRobotLocation"
;
private
static
string
Addr_arriveRobotLocation
=
"/rest/api/qisda/device/arriveRobotLocation"
;
public
static
string
arriveRobotLocation
(
string
deviceName
,
int
robotIndex
,
string
barcode
)
public
static
string
arriveRobotLocation
(
string
deviceName
,
int
robotIndex
,
string
barcode
)
{
{
string
msg
=
""
;
string
msg
=
""
;
try
try
...
@@ -360,7 +360,6 @@ namespace OnlineStore.DeviceLibrary
...
@@ -360,7 +360,6 @@ namespace OnlineStore.DeviceLibrary
{
{
return
msg
;
return
msg
;
}
}
DateTime
startTime
=
DateTime
.
Now
;
DateTime
startTime
=
DateTime
.
Now
;
Dictionary
<
string
,
string
>
paramMap
=
new
Dictionary
<
string
,
string
>();
Dictionary
<
string
,
string
>
paramMap
=
new
Dictionary
<
string
,
string
>();
paramMap
.
Add
(
"robotIndex"
,
robotIndex
.
ToString
());
//rfid
paramMap
.
Add
(
"robotIndex"
,
robotIndex
.
ToString
());
//rfid
...
@@ -368,7 +367,106 @@ namespace OnlineStore.DeviceLibrary
...
@@ -368,7 +367,106 @@ namespace OnlineStore.DeviceLibrary
string
server
=
GetAddr
(
Addr_arriveRobotLocation
,
paramMap
);
string
server
=
GetAddr
(
Addr_arriveRobotLocation
,
paramMap
);
string
resultStr
=
HttpHelper
.
Post
(
server
,
""
);
string
resultStr
=
HttpHelper
.
Post
(
server
,
""
);
LogUtil
.
info
(
deviceName
+
"arriveRobotLocation "
+
FormUtil
.
GetSpanStr
(
DateTime
.
Now
-
startTime
)
+
" 【"
+
server
+
"】【"
+
resultStr
+
"】"
);
LogUtil
.
info
(
deviceName
+
"arriveRobotLocation "
+
FormUtil
.
GetSpanStr
(
DateTime
.
Now
-
startTime
)
+
" 【"
+
server
+
"】【"
+
resultStr
+
"】"
);
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
deviceName
+
" "
+
ex
.
ToString
());
}
return
msg
;
}
// 分盘料/紧急料放上料串或料架时调用 /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
)
catch
(
Exception
ex
)
{
{
...
@@ -376,6 +474,16 @@ namespace OnlineStore.DeviceLibrary
...
@@ -376,6 +474,16 @@ namespace OnlineStore.DeviceLibrary
}
}
return
msg
;
return
msg
;
}
}
}
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
LocStatus
public
class
LocStatus
{
{
...
@@ -394,72 +502,106 @@ namespace OnlineStore.DeviceLibrary
...
@@ -394,72 +502,106 @@ namespace OnlineStore.DeviceLibrary
}
}
public
class
ServerData
public
class
ServerData
{
{
//{"code":0,"msg":"ok","data":"7"}
//{"code":0,"msg":"ok","data":"7"}
//返回: {"code": 0, "msg":"ok", "data":{"rfid":"xxx","smallEmpty":0,"bigEmpty":0, "packageEmpty":0,"cutPackageTask":0,"packageTask":10,"cutTask":10, "smallTask":5, "bigTask":5}
public
int
code
{
get
;
set
;
}
public
int
code
{
get
;
set
;
}
public
string
msg
{
get
;
set
;
}
public
string
msg
{
get
;
set
;
}
public
string
data
{
get
;
set
;
}
public
string
data
{
get
;
set
;
}
//PutShelfFinished 【http://localhost/myproject/rest/api/qisda/device/putShelfFinished?barcode=R008062019120301889&rfid=-1-1&rfidLoc=4】
//【{"code":0,"msg":"ok","data":{"smallTask":"1","cutPackageTask":"0","packageTask":"0","bigTask":"0","smallEmpty":"0","bigEmpty":"0","packageEmpty":"0","rfid":"-1-1","cutTask":"0"}}】
}
}
public
class
PutFinished
Data
public
class
AfterPut
Data
{
{
//>>` {"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
int
code
{
get
;
set
;
}
public
string
msg
{
get
;
set
;
}
public
string
msg
{
get
;
set
;
}
public
Shelf
Data
data
{
get
;
set
;
}
public
Task
Data
data
{
get
;
set
;
}
}
}
public
class
ShelfData
public
class
TaskData
{
{
/// <summary>
/// <summary>
///
rfid: 当前料架的RFID
///
urgentPackageTask: 表示当前包装仓的紧急料任务数
/// </summary>
/// </summary>
public
string
rfid
{
get
;
set
;
}
public
int
urgentPackageTask
{
get
;
set
;
}
/// <summary>
/// <summary>
/// packageEmpty: 当前料架还可放置的包装料的数量(C料架和A料架有值, 其他料架为0)
/// cutPackageTask: 表示当前包装仓的分盘任务数
/// </summary>
public
int
packageEmpty
{
get
;
set
;
}
/// <summary>
/// smallEmpty: 当前料架还可放置的小料盘(7x8)的数量(D料架, 其他料架为0)
/// </summary>
public
int
smallEmpty
{
get
;
set
;
}
/// <summary>
/// bigEmpty:当前料架还可放置的大料盘的数量(C料架, 其他料架为0)
/// </summary>
public
int
bigEmpty
{
get
;
set
;
}
/// <summary>
/// cutPackageTask:还有多少盘分盘的包装料任务(放到A料架上, 转运到分盘区)
/// </summary>
/// </summary>
public
int
cutPackageTask
{
get
;
set
;
}
public
int
cutPackageTask
{
get
;
set
;
}
/// <summary>
/// <summary>
/// packageTask:还有多少盘包装料任务(放到A料架上, 并转运到包装线, 最终到C料架)
/// cutTask: 表示流水线分盘任务数
/// </summary>
public
int
packageTask
{
get
;
set
;
}
/// <summary>
/// cutTask: 还有多少盘分盘料任务(放置到料串B上, 转运到分盘区)
/// </summary>
/// </summary>
public
int
cutTask
{
get
;
set
;
}
public
int
cutTask
{
get
;
set
;
}
/// <summary>
/// <summary>
/// smallTask: 还有多少盘小料任务(放置到双层线的D料架上)
/// urgentTask: 表示流水线紧急料任务数
/// </summary>
public
int
smallTask
{
get
;
set
;
}
/// <summary>
/// bigTask: 还有多少盘大料任务(放置到C料架上)
/// </summary>
/// </summary>
public
int
bigTask
{
get
;
set
;
}
public
int
urgentTask
{
get
;
set
;
}
// rfid: 当前料架的RFID
// packageEmpty: 当前料架还可放置的包装料的数量(C料架和A料架有值, 其他料架为0)
// smallEmpty: 当前料架还可放置的小料盘(7x8)的数量(D料架, 其他料架为0)
// bigEmpty:当前料架还可放置的大料盘的数量(C料架, 其他料架为0)
// cutPackageTask:还有多少盘分盘的包装料任务(放到A料架上, 转运到分盘区)
// packageTask:还有多少盘包装料任务(放到A料架上, 并转运到包装线, 最终到C料架)
// cutTask: 还有多少盘分盘料任务(放置到料串B上, 转运到分盘区)
// smallTask: 还有多少盘小料任务(放置到双层线的D料架上)
// bigTask: 还有多少盘大料任务(放置到C料架上)
}
}
}
}
//public class PutFinishedData
//{
// public int code { get; set; }
// public string msg { get; set; }
// public ShelfData data { get; set; }
//}
//public class ShelfData
//{
// /// <summary>
// /// rfid: 当前料架的RFID
// /// </summary>
// public string rfid { get; set; }
// /// <summary>
// /// packageEmpty: 当前料架还可放置的包装料的数量(C料架和A料架有值, 其他料架为0)
// /// </summary>
// public int packageEmpty { get; set; }
// /// <summary>
// /// smallEmpty: 当前料架还可放置的小料盘(7x8)的数量(D料架, 其他料架为0)
// /// </summary>
// public int smallEmpty { get; set; }
// /// <summary>
// /// bigEmpty:当前料架还可放置的大料盘的数量(C料架, 其他料架为0)
// /// </summary>
// public int bigEmpty { get; set; }
// /// <summary>
// /// cutPackageTask:还有多少盘分盘的包装料任务(放到A料架上, 转运到分盘区)
// /// </summary>
// public int cutPackageTask { get; set; }
// /// <summary>
// /// packageTask:还有多少盘包装料任务(放到A料架上, 并转运到包装线, 最终到C料架)
// /// </summary>
// public int packageTask { get; set; }
// /// <summary>
// /// cutTask: 还有多少盘分盘料任务(放置到料串B上, 转运到分盘区)
// /// </summary>
// public int cutTask { get; set; }
// /// <summary>
// /// smallTask: 还有多少盘小料任务(放置到双层线的D料架上)
// /// </summary>
// public int smallTask { get; set; }
// /// <summary>
// /// bigTask: 还有多少盘大料任务(放置到C料架上)
// /// </summary>
// public int bigTask { get; set; }
// // rfid: 当前料架的RFID
// // packageEmpty: 当前料架还可放置的包装料的数量(C料架和A料架有值, 其他料架为0)
// // smallEmpty: 当前料架还可放置的小料盘(7x8)的数量(D料架, 其他料架为0)
// // bigEmpty:当前料架还可放置的大料盘的数量(C料架, 其他料架为0)
// // cutPackageTask:还有多少盘分盘的包装料任务(放到A料架上, 转运到分盘区)
// // packageTask:还有多少盘包装料任务(放到A料架上, 并转运到包装线, 最终到C料架)
// // cutTask: 还有多少盘分盘料任务(放置到料串B上, 转运到分盘区)
// // smallTask: 还有多少盘小料任务(放置到双层线的D料架上)
// // bigTask: 还有多少盘大料任务(放置到C料架上)
//}
source/DeviceLibrary/assemblymanager/TrayManager.cs
查看文件 @
3296b7e
...
@@ -77,7 +77,17 @@ namespace OnlineStore.DeviceLibrary
...
@@ -77,7 +77,17 @@ namespace OnlineStore.DeviceLibrary
return
tray
;
return
tray
;
}
}
/// <summary>
/// 获取已在托盘的,指定虚拟料架号剩余任务
/// </summary>
/// <param name="lastXuniRfid"></param>
/// <returns></returns>
internal
static
int
GetOutTaskByRfid
(
string
lastXuniRfid
)
{
List
<
TrayInfo
>
alltray
=
new
List
<
TrayInfo
>(
TrayInfoMap
.
Values
);
int
count
=
(
from
m
in
alltray
where
m
.
IsFull
&&
m
.
InOrOutStore
.
Equals
(
2
)
&&
m
.
InoutPar
.
rfid
.
Equals
(
lastXuniRfid
)
select
m
).
Count
();
return
count
;
}
public
static
void
UpdateTrayInfo
(
int
trayNum
,
bool
isFull
=
false
,
int
inOrOut
=
0
,
InOutParam
param
=
null
,
string
ngMsg
=
""
)
public
static
void
UpdateTrayInfo
(
int
trayNum
,
bool
isFull
=
false
,
int
inOrOut
=
0
,
InOutParam
param
=
null
,
string
ngMsg
=
""
)
{
{
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论