Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
RC1250-AssemblyLine
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 3296b7e2
由
LN
编写于
2020-04-13 09:14:36 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
紧急料分盘料料架送出逻辑修改。
1 个父辈
8c01bce9
全部展开
显示空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
112 行增加
和
15 行删除
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
上料模块,RFID读取改为扫描模式,如果没有读到料架号,直接送出料架。
大盘>30mm的料入库时,托盘先不顶升,等待横移机构到达托盘上方后,升降下降,顶升上升。
...
...
source/DeviceLibrary/assemblyLine/FeedingEquip.cs
查看文件 @
3296b7e
...
...
@@ -718,7 +718,7 @@ namespace OnlineStore.DeviceLibrary
AgvClient
.
SetStatus
(
Config
.
AgvOutName
,
""
,
ClientAction
.
None
,
ClientLevel
.
High
,
true
);
});
ProcessShelfOut
=
false
;
LogUtil
.
info
(
logName
+
",停止转动, 结束"
);
LogUtil
.
info
(
logName
+
",停止转动,
清空料架["
+
LastOutShelfId
+
"],
结束"
);
}
else
{
...
...
source/DeviceLibrary/assemblyLine/FeedingEquip_OutStore.cs
查看文件 @
3296b7e
...
...
@@ -13,7 +13,9 @@ namespace OnlineStore.DeviceLibrary
#
region
出料流程
private
int
OutStoreHeight
=
-
1
;
private
int
OutStoreCount
=
-
1
;
private
ShelfData
serverShelfData
=
null
;
private
TaskData
taskData
=
null
;
private
InOutParam
LastOutParam
=
new
InOutParam
();
internal
bool
CanStartCheckOut
(
int
trayNum
)
{
preTrayNum
=
currTrayNum
;
...
...
@@ -48,7 +50,39 @@ namespace OnlineStore.DeviceLibrary
}
runStatus
=
LineRunStatus
.
Busy
;
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
);
LastOutParam
=
outParam
;
//可以开始出库啦
MoveInfo
.
NextMoveStep
(
LineMoveStep
.
FO_211_AxisDownMove
);
int
height
=
outParam
.
PlateH
+
4
;
...
...
@@ -116,7 +150,7 @@ namespace OnlineStore.DeviceLibrary
lineStatus
=
LineStatus
.
OutStoreExecute
;
MoveInfo
.
NewMove
(
LineMoveType
.
OutStore
);
MoveInfo
.
MoveParam
=
new
InOutParam
();
serverShelf
Data
=
null
;
task
Data
=
null
;
if
(
IOValue
(
IO_Type
.
SL_Location_Check
).
Equals
(
IO_VALUE
.
HIGH
))
{
FO_04_WaitTime
();
...
...
@@ -230,15 +264,33 @@ namespace OnlineStore.DeviceLibrary
if
(
CurrShelfId
.
EndsWith
(
"00"
))
{
SendOutShelfOut
(
"料架号【"
+
CurrShelfId
+
"】无效"
);
return
;
}
else
//判断是否是第一次获取料架,需要从服务器获取此料架的虚拟料架号,若无虚拟料架号,料架可以用
//有虚拟料架号,从服务器获取此料架剩余任务,若无任务,需要送出料架
if
(
LastOutParam
.
rfid
.
Equals
(
""
))
{
string
tempRfid
=
""
;
string
msg
=
SServerManager
.
findTempRfid
(
Name
,
CurrShelfId
,
out
tempRfid
);
if
(!
String
.
IsNullOrEmpty
(
msg
))
{
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
{
...
...
@@ -367,9 +419,10 @@ namespace OnlineStore.DeviceLibrary
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
FO_37_LineStop
))
{
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
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
300
));
LastOutParam
=
new
InOutParam
();
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
FO_38_TopDown
))
{
...
...
@@ -553,11 +606,11 @@ namespace OnlineStore.DeviceLibrary
UpdownAxis
.
AbsMove
(
MoveInfo
,
Config
.
UpDownAxisP1
,
Config
.
UpdownAxis_P1Speed
);
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
))
{
LogUtil
.
error
(
Name
+
"【"
+
MoveInfo
.
MoveParam
.
WareCode
+
"】【"
+
CurrShelfId
+
"】【"
+
OutStoreCount
.
ToString
()
+
"】
PutShelfFinished
结果:"
+
msg
);
serverShelf
Data
=
null
;
LogUtil
.
error
(
Name
+
"【"
+
MoveInfo
.
MoveParam
.
WareCode
+
"】【"
+
CurrShelfId
+
"】【"
+
OutStoreCount
.
ToString
()
+
"】
afterPutCut
结果:"
+
msg
);
task
Data
=
null
;
}
});
}
...
...
@@ -603,14 +656,22 @@ namespace OnlineStore.DeviceLibrary
}
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
{
OutLog
(
"
紧急
出料完成,出料结束"
);
OutLog
(
"出料完成,出料结束"
);
MoveEndS
();
}
}
...
...
source/DeviceLibrary/assemblymanager/SServerManager.cs
查看文件 @
3296b7e
此文件的差异被折叠,
点击展开。
source/DeviceLibrary/assemblymanager/TrayManager.cs
查看文件 @
3296b7e
...
...
@@ -77,7 +77,17 @@ namespace OnlineStore.DeviceLibrary
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
=
""
)
{
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论