Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
RC1250-ACPackingStore
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit d87f6ae7
由
LN
编写于
2020-03-12 22:37:23 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
出库料架切换修改
1 个父辈
50093b71
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
30 行增加
和
18 行删除
dll/CodeLibrary.dll
source/DeviceLibrary/ACPackingStore/AC_BOX_Bean_Partial.cs
source/DeviceLibrary/ACPackingStore/AC_BOX_Bean_Shelf.cs
source/DeviceLibrary/device/halcon/CodeManager.cs
dll/CodeLibrary.dll
查看文件 @
d87f6ae
此文件类型无法预览
source/DeviceLibrary/ACPackingStore/AC_BOX_Bean_Partial.cs
查看文件 @
d87f6ae
...
...
@@ -215,6 +215,7 @@ namespace OnlineStore.DeviceLibrary
private
int
LastWidth
=
0
;
private
int
LastHeight
=
0
;
private
string
CurrShelfID
=
""
;
private
string
LastRfidID
=
""
;
//服务器发送的出库rfid
#
region
入库
private
void
ClearLastTrayInfo
()
...
...
@@ -258,6 +259,7 @@ namespace OnlineStore.DeviceLibrary
InOutStoreLog
(
"料架取料:"
+
MoveInfo
.
SLog
+
" 叉子后退到待机点P1, 重置盘信息"
);
ACAxisMove
(
Config
.
InOut_Axis
,
Config
.
InOutAxis_P1_Position
,
Config
.
InOutAxis_P1_Speed
);
ClearLastTrayInfo
();
LastRfidID
=
""
;
}
...
...
@@ -313,8 +315,8 @@ namespace OnlineStore.DeviceLibrary
{
//读取RFID
RFIDData
data
=
RFIDManager
.
ReadRFID
(
Config
.
RFID_IP
,
true
);
LogUtil
.
info
(
Name
+
"更新当前料架号【"
+
data
.
NumStr
()
+
"】"
);
CurrShelfID
=
data
.
NumStr
();
LogUtil
.
info
(
Name
+
"更新当前料架号CurrShelfID=【"
+
CurrShelfID
+
"】,LastRfidID=【"
+
LastRfidID
+
"】"
);
}
private
void
StartMoveToBag
()
...
...
@@ -820,15 +822,16 @@ namespace OnlineStore.DeviceLibrary
if
(
IOValue
(
IO_Type
.
LineTake_Check
).
Equals
(
IO_VALUE
.
HIGH
))
{
if
(
IsRightShelfId
(
CurrShelfID
,
MoveInfo
.
MoveParam
.
realRfid
))
// if (IsRightShelfId(CurrShelfID, MoveInfo.MoveParam.realRfid))
if
(
MoveInfo
.
MoveParam
.
rfid
.
Equals
(
LastRfidID
))
{
LogUtil
.
error
(
"
入库,当前料架【"
+
CurrShelfID
+
"】和目标料架【"
+
MoveInfo
.
MoveParam
.
rfid
+
","
+
MoveInfo
.
MoveParam
.
realRfid
+
"】 是同一个
料架,开始取料"
);
LogUtil
.
error
(
"
出库 【"
+
LastRfidID
+
"】 【"
+
MoveInfo
.
MoveParam
.
rfid
+
","
+
MoveInfo
.
MoveParam
.
realRfid
+
"】 同
料架,开始取料"
);
SO_03_ToBagPosition
();
return
;
}
else
{
LogUtil
.
error
(
"
入库,当前料架【"
+
CurrShelfID
+
"】和目标料架【"
+
MoveInfo
.
MoveParam
.
rfid
+
","
+
MoveInfo
.
MoveParam
.
realRfid
+
"】不是同一个
料架,送出当前料架,稍后重新出库"
);
LogUtil
.
error
(
"
出库 【"
+
LastRfidID
+
"】 【"
+
MoveInfo
.
MoveParam
.
rfid
+
","
+
MoveInfo
.
MoveParam
.
realRfid
+
"】不同
料架,送出当前料架,稍后重新出库"
);
//送出料架,并且记录出库信息,等会重新出库
StartShelfOut
();
...
...
@@ -841,12 +844,12 @@ namespace OnlineStore.DeviceLibrary
else
if
(
IOValue
(
IO_Type
.
LineTake_Check
).
Equals
(
IO_VALUE
.
LOW
)
&&
(!
MoveInfo
.
MoveParam
.
rfid
.
Equals
(
""
)))
{
string
mark
=
GetMarkInfo
();
// string rfid = MoveInfo.MoveParam.rfid;
// string rfid = MoveInfo.MoveParam.rfid;
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_00_ReadyShelf
);
InOutStoreLog
(
"出库 "
+
MoveInfo
.
SLog
+
": 通知agv调度准备带料架的agv["
+
mark
+
"],等待agv到达或检测到料架信号,进出轴到P1"
);
InOutBackToP1
(
MoveInfo
.
MoveParam
.
MoveP
.
InOut_P1
);
//需要先叫agv到达
AgvClient
.
SetStatus
(
Config
.
AgvNodeName
,
mark
,
MoveInfo
.
MoveParam
.
rfid
,
ClientAction
.
NeedEnter
,
ClientLevel
.
High
,
true
);
AgvClient
.
SetStatus
(
Config
.
AgvNodeName
,
mark
,
MoveInfo
.
MoveParam
.
rfid
,
ClientAction
.
NeedEnter
,
ClientLevel
.
High
,
true
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitAgvAction
((
int
)
ClientAction
.
Arrive
));
}
else
...
...
@@ -931,7 +934,7 @@ namespace OnlineStore.DeviceLibrary
string
msg
=
StoreManager
.
PutShelfFinished
(
Name
,
MoveInfo
.
MoveParam
.
WareCode
,
CurrShelfID
,
posLoc
.
ToString
(),
out
serverShelfData
);
if
(
String
.
IsNullOrEmpty
(
msg
).
Equals
(
false
))
{
LogUtil
.
error
(
Name
+
"【"
+
MoveInfo
.
MoveParam
.
WareCode
+
"】【"
+
CurrShelfID
+
"】【"
+
posLoc
+
"】PutShelfFinished 结果:"
+
msg
);
LogUtil
.
error
(
Name
+
"【"
+
MoveInfo
.
MoveParam
.
WareCode
+
"】【"
+
CurrShelfID
+
"】【"
+
posLoc
+
"】
【"
+
LastRfidID
+
"】
PutShelfFinished 结果:"
+
msg
);
serverShelfData
=
null
;
}
}
...
...
@@ -941,7 +944,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
+
"】UpdateTrayLoc 结果:"
+
msg
);
LogUtil
.
error
(
Name
+
"【"
+
MoveInfo
.
MoveParam
.
WareCode
+
"】【"
+
CurrShelfID
+
"】【"
+
posLoc
+
"】
【"
+
LastRfidID
+
"】
UpdateTrayLoc 结果:"
+
msg
);
serverShelfData
=
null
;
}
if
(
newTaskCount
>
MoveInfo
.
MoveParam
.
taskCount
)
...
...
@@ -982,6 +985,7 @@ namespace OnlineStore.DeviceLibrary
// InOutStoreLog("出库完成,料架【" + CurrShelfID + "】没有剩余位置,送出料架");
// isNeedSend = true;
//}
string
logName
=
"【"
+
CurrShelfID
+
"】【"
+
LastRfidID
+
"】"
;
//只有rfid不为空才需要送出料架
if
(
String
.
IsNullOrEmpty
(
MoveInfo
.
MoveParam
.
rfid
))
{
...
...
@@ -992,18 +996,18 @@ namespace OnlineStore.DeviceLibrary
{
if
(
serverShelfData
.
packageEmpty
<=
0
)
{
InOutStoreLog
(
"出库完成,料架
【"
+
CurrShelfID
+
"】
没有位置,packageEmpty="
+
serverShelfData
.
packageEmpty
+
",送出料架"
);
InOutStoreLog
(
"出库完成,料架
"
+
logName
+
"
没有位置,packageEmpty="
+
serverShelfData
.
packageEmpty
+
",送出料架"
);
isNeedSend
=
true
;
}
else
if
((
serverShelfData
.
cutPackageTask
+
serverShelfData
.
packageTask
)
<=
0
)
{
InOutStoreLog
(
"出库完成,料架
【"
+
CurrShelfID
+
"】
没有出库任务,cutPackageTask="
+
serverShelfData
.
cutPackageTask
+
",packageTask="
+
serverShelfData
.
packageTask
+
",送出料架"
);
InOutStoreLog
(
"出库完成,料架
"
+
logName
+
"
没有出库任务,cutPackageTask="
+
serverShelfData
.
cutPackageTask
+
",packageTask="
+
serverShelfData
.
packageTask
+
",送出料架"
);
isNeedSend
=
true
;
}
}
else
if
(
MoveInfo
.
MoveParam
.
taskCount
<=
0
)
{
InOutStoreLog
(
"出库完成,料架
【"
+
CurrShelfID
+
"】
没有出库任务,taskCount="
+
MoveInfo
.
MoveParam
.
taskCount
+
" 送出料架"
);
InOutStoreLog
(
"出库完成,料架
"
+
logName
+
"
没有出库任务,taskCount="
+
MoveInfo
.
MoveParam
.
taskCount
+
" 送出料架"
);
isNeedSend
=
true
;
}
if
(
isNeedSend
)
...
...
@@ -1015,14 +1019,14 @@ namespace OnlineStore.DeviceLibrary
TimeSpan
span
=
DateTime
.
Now
-
startOutStoreTime
;
string
posId
=
MoveInfo
.
MoveParam
!=
null
?
MoveInfo
.
MoveParam
.
PosID
:
""
;
storeStatus
=
StoreStatus
.
StoreOnline
;
LogInfo
(
" 【"
+
posId
+
"】 整个出库流程结束,耗时【"
+
FormUtil
.
GetSpanStr
(
span
)
+
"】!"
);
LogInfo
(
" 【"
+
posId
+
"】
"
+
logName
+
"
整个出库流程结束,耗时【"
+
FormUtil
.
GetSpanStr
(
span
)
+
"】!"
);
MoveEndToRuningStatus
();
AutoInout
.
InOutEndProcess
(
this
,
StoreMoveType
.
OutStore
);
if
(!
String
.
IsNullOrEmpty
(
MoveInfo
.
MoveParam
.
rfid
))
{
if
(
StoreManager
.
Store
.
AutoShelfInstore
)
{
LogInfo
(
" 料架
【"
+
CurrShelfID
+
"】
还有出库任务,设置 AutoShelfInstore = false"
);
LogInfo
(
" 料架
"
+
logName
+
"
还有出库任务,设置 AutoShelfInstore = false"
);
ConfigAppSettings
.
SaveValue
(
Setting_Init
.
AutoShelfInstore
,
0
);
StoreManager
.
Store
.
AutoShelfInstore
=
false
;
}
...
...
source/DeviceLibrary/ACPackingStore/AC_BOX_Bean_Shelf.cs
查看文件 @
d87f6ae
...
...
@@ -107,12 +107,18 @@ namespace OnlineStore.DeviceLibrary
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
"线体停止转动,定位装置上升,读取料架编号,设置状态为None"
);
AgvClient
.
SetStatus
(
Config
.
AgvNodeName
);
// CylinderMove(MoveInfo, IO_Type.LocationCylinder_Down, IO_Type.LocationCylinder_Up);
UpdateShelfId
();
if
(!
instoreShelf
)
{
LastRfidID
=
MoveInfo
.
MoveParam
.
rfid
;
InOutStoreLog
(
"出库 "
+
MoveInfo
.
SLog
+
":叉子进入库位中, 进出轴至P3(库位取放料点) "
);
ACAxisMove
(
Config
.
InOut_Axis
,
MoveInfo
.
MoveParam
.
MoveP
.
InOut_P3
,
Config
.
InOutAxis_P3_Speed
);
}
else
{
LastRfidID
=
""
;
}
UpdateShelfId
();
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_08_LocationUp
))
{
...
...
@@ -344,6 +350,7 @@ namespace OnlineStore.DeviceLibrary
//EmprtShelfList = new ConcurrentQueue<string>();
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
":停止转动,送出料架结束 ,设置状态为None,清空当前料架:"
+
CurrShelfID
);
CurrShelfID
=
""
;
LastRfidID
=
""
;
AgvClient
.
SetStatus
(
Config
.
AgvNodeName
);
}
}
...
...
source/DeviceLibrary/device/halcon/CodeManager.cs
查看文件 @
d87f6ae
...
...
@@ -132,17 +132,18 @@ namespace OnlineStore.DeviceLibrary
{
continue
;
}
LogUtil
.
info
(
deviceName
+
" 【"
+
cameraName
+
"】开始打开相机获取图片"
);
DateTime
startTime
=
DateTime
.
Now
;
LogUtil
.
info
(
deviceName
+
" 【"
+
cameraName
+
"】开始取图片"
);
using
(
Bitmap
bitmap
=
GetCamerImage
(
cameraName
))
{
if
(
bitmap
==
null
)
{
LogUtil
.
error
(
deviceName
+
" 【"
+
cameraName
+
"】
获
取图片失败["
+
Camera
.
_cam
.
ErrInfo
+
"],关闭相机"
);
LogUtil
.
error
(
deviceName
+
" 【"
+
cameraName
+
"】取图片失败["
+
Camera
.
_cam
.
ErrInfo
+
"],关闭相机"
);
CloseCamera
(
cameraName
);
continue
;
}
LogUtil
.
info
(
deviceName
+
" 【"
+
cameraName
+
"】
获取图片完成,开始转换图片,
并扫码"
);
LogUtil
.
info
(
deviceName
+
" 【"
+
cameraName
+
"】
取图片完成,开始转换
并扫码"
);
System
.
Threading
.
Thread
.
Sleep
(
1
);
//转换托盘大概100-150ms,不打印日志
Bitmap
bit
=
new
Bitmap
(
bitmap
);
...
...
@@ -176,7 +177,7 @@ namespace OnlineStore.DeviceLibrary
{
SaveImageToFile
(
deviceName
,
cameraName
,
bit
);
}
LogUtil
.
info
(
deviceName
+
" 【"
+
cameraName
+
"】扫码完成:"
+
r
);
LogUtil
.
info
(
deviceName
+
" 【"
+
cameraName
+
"】扫码完成
【"
+
FormUtil
.
GetSpanStr
(
DateTime
.
Now
-
startTime
)
+
"】
:"
+
r
);
bit
.
Dispose
();
ho_Image
.
Dispose
();
bitmap
.
Dispose
();
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论