Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
刘韬
/
1069_MIMO_PlUS
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 4d385d15
由
张东亮
编写于
2023-11-22 15:28:21 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
已修改,待测试
1 个父辈
1991b45f
隐藏空白字符变更
内嵌
并排
正在显示
14 个修改的文件
包含
530 行增加
和
353 行删除
Common/StringList.cs
DLL/DL.Log.dll
DeviceLibrary/DeviceLibrary/ServerCommunication.cs
DeviceLibrary/theMachine/BoxTransport.cs
DeviceLibrary/theMachine/Common.cs
DeviceLibrary/theMachine/JobList.cs
DeviceLibrary/theMachine/MainMachine.cs
DeviceLibrary/theMachine/MainMachine_Clamp.cs
DeviceLibrary/theMachine/MainMachine_Store.cs
DeviceLibrary/theMachine/MoveStep.cs
DeviceLibrary/theMachine/RobotManage.cs
TheMachine/resources/en-US.lngres
TheMachine/resources/ja-JP.lngres
TheMachine/resources/zh-CN.lngres
Common/StringList.cs
查看文件 @
4d385d1
...
@@ -142,6 +142,7 @@ namespace OnlineStore.Common
...
@@ -142,6 +142,7 @@ namespace OnlineStore.Common
system_running_cantmove
,
system_running_cantmove
,
before_FrmPositionTool_stopmuchine
,
before_FrmPositionTool_stopmuchine
,
temp
,
temp
,
outstore_abnormal_reel
outstore_abnormal_reel
,
instore_abnormal_reel
}
}
}
}
DLL/DL.Log.dll
0 → 100644
查看文件 @
4d385d1
此文件类型无法预览
DeviceLibrary/DeviceLibrary/ServerCommunication.cs
查看文件 @
4d385d1
...
@@ -684,6 +684,12 @@ namespace DeviceLibrary
...
@@ -684,6 +684,12 @@ namespace DeviceLibrary
}
}
private
static
string
Addr_cancelPutInTask
=
"/service/store/cancelPutInTask"
;
private
static
string
Addr_cancelPutInTask
=
"/service/store/cancelPutInTask"
;
/// <summary>
/// 取消入库任务
/// </summary>
/// <param name="deviceName"></param>
/// <param name="barcode"></param>
/// <returns></returns>
public
string
cancelPutInTask
(
string
deviceName
,
string
barcode
)
public
string
cancelPutInTask
(
string
deviceName
,
string
barcode
)
{
{
string
msg
=
""
;
string
msg
=
""
;
...
@@ -733,6 +739,63 @@ namespace DeviceLibrary
...
@@ -733,6 +739,63 @@ namespace DeviceLibrary
return
path
;
return
path
;
}
}
/// <summary>
/// 屏蔽库位接口
/// </summary>
private
static
string
Addr_disabledPos
=
"/service/store/disabledPos"
;
/// <summary>
/// 屏蔽库位
/// </summary>
/// <param name="deviceName"></param>
/// <param name="barcode"></param>
/// <param name="poid"></param>
/// <returns></returns>
public
static
string
DisablePos
(
string
deviceName
,
string
barcode
,
string
poid
,
string
reason
=
""
)
{
string
msg
=
""
;
try
{
if
(
String
.
IsNullOrEmpty
(
barcode
))
{
return
msg
;
}
//if (string.IsNullOrEmpty(serverAddr))
//{
// LogUtil.error(deviceName + "DisablePos [" + barcode + "] [" + poid + "] :未找到服务器地址");
// return msg;
//}
Dictionary
<
string
,
string
>
paramMap
=
new
Dictionary
<
string
,
string
>();
paramMap
.
Add
(
"posId"
,
poid
);
//posId:库位号
paramMap
.
Add
(
"barcode"
,
barcode
);
// barcode = 料盘的条码
paramMap
.
Add
(
"msg"
,
reason
);
string
server
=
GetAddr
(
Addr_disabledPos
,
paramMap
);
DateTime
startTime
=
DateTime
.
Now
;
string
resultStr
=
HttpHelper
.
Post
(
server
,
""
);
LogUtil
.
info
(
"DisablePos "
+
FormUtil
.
GetSpanStr
(
DateTime
.
Now
-
startTime
)
+
" 【"
+
server
+
"】【"
+
resultStr
+
"】"
);
// 返回: { "code": 0, "msg":"ok", "data":""}
ResultData
serverResult
=
JsonHelper
.
DeserializeJsonToObject
<
ResultData
>(
resultStr
);
if
(
serverResult
==
null
)
{
msg
=
deviceName
+
"DisablePos【 "
+
barcode
+
"】【"
+
poid
+
"】没有收到服务器反馈"
;
}
else
if
(
serverResult
.
code
.
Equals
(
0
).
Equals
(
false
))
{
// code: 0为正常,其他为异常, msg: 消息, data: 为空
msg
=
deviceName
+
" DisablePos【 "
+
barcode
+
"】【"
+
poid
+
"】:"
+
"["
+
serverResult
.
code
+
"]"
+
serverResult
.
msg
;
}
if
(!
msg
.
Equals
(
""
))
{
LogUtil
.
error
(
msg
);
}
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
deviceName
+
" "
,
ex
);
}
return
msg
;
}
}
}
public
class
ResultData
public
class
ResultData
...
...
DeviceLibrary/theMachine/BoxTransport.cs
查看文件 @
4d385d1
...
@@ -31,7 +31,10 @@ namespace DeviceLibrary
...
@@ -31,7 +31,10 @@ namespace DeviceLibrary
public
bool
IsComplateOrFree
{
get
=>
MoveInfo
.
MoveStep
==
MoveStep
.
Wait
;
}
public
bool
IsComplateOrFree
{
get
=>
MoveInfo
.
MoveStep
==
MoveStep
.
Wait
;
}
public
bool
IsTakedReel
{
get
=>
MoveInfo
.
MoveStep
>=
MoveStep
.
StoreTS10
;
}
public
bool
IsTakedReel
{
get
=>
MoveInfo
.
MoveStep
>=
MoveStep
.
StoreTS10
;
}
public
bool
IsPutOnOut
{
get
=>
MoveInfo
.
MoveStep
>=
MoveStep
.
StoreTS16
;
}
public
bool
IsPutOnOut
{
get
=>
MoveInfo
.
MoveStep
>=
MoveStep
.
StoreTS16
;
}
/// <summary>
/// 是否是NG料
/// </summary>
public
bool
IsNGReel
=
false
;
public
ReelTransport
(
Robot_Config
_Config
,
MainMachine
_mainMachine
)
public
ReelTransport
(
Robot_Config
_Config
,
MainMachine
_mainMachine
)
{
{
Config
=
_Config
;
Config
=
_Config
;
...
@@ -64,7 +67,7 @@ namespace DeviceLibrary
...
@@ -64,7 +67,7 @@ namespace DeviceLibrary
if
(
MoveInfo
.
MoveStep
!=
MoveStep
.
Wait
)
if
(
MoveInfo
.
MoveStep
!=
MoveStep
.
Wait
)
return
false
;
return
false
;
IsNGReel
=
false
;
storeMoveType
=
_storeMoveType
;
storeMoveType
=
_storeMoveType
;
PreMove
=
premove
;
PreMove
=
premove
;
if
(
from
==
null
)
if
(
from
==
null
)
...
@@ -97,7 +100,6 @@ namespace DeviceLibrary
...
@@ -97,7 +100,6 @@ namespace DeviceLibrary
//thread = new Thread(new ThreadStart(Run));
//thread = new Thread(new ThreadStart(Run));
//thread.Start();
//thread.Start();
}
}
public
bool
ReadyToTakeBox
()
public
bool
ReadyToTakeBox
()
{
{
if
(
MoveInfo
.
MoveStep
!=
MoveStep
.
StoreTS05
)
if
(
MoveInfo
.
MoveStep
!=
MoveStep
.
StoreTS05
)
...
@@ -118,23 +120,30 @@ namespace DeviceLibrary
...
@@ -118,23 +120,30 @@ namespace DeviceLibrary
case
MoveStep
.
StoreTS01
:
case
MoveStep
.
StoreTS01
:
if
(!
IgnoreX09
&&
IOManager
.
IOValue
(
IO_Type
.
TrayCheck_Fixture
).
Equals
(
IO_VALUE
.
HIGH
))
if
(!
IgnoreX09
&&
IOManager
.
IOValue
(
IO_Type
.
TrayCheck_Fixture
).
Equals
(
IO_VALUE
.
HIGH
))
{
{
// if (!IgnoreX09 && IOMonitor.IODebound(IO_Type.TrayCheck_Fixture, Config, IO_VALUE.HIGH, 5000))
if
(
Common
.
IsManualHandleReelInFix
()&&
Common
.
IsInstore
(
storeMoveType
))
Msg
.
add
(
crc
.
GetString
(
L
.
out_store_detect_material
,
"取料前料叉X30检测到有物料无法继续,请检查."
),
MsgLevel
.
alarm
,
ErrInfo
.
X09_BoxNotDetect
);
{
//RobotManage.UserPause("出库时料叉X30检测到有物料无法继续,请检查");
IsNGReel
=
true
;
MoveInfo
.
log
(
$
"{storeMoveType}:取料前料叉机构料盘检测X30亮,去单料口"
);
MoveInfo
.
EndMove
();
ErrMsgTxt
=
""
;
}
else
Msg
.
add
(
crc
.
GetString
(
L
.
out_store_detect_material
,
"取料前料叉X30检测到有物料无法继续,请检查."
),
MsgLevel
.
alarm
,
ErrInfo
.
X09_BoxNotDetect
);
}
}
else
else
{
{
Msg
.
add
(
""
,
MsgLevel
.
info
,
ErrInfo
.
X09_Clear
);
Msg
.
add
(
""
,
MsgLevel
.
info
,
ErrInfo
.
X09_Clear
);
IgnoreX09
=
false
;
IgnoreX09
=
false
;
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS02
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS02
);
MoveInfo
.
log
(
$
"{storeMoveType}:检查安全状态"
);
MoveInfo
.
log
(
$
"{storeMoveType}:检查
料叉
安全状态"
);
}
}
break
;
break
;
case
MoveStep
.
StoreTS02
:
case
MoveStep
.
StoreTS02
:
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS04
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS04
);
InOut_Axis
.
AbsMove
(
MoveInfo
,
Config
.
InOut_P1
,
Config
.
InOut_P1_speed
);
InOut_Axis
.
AbsMove
(
MoveInfo
,
Config
.
InOut_P1
,
Config
.
InOut_P1_speed
);
MoveInfo
.
log
(
$
"{storeMoveType}:进出轴去待机点P1[{Config.InOut_P1}]"
);
Comp_Axis
.
AbsMove
(
MoveInfo
,
From
.
Comp_PH
,
Config
.
Comp_P2_speed
);
Comp_Axis
.
AbsMove
(
MoveInfo
,
From
.
Comp_PH
,
Config
.
Comp_P2_speed
);
MoveInfo
.
log
(
$
"{storeMoveType}:
进出轴返回待机点P1
"
);
MoveInfo
.
log
(
$
"{storeMoveType}:
压紧轴去压紧前点[{From.Comp_PH}]
"
);
break
;
break
;
case
MoveStep
.
StoreTS03
:
case
MoveStep
.
StoreTS03
:
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS04
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS04
);
...
@@ -148,9 +157,9 @@ namespace DeviceLibrary
...
@@ -148,9 +157,9 @@ namespace DeviceLibrary
case
MoveStep
.
StoreTS04
:
case
MoveStep
.
StoreTS04
:
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS06
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS06
);
UpDown_Axis
.
AbsMove
(
MoveInfo
,
From
.
UpDown_PL
,
Config
.
UpDown_P1_speed
);
UpDown_Axis
.
AbsMove
(
MoveInfo
,
From
.
UpDown_PL
,
Config
.
UpDown_P1_speed
);
MoveInfo
.
log
(
$
"{storeMoveType}:上下轴
到达取料低点{From.UpDown_PL}
"
);
MoveInfo
.
log
(
$
"{storeMoveType}:上下轴
去取料低点[{From.UpDown_PL}]
"
);
Middle_Axis
.
AbsMove
(
MoveInfo
,
From
.
Middle_P2
,
Config
.
Middle_P2_speed
);
Middle_Axis
.
AbsMove
(
MoveInfo
,
From
.
Middle_P2
,
Config
.
Middle_P2_speed
);
MoveInfo
.
log
(
$
"{storeMoveType}:
行走机构到达取料点{From.Middle_P2}
"
);
MoveInfo
.
log
(
$
"{storeMoveType}:
旋转轴去取料点P2[{From.Middle_P2}]
"
);
break
;
break
;
case
MoveStep
.
StoreTS05
:
case
MoveStep
.
StoreTS05
:
if
(!
PreMove
)
if
(!
PreMove
)
...
@@ -160,27 +169,40 @@ namespace DeviceLibrary
...
@@ -160,27 +169,40 @@ namespace DeviceLibrary
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS07
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS07
);
InOut_Axis
.
AbsMove
(
MoveInfo
,
From
.
InOut_P2
,
Config
.
InOut_P2_speed
);
InOut_Axis
.
AbsMove
(
MoveInfo
,
From
.
InOut_P2
,
Config
.
InOut_P2_speed
);
InOut_Axis
.
MonitorAxisLoadRate
();
InOut_Axis
.
MonitorAxisLoadRate
();
MoveInfo
.
log
(
$
"{storeMoveType}:进出轴
到达取料点{From.InOut_P2}
"
);
MoveInfo
.
log
(
$
"{storeMoveType}:进出轴
去取料点P2[{From.InOut_P2}]
"
);
break
;
break
;
case
MoveStep
.
StoreTS07
:
case
MoveStep
.
StoreTS07
:
RobotManage
.
CameraA
.
CameraGrabOne
(
RobotManage
.
CameraA
.
GetFixtureStateFilename
(
From
.
posid
,
WareCode
,
storeMoveType
,
FixtureState
.
FromIn
));
RobotManage
.
CameraA
.
CameraGrabOne
(
RobotManage
.
CameraA
.
GetFixtureStateFilename
(
From
.
posid
,
WareCode
,
storeMoveType
,
FixtureState
.
FromIn
));
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS08
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS08
);
UpDown_Axis
.
AbsMove
(
MoveInfo
,
From
.
UpDown_PH
,
Config
.
UpDown_P4_speed
);
UpDown_Axis
.
AbsMove
(
MoveInfo
,
From
.
UpDown_PH
,
Config
.
UpDown_P4_speed
);
MoveInfo
.
log
(
$
"{storeMoveType}:上下轴去取料高点[{From.UpDown_PH}"
);
Comp_Axis
.
AbsMove
(
MoveInfo
,
From
.
Comp_PL
,
Config
.
Comp_P2_speed
);
Comp_Axis
.
AbsMove
(
MoveInfo
,
From
.
Comp_PL
,
Config
.
Comp_P2_speed
);
MoveInfo
.
log
(
$
"{storeMoveType}:
上下轴到达取料高点
"
);
MoveInfo
.
log
(
$
"{storeMoveType}:
压紧轴去压紧点[{From.Comp_PL}]
"
);
break
;
break
;
case
MoveStep
.
StoreTS08
:
case
MoveStep
.
StoreTS08
:
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS09
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS09
);
InOut_Axis
.
AbsMove
(
MoveInfo
,
Config
.
InOut_P1
,
Config
.
InOut_P1_speed
);
InOut_Axis
.
AbsMove
(
MoveInfo
,
Config
.
InOut_P1
,
Config
.
InOut_P1_speed
);
IgnoreX09
=
false
;
IgnoreX09
=
false
;
MoveInfo
.
log
(
$
"{storeMoveType}:进出轴
到达待机点
"
);
MoveInfo
.
log
(
$
"{storeMoveType}:进出轴
去待机点P1[{Config.InOut_P1}]
"
);
break
;
break
;
case
MoveStep
.
StoreTS09
:
case
MoveStep
.
StoreTS09
:
RobotManage
.
CameraA
.
CameraGrabOne
(
RobotManage
.
CameraA
.
GetFixtureStateFilename
(
From
.
posid
,
WareCode
,
storeMoveType
,
FixtureState
.
FromOut
));
RobotManage
.
CameraA
.
CameraGrabOne
(
RobotManage
.
CameraA
.
GetFixtureStateFilename
(
From
.
posid
,
WareCode
,
storeMoveType
,
FixtureState
.
FromOut
));
if
(!
IgnoreX09
&&
IOManager
.
IOValue
(
IO_Type
.
TrayCheck_Fixture
).
Equals
(
IO_VALUE
.
LOW
))
if
(!
IgnoreX09
&&
IOManager
.
IOValue
(
IO_Type
.
TrayCheck_Fixture
).
Equals
(
IO_VALUE
.
LOW
))
{
{
Msg
.
add
(
crc
.
GetString
(
L
.
out_store_not_detect_material
,
"取料后料叉X30没有检测到有物料无法继续,请检查."
),
MsgLevel
.
alarm
,
ErrInfo
.
X09_BoxNotDetect
);
if
(
Common
.
IsManualHandleReelInFix
()
&&
Common
.
IsInstore
(
storeMoveType
))
//RobotManage.UserPause(crc.GetString(L.out_store_not_detect_material, "取料前料叉X30没有检测到有物料无法继续,请检查."));
{
IsNGReel
=
true
;
MoveInfo
.
log
(
$
"{storeMoveType}:取完料后料叉机构料盘检测X30灭,去单料口"
);
MoveInfo
.
EndMove
();
ErrMsgTxt
=
""
;
}
else
Msg
.
add
(
crc
.
GetString
(
L
.
out_store_not_detect_material
,
"取料后料叉X30没有检测到有物料无法继续,请检查."
),
MsgLevel
.
alarm
,
ErrInfo
.
X09_BoxNotDetect
);
if
(
Common
.
IsOutStore
(
storeMoveType
))
{
//出库异常,屏蔽库位
ServerCommunication
.
DisablePos
(
mainMachine
.
Name
,
From
?.
Reel
?.
WareCode
,
From
?.
Reel
?.
PosID
,
"出库时从库位取出料盘,料叉未检测到信号"
);
}
}
}
else
else
{
{
...
@@ -190,7 +212,7 @@ namespace DeviceLibrary
...
@@ -190,7 +212,7 @@ namespace DeviceLibrary
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreFIX01
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreFIX01
);
else
else
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS10
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS10
);
MoveInfo
.
log
(
$
"{storeMoveType}:
X30
取到料"
);
MoveInfo
.
log
(
$
"{storeMoveType}:
料叉
取到料"
);
InOutEndProcess
(
StoreMoveType
.
OutStore
,
From
.
posid
);
InOutEndProcess
(
StoreMoveType
.
OutStore
,
From
.
posid
);
}
}
break
;
break
;
...
@@ -198,23 +220,23 @@ namespace DeviceLibrary
...
@@ -198,23 +220,23 @@ namespace DeviceLibrary
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreFIX02
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreFIX02
);
RobotManage
.
PutReelInFixPos
(
MoveInfo
.
MoveParam
);
RobotManage
.
PutReelInFixPos
(
MoveInfo
.
MoveParam
);
Middle_Axis
.
AbsMove
(
MoveInfo
,
Fix
.
Middle_P2
,
Config
.
Middle_P2_speed
);
Middle_Axis
.
AbsMove
(
MoveInfo
,
Fix
.
Middle_P2
,
Config
.
Middle_P2_speed
);
MoveInfo
.
log
(
$
"{storeMoveType}:
行走机构到达目的地:{Fix.Middle_P2}
"
);
MoveInfo
.
log
(
$
"{storeMoveType}:
旋转轴去取料点P2[{Fix.Middle_P2}]
"
);
UpDown_Axis
.
AbsMove
(
MoveInfo
,
Fix
.
UpDown_PH
,
Config
.
UpDown_P1_speed
);
UpDown_Axis
.
AbsMove
(
MoveInfo
,
Fix
.
UpDown_PH
,
Config
.
UpDown_P1_speed
);
MoveInfo
.
log
(
$
"{storeMoveType}:上下轴
到达目的地高点:{Fix.UpDown_PH}
"
);
MoveInfo
.
log
(
$
"{storeMoveType}:上下轴
去取料高点[{Fix.UpDown_PH}]
"
);
break
;
break
;
case
MoveStep
.
StoreFIX02
:
case
MoveStep
.
StoreFIX02
:
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreFIX03
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreFIX03
);
MoveInfo
.
log
(
$
"{storeMoveType}:进出轴到达目的地"
);
InOut_Axis
.
AbsMove
(
MoveInfo
,
Fix
.
InOut_P2
,
Config
.
InOut_P2_speed
);
InOut_Axis
.
AbsMove
(
MoveInfo
,
Fix
.
InOut_P2
,
Config
.
InOut_P2_speed
);
MoveInfo
.
log
(
$
"{storeMoveType}:进出轴去取料点P2"
);
InOut_Axis
.
MonitorAxisLoadRate
();
InOut_Axis
.
MonitorAxisLoadRate
();
break
;
break
;
case
MoveStep
.
StoreFIX03
:
case
MoveStep
.
StoreFIX03
:
RobotManage
.
CameraA
.
CameraGrabOne
(
RobotManage
.
CameraA
.
GetFixtureStateFilename
(
To
.
posid
,
WareCode
,
storeMoveType
,
FixtureState
.
ToFix
));
RobotManage
.
CameraA
.
CameraGrabOne
(
RobotManage
.
CameraA
.
GetFixtureStateFilename
(
To
.
posid
,
WareCode
,
storeMoveType
,
FixtureState
.
ToFix
));
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreFIX04
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreFIX04
);
Comp_Axis
.
AbsMove
(
MoveInfo
,
Fix
.
Comp_PH
,
Config
.
Comp_P2_speed
);
Comp_Axis
.
AbsMove
(
MoveInfo
,
Fix
.
Comp_PH
,
Config
.
Comp_P2_speed
);
MoveInfo
.
log
(
$
"{storeMoveType}:压紧轴去压紧前点:{Fix.Comp_PH}"
);
UpDown_Axis
.
AbsMove
(
MoveInfo
,
Fix
.
UpDown_PL
,
Config
.
UpDown_P3_speed
/
2
);
UpDown_Axis
.
AbsMove
(
MoveInfo
,
Fix
.
UpDown_PL
,
Config
.
UpDown_P3_speed
/
2
);
MoveInfo
.
log
(
$
"{storeMoveType}:压紧轴高点:{Fix.Comp_PH}"
);
MoveInfo
.
log
(
$
"{storeMoveType}:上下轴去取料低点[{Fix.UpDown_PL}]"
);
MoveInfo
.
log
(
$
"{storeMoveType}:上下轴到达目的地低点:{Fix.UpDown_PL}"
);
break
;
break
;
case
MoveStep
.
StoreFIX04
:
case
MoveStep
.
StoreFIX04
:
...
@@ -222,7 +244,7 @@ namespace DeviceLibrary
...
@@ -222,7 +244,7 @@ namespace DeviceLibrary
{
{
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreFIX04_01_InoutBackToP1
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreFIX04_01_InoutBackToP1
);
InOut_Axis
.
AbsMove
(
MoveInfo
,
Config
.
InOut_P1
,
Config
.
InOut_P1_speed
);
InOut_Axis
.
AbsMove
(
MoveInfo
,
Config
.
InOut_P1
,
Config
.
InOut_P1_speed
);
MoveInfo
.
log
(
$
"{storeMoveType}:进出轴
回到待机点
"
);
MoveInfo
.
log
(
$
"{storeMoveType}:进出轴
去待机点P1[{Config.InOut_P1}]
"
);
}
}
else
else
{
{
...
@@ -237,9 +259,9 @@ namespace DeviceLibrary
...
@@ -237,9 +259,9 @@ namespace DeviceLibrary
var
fixpos
=
"fix#"
+
To
.
Reel
.
PlateW
.
ToString
();
var
fixpos
=
"fix#"
+
To
.
Reel
.
PlateW
.
ToString
();
int
camPos
=
ConfigHelper
.
Config
.
Get
(
$
"CamPos_{fixpos}"
,
Fix
.
UpDown_PL
);
int
camPos
=
ConfigHelper
.
Config
.
Get
(
$
"CamPos_{fixpos}"
,
Fix
.
UpDown_PL
);
Comp_Axis
.
AbsMove
(
MoveInfo
,
0
,
Config
.
Comp_P1_speed
);
Comp_Axis
.
AbsMove
(
MoveInfo
,
0
,
Config
.
Comp_P1_speed
);
MoveInfo
.
log
(
$
"{storeMoveType}:压紧轴到待机点[{0}]"
);
UpDown_Axis
.
AbsMove
(
MoveInfo
,
camPos
,
Config
.
UpDown_P3_speed
/
2
);
UpDown_Axis
.
AbsMove
(
MoveInfo
,
camPos
,
Config
.
UpDown_P3_speed
/
2
);
MoveInfo
.
log
(
$
"{storeMoveType}:压紧轴回到待机点"
);
MoveInfo
.
log
(
$
"{storeMoveType}:升降轴到拍照点[{camPos}]"
);
MoveInfo
.
log
(
$
"{storeMoveType}:升降轴到拍照点"
);
break
;
break
;
case
MoveStep
.
StoreFIX04_02_UpToCamLoc
:
case
MoveStep
.
StoreFIX04_02_UpToCamLoc
:
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreFIX04_03_CheckLocation
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreFIX04_03_CheckLocation
);
...
@@ -251,7 +273,7 @@ namespace DeviceLibrary
...
@@ -251,7 +273,7 @@ namespace DeviceLibrary
{
{
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreFIX04_05_DownToFixLow
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreFIX04_05_DownToFixLow
);
UpDown_Axis
.
AbsMove
(
MoveInfo
,
Fix
.
UpDown_PL
,
Config
.
UpDown_P3_speed
/
2
);
UpDown_Axis
.
AbsMove
(
MoveInfo
,
Fix
.
UpDown_PL
,
Config
.
UpDown_P3_speed
/
2
);
MoveInfo
.
log
(
$
"{storeMoveType}:料盘放置正常,升降轴到库位低点"
);
MoveInfo
.
log
(
$
"{storeMoveType}:料盘放置正常,升降轴到库位低点
[{Fix.UpDown_PL}]
"
);
}
}
else
else
{
{
...
@@ -268,13 +290,16 @@ namespace DeviceLibrary
...
@@ -268,13 +290,16 @@ namespace DeviceLibrary
case
MoveStep
.
StoreFIX04_04_ReloadPos
:
case
MoveStep
.
StoreFIX04_04_ReloadPos
:
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreFIX04_05_DownToFixLow
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreFIX04_05_DownToFixLow
);
mainMachine
.
CloseFlipDoor
(
MoveInfo
);
mainMachine
.
CloseFlipDoor
(
MoveInfo
);
MoveInfo
.
log
(
$
"{storeMoveType}:翻板关闭"
);
Comp_Axis
.
AbsMove
(
MoveInfo
,
0
,
Config
.
Comp_P1_speed
);
Comp_Axis
.
AbsMove
(
MoveInfo
,
0
,
Config
.
Comp_P1_speed
);
MoveInfo
.
log
(
$
"{storeMoveType}:压紧轴到待机点{0}"
);
UpDown_Axis
.
AbsMove
(
MoveInfo
,
Fix
.
UpDown_PL
,
Config
.
UpDown_P3_speed
/
2
);
UpDown_Axis
.
AbsMove
(
MoveInfo
,
Fix
.
UpDown_PL
,
Config
.
UpDown_P3_speed
/
2
);
MoveInfo
.
log
(
$
"{storeMoveType}:
翻板关闭,压紧轴到待机点,
升降轴到库位低点,准备送到NG口"
);
MoveInfo
.
log
(
$
"{storeMoveType}:升降轴到库位低点,准备送到NG口"
);
break
;
break
;
case
MoveStep
.
StoreFIX04_05_DownToFixLow
:
case
MoveStep
.
StoreFIX04_05_DownToFixLow
:
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreFIX04_06_InoutToPos
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreFIX04_06_InoutToPos
);
InOut_Axis
.
AbsMove
(
MoveInfo
,
Fix
.
InOut_P2
,
Config
.
InOut_P2_speed
);
InOut_Axis
.
AbsMove
(
MoveInfo
,
Fix
.
InOut_P2
,
Config
.
InOut_P2_speed
);
MoveInfo
.
log
(
$
"{storeMoveType}:进出轴到取料点[{Fix.InOut_P2}]"
);
InOut_Axis
.
MonitorAxisLoadRate
();
InOut_Axis
.
MonitorAxisLoadRate
();
break
;
break
;
case
MoveStep
.
StoreFIX04_06_InoutToPos
:
case
MoveStep
.
StoreFIX04_06_InoutToPos
:
...
@@ -285,15 +310,15 @@ namespace DeviceLibrary
...
@@ -285,15 +310,15 @@ namespace DeviceLibrary
case
MoveStep
.
StoreFIX05
:
case
MoveStep
.
StoreFIX05
:
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreFIX06
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreFIX06
);
Comp_Axis
.
AbsMove
(
MoveInfo
,
Fix
.
Comp_PL
,
Config
.
Comp_P2_speed
);
Comp_Axis
.
AbsMove
(
MoveInfo
,
Fix
.
Comp_PL
,
Config
.
Comp_P2_speed
);
MoveInfo
.
log
(
$
"{storeMoveType}:压紧轴去压紧点[{Fix.Comp_PL}]"
);
UpDown_Axis
.
AbsMove
(
MoveInfo
,
Fix
.
UpDown_PH
,
Config
.
UpDown_P3_speed
);
UpDown_Axis
.
AbsMove
(
MoveInfo
,
Fix
.
UpDown_PH
,
Config
.
UpDown_P3_speed
);
MoveInfo
.
log
(
$
"{storeMoveType}:压紧轴压紧点:{Fix.Comp_PL}"
);
MoveInfo
.
log
(
$
"{storeMoveType}:上下轴去取料高点[{Fix.UpDown_PH}]"
);
MoveInfo
.
log
(
$
"{storeMoveType}:上下轴到达目的高点:{Fix.UpDown_PH}"
);
break
;
break
;
case
MoveStep
.
StoreFIX06
:
case
MoveStep
.
StoreFIX06
:
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreFIX07
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreFIX07
);
InOut_Axis
.
AbsMove
(
MoveInfo
,
Config
.
InOut_P1
,
Config
.
InOut_P1_speed
);
InOut_Axis
.
AbsMove
(
MoveInfo
,
Config
.
InOut_P1
,
Config
.
InOut_P1_speed
);
IgnoreX09
=
false
;
IgnoreX09
=
false
;
MoveInfo
.
log
(
$
"{storeMoveType}:进出轴
到达待机点
"
);
MoveInfo
.
log
(
$
"{storeMoveType}:进出轴
去待机点P1[{Config.InOut_P1}]
"
);
break
;
break
;
case
MoveStep
.
StoreFIX07
:
case
MoveStep
.
StoreFIX07
:
if
(!
IgnoreX09
&&
IOManager
.
IOValue
(
IO_Type
.
TrayCheck_Fixture
).
Equals
(
IO_VALUE
.
LOW
))
if
(!
IgnoreX09
&&
IOManager
.
IOValue
(
IO_Type
.
TrayCheck_Fixture
).
Equals
(
IO_VALUE
.
LOW
))
...
@@ -306,16 +331,16 @@ namespace DeviceLibrary
...
@@ -306,16 +331,16 @@ namespace DeviceLibrary
Msg
.
add
(
""
,
MsgLevel
.
info
,
ErrInfo
.
X09_Clear
);
Msg
.
add
(
""
,
MsgLevel
.
info
,
ErrInfo
.
X09_Clear
);
IgnoreX09
=
false
;
IgnoreX09
=
false
;
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS10
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS10
);
MoveInfo
.
log
(
$
"{storeMoveType}:
X30
取到料"
);
MoveInfo
.
log
(
$
"{storeMoveType}:
料叉
取到料"
);
}
}
break
;
break
;
case
MoveStep
.
StoreTS10
:
case
MoveStep
.
StoreTS10
:
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS11
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS11
);
RobotManage
.
ClearReelInFixPos
();
RobotManage
.
ClearReelInFixPos
();
Middle_Axis
.
AbsMove
(
MoveInfo
,
To
.
Middle_P2
,
Config
.
Middle_P2_speed
);
Middle_Axis
.
AbsMove
(
MoveInfo
,
To
.
Middle_P2
,
Config
.
Middle_P2_speed
);
MoveInfo
.
log
(
$
"{storeMoveType}:
行走机构到达目的地:{To.Middle_P2}
"
);
MoveInfo
.
log
(
$
"{storeMoveType}:
旋转轴去取料点P2[{To.Middle_P2}]
"
);
UpDown_Axis
.
AbsMove
(
MoveInfo
,
To
.
UpDown_PH
,
Config
.
UpDown_P1_speed
);
UpDown_Axis
.
AbsMove
(
MoveInfo
,
To
.
UpDown_PH
,
Config
.
UpDown_P1_speed
);
MoveInfo
.
log
(
$
"{storeMoveType}:上下轴
到达目的地高点:{To.UpDown_PH}
"
);
MoveInfo
.
log
(
$
"{storeMoveType}:上下轴
去取料高点[{To.UpDown_PH}]
"
);
break
;
break
;
case
MoveStep
.
StoreTS11
:
case
MoveStep
.
StoreTS11
:
...
@@ -347,28 +372,36 @@ namespace DeviceLibrary
...
@@ -347,28 +372,36 @@ namespace DeviceLibrary
break
;
break
;
case
MoveStep
.
StoreTS12
:
case
MoveStep
.
StoreTS12
:
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS13
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS13
);
MoveInfo
.
log
(
$
"{storeMoveType}:进出轴到达目的地"
);
InOut_Axis
.
AbsMove
(
MoveInfo
,
To
.
InOut_P2
,
Config
.
InOut_P2_speed
);
InOut_Axis
.
AbsMove
(
MoveInfo
,
To
.
InOut_P2
,
Config
.
InOut_P2_speed
);
InOut_Axis
.
MonitorAxisLoadRate
();
InOut_Axis
.
MonitorAxisLoadRate
();
MoveInfo
.
log
(
$
"{storeMoveType}:进出轴去取料点P2[{To.InOut_P2}]"
);
break
;
break
;
case
MoveStep
.
StoreTS13
:
case
MoveStep
.
StoreTS13
:
RobotManage
.
CameraA
.
CameraGrabOne
(
RobotManage
.
CameraA
.
GetFixtureStateFilename
(
To
.
posid
,
WareCode
,
storeMoveType
,
FixtureState
.
ToIn
));
RobotManage
.
CameraA
.
CameraGrabOne
(
RobotManage
.
CameraA
.
GetFixtureStateFilename
(
To
.
posid
,
WareCode
,
storeMoveType
,
FixtureState
.
ToIn
));
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS14
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS14
);
Comp_Axis
.
AbsMove
(
MoveInfo
,
To
.
Comp_PH
,
Config
.
Comp_P2_speed
);
Comp_Axis
.
AbsMove
(
MoveInfo
,
To
.
Comp_PH
,
Config
.
Comp_P2_speed
);
MoveInfo
.
log
(
$
"{storeMoveType}:压紧轴去压紧前点[{To.Comp_PH}]"
);
UpDown_Axis
.
AbsMove
(
MoveInfo
,
To
.
UpDown_PL
,
Config
.
UpDown_P3_speed
);
UpDown_Axis
.
AbsMove
(
MoveInfo
,
To
.
UpDown_PL
,
Config
.
UpDown_P3_speed
);
MoveInfo
.
log
(
$
"{storeMoveType}:压紧轴压紧点:{To.Comp_PH}"
);
MoveInfo
.
log
(
$
"{storeMoveType}:上下轴去取料低点[{To.UpDown_PL}]"
);
MoveInfo
.
log
(
$
"{storeMoveType}:上下轴到达目的地低点:{To.UpDown_PL}"
);
break
;
break
;
case
MoveStep
.
StoreTS14
:
case
MoveStep
.
StoreTS14
:
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS15
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
StoreTS15
);
InOut_Axis
.
AbsMove
(
MoveInfo
,
Config
.
InOut_P1
,
Config
.
InOut_P1_speed
);
InOut_Axis
.
AbsMove
(
MoveInfo
,
Config
.
InOut_P1
,
Config
.
InOut_P1_speed
);
MoveInfo
.
log
(
$
"{storeMoveType}:进出轴
到达待机点
"
);
MoveInfo
.
log
(
$
"{storeMoveType}:进出轴
去待机点P1[{Config.InOut_P1}]
"
);
break
;
break
;
case
MoveStep
.
StoreTS15
:
case
MoveStep
.
StoreTS15
:
RobotManage
.
CameraA
.
CameraGrabOne
(
RobotManage
.
CameraA
.
GetFixtureStateFilename
(
To
.
posid
,
WareCode
,
storeMoveType
,
FixtureState
.
ToOut
));
RobotManage
.
CameraA
.
CameraGrabOne
(
RobotManage
.
CameraA
.
GetFixtureStateFilename
(
To
.
posid
,
WareCode
,
storeMoveType
,
FixtureState
.
ToOut
));
if
(!
IgnoreX09
&&
IOManager
.
IOValue
(
IO_Type
.
TrayCheck_Fixture
).
Equals
(
IO_VALUE
.
HIGH
))
if
(!
IgnoreX09
&&
IOManager
.
IOValue
(
IO_Type
.
TrayCheck_Fixture
).
Equals
(
IO_VALUE
.
HIGH
))
{
{
Msg
.
add
(
crc
.
GetString
(
L
.
in_store_detect_material
,
"放料后料叉X30上任然检测到物料,请检查."
),
MsgLevel
.
alarm
,
ErrInfo
.
X09_BoxNotDetect
);
if
(
Common
.
IsManualHandleReelInFix
()
&&
Common
.
IsInstore
(
storeMoveType
))
{
IsNGReel
=
true
;
MoveInfo
.
log
(
$
"{storeMoveType}:放完料后料叉机构料盘检测X30亮,去单料口"
);
MoveInfo
.
EndMove
();
ErrMsgTxt
=
""
;
}
else
Msg
.
add
(
crc
.
GetString
(
L
.
in_store_detect_material
,
"放料后料叉X30上仍然检测到物料,请检查."
),
MsgLevel
.
alarm
,
ErrInfo
.
X09_BoxNotDetect
);
//RobotManage.UserPause("入库后料叉X30上任然检测到物料,请检查");
//RobotManage.UserPause("入库后料叉X30上任然检测到物料,请检查");
}
}
else
else
...
@@ -391,10 +424,18 @@ namespace DeviceLibrary
...
@@ -391,10 +424,18 @@ namespace DeviceLibrary
}
}
if
(
To
.
posid
==
BoxStorePosition
.
strings
)
if
(
To
.
posid
==
BoxStorePosition
.
strings
)
{
UpDown_Axis
.
AbsMove
(
MoveInfo
,
Config
.
UpDown_P5
,
Config
.
UpDown_P1_speed
);
UpDown_Axis
.
AbsMove
(
MoveInfo
,
Config
.
UpDown_P5
,
Config
.
UpDown_P1_speed
);
MoveInfo
.
log
(
$
"{storeMoveType}:上下轴去料串放料低点P5[{Config.UpDown_P5}]"
);
}
else
else
{
UpDown_Axis
.
AbsMove
(
MoveInfo
,
Config
.
UpDown_P3
,
Config
.
UpDown_P1_speed
);
UpDown_Axis
.
AbsMove
(
MoveInfo
,
Config
.
UpDown_P3
,
Config
.
UpDown_P1_speed
);
MoveInfo
.
log
(
$
"{storeMoveType}:上下轴去NG料口低点P3[{Config.UpDown_P3}]"
);
}
Middle_Axis
.
AbsMove
(
MoveInfo
,
Config
.
Middle_P1
,
Config
.
Middle_P1_speed
);
Middle_Axis
.
AbsMove
(
MoveInfo
,
Config
.
Middle_P1
,
Config
.
Middle_P1_speed
);
MoveInfo
.
log
(
$
"{storeMoveType}:旋转轴去待机点P1[{Config.Middle_P1}]"
);
if
(
Comp_Axis_HomeResetTimes
<=
0
)
if
(
Comp_Axis_HomeResetTimes
<=
0
)
{
{
Comp_Axis_HomeResetTimes
=
ConfigHelper
.
Config
.
Get
<
int
>(
"Comp_Axis_HomeResetTimes"
);
Comp_Axis_HomeResetTimes
=
ConfigHelper
.
Config
.
Get
<
int
>(
"Comp_Axis_HomeResetTimes"
);
...
@@ -402,7 +443,7 @@ namespace DeviceLibrary
...
@@ -402,7 +443,7 @@ namespace DeviceLibrary
MoveInfo
.
log
(
$
"{storeMoveType}:Comp_Axis到达最大次数开始回原"
);
MoveInfo
.
log
(
$
"{storeMoveType}:Comp_Axis到达最大次数开始回原"
);
}
}
Comp_Axis_HomeResetTimes
--;
Comp_Axis_HomeResetTimes
--;
MoveInfo
.
log
(
$
"{storeMoveType}:
上下轴,旋转返回待机点P1,
comrest:{Comp_Axis_HomeResetTimes}"
);
MoveInfo
.
log
(
$
"{storeMoveType}:comrest:{Comp_Axis_HomeResetTimes}"
);
ErrMsgTxt
=
""
;
ErrMsgTxt
=
""
;
break
;
break
;
case
MoveStep
.
StoreTS17
:
case
MoveStep
.
StoreTS17
:
...
...
DeviceLibrary/theMachine/Common.cs
查看文件 @
4d385d1
...
@@ -15,282 +15,301 @@ namespace DeviceLibrary
...
@@ -15,282 +15,301 @@ namespace DeviceLibrary
{
{
public
class
Common
public
class
Common
{
{
/**获取角度*/
#
region
贴标计算
// 求3点形成的夹角
///**获取角度*/
public
static
float
getAngle2
(
Point
pt1
,
Point
pt2
,
Point
pt0
)
//// 求3点形成的夹角
//public static float getAngle2(Point pt1, Point pt2, Point pt0)
//{
// double ma_x = pt1.X - pt0.X;
// double ma_y = pt1.Y - pt0.Y;
// double mb_x = pt2.X - pt0.X;
// double mb_y = pt2.Y - pt0.Y;
// double k = (ma_x * mb_y - mb_x * ma_y);
// if (k != 0)
// {
// k = (k / Math.Sqrt(k * k));
// }
// else
// {
// k = 1;
// }
// double v1 = (ma_x * mb_x) + (ma_y * mb_y);
// double ma_val = Math.Sqrt(ma_x * ma_x + ma_y * ma_y);
// double mb_val = Math.Sqrt(mb_x * mb_x + mb_y * mb_y);
// double cosM = v1 / (ma_val * mb_val);
// return (float)(Math.Acos(cosM) * 180 / Math.PI * k);
//}
//public static double getAngle(Point pt1, Point pt2)
//{
// double mb_x = pt2.X - pt1.X;
// double mb_y = pt2.Y - pt1.Y;
// double rotation = Math.Atan2(mb_y, mb_x);
// rotation = rotation / Math.PI * 180;
// return rotation;
// //double angle = 360 - rotation + 90;
// //angle = angle < 0 ? 360 + angle : angle;
// //angle = angle % 360;
// //return Math.Floor(angle / 360 * 24);
//}
//public static double distance(Point p1, Point p2)
//{
// double result;
// result = Math.Sqrt((p1.X - p2.X) * (p1.X - p2.X) + (p1.Y - p2.Y) * (p1.Y - p2.Y));
// return result;
//}
///// <summary>
///// 以中心点旋转Angle角度
///// </summary>
///// <param name="origin">中心点</param>
///// <param name="reRotate">待旋转的点</param>
///// <param name="angle">旋转角度, 逆时针</param>
//public static Point PointRotate(Point origin, Point rePoint, double angle)
//{
// double x = (rePoint.X - origin.X) * Math.Cos(angle) - (rePoint.Y - origin.Y) * Math.Sin(angle) + origin.X;
// double y = (rePoint.X - origin.X) * Math.Sin(angle) + (rePoint.Y - origin.Y) * Math.Cos(angle) + origin.Y;
// //rePoint.X = x;
// //rePoint.Y = y;
// return new Point((int)x, (int)y);
//}
///// <summary>
///// 以指定点为中心,测算指定角度,指定长度位置的点
///// </summary>
///// <param name="p1">原点</param>
///// <param name="angle">角度</param>
///// <param name="distance">距离</param>
///// <returns></returns>
//public static Point PointWithAngle(Point p1, double angle, double distance) {
// var x2 = p1.X + distance * Math.Cos(angle / 180 * Math.PI);
// var y2 = p1.Y + distance * Math.Sin(angle / 180 * Math.PI);
// return new Point((int)x2, (int)y2);
//}
///// <summary>
/////
///// </summary>
///// <param name="labelParam"></param>
///// <param name="org">中心点坐标</param>
///// <param name="Label_R_Offset">贴标臂偏移</param>
///// <param name="labelAngle">贴标角度</param>
///// <returns></returns>
//public static Point CalcLabelPoint(ReelParam labelParam, Point org,int Label_R_Offset, int Label_R_Angle_Diff, out int labelAngle) {
// SolidBrush blue = new SolidBrush(Color.BlueViolet);
// SolidBrush red = new SolidBrush(Color.Red);
// SolidBrush yeelow = new SolidBrush(Color.Yellow);
// SolidBrush AliceBlue = new SolidBrush(Color.AliceBlue);
// Font font = new Font(FontFamily.GenericSansSerif, 60);
// Pen Greenpen = new Pen(Color.Green, 10);
// Bitmap srcbitmap;
// if (File.Exists(labelParam.bitmapfilename))
// {
// srcbitmap = new Bitmap(labelParam.bitmapfilename);
// }
// else {
// srcbitmap = new Bitmap(3648, 3648);
// }
// Bitmap bitmap = new Bitmap(srcbitmap.Width, srcbitmap.Height, PixelFormat.Format32bppArgb);
// Graphics g = Graphics.FromImage(bitmap);
// g.DrawImage(srcbitmap, 0, 0);
// int srcbitmap_Width = srcbitmap.Width;
// srcbitmap.Dispose();
// bitmap.RotateFlip(RotateFlipType.Rotate270FlipNone);
// Size pointsize = new Size(30, 30);
// int widthOffset = 0;
// //Point Right_Batch_Point = new Point(RobotManage.Config.Right_Batch_X, RobotManage.Config.Right_Batch_Y);
// Point Right_Batch_Point = org;
// g.FillEllipse(blue, new Rectangle(Right_Batch_Point, pointsize));
// List<int> angles = new List<int>();
// labelParam.codeInfos.ForEach((c) => {
// //Point op = Common.PointRotate(Right_Batch_Point, new Point(c.X, c.Y), 83d / 180 * Math.PI);
// //c.X = op.X;
// //c.Y = op.Y;
// var x = c.Y;
// var y = srcbitmap_Width - c.X;
// c.X = x;
// c.Y = y;
// Point op = new Point(c.X, c.Y);
// g.FillEllipse(blue, new Rectangle(op, pointsize));
// var a = (int)getAngle(Right_Batch_Point, op);
// //a += ConfigHelper.Config.Get<int>("AngleChange");
// a = a < 0 ? 360 + a : a;
// //g.FillEllipse(red, new Rectangle(PointRotate(org, op, a), pointsize));
// if (c.CodeStr.Contains(labelParam.PN))
// angles.Add(a);
// widthOffset = (int)Common.distance(org, op);
// });
// angles.Sort();
// //if (angles.Count > 1) {
// angles.Add(360 + angles[0]);
// //}
// int biglen = 0;
// int bigangles = 0;
// for (int i = 0; i < angles.Count; i++) {
// if (angles.Count() - i < 2)
// break;
// var x = angles[i+1] - angles[i];
// if (x > biglen)
// {
// biglen = x;
// bigangles = angles[i];
// }
// }
// if (labelParam.PlateW > 7)
// {// && angles.Count==2) {
// labelAngle = angles[0] + 120;
// }
// else
// {
// //labelAngle = bigangles + biglen / 2;
// labelAngle = angles[0]+180;
// }
// //匹配照片角度与贴标旋转轴的角度差
// labelAngle += Label_R_Angle_Diff;
// labelAngle = labelAngle > 360 ? labelAngle- 360 : labelAngle;
// labelAngle = labelAngle > 360 ? labelAngle- 360 : labelAngle;
// //g.FillEllipse(red, new Rectangle(PointRotate(org, op, labelAngle), pointsize));
// //贴标坐标
// var p2 = PointWithAngle(org, labelAngle, widthOffset);
// //贴标偏移
// var p3 = PointWithAngle(p2, labelAngle+180, Label_R_Offset);
// //贴标角度,右侧为0度,+180转换到左侧为0度
// labelAngle += 180;
// labelAngle = labelAngle > 360 ? labelAngle - 360 : labelAngle;
// g.FillEllipse(yeelow, new Rectangle(p2, pointsize));
// g.FillEllipse(red, new Rectangle(p3, pointsize));
// g.Save();
// g.Dispose();
// string dir = "/image/labeldebug/";
// Directory.CreateDirectory(dir);
// bitmap.Save(dir+DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") +".jpg",ImageFormat.Jpeg);
// bitmap.Dispose();
// return p3;
//}
//static IdWorker id = new IdWorker(1, 1);
//static string[] pnreglist;
//static string[] qtyreglist;
//public static void LoadMatchList() {
// pnreglist = File.ReadAllLines("config\\pn.list").ToList().FindAll((s) => { return !string.IsNullOrWhiteSpace(s); }).ToArray();
// qtyreglist = File.ReadAllLines("config\\qty.list").ToList().FindAll((s) => { return !string.IsNullOrWhiteSpace(s); }).ToArray();
//}
//public static bool codeProcess(ReelParam labelParam,out string debugmsg) {
// if (pnreglist == null)
// LoadMatchList();
// debugmsg = "";
// List<CodeInfo> newcodeInfos = new List<CodeInfo>();
// labelParam.PN = "";
// foreach (var ci in labelParam.codeInfos.ToArray())
// {
// //string[] pnreglist = new string[] {
// // @"^P([1-9]\d+)$",
// // @"^(\d+)$%Code 128",
// // @"^([1-9]\d{7,9})$"
// //};
// foreach (var qtyreg in pnreglist)
// {
// var partrules = qtyreg.Split('%');
// if (partrules.Length == 2) {
// if (ci.CodeType != partrules[1])
// break;
// }
// var m = Regex.Match(ci.CodeStr, partrules[0]);
// if (m.Success)
// {
// newcodeInfos.Add(ci);
// //labelParam.codeInfos.Remove(ci);
// labelParam.PN = m.Groups[1].Value;
// debugmsg += $"匹配到PN:{labelParam.PN}\r\n命中规则:{qtyreg}\r\n";
// break;
// }
// }
// if (!string.IsNullOrEmpty(labelParam.PN))
// break;
// }
// labelParam.QTY = 0;
// foreach (var ci in labelParam.codeInfos.ToArray())
// {
// //string[] qtyreglist = new string[] {
// // @"Q(\d{3,5})[^\d]",
// // @"^Q(\d{3,5})$",
// // @"^\w+\.\d([1-9]+0+)[1-9]+\d*$",
// // @"^.+?;.+?;.+?;(\d{3,5}?);.+?;.+?$",
// // @"^QUANTITY:(\d*)",
// // @"^(\d{6})\s",
// // @"\(\w*\s+(\d+)[a-zA-Z]",
// //};
// foreach (var qtyreg in qtyreglist)
// {
// var m = Regex.Match(ci.CodeStr, qtyreg);
// if (m.Success)
// {
// newcodeInfos.Add(ci);
// //labelParam.codeInfos.Remove(ci);
// labelParam.QTY = int.Parse(m.Groups[1].Value);
// debugmsg += $"匹配到QTY:{labelParam.QTY}\r\n命中规则:{qtyreg}\r\n";
// break;
// }
// }
// if (labelParam.QTY > 0)
// break;
// }
// if (string.IsNullOrEmpty(labelParam.PN) || labelParam.QTY == 0)
// return false;
// //labelParam.codeInfos = newcodeInfos;
// labelParam.FC = "985022";
// labelParam.RI = "AL"+DateTime.Now.ToString("yyMMddHHmmssf");
// labelParam.Batch = DateTime.Now.ToString("MMdd");
// labelParam.WareCode = labelParam.RI;
// LogUtil.info($"匹配成功:{labelParam.PN},{labelParam.QTY},{labelParam.RI}");
// return true;
//}
#
endregion
public
static
bool
IsInstore
(
StoreMoveType
moveType
)
{
{
double
ma_x
=
pt1
.
X
-
pt0
.
X
;
return
moveType
.
Equals
(
StoreMoveType
.
InStore
);
double
ma_y
=
pt1
.
Y
-
pt0
.
Y
;
double
mb_x
=
pt2
.
X
-
pt0
.
X
;
double
mb_y
=
pt2
.
Y
-
pt0
.
Y
;
double
k
=
(
ma_x
*
mb_y
-
mb_x
*
ma_y
);
if
(
k
!=
0
)
{
k
=
(
k
/
Math
.
Sqrt
(
k
*
k
));
}
else
{
k
=
1
;
}
double
v1
=
(
ma_x
*
mb_x
)
+
(
ma_y
*
mb_y
);
double
ma_val
=
Math
.
Sqrt
(
ma_x
*
ma_x
+
ma_y
*
ma_y
);
double
mb_val
=
Math
.
Sqrt
(
mb_x
*
mb_x
+
mb_y
*
mb_y
);
double
cosM
=
v1
/
(
ma_val
*
mb_val
);
return
(
float
)(
Math
.
Acos
(
cosM
)
*
180
/
Math
.
PI
*
k
);
}
public
static
double
getAngle
(
Point
pt1
,
Point
pt2
)
{
double
mb_x
=
pt2
.
X
-
pt1
.
X
;
double
mb_y
=
pt2
.
Y
-
pt1
.
Y
;
double
rotation
=
Math
.
Atan2
(
mb_y
,
mb_x
);
rotation
=
rotation
/
Math
.
PI
*
180
;
return
rotation
;
//double angle = 360 - rotation + 90;
//angle = angle < 0 ? 360 + angle : angle;
//angle = angle % 360;
//return Math.Floor(angle / 360 * 24);
}
}
public
static
bool
IsOutStore
(
StoreMoveType
moveType
)
public
static
double
distance
(
Point
p1
,
Point
p2
)
{
{
double
result
;
return
moveType
.
Equals
(
StoreMoveType
.
OutStore
);
result
=
Math
.
Sqrt
((
p1
.
X
-
p2
.
X
)
*
(
p1
.
X
-
p2
.
X
)
+
(
p1
.
Y
-
p2
.
Y
)
*
(
p1
.
Y
-
p2
.
Y
));
return
result
;
}
}
/// <summary>
/// <summary>
///
以中心点旋转Angle角度
///
料叉上检测到的料盘是否到单料口手动处理
/// </summary>
/// </summary>
/// <param name="origin">中心点</param>
/// <param name="reRotate">待旋转的点</param>
/// <param name="angle">旋转角度, 逆时针</param>
public
static
Point
PointRotate
(
Point
origin
,
Point
rePoint
,
double
angle
)
{
double
x
=
(
rePoint
.
X
-
origin
.
X
)
*
Math
.
Cos
(
angle
)
-
(
rePoint
.
Y
-
origin
.
Y
)
*
Math
.
Sin
(
angle
)
+
origin
.
X
;
double
y
=
(
rePoint
.
X
-
origin
.
X
)
*
Math
.
Sin
(
angle
)
+
(
rePoint
.
Y
-
origin
.
Y
)
*
Math
.
Cos
(
angle
)
+
origin
.
Y
;
//rePoint.X = x;
//rePoint.Y = y;
return
new
Point
((
int
)
x
,
(
int
)
y
);
}
/// <summary>
/// 以指定点为中心,测算指定角度,指定长度位置的点
/// </summary>
/// <param name="p1">原点</param>
/// <param name="angle">角度</param>
/// <param name="distance">距离</param>
/// <returns></returns>
public
static
Point
PointWithAngle
(
Point
p1
,
double
angle
,
double
distance
)
{
var
x2
=
p1
.
X
+
distance
*
Math
.
Cos
(
angle
/
180
*
Math
.
PI
);
var
y2
=
p1
.
Y
+
distance
*
Math
.
Sin
(
angle
/
180
*
Math
.
PI
);
return
new
Point
((
int
)
x2
,
(
int
)
y2
);
}
/// <summary>
///
/// </summary>
/// <param name="labelParam"></param>
/// <param name="org">中心点坐标</param>
/// <param name="Label_R_Offset">贴标臂偏移</param>
/// <param name="labelAngle">贴标角度</param>
/// <returns></returns>
/// <returns></returns>
public
static
Point
CalcLabelPoint
(
ReelParam
labelParam
,
Point
org
,
int
Label_R_Offset
,
int
Label_R_Angle_Diff
,
out
int
labelAngle
)
{
public
static
bool
IsManualHandleReelInFix
()
{
SolidBrush
blue
=
new
SolidBrush
(
Color
.
BlueViolet
);
return
ConfigAppSettings
.
GetValue
(
"IsManualHandleReelInFix"
,
false
,
"料叉上检测到的料盘是否到单料口手动处理"
);
SolidBrush
red
=
new
SolidBrush
(
Color
.
Red
);
SolidBrush
yeelow
=
new
SolidBrush
(
Color
.
Yellow
);
SolidBrush
AliceBlue
=
new
SolidBrush
(
Color
.
AliceBlue
);
Font
font
=
new
Font
(
FontFamily
.
GenericSansSerif
,
60
);
Pen
Greenpen
=
new
Pen
(
Color
.
Green
,
10
);
Bitmap
srcbitmap
;
if
(
File
.
Exists
(
labelParam
.
bitmapfilename
))
{
srcbitmap
=
new
Bitmap
(
labelParam
.
bitmapfilename
);
}
else
{
srcbitmap
=
new
Bitmap
(
3648
,
3648
);
}
Bitmap
bitmap
=
new
Bitmap
(
srcbitmap
.
Width
,
srcbitmap
.
Height
,
PixelFormat
.
Format32bppArgb
);
Graphics
g
=
Graphics
.
FromImage
(
bitmap
);
g
.
DrawImage
(
srcbitmap
,
0
,
0
);
int
srcbitmap_Width
=
srcbitmap
.
Width
;
srcbitmap
.
Dispose
();
bitmap
.
RotateFlip
(
RotateFlipType
.
Rotate270FlipNone
);
Size
pointsize
=
new
Size
(
30
,
30
);
int
widthOffset
=
0
;
//Point Right_Batch_Point = new Point(RobotManage.Config.Right_Batch_X, RobotManage.Config.Right_Batch_Y);
Point
Right_Batch_Point
=
org
;
g
.
FillEllipse
(
blue
,
new
Rectangle
(
Right_Batch_Point
,
pointsize
));
List
<
int
>
angles
=
new
List
<
int
>();
labelParam
.
codeInfos
.
ForEach
((
c
)
=>
{
//Point op = Common.PointRotate(Right_Batch_Point, new Point(c.X, c.Y), 83d / 180 * Math.PI);
//c.X = op.X;
//c.Y = op.Y;
var
x
=
c
.
Y
;
var
y
=
srcbitmap_Width
-
c
.
X
;
c
.
X
=
x
;
c
.
Y
=
y
;
Point
op
=
new
Point
(
c
.
X
,
c
.
Y
);
g
.
FillEllipse
(
blue
,
new
Rectangle
(
op
,
pointsize
));
var
a
=
(
int
)
getAngle
(
Right_Batch_Point
,
op
);
//a += ConfigHelper.Config.Get<int>("AngleChange");
a
=
a
<
0
?
360
+
a
:
a
;
//g.FillEllipse(red, new Rectangle(PointRotate(org, op, a), pointsize));
if
(
c
.
CodeStr
.
Contains
(
labelParam
.
PN
))
angles
.
Add
(
a
);
widthOffset
=
(
int
)
Common
.
distance
(
org
,
op
);
});
angles
.
Sort
();
//if (angles.Count > 1) {
angles
.
Add
(
360
+
angles
[
0
]);
//}
int
biglen
=
0
;
int
bigangles
=
0
;
for
(
int
i
=
0
;
i
<
angles
.
Count
;
i
++)
{
if
(
angles
.
Count
()
-
i
<
2
)
break
;
var
x
=
angles
[
i
+
1
]
-
angles
[
i
];
if
(
x
>
biglen
)
{
biglen
=
x
;
bigangles
=
angles
[
i
];
}
}
if
(
labelParam
.
PlateW
>
7
)
{
// && angles.Count==2) {
labelAngle
=
angles
[
0
]
+
120
;
}
else
{
//labelAngle = bigangles + biglen / 2;
labelAngle
=
angles
[
0
]+
180
;
}
//匹配照片角度与贴标旋转轴的角度差
labelAngle
+=
Label_R_Angle_Diff
;
labelAngle
=
labelAngle
>
360
?
labelAngle
-
360
:
labelAngle
;
labelAngle
=
labelAngle
>
360
?
labelAngle
-
360
:
labelAngle
;
//g.FillEllipse(red, new Rectangle(PointRotate(org, op, labelAngle), pointsize));
//贴标坐标
var
p2
=
PointWithAngle
(
org
,
labelAngle
,
widthOffset
);
//贴标偏移
var
p3
=
PointWithAngle
(
p2
,
labelAngle
+
180
,
Label_R_Offset
);
//贴标角度,右侧为0度,+180转换到左侧为0度
labelAngle
+=
180
;
labelAngle
=
labelAngle
>
360
?
labelAngle
-
360
:
labelAngle
;
g
.
FillEllipse
(
yeelow
,
new
Rectangle
(
p2
,
pointsize
));
g
.
FillEllipse
(
red
,
new
Rectangle
(
p3
,
pointsize
));
g
.
Save
();
g
.
Dispose
();
string
dir
=
"/image/labeldebug/"
;
Directory
.
CreateDirectory
(
dir
);
bitmap
.
Save
(
dir
+
DateTime
.
Now
.
ToString
(
"yyyy-MM-dd-HH-mm-ss"
)
+
".jpg"
,
ImageFormat
.
Jpeg
);
bitmap
.
Dispose
();
return
p3
;
}
static
IdWorker
id
=
new
IdWorker
(
1
,
1
);
static
string
[]
pnreglist
;
static
string
[]
qtyreglist
;
public
static
void
LoadMatchList
()
{
pnreglist
=
File
.
ReadAllLines
(
"config\\pn.list"
).
ToList
().
FindAll
((
s
)
=>
{
return
!
string
.
IsNullOrWhiteSpace
(
s
);
}).
ToArray
();
qtyreglist
=
File
.
ReadAllLines
(
"config\\qty.list"
).
ToList
().
FindAll
((
s
)
=>
{
return
!
string
.
IsNullOrWhiteSpace
(
s
);
}).
ToArray
();
}
public
static
bool
codeProcess
(
ReelParam
labelParam
,
out
string
debugmsg
)
{
if
(
pnreglist
==
null
)
LoadMatchList
();
debugmsg
=
""
;
List
<
CodeInfo
>
newcodeInfos
=
new
List
<
CodeInfo
>();
labelParam
.
PN
=
""
;
foreach
(
var
ci
in
labelParam
.
codeInfos
.
ToArray
())
{
//string[] pnreglist = new string[] {
// @"^P([1-9]\d+)$",
// @"^(\d+)$%Code 128",
// @"^([1-9]\d{7,9})$"
//};
foreach
(
var
qtyreg
in
pnreglist
)
{
var
partrules
=
qtyreg
.
Split
(
'%'
);
if
(
partrules
.
Length
==
2
)
{
if
(
ci
.
CodeType
!=
partrules
[
1
])
break
;
}
var
m
=
Regex
.
Match
(
ci
.
CodeStr
,
partrules
[
0
]);
if
(
m
.
Success
)
{
newcodeInfos
.
Add
(
ci
);
//labelParam.codeInfos.Remove(ci);
labelParam
.
PN
=
m
.
Groups
[
1
].
Value
;
debugmsg
+=
$
"匹配到PN:{labelParam.PN}\r\n命中规则:{qtyreg}\r\n"
;
break
;
}
}
if
(!
string
.
IsNullOrEmpty
(
labelParam
.
PN
))
break
;
}
labelParam
.
QTY
=
0
;
foreach
(
var
ci
in
labelParam
.
codeInfos
.
ToArray
())
{
//string[] qtyreglist = new string[] {
// @"Q(\d{3,5})[^\d]",
// @"^Q(\d{3,5})$",
// @"^\w+\.\d([1-9]+0+)[1-9]+\d*$",
// @"^.+?;.+?;.+?;(\d{3,5}?);.+?;.+?$",
// @"^QUANTITY:(\d*)",
// @"^(\d{6})\s",
// @"\(\w*\s+(\d+)[a-zA-Z]",
//};
foreach
(
var
qtyreg
in
qtyreglist
)
{
var
m
=
Regex
.
Match
(
ci
.
CodeStr
,
qtyreg
);
if
(
m
.
Success
)
{
newcodeInfos
.
Add
(
ci
);
//labelParam.codeInfos.Remove(ci);
labelParam
.
QTY
=
int
.
Parse
(
m
.
Groups
[
1
].
Value
);
debugmsg
+=
$
"匹配到QTY:{labelParam.QTY}\r\n命中规则:{qtyreg}\r\n"
;
break
;
}
}
if
(
labelParam
.
QTY
>
0
)
break
;
}
if
(
string
.
IsNullOrEmpty
(
labelParam
.
PN
)
||
labelParam
.
QTY
==
0
)
return
false
;
//labelParam.codeInfos = newcodeInfos;
labelParam
.
FC
=
"985022"
;
labelParam
.
RI
=
"AL"
+
DateTime
.
Now
.
ToString
(
"yyMMddHHmmssf"
);
labelParam
.
Batch
=
DateTime
.
Now
.
ToString
(
"MMdd"
);
labelParam
.
WareCode
=
labelParam
.
RI
;
LogUtil
.
info
(
$
"匹配成功:{labelParam.PN},{labelParam.QTY},{labelParam.RI}"
);
return
true
;
}
}
public
T
DeepClone
<
T
>(
T
_object
)
public
T
DeepClone
<
T
>(
T
_object
)
{
{
...
@@ -308,14 +327,16 @@ namespace DeviceLibrary
...
@@ -308,14 +327,16 @@ namespace DeviceLibrary
}
}
public
class
Msg
public
class
Msg
{
{
public
static
List
<
Msg
>
msg
=
new
List
<
Msg
>();
public
static
List
<
Msg
>
msg
=
new
List
<
Msg
>();
public
string
msgtxt
;
public
string
msgtxt
;
public
MsgLevel
msgLevel
;
public
MsgLevel
msgLevel
;
public
ErrInfo
errInfo
;
public
ErrInfo
errInfo
;
public
DateTime
datetime
;
public
DateTime
datetime
;
public
static
List
<
Msg
>
get
()
{
public
static
List
<
Msg
>
get
()
if
(
_setlogones
)
{
{
if
(
_setlogones
)
{
_setlogones
=
false
;
_setlogones
=
false
;
foreach
(
var
m
in
msg
)
foreach
(
var
m
in
msg
)
LogUtil
.
info
(
m
.
msgtxt
);
LogUtil
.
info
(
m
.
msgtxt
);
...
@@ -323,12 +344,12 @@ namespace DeviceLibrary
...
@@ -323,12 +344,12 @@ namespace DeviceLibrary
List
<
Msg
>
mm
=
new
List
<
Msg
>(
msg
);
List
<
Msg
>
mm
=
new
List
<
Msg
>(
msg
);
return
mm
;
return
mm
;
}
}
public
static
void
add
(
string
m
,
MsgLevel
ml
,
ErrInfo
errInfo
=
ErrInfo
.
Empty
)
public
static
void
add
(
string
m
,
MsgLevel
ml
,
ErrInfo
errInfo
=
ErrInfo
.
Empty
)
{
{
lock
(
msg
)
lock
(
msg
)
{
{
var
fm
=
msg
.
Find
((
x
)
=>
x
.
msgtxt
==
m
);
var
fm
=
msg
.
Find
((
x
)
=>
x
.
msgtxt
==
m
);
if
(
fm
==
null
)
if
(
fm
==
null
)
msg
.
Add
(
new
Msg
{
msgtxt
=
m
,
msgLevel
=
ml
,
datetime
=
DateTime
.
Now
,
errInfo
=
errInfo
});
msg
.
Add
(
new
Msg
{
msgtxt
=
m
,
msgLevel
=
ml
,
datetime
=
DateTime
.
Now
,
errInfo
=
errInfo
});
}
}
}
}
...
@@ -343,13 +364,15 @@ namespace DeviceLibrary
...
@@ -343,13 +364,15 @@ namespace DeviceLibrary
msg
.
Clear
();
msg
.
Clear
();
}
}
}
}
public
enum
MsgLevel
{
public
enum
MsgLevel
{
warning
,
warning
,
info
,
info
,
alarm
alarm
}
}
public
enum
ErrInfo
{
public
enum
ErrInfo
{
Empty
,
Empty
,
X09_BoxNotDetect
,
X09_BoxNotDetect
,
ResetBtn
,
ResetBtn
,
...
...
DeviceLibrary/theMachine/JobList.cs
查看文件 @
4d385d1
...
@@ -16,24 +16,26 @@ namespace DeviceLibrary
...
@@ -16,24 +16,26 @@ namespace DeviceLibrary
public
StoreJobList
(
string
jn
)
{
public
StoreJobList
(
string
jn
)
{
jobname
=
jn
;
jobname
=
jn
;
}
}
public
void
Enqueue
(
JobInfo
jobInfo
)
public
bool
Enqueue
(
JobInfo
jobInfo
)
{
{
lock
(
jobInfos
)
lock
(
jobInfos
)
{
{
if
(
lastoutpos
==
jobInfo
.
PosId
)
if
(
lastoutpos
==
jobInfo
.
PosId
)
{
{
LogUtil
.
info
(
$
"[{jobname}] 出库任务正在执行:"
+
jobInfo
.
ToStr
());
LogUtil
.
info
(
$
"[{jobname}] 出库任务正在执行:"
+
jobInfo
.
ToStr
());
return
;
return
false
;
}
}
var
l
=
jobInfos
.
ToList
().
Find
((
x
)
=>
{
return
x
.
PosId
==
jobInfo
.
PosId
;
});
var
l
=
jobInfos
.
ToList
().
Find
((
x
)
=>
{
return
x
.
PosId
==
jobInfo
.
PosId
;
});
if
(
l
==
null
)
if
(
l
==
null
)
{
{
jobInfos
.
Enqueue
(
jobInfo
);
jobInfos
.
Enqueue
(
jobInfo
);
LogUtil
.
info
(
$
"[{jobname}] 出库任务加入队列:"
+
jobInfo
.
ToStr
());
LogUtil
.
info
(
$
"[{jobname}] 出库任务加入队列:"
+
jobInfo
.
ToStr
());
return
true
;
}
}
else
else
LogUtil
.
info
(
$
"[{jobname}] 出库任务已存在队列中:"
+
jobInfo
.
ToStr
());
LogUtil
.
info
(
$
"[{jobname}] 出库任务已存在队列中:"
+
jobInfo
.
ToStr
());
}
}
return
false
;
}
}
public
bool
Dequeue
(
out
JobInfo
jobInfo
)
public
bool
Dequeue
(
out
JobInfo
jobInfo
)
{
{
...
...
DeviceLibrary/theMachine/MainMachine.cs
查看文件 @
4d385d1
...
@@ -330,6 +330,7 @@ namespace DeviceLibrary
...
@@ -330,6 +330,7 @@ namespace DeviceLibrary
}
}
}
}
LogUtil
.
info
(
"主线程已退出."
);
LogUtil
.
info
(
"主线程已退出."
);
RobotManage
.
isRunning
=
false
;
}
}
public
void
Start
()
public
void
Start
()
{
{
...
...
DeviceLibrary/theMachine/MainMachine_Clamp.cs
查看文件 @
4d385d1
...
@@ -81,10 +81,21 @@ namespace DeviceLibrary
...
@@ -81,10 +81,21 @@ namespace DeviceLibrary
switch
(
ClampMoveInfo
.
MoveStep
)
switch
(
ClampMoveInfo
.
MoveStep
)
{
{
case
MoveStep
.
Wait
:
case
MoveStep
.
Wait
:
if
(
IsGetReelReady
&&
StoreMoveInfo
.
MoveStep
<
MoveStep
.
StoreOut10
&&
OutSingleJobList
.
Count
==
0
)
if
(
Common
.
IsManualHandleReelInFix
()
)
{
{
ClampMoveInfo
.
NewMove
(
MoveStep
.
ReelClamp_01
);
if
(
IsGetReelReady
&&
StoreMoveInfo
.
MoveStep
==
MoveStep
.
Wait
&&
OutSingleJobList
.
Count
==
0
)
OpenFlipDoor
(
ClampMoveInfo
);
{
ClampMoveInfo
.
NewMove
(
MoveStep
.
ReelClamp_01
);
OpenFlipDoor
(
ClampMoveInfo
);
}
}
else
{
if
(
IsGetReelReady
&&
StoreMoveInfo
.
MoveStep
<
MoveStep
.
StoreOut10
&&
OutSingleJobList
.
Count
==
0
)
{
ClampMoveInfo
.
NewMove
(
MoveStep
.
ReelClamp_01
);
OpenFlipDoor
(
ClampMoveInfo
);
}
}
}
break
;
break
;
case
MoveStep
.
ReelClamp_01
:
case
MoveStep
.
ReelClamp_01
:
...
@@ -280,7 +291,7 @@ namespace DeviceLibrary
...
@@ -280,7 +291,7 @@ namespace DeviceLibrary
{
{
Msg
.
add
(
crc
.
GetString
(
L
.
x29_low_no_reel
,
"传感器X29未检测到单料口料盘."
),
MsgLevel
.
alarm
);
Msg
.
add
(
crc
.
GetString
(
L
.
x29_low_no_reel
,
"传感器X29未检测到单料口料盘."
),
MsgLevel
.
alarm
);
Msg
.
add
(
ClampMoveInfo
.
MoveParam
.
NgMsg
,
MsgLevel
.
warning
);
Msg
.
add
(
ClampMoveInfo
.
MoveParam
.
NgMsg
,
MsgLevel
.
warning
);
RobotManage
.
UserPause
(
crc
.
GetString
(
"Res0005"
,
"传感器X29未检测到单料口料盘"
));
//
RobotManage.UserPause(crc.GetString("Res0005", "传感器X29未检测到单料口料盘"));
}
}
}
}
SingleDoor
.
ToHigh
(
ClampMoveInfo
);
SingleDoor
.
ToHigh
(
ClampMoveInfo
);
...
@@ -394,7 +405,7 @@ namespace DeviceLibrary
...
@@ -394,7 +405,7 @@ namespace DeviceLibrary
get
get
{
{
if
(
ConfigHelper
.
Config
.
Get
(
"CamTestReel_Ability"
,
false
))
if
(
ConfigHelper
.
Config
.
Get
(
"CamTestReel_Ability"
,
false
))
return
CodeManager
.
TestHasReel
(
CodeManager
.
hikNameList
[
0
],
out
_
,
out
_
);
return
CodeManager
.
TestHasReel
(
CodeManager
.
hikNameList
[
0
],
out
_
,
out
_
);
else
else
return
IOValue
(
IO_Type
.
NGDoor_Tray_Check
).
Equals
(
IO_VALUE
.
HIGH
);
return
IOValue
(
IO_Type
.
NGDoor_Tray_Check
).
Equals
(
IO_VALUE
.
HIGH
);
}
}
...
@@ -465,7 +476,7 @@ namespace DeviceLibrary
...
@@ -465,7 +476,7 @@ namespace DeviceLibrary
List
<
CodeInfo
>
LastCodeList
;
List
<
CodeInfo
>
LastCodeList
;
LastCodeList
=
CodeManager
.
CameraScan
(
CodeManager
.
hikNameList
);
LastCodeList
=
CodeManager
.
CameraScan
(
CodeManager
.
hikNameList
);
if
(
LastCodeList
.
Count
==
0
)
if
(
LastCodeList
.
Count
==
0
)
LastCodeList
=
CodeManager
.
CameraScan
(
CodeManager
.
hikNameList
);
LastCodeList
=
CodeManager
.
CameraScan
(
CodeManager
.
hikNameList
);
//BoxParam labelParam = new BoxParam();
//BoxParam labelParam = new BoxParam();
//labelParam.codeInfos = new List<CodeInfo>(LastCodeList);
//labelParam.codeInfos = new List<CodeInfo>(LastCodeList);
...
...
DeviceLibrary/theMachine/MainMachine_Store.cs
查看文件 @
4d385d1
...
@@ -19,14 +19,14 @@ namespace DeviceLibrary
...
@@ -19,14 +19,14 @@ namespace DeviceLibrary
public
void
AddOutStoreTask
(
string
posId
,
int
plateW
,
int
plateH
)
public
void
AddOutStoreTask
(
string
posId
,
int
plateW
,
int
plateH
)
{
{
JobInfo
jobInfo
=
new
JobInfo
(
""
,
posId
,
plateW
,
plateH
);
JobInfo
jobInfo
=
new
JobInfo
(
""
,
posId
,
plateW
,
plateH
);
OutStoreJobList
.
Enqueue
(
jobInfo
);
if
(
OutStoreJobList
.
Enqueue
(
jobInfo
))
LogUtil
.
info
(
$
"添加出库任务队列: {posId},
当前任务数量: {OutStoreJobList.Count}"
);
LogUtil
.
info
(
$
"批量出库任务
当前任务数量: {OutStoreJobList.Count}"
);
}
}
public
void
AddSingleStoreTask
(
string
posId
,
int
plateW
,
int
plateH
)
public
void
AddSingleStoreTask
(
string
posId
,
int
plateW
,
int
plateH
)
{
{
JobInfo
jobInfo
=
new
JobInfo
(
""
,
posId
,
plateW
,
plateH
);
JobInfo
jobInfo
=
new
JobInfo
(
""
,
posId
,
plateW
,
plateH
);
OutSingleJobList
.
Enqueue
(
jobInfo
);
if
(
OutSingleJobList
.
Enqueue
(
jobInfo
))
LogUtil
.
info
(
$
"添加单盘出库任务队列: {posId},当前
任务数量: {OutSingleJobList.Count}"
);
LogUtil
.
info
(
$
"单盘出库任务队列
任务数量: {OutSingleJobList.Count}"
);
}
}
void
StoreProcess
()
void
StoreProcess
()
{
{
...
@@ -62,15 +62,7 @@ namespace DeviceLibrary
...
@@ -62,15 +62,7 @@ namespace DeviceLibrary
{
{
if
(!
boxTransport
.
IgnoreX09
&&
IOValue
(
IO_Type
.
TrayCheck_Fixture
).
Equals
(
IO_VALUE
.
HIGH
))
if
(!
boxTransport
.
IgnoreX09
&&
IOValue
(
IO_Type
.
TrayCheck_Fixture
).
Equals
(
IO_VALUE
.
HIGH
))
{
{
Msg
.
add
(
crc
.
GetString
(
"Res0004"
,
"收到出库任务,但料叉上有料,无法启动,请检查"
),
MsgLevel
.
alarm
,
ErrInfo
.
X09_BoxNotDetect
);
//if (!boxTransport.IgnoreX09 && IOMonitor.IODebound(IO_Type.TrayCheck_Fixture, Config, IO_VALUE.HIGH, 1000))
//{
// Msg.add(crc.GetString("Res0004", "收到出库任务,但料叉上有料,无法启动,请检查"), MsgLevel.alarm, ErrInfo.X09_BoxNotDetect);
// //RobotManage.UserPause(crc.GetString("Res0004", "收到出库任务,但料叉上有料,无法启动,请检查"));
//}
//else
Msg
.
add
(
crc
.
GetString
(
"Res0004"
,
"收到出库任务,但料叉上有料,无法启动,请检查"
),
MsgLevel
.
alarm
);
RobotManage
.
UserPause
(
crc
.
GetString
(
"Res0004"
,
"收到出库任务,但料叉上有料,无法启动,请检查"
));
return
;
return
;
}
}
else
else
...
@@ -94,15 +86,9 @@ namespace DeviceLibrary
...
@@ -94,15 +86,9 @@ namespace DeviceLibrary
{
{
if
(!
boxTransport
.
IgnoreX09
&&
IOValue
(
IO_Type
.
TrayCheck_Fixture
).
Equals
(
IO_VALUE
.
HIGH
))
if
(!
boxTransport
.
IgnoreX09
&&
IOValue
(
IO_Type
.
TrayCheck_Fixture
).
Equals
(
IO_VALUE
.
HIGH
))
{
{
//Msg.add(crc.GetString("Res0004", "收到出库任务,但料叉上有料,无法启动,请检查"), MsgLevel.alarm);
//if (!boxTransport.IgnoreX09 && IOMonitor.IODebound(IO_Type.TrayCheck_Fixture, Config, IO_VALUE.HIGH, 1000))
//RobotManage.UserPause(crc.GetString("Res0004", "收到出库任务,但料叉上有料,无法启动,请检查"));
//{
Msg
.
add
(
crc
.
GetString
(
"Res0004"
,
"收到出库任务,但料叉上有料,无法启动,请检查"
),
MsgLevel
.
alarm
,
ErrInfo
.
X09_BoxNotDetect
);
// Msg.add(crc.GetString("Res0004", "收到出库任务,但料叉上有料,无法启动,请检查"), MsgLevel.alarm, ErrInfo.X09_BoxNotDetect);
// //RobotManage.UserPause("收到出库任务,但料叉上有料,无法启动,请检查");
//}
//else
Msg
.
add
(
crc
.
GetString
(
"Res0004"
,
"收到出库任务,但料叉上有料,无法启动,请检查"
),
MsgLevel
.
alarm
);
RobotManage
.
UserPause
(
crc
.
GetString
(
"Res0004"
,
"收到出库任务,但料叉上有料,无法启动,请检查"
));
return
;
return
;
}
}
else
else
...
@@ -133,8 +119,15 @@ namespace DeviceLibrary
...
@@ -133,8 +119,15 @@ namespace DeviceLibrary
case
MoveStep
.
StoreIn02
:
case
MoveStep
.
StoreIn02
:
break
;
break
;
case
MoveStep
.
StoreIn03
:
case
MoveStep
.
StoreIn03
:
if
(
boxTransport
.
IsTakedReel
)
if
(
boxTransport
.
IsNGReel
)
{
StoreMoveInfo
.
NextMoveStep
(
MoveStep
.
StoreInNG_01
);
boxTransport
.
IsNGReel
=
false
;
StoreMoveInfo
.
log
(
$
"入库料盘被判定为NG,准备送往单料口"
);
}
else
if
(
boxTransport
.
IsTakedReel
)
{
{
boxTransport
.
IsNGReel
=
false
;
ReelTaked
();
ReelTaked
();
StoreMoveInfo
.
NextMoveStep
(
MoveStep
.
StoreIn04
);
StoreMoveInfo
.
NextMoveStep
(
MoveStep
.
StoreIn04
);
StoreMoveInfo
.
log
(
$
"料盘已取走"
);
StoreMoveInfo
.
log
(
$
"料盘已取走"
);
...
@@ -145,7 +138,13 @@ namespace DeviceLibrary
...
@@ -145,7 +138,13 @@ namespace DeviceLibrary
}
}
break
;
break
;
case
MoveStep
.
StoreIn04
:
case
MoveStep
.
StoreIn04
:
if
(
boxTransport
.
IsComplateOrFree
)
if
(
boxTransport
.
IsNGReel
)
{
StoreMoveInfo
.
NextMoveStep
(
MoveStep
.
StoreInNG_01
);
boxTransport
.
IsNGReel
=
false
;
StoreMoveInfo
.
log
(
$
"入库料盘被判定为NG,准备送往单料口"
);
}
else
if
(
boxTransport
.
IsComplateOrFree
)
{
{
if
(!
ServerCM
.
SendStoreState
(
StoreMoveInfo
.
MoveParam
.
PosID
,
StoreStatus
.
InStoreEnd
))
if
(!
ServerCM
.
SendStoreState
(
StoreMoveInfo
.
MoveParam
.
PosID
,
StoreStatus
.
InStoreEnd
))
{
{
...
@@ -157,6 +156,35 @@ namespace DeviceLibrary
...
@@ -157,6 +156,35 @@ namespace DeviceLibrary
}
}
break
;
break
;
case
MoveStep
.
StoreInNG_01
:
string
msg
=
ServerCM
.
cancelPutInTask
(
Name
,
StoreMoveInfo
.
MoveParam
.
WareCode
);
if
(
string
.
IsNullOrEmpty
(
msg
))
{
StoreMoveInfo
.
NextMoveStep
(
MoveStep
.
StoreInNG_02
);
StoreMoveInfo
.
log
(
$
"取消[{StoreMoveInfo.MoveParam.WareCode}]入库任务"
);
}
break
;
case
MoveStep
.
StoreInNG_02
:
StoreMoveInfo
.
NextMoveStep
(
MoveStep
.
StoreInNG_03
);
// var outFrom = CSVPositionReader<ACStorePosition>.GetPositon(StoreMoveInfo.MoveParam.PosID);
BoxStorePosition
tar
=
new
BoxStorePosition
(
Config
,
StoreSide
.
NGDoor
,
StoreMoveInfo
.
MoveParam
);
boxTransport
.
Start
(
null
,
tar
,
StoreMoveType
.
InStore
);
StoreMoveInfo
.
log
(
$
"开始转运料盘到单料口"
);
break
;
case
MoveStep
.
StoreInNG_03
:
if
(
boxTransport
.
IsPutOnOut
)
{
StoreMoveInfo
.
log
(
$
"料盘已到达单料口"
);
NGPuted
(
crc
.
GetString
(
L
.
instore_abnormal_reel
,
"入库过程中料叉检测料盘异常"
));
StoreMoveInfo
.
EndMove
();
}
break
;
case
MoveStep
.
StoreInNG_04
:
break
;
case
MoveStep
.
StoreInNG_05
:
break
;
case
MoveStep
.
StoreOut_NGPre
:
case
MoveStep
.
StoreOut_NGPre
:
StoreMoveInfo
.
NextMoveStep
(
MoveStep
.
StoreOut10
);
StoreMoveInfo
.
NextMoveStep
(
MoveStep
.
StoreOut10
);
break
;
break
;
...
...
DeviceLibrary/theMachine/MoveStep.cs
查看文件 @
4d385d1
...
@@ -115,6 +115,12 @@ namespace DeviceLibrary
...
@@ -115,6 +115,12 @@ namespace DeviceLibrary
StoreIn07
,
StoreIn07
,
StoreIn08
,
StoreIn08
,
StoreIn09
,
StoreIn09
,
StoreInNG_01
,
StoreInNG_02
,
StoreInNG_03
,
StoreInNG_04
,
StoreInNG_05
,
StoreOut10
,
//出库
StoreOut10
,
//出库
StoreOut_NGPre
,
StoreOut_NGPre
,
StoreOut11
,
StoreOut11
,
...
...
DeviceLibrary/theMachine/RobotManage.cs
查看文件 @
4d385d1
...
@@ -129,7 +129,7 @@ namespace DeviceLibrary
...
@@ -129,7 +129,7 @@ namespace DeviceLibrary
mainThread
.
Start
();
mainThread
.
Start
();
CameraA
.
startCamera
();
CameraA
.
startCamera
();
}
}
GC
.
KeepAlive
(
mainThread
);
GC
.
KeepAlive
(
mainThread
);
Task
.
Run
(()=>
{
Task
.
Run
(()=>
{
Task
.
Delay
(
1000
).
Wait
();
Task
.
Delay
(
1000
).
Wait
();
...
@@ -148,7 +148,6 @@ namespace DeviceLibrary
...
@@ -148,7 +148,6 @@ namespace DeviceLibrary
mainMachine
.
Stop
();
mainMachine
.
Stop
();
mainMachine
.
UserPause
=
false
;
mainMachine
.
UserPause
=
false
;
}
}
isRunning
=
false
;
}
}
public
static
void
ShutDown
()
public
static
void
ShutDown
()
{
{
...
...
TheMachine/resources/en-US.lngres
查看文件 @
4d385d1
...
@@ -401,4 +401,5 @@ l_flipDoor_no_work 左侧翻板水平信号未亮 The left flap horizontal signa
...
@@ -401,4 +401,5 @@ l_flipDoor_no_work 左侧翻板水平信号未亮 The left flap horizontal signa
r_flipDoor_no_work 右侧翻板水平信号未亮 The right flap horizontal signal is not lit
r_flipDoor_no_work 右侧翻板水平信号未亮 The right flap horizontal signal is not lit
reel_not_in_right_status 料盘放置异常 The reel is placed abnormally
reel_not_in_right_status 料盘放置异常 The reel is placed abnormally
confirm_no_reel_in_com 请确保料盘已从库位中取出 Make sure that the reel has been removed from the location
confirm_no_reel_in_com 请确保料盘已从库位中取出 Make sure that the reel has been removed from the location
outstore_abnormal_reel The material tray is not successfully put into the string, please check
\ No newline at end of file
\ No newline at end of file
outstore_abnormal_reel The material tray is not successfully put into the string, please check
instore_abnormal_reel During the warehousing process, the fork detects the abnormality of the tray
\ No newline at end of file
\ No newline at end of file
TheMachine/resources/ja-JP.lngres
查看文件 @
4d385d1
...
@@ -403,4 +403,5 @@ l_flipDoor_no_work 左侧翻板水平信号未亮 左フラップ水平信号が
...
@@ -403,4 +403,5 @@ l_flipDoor_no_work 左侧翻板水平信号未亮 左フラップ水平信号が
r_flipDoor_no_work 右侧翻板水平信号未亮 右フラップ水平信号が点灯しない
r_flipDoor_no_work 右侧翻板水平信号未亮 右フラップ水平信号が点灯しない
reel_not_in_right_status 料盘放置异常 リールが異常に配置されている
reel_not_in_right_status 料盘放置异常 リールが異常に配置されている
confirm_no_reel_in_com 请确保料盘已从库位中取出 リールがその場所から取り外されていることを確認してください
confirm_no_reel_in_com 请确保料盘已从库位中取出 リールがその場所から取り外されていることを確認してください
outstore_abnormal_reel 倉庫を出るとき、材料トレイがひもにうまく入れられていません、確認してください
\ No newline at end of file
\ No newline at end of file
outstore_abnormal_reel 倉庫を出るとき、材料トレイがひもにうまく入れられていません、確認してください
instore_abnormal_reel 倉庫プロセス中に、フォークはトレイの異常を検出します
\ No newline at end of file
\ No newline at end of file
TheMachine/resources/zh-CN.lngres
查看文件 @
4d385d1
...
@@ -377,9 +377,9 @@ tray_detect_reel_01 料叉传感器X30感应到有料,请人工确认 料叉传
...
@@ -377,9 +377,9 @@ tray_detect_reel_01 料叉传感器X30感应到有料,请人工确认 料叉传
system_running_cantmove 系统正在运行,不能手动控制伺服
system_running_cantmove 系统正在运行,不能手动控制伺服
before_FrmPositionTool_stopmuchine 运行库位校准程序前,需要先停止料仓的运行
before_FrmPositionTool_stopmuchine 运行库位校准程序前,需要先停止料仓的运行
outstore_abnormal_reel 出库时料盘未成功放入料串,请检查
outstore_abnormal_reel 出库时料盘未成功放入料串,请检查
instore_abnormal_reel 入库过程中料叉检测料盘异常
Res0004 收到出库任务,但料叉上有料,无法启动,请检查 收到出库任务,但料叉上有料,无法启动,请检查
selCamera 请先选择相机 请先选择相机
selCamera 请先选择相机 请先选择相机
selImage 请先选择图片 请先选择图片
selImage 请先选择图片 请先选择图片
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论