Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
刘韬
/
1053_CycleLine
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 63494615
由
刘韬
编写于
2022-12-18 11:50:49 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1
1 个父辈
f8d997d6
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
17 个修改的文件
包含
300 行增加
和
77 行删除
DeviceLibrary/DeviceLibrary/AxisBean.cs
DeviceLibrary/DeviceLibrary/CylinderManger.cs
DeviceLibrary/DeviceLibrary/IOManager.cs
DeviceLibrary/theMachine/DeviceBase.cs
DeviceLibrary/theMachine/MainMachine.cs
DeviceLibrary/theMachine/MoveInfo.cs
DeviceLibrary/theMachine/RemoteService.cs
DeviceLibrary/theMachine/RobotManage.cs
DeviceLibrary/theMachine/TrayManager.cs
DeviceLibrary/theMachine/sub/IDevice.cs
DeviceLibrary/theMachine/sub/SideMove.cs
DeviceLibrary/theMachine/sub/TransplantMove.cs
DeviceLibrary/theMachine/sub/TrayStop.cs
RemoteSheardObject/Class1.cs
RemoteSheardObject/RemoteClient.cs
TheMachine/TrayManagerControl.Designer.cs
TheMachine/TrayManagerControl.cs
DeviceLibrary/DeviceLibrary/AxisBean.cs
查看文件 @
6349461
...
...
@@ -102,7 +102,7 @@ namespace DeviceLibrary
return
;
}
Config
.
TargetPosition
=
0
;
LogUtil
.
info
(
AxisName
+
"speed["
+
Config
.
HomeHighSpeed
+
"]开始原点返回"
);
MoveInfo
.
log
(
AxisName
+
"speed["
+
Config
.
HomeHighSpeed
+
"]开始原点返回"
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitAxis
(
Config
,
true
));
var
HomeLowSpeed
=
Config
.
HomeLowSpeed
>
0
?
Config
.
HomeLowSpeed
:
Config
.
HomeHighSpeed
/
10
;
var
HomeAddSpeed
=
Config
.
HomeAddSpeed
>
0
?
Config
.
HomeAddSpeed
:
Config
.
HomeHighSpeed
*
5
;
...
...
@@ -188,7 +188,7 @@ namespace DeviceLibrary
AxisManager
.
SuddenStop
(
axis
.
DeviceName
,
axis
.
GetAxisValue
());
Thread
.
Sleep
(
100
);
}
LogUtil
.
error
(
$
"{ MoveInfo.Name} {MoveInfo.MoveStep} {axis.DisplayStr}目标位置{targetPosition}当前位置{outCount},误差过大,{clearMsg}重新开始运动,剩余{MoveInfo.CanWhileCount}次"
);
MoveInfo
.
error
(
$
"{ MoveInfo.Name} {MoveInfo.MoveStep} {axis.DisplayStr}目标位置{targetPosition}当前位置{outCount},误差过大,{clearMsg}重新开始运动,剩余{MoveInfo.CanWhileCount}次"
);
var
AddSpeed
=
axis
.
AddSpeed
>
0
?
axis
.
AddSpeed
:
targetSpeed
*
4
;
var
DelSpeed
=
axis
.
DelSpeed
>
0
?
axis
.
DelSpeed
:
targetSpeed
*
4
;
AxisManager
.
AbsMove
(
axis
.
DeviceName
,
axis
.
GetAxisValue
(),
targetPosition
,
targetSpeed
,
AddSpeed
,
DelSpeed
);
// , axis.AddSpeed, axis.DelSpeed);
...
...
@@ -198,7 +198,7 @@ namespace DeviceLibrary
else
{
msg
=
$
"{MoveInfo.Name} {MoveInfo.MoveStep} {axis.DisplayStr},目标位置{targetPosition},当前位置{outCount},误差过大,需要报警"
;
LogUtil
.
error
(
msg
,
600
);
MoveInfo
.
error
(
msg
);
}
}
return
false
;
...
...
@@ -218,7 +218,7 @@ namespace DeviceLibrary
//判断是否需要重新运动
if
(
MoveInfo
.
CanWhileCount
>
0
)
{
LogUtil
.
error
(
MoveInfo
.
Name
+
axis
.
DisplayStr
+
"收到原点完成信号,当前位置["
+
outCount
+
"],重新回原点,剩余["
+
MoveInfo
.
CanWhileCount
+
"]次"
);
MoveInfo
.
error
(
MoveInfo
.
Name
+
axis
.
DisplayStr
+
"收到原点完成信号,当前位置["
+
outCount
+
"],重新回原点,剩余["
+
MoveInfo
.
CanWhileCount
+
"]次"
);
//LogUtil.error( StoreName + moveAxis.DisplayStr + "重新回原点");
AxisManager
.
HomeMove
(
axis
.
DeviceName
,
axis
.
GetAxisValue
(),
axis
.
HomeHighSpeed
,
axis
.
HomeLowSpeed
,
axis
.
HomeAddSpeed
);
MoveInfo
.
CanWhileCount
--;
...
...
@@ -226,7 +226,7 @@ namespace DeviceLibrary
else
{
msg
=
MoveInfo
.
Name
+
" "
+
MoveInfo
.
MoveStep
+
axis
.
DisplayStr
+
",收到原点完成信号,当前位置["
+
outCount
+
"],误差过大,需要报警"
;
LogUtil
.
error
(
msg
);
MoveInfo
.
error
(
msg
);
}
}
return
false
;
...
...
DeviceLibrary/DeviceLibrary/CylinderManger.cs
查看文件 @
6349461
...
...
@@ -30,7 +30,10 @@ namespace DeviceLibrary
moveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
High
,
IO_VALUE
.
HIGH
));
}
Resume
(
false
);
LogUtil
.
info
(
$
"{Name},设置{High}=High"
);
if
(
moveInfo
!=
null
)
moveInfo
.
log
(
$
"{Name},设置{High}=High"
);
else
LogUtil
.
info
(
$
"{Name},设置{High}=High"
);
}
public
void
ToLow
(
MoveInfo
moveInfo
)
{
...
...
@@ -41,7 +44,10 @@ namespace DeviceLibrary
moveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
High
,
IO_VALUE
.
LOW
));
}
Resume
(
false
);
LogUtil
.
info
(
$
"{Name},设置{High}=Low"
);
if
(
moveInfo
!=
null
)
moveInfo
.
log
(
$
"{Name},设置{High}=Low"
);
else
LogUtil
.
info
(
$
"{Name},设置{High}=Low"
);
}
public
void
Pause
()
...
...
DeviceLibrary/DeviceLibrary/IOManager.cs
查看文件 @
6349461
...
...
@@ -30,7 +30,7 @@ namespace DeviceLibrary
}
else
{
LogUtil
.
error
(
"没有
DO="
+
device
+
":"
+
ioType
);
LogUtil
.
error
(
$
"[{device}] not find
DO="
+
device
+
":"
+
ioType
);
}
}
...
...
@@ -50,7 +50,7 @@ namespace DeviceLibrary
}
else
{
LogUtil
.
error
(
"没有D
O="
+
device
+
":"
+
ioType
);
LogUtil
.
error
(
$
"[{device}] not find I
O="
+
device
+
":"
+
ioType
);
}
return
ioValue
;
}
...
...
@@ -64,7 +64,7 @@ namespace DeviceLibrary
}
else
{
LogUtil
.
error
(
"没有
DO="
+
ioType
);
LogUtil
.
error
(
$
"[{device}] not find
DO="
+
ioType
);
}
return
ioValue
;
}
...
...
DeviceLibrary/theMachine/DeviceBase.cs
查看文件 @
6349461
...
...
@@ -115,7 +115,7 @@ namespace DeviceLibrary
if
(
NoAlarm
())
{
//Alarm(AlarmType.IoSingleTimeOut, WarnMsg);
LogUtil
.
error
(
WarnMsg
,
logType
+
14
);
MoveInfo
.
error
(
WarnMsg
);
//MoveInfo.errlog(WarnMsg);
if
(!
MoveInfo
.
OneWaitCanEndStep
)
{
...
...
@@ -133,7 +133,7 @@ namespace DeviceLibrary
else
if
(
wait
.
WaitType
.
Equals
(
WaitEnum
.
W013_Action
))
{
wait
.
IsEnd
=
wait
.
Action
.
Invoke
(
wait
);
LogUtil
.
info
(
$
"{Name} 自定义等待 IsEnd={wait.IsEnd},Type={wait.Action.GetType()}"
);
MoveInfo
.
log
(
$
"{Name} 自定义等待 IsEnd={wait.IsEnd},Type={wait.Action.GetType()}"
);
}
...
...
@@ -172,7 +172,7 @@ namespace DeviceLibrary
{
second
=
10
;
}
LogUtil
.
error
(
WarnMsg
,
logType
+
100
,
second
);
MoveInfo
.
error
(
WarnMsg
);
//MoveInfo.errlog(WarnMsg);
//Alarm(AlarmType.IoSingleTimeOut, WarnMsg);
Msg
.
add
(
WarnMsg
,
MsgLevel
.
alarm
);
...
...
@@ -262,7 +262,7 @@ namespace DeviceLibrary
Thread
.
Sleep
(
msTime
);
IO_VALUE
tValue
=
value
.
Equals
(
IO_VALUE
.
HIGH
)
?
IO_VALUE
.
LOW
:
IO_VALUE
.
HIGH
;
LogUtil
.
info
(
Name
+
"
定时回写IO: ["
+
IoType
+
"]=["
+
value
+
"],msTime="
+
msTime
);
//LogUtil.info("[" + GroupName + "]
定时回写IO: [" + IoType + "]=[" + value + "],msTime=" + msTime);
IOManager
.
IOMove
(
IoType
,
tValue
,
GroupName
);
});
...
...
DeviceLibrary/theMachine/MainMachine.cs
查看文件 @
6349461
...
...
@@ -260,13 +260,6 @@ namespace DeviceLibrary
{
Msg
.
add
(
crc
.
GetString
(
y
.
Config
.
ProName
,
y
.
Config
.
Explain
)
+
$
"[{y.Config.GetAxisValue()}]:"
+
crc
.
GetString
(
"Res0179"
,
"运动报警"
),
MsgLevel
.
alarm
,
ErrInfo
.
SuddenStop
);
ok
=
false
;
var
errcode
=
HuichuanLibrary
.
HCBoardManager
.
GetAxErrCode
(
y
.
Config
.
GetAxisValue
());
var
errcodebyte
=
BitConverter
.
GetBytes
(
errcode
).
ToList
();
errcodebyte
.
Reverse
();
HuichuanLibrary
.
HCBoardManager
.
GetSdo
((
ushort
)
y
.
Config
.
GetAxisValue
(),
0x203f
,
0
,
out
byte
[]
data
,
out
uint
datalen
);
var
errdatabyte
=
data
.
ToList
();
errdatabyte
.
Reverse
();
LogUtil
.
error
(
y
.
Config
.
GetAxisValue
()
+
","
+
y
.
Config
.
Explain
+
" errcode "
+
BitConverter
.
ToString
(
errcodebyte
.
ToArray
())
+
","
+
BitConverter
.
ToString
(
errdatabyte
.
ToArray
()));
LogUtil
.
error
(
string
.
Join
(
","
,
HuichuanLibrary
.
HCBoardManager
.
GetAxisErrorDetail
(
y
.
Config
.
GetAxisValue
())));
}
...
...
DeviceLibrary/theMachine/MoveInfo.cs
查看文件 @
6349461
...
...
@@ -120,6 +120,15 @@ namespace DeviceLibrary
LogUtil
.
info
(
msg
);
}
}
public
void
error
(
string
msg
)
{
msg
=
$
"[{Name}][{moveStep}][{MoveParam.PosID}-{MoveParam.WareCode}]{msg}"
;
if
(
String
.
Compare
(
lastmsg
,
msg
,
StringComparison
.
Ordinal
)!=
0
)
{
lastmsg
=
msg
;
LogUtil
.
error
(
msg
);
}
}
string
lasterrmsg
=
""
;
private
object
p
;
...
...
DeviceLibrary/theMachine/RemoteService.cs
查看文件 @
6349461
...
...
@@ -66,6 +66,9 @@ namespace DeviceLibrary
case
"TrayRelease"
:
TrayManager
.
TrayRelease
(
remoteLoad
);
break
;
case
"IsFree"
:
isok
=
TrayManager
.
IsFree
(
remoteLoad
);
break
;
case
"OK"
:
case
"FAIL"
:
lastresult
=
remoteLoad
.
Action
==
"OK"
?
RemoteResult
.
True
:
RemoteResult
.
False
;
...
...
@@ -101,7 +104,8 @@ namespace DeviceLibrary
remoteLoad
.
GroupName
=
GroupName
;
if
(
remoteLoad
.
RequestLoadInfo
!=
null
&&
string
.
IsNullOrEmpty
(
remoteLoad
.
RequestLoadInfo
.
DeviceGroupName
))
remoteLoad
.
RequestLoadInfo
.
DeviceGroupName
=
GroupName
;
LogUtil
.
info
(
$
"{GroupName},发送:{remoteLoad.Action}"
);
LogUtil
.
info
(
$
"{GroupName},发送:{remoteLoad.Action},Seq:{remoteLoad.Seq}"
);
lastresult
=
RemoteResult
.
None
;
SendMessage
(
GroupName
,
remoteLoad
);
return
WaitResult
(
waittime
);
}
...
...
DeviceLibrary/theMachine/RobotManage.cs
查看文件 @
6349461
...
...
@@ -90,19 +90,27 @@ namespace DeviceLibrary
var
d1
=
new
DeviceRunControl
(
"SideMove"
,
SideMove
.
DeviceList
.
Values
.
ToList
<
IDevice
>());
var
d2
=
new
DeviceRunControl
(
"TransplantMove"
,
TransplantMove
.
DeviceList
.
Values
.
ToList
<
IDevice
>());
var
d3
=
new
DeviceRunControl
(
"TrayStop"
,
TrayStop
.
DeviceList
.
Values
.
ToList
<
IDevice
>());
d1
.
Start
();
d2
.
Start
();
d3
.
Start
();
isRunning
=
true
;
GC
.
KeepAlive
(
mainThread
);
Task
.
Run
(()=>
{
//
Task.Run(()=> {
AxisBean
.
List
.
ToList
().
ForEach
((
x
)
=>
{
x
.
Value
.
ForEach
(
y
=>
{
AxisManager
.
AlarmClear
(
y
.
Config
.
DeviceName
,
y
.
Config
.
GetAxisValue
());
});
});
Task
.
Delay
(
100
0
).
Wait
();
Task
.
Delay
(
100
).
Wait
();
if
(
mainMachine
.
DeviceCheck
())
{
mainMachine
.
BeginHomeReset
(
true
);
});
}
//}).Wait();
d1
.
Start
();
d2
.
Start
();
d3
.
Start
();
}
public
static
void
Stop
()
...
...
DeviceLibrary/theMachine/TrayManager.cs
查看文件 @
6349461
using
Newtonsoft.Json
;
using
OnlineStore
;
using
OnlineStore.Common
;
using
OnlineStore.LoadCSVLibrary
;
using
System
;
using
System.Collections.Generic
;
using
System.Diagnostics
;
using
System.IO
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
...
...
@@ -12,6 +15,7 @@ namespace DeviceLibrary
public
static
partial
class
TrayManager
{
public
static
Dictionary
<
string
,
TrayInfo
>
Traylist
=
new
Dictionary
<
string
,
TrayInfo
>();
/// <summary>
/// 处理更新托盘信息
/// </summary>
...
...
@@ -19,10 +23,10 @@ namespace DeviceLibrary
/// <param name="addr"></param>
/// <param name="trayInfo"></param>
/// <returns>是否放行 放行true, 拦截false</returns>
public
static
bool
Process
(
string
rfid
,
int
addr
,
out
TrayInfo
trayInfo
)
{
public
static
bool
Process
(
MoveInfo
moveInfo
,
string
rfid
,
int
addr
,
out
TrayInfo
trayInfo
)
{
lock
(
Traylist
)
{
LogUtil
.
info
(
$
"处理RFID:{rfid},地址{addr},设备:{(AddrDesc.ContainsKey(addr)? AddrDesc[addr]:"")}"
);
moveInfo
.
log
(
$
"处理RFID:{rfid},地址{addr},设备:{(AddrDesc.ContainsKey(addr)? AddrDesc[addr]:"")}"
);
if
(!
Traylist
.
ContainsKey
(
rfid
))
{
Traylist
.
Add
(
rfid
,
new
TrayInfo
());
...
...
@@ -37,6 +41,11 @@ namespace DeviceLibrary
}
return
true
;
}
/// <summary>
/// 设置托盘物料信息
/// </summary>
/// <param name="rfid"></param>
/// <param name="requestLoadInfo"></param>
public
static
void
SetTrayLoadInfo
(
string
rfid
,
RequestLoadInfo
requestLoadInfo
)
{
lock
(
Traylist
)
...
...
@@ -52,9 +61,26 @@ namespace DeviceLibrary
Traylist
[
rfid
].
TrayParam
=
requestLoadInfo
.
LoadParam
.
clone
();
Traylist
[
rfid
].
DestinationAddr
=
GetAddrByGroupName
(
requestLoadInfo
.
DeviceGroupName
);
}
SaveTrayInfo
();
}
}
static
void
SaveTrayInfo
()
{
try
{
var
TL
=
Traylist
.
Where
(
t
=>
t
.
Value
.
DestinationAddr
>=
0
).
ToDictionary
(
a
=>
a
.
Key
,
a
=>
a
.
Value
);
if
(
TL
.
Count
>
0
)
{
File
.
Delete
(
"Config\\TrayList.temp"
);
File
.
WriteAllText
(
"Config\\TrayList.temp~"
,
JsonConvert
.
SerializeObject
(
TL
));
File
.
Move
(
"Config\\TrayList.temp~"
,
"Config\\TrayList.temp"
);
}
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
"托盘信息保存失败:"
+
ex
);
}
}
/// <summary>
/// deviceGroupName,RequestLoadInfo
/// </summary>
...
...
@@ -62,7 +88,7 @@ namespace DeviceLibrary
public
static
bool
HasTrayRequest
(
string
deviceGroupName
,
string
rfid
,
out
ReelParam
reelParam
)
{
reelParam
=
null
;
LogUtil
.
info
(
$
"HasTrayRequest:{deviceGroupName},{rfid},{TrayRequest.ContainsKey(deviceGroupName)}"
);
LogUtil
.
info
(
$
"
[{deviceGroupName}]
HasTrayRequest:{deviceGroupName},{rfid},{TrayRequest.ContainsKey(deviceGroupName)}"
);
lock
(
TrayRequest
)
{
if
(!
TrayRequest
.
ContainsKey
(
deviceGroupName
))
...
...
@@ -160,7 +186,9 @@ namespace DeviceLibrary
{
LogUtil
.
info
(
"清空托盘信息 RFID:"
+
rfid
);
Traylist
[
rfid
].
SetToEmpty
();
SaveTrayInfo
();
}
}
/// <summary>
/// 托盘释放
...
...
@@ -185,6 +213,25 @@ namespace DeviceLibrary
device
.
TrayRelease
();
}
}
/// <summary>
/// 移栽机构是否已空闲
/// </summary>
/// <param name="remoteLoad"></param>
/// <returns></returns>
public
static
bool
IsFree
(
RemoteLoad
remoteLoad
)
{
var
requestLoadInfo
=
remoteLoad
.
RequestLoadInfo
;
Debug
.
WriteLine
(
$
"IsFree:{remoteLoad.GroupName}{requestLoadInfo.DeviceGroupName}"
);
lock
(
requestLoadInfo
)
{
if
(
TransplantMove
.
DeviceList
.
ContainsKey
(
remoteLoad
.
GroupName
))
{
var
device
=
TransplantMove
.
DeviceList
[
remoteLoad
.
GroupName
];
return
device
.
IsFree
();
}
}
return
false
;
}
/// <summary>
/// 空托盘数量
...
...
@@ -212,7 +259,7 @@ namespace DeviceLibrary
OfflineCount
=
0
;
lastrefresh
=
DateTime
.
Now
;
Traylist
.
Values
.
ToList
().
ForEach
(
ti
=>
{
if
((
lastrefresh
-
ti
.
LastUpdateTime
).
TotalSeconds
>
15
)
if
((
lastrefresh
-
ti
.
LastUpdateTime
).
TotalSeconds
>
30
)
{
ti
.
isOnline
=
false
;
OfflineCount
++;
...
...
@@ -290,7 +337,17 @@ namespace DeviceLibrary
//TrayTypeDesc.Add(TrayTypeE.C02, crc.GetString("Res0011","Pizza治具"));
//TrayTypeDesc.Add(TrayTypeE.C03, crc.GetString("Res0012","Tray治具"));
//TrayTypeDesc.Add(TrayTypeE.C04, crc.GetString("Res0013","ShoeBOX治具"));
if
(
File
.
Exists
(
"Config\\TrayList.temp"
))
{
try
{
var
tl
=
File
.
ReadAllText
(
"Config\\TrayList.temp"
);
Traylist
=
JsonConvert
.
DeserializeObject
<
Dictionary
<
string
,
TrayInfo
>>(
tl
);
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
"启动时托盘信息加载失败:"
+
ex
);
}
}
}
public
static
void
Init
(
Dictionary
<
string
,
DeviceGroup
>
deviceGroup
)
{
if
(!
AddrDesc
.
ContainsKey
(-
1
))
...
...
DeviceLibrary/theMachine/sub/IDevice.cs
查看文件 @
6349461
...
...
@@ -15,6 +15,7 @@ namespace DeviceLibrary
void
Start
();
void
Stop
();
void
TrayRelease
();
bool
IsFree
();
}
public
enum
DeviceStateE
...
...
DeviceLibrary/theMachine/sub/SideMove.cs
查看文件 @
6349461
...
...
@@ -126,6 +126,10 @@ namespace DeviceLibrary
LSAMoveInfo
.
NextMoveStep
(
MoveStep
.
SideMove_02
);
Location_A
.
ToLow
(
LSAMoveInfo
);
Location_B
.
ToLow
(
LSAMoveInfo
);
IOMove
(
IO_Type
.
Ls_A_BufStop_Fwd
,
IO_VALUE
.
HIGH
,
StopBufDelayMS
);
LSAMoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
500
));
}
else
{
...
...
@@ -135,7 +139,7 @@ namespace DeviceLibrary
case
MoveStep
.
SideMove_02
:
LSAMoveInfo
.
NextMoveStep
(
MoveStep
.
SideMove_03
);
IOMove
(
IO_Type
.
Ls_A_Front_Stop
,
IO_VALUE
.
HIGH
,
StopDelayMS
);
IOMove
(
IO_Type
.
Ls_A_BufStop_Fwd
,
IO_VALUE
.
HIGH
,
StopBufDelayMS
);
//
IOMove(IO_Type.Ls_A_BufStop_Fwd, IO_VALUE.HIGH, StopBufDelayMS);
break
;
case
MoveStep
.
SideMove_03
:
if
(
IOValue
(
IO_Type
.
Ls_A_Tray_Check
).
Equals
(
IO_VALUE
.
HIGH
))
{
...
...
@@ -171,7 +175,7 @@ namespace DeviceLibrary
break
;
case
MoveStep
.
SideMove_08
:
LSAMoveInfo
.
NextMoveStep
(
MoveStep
.
SideMove_09
);
LSAMoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
5
00
));
LSAMoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
10
00
));
break
;
case
MoveStep
.
SideMove_09
:
LSAMoveInfo
.
NextMoveStep
(
MoveStep
.
SideMove_10
);
...
...
@@ -298,7 +302,7 @@ namespace DeviceLibrary
if
(
RFID
.
ReadByte
(
0x20
,
16
,
out
byte
[]
data
,
out
string
errmsg
))
{
var
rfid
=
Common
.
RfidFilter
(
data
);
TrayManager
.
Process
(
rfid
,
addr
,
out
TrayInfo
trayInfo
);
TrayManager
.
Process
(
Minfo
,
rfid
,
addr
,
out
TrayInfo
trayInfo
);
if
(
TrayManager
.
CalcNeedTrans
(
addr
,
trayInfo
.
DestinationAddr
,
trayInfo
.
HasLoad
))
Minfo
.
NextMoveStep
(
MoveStep
.
SideMove_10
);
...
...
@@ -349,7 +353,7 @@ namespace DeviceLibrary
{
Minfo
.
NextMoveStep
(
MoveStep
.
SideMove_11
);
}
else
if
(
lsb
.
MoveStep
>=
MoveStep
.
SideMove_1
1
)
else
if
(
lsb
.
MoveStep
>=
MoveStep
.
SideMove_1
0
)
{
Minfo
.
NextMoveStep
(
MoveStep
.
SideMove_06
);
Minfo
.
log
(
$
"{sideb}侧也在等待横移,本侧直接穿过"
);
...
...
@@ -426,8 +430,8 @@ namespace DeviceLibrary
break
;
case
MoveStep
.
H02_HomeReset
:
LSAMoveInfo
.
NextMoveStep
(
MoveStep
.
H03_HomeReset
);
IOMove
(
IO_Type
.
Ls_A_BufStop_Rwd
,
IO_VALUE
.
HIGH
,
StopBufDelayMS
);
IOMove
(
IO_Type
.
Ls_B_BufStop_Rwd
,
IO_VALUE
.
HIGH
,
StopBufDelayMS
);
//
IOMove(IO_Type.Ls_A_BufStop_Rwd, IO_VALUE.HIGH, StopBufDelayMS);
//
IOMove(IO_Type.Ls_B_BufStop_Rwd, IO_VALUE.HIGH, StopBufDelayMS);
var
loAdown
=
IOValue
(
IO_Type
.
Ls_A_Location_Down
).
Equals
(
IO_VALUE
.
HIGH
);
var
loBdown
=
IOValue
(
IO_Type
.
Ls_B_Location_Down
).
Equals
(
IO_VALUE
.
HIGH
);
var
trayAstate
=
IOValue
(
IO_Type
.
Ls_A_Tray_Check
).
Equals
(
IO_VALUE
.
HIGH
);
...
...
@@ -467,14 +471,14 @@ namespace DeviceLibrary
LSAMoveInfo
.
NextMoveStep
(
MoveStep
.
H04_HomeReset
);
Location_A
.
ToHigh
(
LSAMoveInfo
);
Location_B
.
ToHigh
(
LSAMoveInfo
);
if
(
LS_Type
==
LS_TypeE
.
NoRfid
)
IOMove
(
IO_Type
.
Ls_B_BufStop_Fwd
,
IO_VALUE
.
HIGH
,
StopBufDelayMS
);
//
if (LS_Type== LS_TypeE.NoRfid)
//
IOMove(IO_Type.Ls_B_BufStop_Fwd, IO_VALUE.HIGH,StopBufDelayMS);
LSAMoveInfo
.
log
(
$
"顶升顶起"
);
break
;
case
MoveStep
.
H04_HomeReset
:
LSAMoveInfo
.
NextMoveStep
(
MoveStep
.
H05_HomeReset
);
Line
.
LineRun
(
"n"
,
false
,
10
);
LSAMoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
2
000
));
LSAMoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
4
000
));
LSAMoveInfo
.
log
(
$
"横移点击运行"
);
break
;
case
MoveStep
.
H05_HomeReset
:
...
...
@@ -487,7 +491,7 @@ namespace DeviceLibrary
LSAMoveInfo
.
NextMoveStep
(
MoveStep
.
H07_HomeReset
);
if
(
LS_Type
!=
LS_TypeE
.
NoRfid
)
IOMove
(
IO_Type
.
Ls_B_Stop
,
IO_VALUE
.
HIGH
,
StopDelayMS
);
LSAMoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
2
000
));
LSAMoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
4
000
));
LSAMoveInfo
.
log
(
$
"缓冲回退"
);
break
;
case
MoveStep
.
H07_HomeReset
:
...
...
@@ -508,6 +512,11 @@ namespace DeviceLibrary
{
}
public
bool
IsFree
()
{
throw
new
NotImplementedException
();
}
enum
LS_TypeE
{
NoRfid
,
OneWay
,
...
...
DeviceLibrary/theMachine/sub/TransplantMove.cs
查看文件 @
6349461
此文件的差异被折叠,
点击展开。
DeviceLibrary/theMachine/sub/TrayStop.cs
查看文件 @
6349461
...
...
@@ -32,7 +32,6 @@ namespace DeviceLibrary
AxisBean
axis2
;
public
TrayStop
(
DeviceGroup
device
,
out
string
msg
)
{
msg
=
""
;
Name
=
device
.
Name
+
"("
+
device
.
GroupName
+
")"
;
DeviceGroup
=
device
;
...
...
@@ -114,7 +113,7 @@ namespace DeviceLibrary
MoveInfo
.
NextMoveStep
(
MoveStep
.
TrayStop_03
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
500
));
MoveInfo
.
CanWhileCount
=
3
;
Location
.
ToHigh
(
MoveInfo
);
//
Location.ToHigh(MoveInfo);
}
else
if
(
MoveInfo
.
IsTimeOut
(
10
)){
MoveInfo
.
log
(
"没有检测到托盘"
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
Wait
);
...
...
@@ -124,7 +123,7 @@ namespace DeviceLibrary
if
(
RFID_1
.
ReadByte
(
0x20
,
16
,
out
byte
[]
data
,
out
string
errmsg
))
{
CurrrentRFID
=
Common
.
RfidFilter
(
data
);
TrayManager
.
Process
(
CurrrentRFID
,
DeviceGroup
.
addr_1
,
out
TrayInfo
trayInfo
);
TrayManager
.
Process
(
MoveInfo
,
CurrrentRFID
,
DeviceGroup
.
addr_1
,
out
TrayInfo
trayInfo
);
var
stop
=
TrayManager
.
HasTrayRequest
(
GroupName
,
CurrrentRFID
,
out
_
);
MoveInfo
.
log
(
$
"CurrrentRFID:{CurrrentRFID},HasLoad:{trayInfo.HasLoad},MI_Reel_Check:{IOValue(IO_Type.MI_Reel_Check)},NeedStop:{stop}"
);
...
...
@@ -142,7 +141,8 @@ namespace DeviceLibrary
MoveInfo
.
NextMoveStep
(
MoveStep
.
TrayStop_04
);
SRec
.
info
(
"托盘挡停"
,
GroupName
,
"空托盘"
,
"准备接料"
,
CurrrentRFID
);
ServerCommunication
.
UpdateRobotStatus
(
trayInfo
.
TrayParam
.
WareCode
,
RobotStatusE
.
INROBOT
,
MoveInfo
.
MoveParam
.
RFID
);
if
(
trayInfo
.
TrayParam
!=
null
)
ServerCommunication
.
UpdateRobotStatus
(
trayInfo
.
TrayParam
.
WareCode
,
RobotStatusE
.
INROBOT
,
MoveInfo
.
MoveParam
.
RFID
);
return
;
}
else
if
(
trayInfo
.
DestinationAddr
==
DeviceGroup
.
addr_1
&&
trayInfo
.
HasLoad
&&
IOValue
(
IO_Type
.
MI_Reel_Check
).
Equals
(
IO_VALUE
.
HIGH
))
...
...
@@ -158,7 +158,7 @@ namespace DeviceLibrary
if
(
result
!=
RemoteResult
.
True
)
{
MoveInfo
.
NextMoveStep
(
MoveStep
.
TrayStop_04
);
MoveInfo
.
log
(
$
"{GroupName} 请求
入
库失败:{result}"
);
MoveInfo
.
log
(
$
"{GroupName} 请求
出
库失败:{result}"
);
}
else
{
...
...
@@ -249,5 +249,10 @@ namespace DeviceLibrary
break
;
}
}
public
bool
IsFree
()
{
throw
new
NotImplementedException
();
}
}
}
\ No newline at end of file
RemoteSheardObject/Class1.cs
查看文件 @
6349461
...
...
@@ -11,17 +11,38 @@ using System.Threading.Tasks;
[Serializable]
public
class
RemoteLoad
{
/// <summary>
/// 动作
/// </summary>
public
string
Action
;
public
int
Seq
;
public
long
Seq
;
/// <summary>
/// 设备名称
/// </summary>
public
string
GroupName
;
/// <summary>
/// 载荷信息
/// </summary>
public
RequestLoadInfo
RequestLoadInfo
;
}
[Serializable]
public
class
RequestLoadInfo
{
/// <summary>
/// 目的地设备名称
/// </summary>
public
string
DeviceGroupName
;
/// <summary>
/// 托盘类型
/// </summary>
public
string
TrayType
;
/// <summary>
/// 是否空托盘
/// </summary>
public
bool
IsEmpty
;
/// <summary>
/// 料盘数据
/// </summary>
public
ReelParam
LoadParam
;
//public DoorStatusE DoorStatus;
...
...
@@ -34,28 +55,50 @@ public class RequestLoadInfo
{
return
(
TrayTypeE
)
Enum
.
Parse
(
typeof
(
TrayTypeE
),
TrayType
);
}
catch
{
catch
{
return
TrayTypeE
.
None
;
}
}
}
}
public
enum
RobotStatusE
{
INROBOT
,
BOXDOOR
,
FINISHED
}
/// <summary>
/// 治具类型
/// </summary>
public
enum
TrayTypeE
{
None
,
/// <summary>
/// 流水线料盘托盘
/// </summary>
MTP1
,
//流水线料盘托盘
/// <summary>
/// 流水线治具托盘
/// </summary>
MTP2
,
//流水线治具托盘
/// <summary>
/// 料串
/// </summary>
S007
,
//料串
/// <summary>
/// Tray料格
/// </summary>
M03
,
//Tray料格
/// <summary>
/// PCB料格
/// </summary>
M02
,
//PCB料格
/// <summary>
/// PizzaBOX料格
/// </summary>
M01
,
//PizzaBOX料格
/// <summary>
/// ShoeBOX料格
/// </summary>
M04
,
//ShoeBOX料格
}
...
...
@@ -148,12 +191,12 @@ public class ReelParam
{
if
(
IsNg
)
{
return
$
":{NgMsg}[{WareCode}][{RFID}]"
;
return
$
":{NgMsg}[{WareCode}][{RFID}]
[{PlateW}x{PlateH}]
"
;
}
else
{
return
$
":[{PosID}][{WareCode}][{RFID}]
"
;
return
$
":[{PosID}][{WareCode}][{RFID}]
[{PlateW}x{PlateH}]
"
;
}
}
...
...
RemoteSheardObject/RemoteClient.cs
查看文件 @
6349461
...
...
@@ -91,10 +91,11 @@ public class RemoteClient
case
"OK"
:
case
"FAIL"
:
lastresult
=
remoteLoad
.
Action
==
"OK"
?
RemoteResult
.
True
:
RemoteResult
.
False
;
LOGGER
.
Info
(
"Revice Command Callback"
+
remoteLoad
.
GroupName
+
"-"
+
remoteLoad
.
Action
);
LOGGER
.
Info
(
"Revice Command Callback
:
"
+
remoteLoad
.
GroupName
+
"-"
+
remoteLoad
.
Action
);
return
;
default
:
if
(
actionlist
.
ContainsKey
(
remoteLoad
.
Action
))
{
LOGGER
.
Info
(
"Revice remote command:"
+
remoteLoad
.
Action
+
",Seq:"
+
remoteLoad
.
Seq
);
isok
=
actionlist
[
remoteLoad
.
Action
].
Invoke
(
remoteLoad
.
RequestLoadInfo
);
}
else
...
...
@@ -124,6 +125,7 @@ public class RemoteClient
return
lastresult
;
}
public
RemoteResult
SendAndWait
(
RemoteLoad
remoteLoad
,
int
waittime
=
3000
)
{
remoteLoad
.
Seq
=
DateTime
.
Now
.
Ticks
;
remoteLoad
.
GroupName
=
GroupName
;
if
(
remoteLoad
.
RequestLoadInfo
!=
null
)
{
...
...
TheMachine/TrayManagerControl.Designer.cs
查看文件 @
6349461
...
...
@@ -31,9 +31,13 @@ namespace TheMachine
{
this
.
components
=
new
System
.
ComponentModel
.
Container
();
this
.
timer1
=
new
System
.
Windows
.
Forms
.
Timer
(
this
.
components
);
this
.
listView1
=
new
TheMachine
.
DoubleBufferListView
();
this
.
label_Statistics
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
gb_trayinfo
=
new
System
.
Windows
.
Forms
.
GroupBox
();
this
.
btn_reset
=
new
System
.
Windows
.
Forms
.
Button
();
this
.
lbl_info
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
ListView2
=
new
TheMachine
.
DoubleBufferListView
();
this
.
listView1
=
new
TheMachine
.
DoubleBufferListView
();
this
.
gb_trayinfo
.
SuspendLayout
();
this
.
SuspendLayout
();
//
// timer1
...
...
@@ -41,15 +45,6 @@ namespace TheMachine
this
.
timer1
.
Interval
=
1000
;
this
.
timer1
.
Tick
+=
new
System
.
EventHandler
(
this
.
timer1_Tick
);
//
// listView1
//
this
.
listView1
.
HideSelection
=
false
;
this
.
listView1
.
Location
=
new
System
.
Drawing
.
Point
(
0
,
0
);
this
.
listView1
.
Name
=
"listView1"
;
this
.
listView1
.
Size
=
new
System
.
Drawing
.
Size
(
671
,
355
);
this
.
listView1
.
TabIndex
=
0
;
this
.
listView1
.
UseCompatibleStateImageBehavior
=
false
;
//
// label_Statistics
//
this
.
label_Statistics
.
AutoSize
=
true
;
...
...
@@ -59,6 +54,38 @@ namespace TheMachine
this
.
label_Statistics
.
TabIndex
=
1
;
this
.
label_Statistics
.
Text
=
"label1"
;
//
// gb_trayinfo
//
this
.
gb_trayinfo
.
Controls
.
Add
(
this
.
btn_reset
);
this
.
gb_trayinfo
.
Controls
.
Add
(
this
.
lbl_info
);
this
.
gb_trayinfo
.
Location
=
new
System
.
Drawing
.
Point
(
714
,
185
);
this
.
gb_trayinfo
.
Name
=
"gb_trayinfo"
;
this
.
gb_trayinfo
.
Size
=
new
System
.
Drawing
.
Size
(
240
,
170
);
this
.
gb_trayinfo
.
TabIndex
=
2
;
this
.
gb_trayinfo
.
TabStop
=
false
;
this
.
gb_trayinfo
.
Text
=
"托盘操作"
;
this
.
gb_trayinfo
.
Visible
=
false
;
//
// btn_reset
//
this
.
btn_reset
.
Dock
=
System
.
Windows
.
Forms
.
DockStyle
.
Bottom
;
this
.
btn_reset
.
Location
=
new
System
.
Drawing
.
Point
(
3
,
137
);
this
.
btn_reset
.
Name
=
"btn_reset"
;
this
.
btn_reset
.
Size
=
new
System
.
Drawing
.
Size
(
234
,
30
);
this
.
btn_reset
.
TabIndex
=
1
;
this
.
btn_reset
.
Text
=
"清空托盘"
;
this
.
btn_reset
.
UseVisualStyleBackColor
=
true
;
this
.
btn_reset
.
Click
+=
new
System
.
EventHandler
(
this
.
btn_reset_Click
);
//
// lbl_info
//
this
.
lbl_info
.
Dock
=
System
.
Windows
.
Forms
.
DockStyle
.
Fill
;
this
.
lbl_info
.
Location
=
new
System
.
Drawing
.
Point
(
3
,
22
);
this
.
lbl_info
.
Name
=
"lbl_info"
;
this
.
lbl_info
.
Size
=
new
System
.
Drawing
.
Size
(
234
,
145
);
this
.
lbl_info
.
TabIndex
=
0
;
this
.
lbl_info
.
Text
=
"label1"
;
//
// ListView2
//
this
.
ListView2
.
HideSelection
=
false
;
...
...
@@ -68,9 +95,22 @@ namespace TheMachine
this
.
ListView2
.
TabIndex
=
0
;
this
.
ListView2
.
UseCompatibleStateImageBehavior
=
false
;
//
// listView1
//
this
.
listView1
.
FullRowSelect
=
true
;
this
.
listView1
.
HideSelection
=
false
;
this
.
listView1
.
Location
=
new
System
.
Drawing
.
Point
(
0
,
0
);
this
.
listView1
.
MultiSelect
=
false
;
this
.
listView1
.
Name
=
"listView1"
;
this
.
listView1
.
Size
=
new
System
.
Drawing
.
Size
(
671
,
355
);
this
.
listView1
.
TabIndex
=
0
;
this
.
listView1
.
UseCompatibleStateImageBehavior
=
false
;
this
.
listView1
.
SelectedIndexChanged
+=
new
System
.
EventHandler
(
this
.
listView1_SelectedIndexChanged
);
//
// TrayManagerControl
//
this
.
AutoScaleMode
=
System
.
Windows
.
Forms
.
AutoScaleMode
.
None
;
this
.
Controls
.
Add
(
this
.
gb_trayinfo
);
this
.
Controls
.
Add
(
this
.
label_Statistics
);
this
.
Controls
.
Add
(
this
.
ListView2
);
this
.
Controls
.
Add
(
this
.
listView1
);
...
...
@@ -78,6 +118,7 @@ namespace TheMachine
this
.
Name
=
"TrayManagerControl"
;
this
.
Size
=
new
System
.
Drawing
.
Size
(
1007
,
642
);
this
.
Load
+=
new
System
.
EventHandler
(
this
.
TrayManagerControl_Load
);
this
.
gb_trayinfo
.
ResumeLayout
(
false
);
this
.
ResumeLayout
(
false
);
this
.
PerformLayout
();
...
...
@@ -89,5 +130,8 @@ namespace TheMachine
private
System
.
Windows
.
Forms
.
Timer
timer1
;
private
System
.
Windows
.
Forms
.
Label
label_Statistics
;
private
DoubleBufferListView
ListView2
;
private
System
.
Windows
.
Forms
.
GroupBox
gb_trayinfo
;
private
System
.
Windows
.
Forms
.
Label
lbl_info
;
private
System
.
Windows
.
Forms
.
Button
btn_reset
;
}
}
TheMachine/TrayManagerControl.cs
查看文件 @
6349461
...
...
@@ -10,6 +10,7 @@ using System.Linq;
using
System.Text
;
using
System.Threading.Tasks
;
using
System.Windows.Forms
;
using
OnlineStore.Common
;
namespace
TheMachine
{
...
...
@@ -65,8 +66,8 @@ namespace TheMachine
{
ColumnHeader
col1
=
new
ColumnHeader
();
col1
.
Text
=
coltxt
;
col1
.
AutoResize
(
ColumnHeaderAutoResizeStyle
.
ColumnContent
);
col1
.
Width
=
100
;
col1
.
AutoResize
(
ColumnHeaderAutoResizeStyle
.
ColumnContent
);
ListView2
.
Columns
.
Add
(
col1
);
}
//ListView2.ColumnClick += ListView1_ColumnClick;
...
...
@@ -106,7 +107,7 @@ namespace TheMachine
}
});
listView1
.
Items
.
Clear
();
//
listView1.Items.Clear();
foreach
(
var
ti
in
traylist
)
{
var
timego
=
(
DateTime
.
Now
-
ti
.
LastUpdateTime
);
var
lasttime
=
timego
.
Seconds
+
crc
.
GetString
(
"Res0024"
,
"秒前"
);
...
...
@@ -121,17 +122,29 @@ namespace TheMachine
var
reelid
=
""
;
reelid
=
ti
.
TrayParam
?.
WareCode
;
var
items
=
new
string
[]
{
lastaddrdesc
.
ToString
(),
lasttime
,
traydesc
,
loaddesc
,
toaddrdesc
,
reelid
};
var
listviewitem
=
new
ListViewItem
();
if
(
listView1
.
Items
.
ContainsKey
(
ti
.
RFID
))
{
while
(
listView1
.
Items
[
ti
.
RFID
].
SubItems
.
Count
>
1
)
{
listView1
.
Items
[
ti
.
RFID
].
SubItems
.
RemoveAt
(
1
);
}
listView1
.
Items
[
ti
.
RFID
].
SubItems
.
AddRange
(
items
);
}
else
{
var
listviewitem
=
new
ListViewItem
();
listView1
.
Items
.
Add
(
ti
.
RFID
,
ti
.
RFID
,
0
);
listView1
.
Items
[
ti
.
RFID
].
SubItems
.
AddRange
(
items
);
listView1
.
Items
[
ti
.
RFID
].
UseItemStyleForSubItems
=
true
;
}
if
(
timego
.
TotalSeconds
<
15
)
list
viewitem
.
ForeColor
=
Color
.
DarkGreen
;
list
View1
.
Items
[
ti
.
RFID
]
.
ForeColor
=
Color
.
DarkGreen
;
else
if
(
timego
.
TotalSeconds
>
30
)
list
viewitem
.
ForeColor
=
Color
.
DarkGray
;
list
View1
.
Items
[
ti
.
RFID
]
.
ForeColor
=
Color
.
DarkGray
;
else
listviewitem
.
ForeColor
=
Color
.
Black
;
listviewitem
.
UseItemStyleForSubItems
=
true
;
listviewitem
.
Text
=
ti
.
RFID
;
listviewitem
.
SubItems
.
AddRange
(
items
);
listView1
.
Items
.
Add
(
listviewitem
);
listView1
.
Items
[
ti
.
RFID
].
ForeColor
=
Color
.
Black
;
}
ListView2
.
Items
.
Clear
();
foreach
(
var
tivk
in
TrayManager
.
TrayRequest
.
ToArray
())
...
...
@@ -157,5 +170,34 @@ namespace TheMachine
+
crc
.
GetString
(
"Res0031"
,
"入库托盘"
)
+
": "
+
TrayManager
.
InStoreCount
+
"\n"
+
crc
.
GetString
(
"Res0032"
,
"出库托盘"
)
+
": "
+
TrayManager
.
OutStoreCount
+
"\n"
;
}
private
void
listView1_SelectedIndexChanged
(
object
sender
,
EventArgs
e
)
{
if
(
listView1
.
SelectedItems
.
Count
==
0
)
{
gb_trayinfo
.
Visible
=
false
;
return
;
}
string
txt
=
"RFID"
+
": "
+
listView1
.
SelectedItems
[
0
].
Text
;
txt
+=
"\r\n"
+
"托盘类型"
+
": "
+
listView1
.
SelectedItems
[
0
].
SubItems
[
2
].
Text
;
txt
+=
"\r\n"
+
"载荷"
+
": "
+
listView1
.
SelectedItems
[
0
].
SubItems
[
3
].
Text
;
txt
+=
"\r\n"
+
"目的地"
+
": "
+
listView1
.
SelectedItems
[
0
].
SubItems
[
4
].
Text
;
txt
+=
"\r\n"
+
"Code"
+
": "
+
listView1
.
SelectedItems
[
0
].
SubItems
[
6
].
Text
;
lbl_info
.
Text
=
txt
;
gb_trayinfo
.
Visible
=
true
;
}
private
void
btn_reset_Click
(
object
sender
,
EventArgs
e
)
{
if
(
listView1
.
SelectedItems
.
Count
!=
1
)
{
gb_trayinfo
.
Visible
=
false
;
return
;
}
TrayManager
.
SetToEmpty
(
listView1
.
SelectedItems
[
0
].
Text
);
LogUtil
.
info
(
"手动清空托盘信息 RFID:"
+
listView1
.
SelectedItems
[
0
].
Text
);
}
}
}
\ No newline at end of file
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论