Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
刘韬
/
MIMO
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 58ba6080
由
刘韬
编写于
2022-08-11 11:32:43 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1
1 个父辈
8563a8cf
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
0 行增加
和
308 行删除
DeviceLibrary/theMachine/MainMachine _IN.cs
DeviceLibrary/theMachine/MainMachine _IN.cs
deleted
100644 → 0
查看文件 @
8563a8c
using
CodeLibrary
;
using
OnlineStore.Common
;
using
OnlineStore.LoadCSVLibrary
;
using
System
;
using
System.Collections.Generic
;
using
System.Drawing
;
using
System.Linq
;
using
System.Text
;
using
System.Threading
;
using
System.Threading.Tasks
;
namespace
DeviceLibrary
{
partial
class
MainMachine
{
/// <summary>
/// InMoveInfo.MoveStep == MoveStep.InWaitServerCallback
/// </summary>
public
bool
IsInStoreReady
{
get
=>
StringMoveInfo
.
MoveStep
==
MoveStep
.
InWaitServerCallback
;
}
/// <summary>
/// if (InMoveInfo.MoveStep == MoveStep.InWaitServerCallback)
/// </summary>
/// <param name="jobInfo"></param>
/// <returns></returns>
public
bool
StartInStore
(
JobInfo
jobInfo
)
{
if
(
IsInStoreReady
)
{
StringMoveInfo
.
MoveParam
.
WareCode
=
jobInfo
.
WareNum
;
StringMoveInfo
.
MoveParam
.
PosID
=
jobInfo
.
PosId
;
StringMoveInfo
.
NextMoveStep
(
MoveStep
.
StartInStore
);
return
true
;
}
return
false
;
}
double
CurrentWeight
{
get
{
if
(
RobotManage
.
StoreType
==
StoreType
.
TypeA
)
{
for
(
int
i
=
0
;
i
<
5
;
i
++)
{
if
(
OKLEController
.
queryData
(
Config
.
WeightSensorPort
,
out
double
weight
))
{
return
weight
-
Config
.
WeightSensorBase
;
}
Thread
.
Sleep
(
1000
);
}
LogUtil
.
info
(
"读取重量超时"
);
return
double
.
MaxValue
;
}
else
return
0
;
}
}
void
InProcess
()
{
if
(
CheckWait
(
StringMoveInfo
))
return
;
switch
(
StringMoveInfo
.
MoveStep
)
{
case
MoveStep
.
Wait
:
if
(
CurrentWeight
>
Config
.
StoreWeightLimited
)
{
Msg
.
add
(
$
"周转箱超重,当前重量:{CurrentWeight}kg,最大限重{Config.StoreWeightLimited}kg"
,
MsgLevel
.
warning
);
}
else
if
(
IOValue
(
IO_Type
.
InStart_BTN
).
Equals
(
IO_VALUE
.
HIGH
))
{
StringMoveInfo
.
log
(
$
"踩下启动脚踏"
);
StringMoveInfo
.
NextMoveStep
(
MoveStep
.
InPre01
);
}
else
if
(
IOValue
(
IO_Type
.
InStopMaterial_Check
).
Equals
(
IO_VALUE
.
HIGH
))
{
StringMoveInfo
.
NextMoveStep
(
MoveStep
.
In01
);
StringMoveInfo
.
log
(
$
"检测到周转箱到位信号"
);
}
break
;
case
MoveStep
.
InPre01
:
StringMoveInfo
.
NextMoveStep
(
MoveStep
.
InPre02
);
if
(
IOValue
(
IO_Type
.
InStopMaterial_Check
).
Equals
(
IO_VALUE
.
HIGH
))
{
StringMoveInfo
.
NextMoveStep
(
MoveStep
.
InPre02
);
}
else
{
StringMoveInfo
.
log
(
$
"线体运转5秒"
);
LineIn
.
LineRun
(
"prework"
,
5
);
}
break
;
case
MoveStep
.
InPre02
:
if
(
IOValue
(
IO_Type
.
InStopMaterial_Check
).
Equals
(
IO_VALUE
.
HIGH
))
{
StringMoveInfo
.
log
(
$
"检测到周转箱到位信号,线体运转2秒"
);
LineIn
.
LineRun
(
"prework"
,
2
);
StringMoveInfo
.
NextMoveStep
(
MoveStep
.
In01
);
StringMoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
2000
));
}
else
{
StringMoveInfo
.
NextMoveStep
(
MoveStep
.
Wait
);
StringMoveInfo
.
log
(
$
"没有检测到周转箱到位信号"
);
}
break
;
case
MoveStep
.
In01
:
StringMoveInfo
.
NextMoveStep
(
MoveStep
.
In02
);
var
boxCurrentWeight
=
CurrentWeight
;
if
(
boxCurrentWeight
<=
Config
.
StoreWeightLimited
)
{
StringMoveInfo
.
log
(
$
"开始拍照扫码,重量:{boxCurrentWeight}kg"
);
if
(
RobotManage
.
InoutDebugMode
)
{
StringMoveInfo
.
NextMoveStep
(
MoveStep
.
InWaitServerCallback
);
}
else
ScanCode
();
}
else
{
Msg
.
add
(
"周转箱超重"
,
MsgLevel
.
warning
);
StringMoveInfo
.
log
(
$
"周转箱超重 重量:{boxCurrentWeight}"
);
StringMoveInfo
.
NextMoveStep
(
MoveStep
.
Wait
);
}
break
;
case
MoveStep
.
In02
:
if
(
InScanTask
.
IsCompleted
)
{
var
x
=
InScanTask
.
Result
;
if
(
x
.
Count
==
0
)
{
StringMoveInfo
.
NextMoveStep
(
MoveStep
.
In01
);
StringMoveInfo
.
log
(
$
"未识别到有效二维码,重新拍照"
);
return
;
}
else
{
StringMoveInfo
.
NextMoveStep
(
MoveStep
.
InWaitServerCallback
);
StringMoveInfo
.
log
(
$
"已完成扫码,等待服务器反馈库位 Count={x.Count}"
);
StringMoveInfo
.
MoveParam
.
IsNg
=
false
;
StringMoveInfo
.
MoveParam
.
codeInfos
=
x
;
var
cc
=
x
.
Select
((
a
)
=>
a
.
CodeStr
);
ServerCM
.
SendInStoreRequest
(
cc
.
ToArray
());
}
}
else
if
(
StringMoveInfo
.
IsTimeOut
(
10
))
{
StringMoveInfo
.
NextMoveStep
(
MoveStep
.
In01
);
StringMoveInfo
.
log
(
$
"等待扫码超时,重新扫码"
);
}
break
;
case
MoveStep
.
InWaitServerCallback
:
if
(
RobotManage
.
InoutDebugMode
)
{
Msg
.
add
(
"等待手动选择入库库位"
,
MsgLevel
.
info
);
}
else
if
(
StringMoveInfo
.
IsTimeOut
(
5
))
Msg
.
add
(
"等待服务器返回库位"
,
MsgLevel
.
info
);
else
if
(
StringMoveInfo
.
IsTimeOut
(
15
))
{
StringMoveInfo
.
NextMoveStep
(
MoveStep
.
Wait
);
StringMoveInfo
.
log
(
$
"等待服务器返回库位超时"
);
}
break
;
case
MoveStep
.
StartInStore
:
StringMoveInfo
.
NextMoveStep
(
MoveStep
.
In06
);
CylinderMove
(
StringMoveInfo
,
IO_Type
.
InStop_Down
,
IO_Type
.
InStop_Up
,
IO_VALUE
.
LOW
);
InSideLift
.
LiftDown
(
StringMoveInfo
);
StringMoveInfo
.
log
(
$
"放下入料阻挡"
);
break
;
case
MoveStep
.
In06
:
StringMoveInfo
.
NextMoveStep
(
MoveStep
.
In07
);
LineIn
.
LineRun
(
"work"
,
999
);
//if (RobotManage.StoreType == StoreType.TypeA)
//{
// CylinderMove(InMoveInfo, IO_Type.InMaterialLocation_Bck, IO_Type.InMaterialLocation_Fwd, IO_VALUE.HIGH);
// InMoveInfo.log($"料箱定位前进");
//}
break
;
case
MoveStep
.
In07
:
if
(
RobotManage
.
StoreType
==
StoreType
.
TypeA
&&
IOValue
(
IO_Type
.
InOverHead_Check
).
Equals
(
IO_VALUE
.
LOW
))
{
LineIn
.
LineStop
(
"work"
);
StringMoveInfo
.
log
(
$
"X18检测到物料超高,停止滚筒"
);
StringMoveInfo
.
NextMoveStep
(
MoveStep
.
InOverHead
);
ServerCM
.
cancelPutInTask
(
""
,
StringMoveInfo
.
MoveParam
.
WareCode
);
return
;
}
//IOValue(IO_Type.InEndMaterialTop_Check).Equals(IO_VALUE.HIGH) &&
if
(
IOValue
(
IO_Type
.
InEndMaterialBottom_Check
).
Equals
(
IO_VALUE
.
HIGH
))
{
StringMoveInfo
.
NextMoveStep
(
MoveStep
.
In09
);
CylinderMove
(
StringMoveInfo
,
IO_Type
.
InStop_Down
,
IO_Type
.
InStop_Up
,
IO_VALUE
.
HIGH
);
LineIn
.
LineRun
(
"work"
,
1
);
StringMoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
500
));
}
else
if
(
StringMoveInfo
.
IsTimeOut
(
10
))
{
Msg
.
add
(
"周转箱进入等待X26信号超时"
,
MsgLevel
.
warning
);
StringMoveInfo
.
log
(
$
"周转箱进入超时"
);
}
break
;
case
MoveStep
.
In08
:
StringMoveInfo
.
NextMoveStep
(
MoveStep
.
In09
);
//if (RobotManage.StoreType == StoreType.TypeA)
//{
// CylinderMove(InMoveInfo, IO_Type.InMaterialLocation_Bck, IO_Type.InMaterialLocation_Fwd, IO_VALUE.LOW);
// InMoveInfo.log("料箱定位后退");
//}
break
;
case
MoveStep
.
In09
:
StringMoveInfo
.
NextMoveStep
(
MoveStep
.
In10
);
InSideLift
.
LiftUp
(
StringMoveInfo
);
StringMoveInfo
.
log
(
"顶升上升,等待周转箱到位"
);
StringMoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
InEndMaterialTop_Check
,
IO_VALUE
.
HIGH
));
break
;
case
MoveStep
.
In10
:
StringMoveInfo
.
NextMoveStep
(
MoveStep
.
InWaitBoxLeave
);
break
;
case
MoveStep
.
InWaitBoxLeave
:
Msg
.
add
(
"周转箱等待入库"
,
MsgLevel
.
info
);
ServerCM
.
storeStatus
=
StoreStatus
.
InStoreExecute
;
break
;
case
MoveStep
.
InBoxLeaved
:
StringMoveInfo
.
NextMoveStep
(
MoveStep
.
Wait
);
InSideLift
.
LiftDown
(
StringMoveInfo
);
CylinderMove
(
StringMoveInfo
,
IO_Type
.
InStop_Down
,
IO_Type
.
InStop_Up
,
IO_VALUE
.
HIGH
);
StringMoveInfo
.
log
(
"周转箱已取走,顶升下降"
);
break
;
case
MoveStep
.
InOverHead
:
Msg
.
add
(
"X18检测到物料超高,请取出周转箱"
,
MsgLevel
.
warning
);
if
(
IOMonitor
.
IODebound
(
IO_Type
.
InStopMaterial_Check
,
Config
,
IO_VALUE
.
LOW
))
{
CylinderMove
(
StringMoveInfo
,
IO_Type
.
InStop_Down
,
IO_Type
.
InStop_Up
,
IO_VALUE
.
HIGH
);
StringMoveInfo
.
NewMove
(
MoveStep
.
Wait
);
}
break
;
case
MoveStep
.
InReset
:
CylinderMove
(
StringMoveInfo
,
IO_Type
.
InStop_Down
,
IO_Type
.
InStop_Up
,
IO_VALUE
.
HIGH
);
CylinderMove
(
StringMoveInfo
,
IO_Type
.
InMaterialLocation_Bck
,
IO_Type
.
InMaterialLocation_Fwd
,
IO_VALUE
.
LOW
);
InSideLift
.
LiftDown
(
StringMoveInfo
);
LineIn
.
LineStop
(
"work"
);
StringMoveInfo
.
NewMove
(
MoveStep
.
Wait
);
StringMoveInfo
.
log
(
"入库线体状态重置"
);
break
;
default
:
StringMoveInfo
.
log
(
$
"未找到对应步骤:{StringMoveInfo.MoveStep}"
);
break
;
}
}
string
InState
()
{
string
state
=
""
;
if
(
StringMoveInfo
.
MoveStep
>=
MoveStep
.
In02
)
{
return
StringMoveInfo
.
MoveParam
.
ToStr
();
}
else
if
(
StringMoveInfo
.
MoveStep
>=
MoveStep
.
Wait
)
{
state
=
"空闲中"
;
}
else
if
(
StringMoveInfo
.
MoveStep
<
MoveStep
.
In02
)
{
state
=
"入库扫描"
;
}
return
state
;
}
public
bool
IsScanRunning
()
{
if
(
InScanTask
==
null
)
return
false
;
return
!
InScanTask
.
IsCompleted
;
}
/// <summary>
/// 扫码线程
/// </summary>
Task
<
List
<
CodeInfo
>>
InScanTask
;
void
ScanCode
()
{
StringMoveInfo
.
log
(
"开始扫码"
);
//RightMoveInfo.OneWaitCanEndStep = true;
//RightMoveInfo.WaitList.Add(WaitResultInfo.WaitScanCode());
//RightMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
try
{
InScanTask
=
Task
.
Run
(
new
Func
<
List
<
CodeInfo
>>(()=>
{
IOMove
(
IO_Type
.
Camera_Led
,
IO_VALUE
.
HIGH
);
Task
.
Delay
(
10
).
Wait
();
List
<
CodeInfo
>
LastCodeList
;
LastCodeList
=
CodeManager
.
CameraScan
(
new
List
<
string
>
{
Config
.
CameraName
});
//BoxParam labelParam = new BoxParam();
//labelParam.codeInfos = new List<CodeInfo>(LastCodeList);
//if (!Common.codeProcess(labelParam, out _))
//{
// Task.Delay(500).Wait();
// LastCodeList2 = CodeManager.CameraScan(new List<string> { Config.CameraName });
// LastCodeList.AddRange(LastCodeList2);
//}
//IOMove(IO_Type.Camera_Led, IO_VALUE.LOW);
return
LastCodeList
;
}));
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
"FI_13_ScanCode扫码出错:"
,
ex
);
}
}
}
}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论