Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
RC1250-ACPackingStore
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 4b8e2868
由
张东亮
编写于
2023-04-06 10:28:49 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
添加空包装料架检测
1 个父辈
992e9594
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
96 行增加
和
68 行删除
source/DeviceLibrary/PackingStore/AC_BOX_Bean_InStore.cs
source/DeviceLibrary/PackingStore/AC_BOX_Bean_Partial.cs
source/DeviceLibrary/PackingStore/AC_BOX_Bean_Shelf.cs
source/DeviceLibrary/PackingStore/PackingStoreBean.cs
source/DeviceLibrary/PackingStore/StoreManager.cs
source/DeviceLibrary/StoreConfig/BoxConfig_1.csv
source/DeviceLibrary/StoreConfig/BoxConfig_2.csv
source/LoadCVSLibrary/storeConfig/config/IO_Type.cs
source/DeviceLibrary/PackingStore/AC_BOX_Bean_InStore.cs
查看文件 @
4b8e286
...
...
@@ -182,7 +182,12 @@ namespace OnlineStore.DeviceLibrary
}
else
{
if
(
MoveInfo
.
NextShelfPos
())
if
(
CheckShelfIsEmpty
())
{
InOutStoreLog
(
"检测到料架为空,送出料架"
);
StartShelfOut
();
}
else
if
(
MoveInfo
.
NextShelfPos
())
{
//新的料架库位
startInStoreTime
=
DateTime
.
Now
;
...
...
@@ -195,6 +200,7 @@ namespace OnlineStore.DeviceLibrary
else
{
//所有料盘已取料完成,送出料架
InOutStoreLog
(
"所有料盘已取料完成,送出料架"
);
StartShelfOut
();
}
}
...
...
source/DeviceLibrary/PackingStore/AC_BOX_Bean_Partial.cs
查看文件 @
4b8e286
...
...
@@ -45,6 +45,14 @@ namespace OnlineStore.DeviceLibrary
return
storeRunStatus
.
Equals
(
StoreRunStatus
.
Runing
)
&&
(
MoveInfo
?.
MoveType
.
Equals
(
StoreMoveType
.
None
)
??
false
);
}
/// <summary>
/// 检查料架是否是空料架
/// </summary>
/// <returns></returns>
bool
CheckShelfIsEmpty
()
{
return
IOValue
(
IO_Type
.
EmptyShelf_Check
).
Equals
(
IO_VALUE
.
HIGH
);
}
/// <summary>
/// 获取料架备注
/// 包含料信息
/// </summary>
...
...
source/DeviceLibrary/PackingStore/AC_BOX_Bean_Shelf.cs
查看文件 @
4b8e286
...
...
@@ -184,35 +184,44 @@ namespace OnlineStore.DeviceLibrary
{
if
(
instoreShelf
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_10_StartGetTray
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
((
int
)
TimeSpan
.
FromMinutes
(
75
).
TotalMilliseconds
));
//获取料架的锁定状态
bool
lockState
=
StoreManager
.
GetShelfLockInfo
(
Name
,
CID
,
CurrShelfID
,
out
MoveInfo
.
shelfLockDatas
);
if
(
lockState
&&
MoveInfo
.
shelfLockDatas
!=
null
)
if
(
CheckShelfIsEmpty
())
//空料架
{
MoveInfo
.
IsShelfLocked
=
true
;
if
(
MoveInfo
.
shelfLockDatas
.
Count
.
Equals
(
0
))
LogRunStepInfo
(
moveName
+
"该锁定料架上的料盘不属于该料仓,即将送出锁定料架"
);
else
LogRunStepInfo
(
moveName
+
"开始到料架指定位置取料盘 "
);
LogRunStepInfo
(
moveName
+
"检测到料架为空料架,不进行入库,即将送出料架"
);
StartShelfOut
();
}
else
{
MoveInfo
.
IsShelfLocked
=
false
;
LogRunStepInfo
(
moveName
+
"开始循环料架取料盘 "
);
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_10_StartGetTray
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
((
int
)
TimeSpan
.
FromMinutes
(
75
).
TotalMilliseconds
));
//获取料架的锁定状态
bool
lockState
=
StoreManager
.
GetShelfLockInfo
(
Name
,
CID
,
CurrShelfID
,
out
MoveInfo
.
shelfLockDatas
);
if
(
lockState
&&
MoveInfo
.
shelfLockDatas
!=
null
)
{
MoveInfo
.
IsShelfLocked
=
true
;
if
(
MoveInfo
.
shelfLockDatas
.
Count
.
Equals
(
0
))
LogRunStepInfo
(
moveName
+
"该锁定料架上的料盘不属于该料仓,即将送出锁定料架"
);
else
LogRunStepInfo
(
moveName
+
"开始到料架指定位置取料盘 "
);
}
else
{
MoveInfo
.
IsShelfLocked
=
false
;
LogRunStepInfo
(
moveName
+
"开始循环料架取料盘 "
);
}
MoveInfo
.
EndStepWait
();
}
MoveInfo
.
EndStepWait
();
}
else
{
//if (string.IsNullOrEmpty(StoreManager.FindRealRfidByTempRfid(MoveInfo.MoveParam.rfid)))
//{
// //新料架,检查料架上是否有治具
// MoveInfo.NextMoveStep(StoreMoveStep.SO_PreCheck_01_StartGetTray);
//}
//else
if
(
string
.
IsNullOrEmpty
(
StoreManager
.
FindRealRfidByTempRfid
(
MoveInfo
.
MoveParam
.
rfid
))
&&
!
CheckShelfIsEmpty
())
//还未出库的料架检查是否是空料架
{
LogRunStepInfo
(
moveName
+
"未使用的出库料架检测到料架不为空,即将送出料架"
);
StartShelfOut
();
}
else
{
SO_03_ToBagPosition
();
}
...
...
source/DeviceLibrary/PackingStore/PackingStoreBean.cs
查看文件 @
4b8e286
...
...
@@ -18,7 +18,7 @@ namespace OnlineStore.DeviceLibrary
/// 流水线自动料仓-流水线类
/// </summary>
public
partial
class
PackingStoreBean
:
KTK_Store
{
{
/// <summary>
/// 灯闪烁定时器
/// </summary>
...
...
@@ -27,7 +27,7 @@ namespace OnlineStore.DeviceLibrary
public
Dictionary
<
int
,
AC_BOX_Config
>
BoxConfigMap
{
get
;
set
;
}
public
Dictionary
<
int
,
AC_BOX_Bean
>
BoxMap
=
new
Dictionary
<
int
,
AC_BOX_Bean
>();
public
Store_Config
Config
{
get
;
set
;
}
public
bool
UseBuzzer
=
Setting_Init
.
UseBuzzer
;
/// <summary>
...
...
@@ -51,14 +51,14 @@ namespace OnlineStore.DeviceLibrary
baseConfig
=
lineConfig
;
this
.
Config
=
lineConfig
;
this
.
DeviceID
=
lineConfig
.
DeviceID
;
MoveInfo
=
new
DeviceMoveInfo
(
DeviceID
);
Name
=
(
" Store_"
+
Config
.
CID
+
" "
).
ToUpper
();
List
<
string
>
ioList
=
new
List
<
string
>();
AddDeviceName
(
ioList
,
Config
.
DIODeviceNameList
);
foreach
(
AC_BOX_Config
config
in
configList
.
Values
)
{
AC_BOX_Bean
equip
=
new
AC_BOX_Bean
(
config
);
...
...
@@ -79,7 +79,7 @@ namespace OnlineStore.DeviceLibrary
Task
.
Factory
.
StartNew
(
delegate
{
// RFIDManager.RfidReader.Open(rfidList.ToArray());
// RFIDManager.RfidReader.Open(rfidList.ToArray());
IOManager
.
instance
.
ConnectionIOList
(
ioList
);
addLastDI
(
IO_Type
.
Airpressure_Check
,
IOValue
(
IO_Type
.
Airpressure_Check
));
addLastDI
(
IO_Type
.
SuddenStop_BTN
,
IOValue
(
IO_Type
.
SuddenStop_BTN
));
...
...
@@ -87,7 +87,7 @@ namespace OnlineStore.DeviceLibrary
IOMove
(
IO_Type
.
Alarm_HddLed
,
IO_VALUE
.
LOW
);
IOMove
(
IO_Type
.
AutoRun_HddLed
,
IO_VALUE
.
LOW
);
IOMove
(
IO_Type
.
RunSign_HddLed
,
IO_VALUE
.
LOW
);
mainTimer
.
Enabled
=
true
;
mainTimer
.
Enabled
=
true
;
canStart
=
true
;
serverConnectTimer
.
Enabled
=
true
;
...
...
@@ -122,7 +122,7 @@ namespace OnlineStore.DeviceLibrary
}
private
void
IoCheckTimerProcess
(
object
sender
,
ElapsedEventArgs
e
)
{
{
}
#
endregion
...
...
@@ -152,7 +152,7 @@ namespace OnlineStore.DeviceLibrary
storeRunStatus
=
StoreRunStatus
.
HomeMoving
;
StartTime
=
DateTime
.
Now
;
//AgvClient.SetCancelState(false);
RFIDManager
.
Open
(
rfidList
.
ToArray
());
mainTimer
.
Enabled
=
false
;
...
...
@@ -160,7 +160,7 @@ namespace OnlineStore.DeviceLibrary
isNoAirCheck
=
false
;
alarmType
=
StoreAlarmType
.
None
;
WarnMsg
=
""
;
foreach
(
AC_BOX_Bean
box
in
this
.
BoxMap
.
Values
)
{
box
.
StartRun
();
...
...
@@ -199,14 +199,14 @@ namespace OnlineStore.DeviceLibrary
else
{
LogUtil
.
info
(
Name
+
"收到复位信号,"
+
equip
.
Name
+
" 正常无报警,不需要复位"
);
}
}
}
mainTimer
.
Enabled
=
true
;
}
public
override
void
StopRun
()
{
{
mainTimer
.
Enabled
=
false
;
ledProcessTimer
.
Enabled
=
false
;
AgvClient
.
SetCancelState
(
true
);
...
...
@@ -217,11 +217,11 @@ namespace OnlineStore.DeviceLibrary
equip
.
StopRun
();
}
storeRunStatus
=
StoreRunStatus
.
Wait
;
// RFIDManager.Close();
// RFIDManager.Close();
TimeSpan
span
=
DateTime
.
Now
-
StartTime
;
LogUtil
.
info
(
Name
+
",停止运行,关闭rfid,总运行时间:"
+
span
.
ToString
());
LogUtil
.
info
(
Name
+
",停止运行,关闭rfid,总运行时间:"
+
span
.
ToString
());
}
#
region
灯光处理
private
void
LedProcess
(
object
sender
,
ElapsedEventArgs
e
)
{
...
...
@@ -231,7 +231,7 @@ namespace OnlineStore.DeviceLibrary
bool
isNeedAlarmLed
=
false
;
bool
isInOut
=
false
;
StoreRunStatus
runs
=
StoreRunStatus
.
Wait
;
foreach
(
AC_BOX_Bean
box
in
BoxMap
.
Values
)
{
if
(!
box
.
alarmType
.
Equals
(
StoreAlarmType
.
None
))
...
...
@@ -245,8 +245,8 @@ namespace OnlineStore.DeviceLibrary
if
(
box
.
storeRunStatus
>
runs
)
{
runs
=
box
.
storeRunStatus
;
}
}
}
}
//黄灯
if
(
runs
.
Equals
(
StoreRunStatus
.
HomeMoving
)
||
runs
.
Equals
(
StoreRunStatus
.
Reset
))
...
...
@@ -260,33 +260,32 @@ namespace OnlineStore.DeviceLibrary
{
IOMove
(
IO_Type
.
RunSign_HddLed
,
IO_VALUE
.
HIGH
);
}
}
}
else
if
(
isInOut
)
{
IOMove
(
IO_Type
.
RunSign_HddLed
,
IO_VALUE
.
HIGH
);
}
else
{
if
(
IsDoValue
(
IO_Type
.
RunSign_HddLed
,
IO_VALUE
.
HIGH
))
{
IOMove
(
IO_Type
.
RunSign_HddLed
,
IO_VALUE
.
LOW
);
}
}
if
(
alarmType
.
Equals
(
StoreAlarmType
.
None
).
Equals
(
false
)
||
isNoAirCheck
||
isInSuddenDown
)
}
if
(
alarmType
.
Equals
(
StoreAlarmType
.
None
).
Equals
(
false
)
||
isNoAirCheck
||
isInSuddenDown
)
{
isNeedAlarmLed
=
true
;
}
//忙碌中,判断是否有移栽在出入库执行
,绿灯闪烁
}
//忙碌中,判断是否有移栽在出入库执行
绿灯灭
if
(
isInOut
)
{
if
(
IsDoValue
(
IO_Type
.
AutoRun_HddLed
,
IO_VALUE
.
LOW
))
{
IOMove
(
IO_Type
.
AutoRun_HddLed
,
IO_VALUE
.
HIGH
);
}
else
{
IOMove
(
IO_Type
.
AutoRun_HddLed
,
IO_VALUE
.
LOW
);
}
IOMove
(
IO_Type
.
AutoRun_HddLed
,
IO_VALUE
.
LOW
);
}
else
if
(
IsDoValue
(
IO_Type
.
AutoRun_HddLed
,
IO_VALUE
.
HIGH
))
else
{
IOMove
(
IO_Type
.
AutoRun_HddLed
,
IO_VALUE
.
LOW
);
IOMove
(
IO_Type
.
AutoRun_HddLed
,
IO_VALUE
.
HIGH
);
}
//报警中 ,红灯闪烁
...
...
@@ -350,17 +349,17 @@ namespace OnlineStore.DeviceLibrary
{
BusyMoveProcess
();
}
}
}
public
override
void
StopMove
()
{
{
foreach
(
AC_BOX_Bean
equip
in
this
.
BoxMap
.
Values
)
{
// if (!equip.IsDebug)
// if (!equip.IsDebug)
{
equip
.
StopMove
();
}
}
}
MoveInfo
.
EndMove
();
MoveInfo
.
EndMove
();
}
protected
override
void
ResetProcess
()
...
...
@@ -370,9 +369,9 @@ namespace OnlineStore.DeviceLibrary
foreach
(
AC_BOX_Bean
box
in
this
.
BoxMap
.
Values
)
{
if
((
box
.
storeRunStatus
.
Equals
(
StoreRunStatus
.
HomeMoving
)
||
box
.
storeRunStatus
.
Equals
(
StoreRunStatus
.
Reset
))
)
if
((
box
.
storeRunStatus
.
Equals
(
StoreRunStatus
.
HomeMoving
)
||
box
.
storeRunStatus
.
Equals
(
StoreRunStatus
.
Reset
)))
//if ((box.storeRunStatus.Equals(StoreRunStatus.HomeMoving) || box.storeRunStatus.Equals(StoreRunStatus.Reset)) && box.IsDebug.Equals(false))
{
{
if
(
box
.
alarmType
.
Equals
(
StoreAlarmType
.
None
))
{
isOk
=
false
;
...
...
@@ -384,16 +383,16 @@ namespace OnlineStore.DeviceLibrary
}
}
}
if
(
isOk
)
{
{
//所有原点重置完成
storeRunStatus
=
StoreRunStatus
.
Runing
;
AgvClient
.
SetCancelState
(
AgvClient
.
CurrCancelState
);
LogUtil
.
info
(
Name
+
"所有设备重置完成"
);
}
}
private
void
SetWarnMsg
(
string
msg
)
{
if
(
String
.
IsNullOrEmpty
(
WarnMsg
).
Equals
(
false
))
...
...
@@ -431,11 +430,11 @@ namespace OnlineStore.DeviceLibrary
{
if
(
box
.
Config
.
AgvNodeName
.
Equals
(
name
))
{
return
box
.
ProcessAGVAction
(
name
,
rfid
,
action
);
return
box
.
ProcessAGVAction
(
name
,
rfid
,
action
);
}
}
return
false
;
}
}
public
override
void
Alarm
(
StoreAlarmType
alarmType
,
string
alarmDetial
,
string
alarmMsg
,
StoreMoveType
storeMoveType
)
{
...
...
source/DeviceLibrary/PackingStore/StoreManager.cs
查看文件 @
4b8e286
...
...
@@ -563,7 +563,7 @@ namespace OnlineStore.DeviceLibrary
///
/// </summary>
/// <param name="tempRfid"></param>
/// <returns>"":未找到真实料架,即
改
任务还未出库</returns>
/// <returns>"":未找到真实料架,即
该
任务还未出库</returns>
public
static
string
FindRealRfidByTempRfid
(
string
tempRfid
)
{
string
msg
=
""
;
...
...
source/DeviceLibrary/StoreConfig/BoxConfig_1.csv
查看文件 @
4b8e286
...
...
@@ -3,6 +3,7 @@ DI,急停,SuddenStop_BTN,0,PRO_AOI_IP_1,0,急停,X01,DI-01,0,
DI,复位,Reset_BTN,1,PRO_AOI_IP_1,0,复位,X02,DI-02,0,
DI,气压检测,Airpressure_Check,2,PRO_AOI_IP_1,0,门禁,X03,DI-03,0,
DI,L侧门禁,DoorLimit,3,PRO_AOI_IP_1,0,料盘检测1(进料口),X04,DI-04,0,
DI,L侧线体空料架检测,EmptyShelf_Check,7,PRO_AOI_IP_1,0,线体空料架检测1,X08,DI-08,0,
DO,NG料线体电机运转,NGLine_Run,4,PRO_AOI_IP_1,0,NG料线体电机运转,Y05,DO-05,0,
DO,NG料线体电机反转,NGLine_BackRun,5,PRO_AOI_IP_1,0,NG料线体电机反转,Y06,DO-06,0,
,,,,,,,,,,
...
...
source/DeviceLibrary/StoreConfig/BoxConfig_2.csv
查看文件 @
4b8e286
...
...
@@ -3,6 +3,7 @@ DI,急停,SuddenStop_BTN,0,PRO_AOI_IP_1,0,急停,X01,DI-01,0,
DI,复位,Reset_BTN,1,PRO_AOI_IP_1,0,复位,X02,DI-02,0,
DI,气压检测,Airpressure_Check,2,PRO_AOI_IP_1,0,门禁,X03,DI-03,0,
DI,R侧门禁,DoorLimit,4,PRO_AOI_IP_1,0,料盘检测2(料叉),X05,DI-05,0,
DI,R侧线体空料架检测,EmptyShelf_Check,8,PRO_AOI_IP_1,0,线体空料架检测2,X09,DI-09,0,
DO,NG料线体电机运转,NGLine_Run,4,PRO_AOI_IP_1,0,NG料线体电机运转,Y05,DO-05,0,
DO,NG料线体电机反转,NGLine_BackRun,5,PRO_AOI_IP_1,0,NG料线体电机反转,Y06,DO-06,0,
,,,,,,,,,,
...
...
source/LoadCVSLibrary/storeConfig/config/IO_Type.cs
查看文件 @
4b8e286
...
...
@@ -48,6 +48,10 @@ namespace OnlineStore.LoadCSVLibrary
/// </summary>
public
static
string
DoorLimit
=
"DoorLimit"
;
/// <summary>
/// DI,L侧线体空料架检测,EmptyShelf_Check,7,PRO_AOI_IP_1,0,线体空料架检测1,X08,DI-08,0,
/// </summary>
public
static
string
EmptyShelf_Check
=
"EmptyShelf_Check"
;
/// <summary>
/// DI L侧料盘检测1(识别区) TrayCheck_1 0 X21 DI-21
/// </summary>
public
static
string
TrayCheck_1
=
"TrayCheck_1"
;
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论