Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
RC1250-VMILineClient
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit f9ebe4ba
由
LN
编写于
2020-02-15 15:43:49 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1
1 个父辈
634bb766
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
62 行增加
和
36 行删除
source/DeviceLibrary/DeviceLibrary.csproj
source/DeviceLibrary/LineConfig/VMILineConfig.csv
source/DeviceLibrary/acVmiLine/RobotManager.cs → source/DeviceLibrary/acVmiLine/LineManager.cs
source/DeviceLibrary/acVmiLine/VMILineBean.cs
source/DeviceLibrary/acVmiLine/VMILineBean_Partial.cs
source/DeviceLibrary/agvClient/AgvClient.cs
source/DeviceLibrary/DeviceLibrary.csproj
查看文件 @
f9ebe4b
...
...
@@ -70,7 +70,7 @@
<ItemGroup>
<Compile Include="acVmiLine\VMILineBean.cs" />
<Compile Include="acVmiLine\VMILineBean_Partial.cs" />
<Compile Include="acVmiLine\
Robot
Manager.cs" />
<Compile Include="acVmiLine\
Line
Manager.cs" />
<Compile Include="acVmiLine\WaitUtil.cs" />
<Compile Include="agvClient\AgvClient.cs" />
<Compile Include="bean\StoreMoveInfo.cs" />
...
...
source/DeviceLibrary/LineConfig/VMILineConfig.csv
查看文件 @
f9ebe4b
...
...
@@ -37,6 +37,6 @@ DO,进料线入口阻挡,InL_InStopDown,9,PRO_AOI_IP_1,0,进料线入口阻挡,Y730,DO-02,0,
,,,15,PRO_AOI_IP_1,0,,Y736,DO-08,0,
PRO,IO信号超时时间(毫秒),IOSingle_TimerOut,10000,,,,,,,
PRO,出空料架流水线AGV节点名称,OutL_AgvName,A2,,,,,,,
PRO,入料架流水线AGV节点名称,InL_AgvName,A
1
,,,,,,,
PRO,入料架流水线AGV节点名称,InL_AgvName,A
3
,,,,,,,
PRO,入料架流水线入口RFIDIP,InL_In_RFIDIP,192.168.102.108,,,,,, ,
PRO,入料架流水线出口RFIDIP,InL_Out_RFIDIP,192.168.102.107,,,,,, ,
source/DeviceLibrary/acVmiLine/
Robot
Manager.cs
→
source/DeviceLibrary/acVmiLine/
Line
Manager.cs
查看文件 @
f9ebe4b
文件被删除
source/DeviceLibrary/acVmiLine/VMILineBean.cs
查看文件 @
f9ebe4b
...
...
@@ -98,12 +98,15 @@ namespace OnlineStore.DeviceLibrary
IOManager
.
IOMove
(
IO_Type
.
Alarm_HddLed
,
IO_VALUE
.
LOW
);
IOManager
.
IOMove
(
IO_Type
.
AutoRun_HddLed
,
IO_VALUE
.
HIGH
);
MoveInfo
.
NextMoveStep
(
MoveStep
.
VMI_H_StopUp
);
LogUtil
.
info
(
Name
+
" 开始复位:所有阻挡上升"
);
LogUtil
.
info
(
Name
+
" 开始复位:所有阻挡上升
,设置状态为None
"
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
500
));
IOManager
.
IOMove
(
IO_Type
.
InL_InStopDown
,
IO_VALUE
.
LOW
);
IOManager
.
IOMove
(
IO_Type
.
InL_OutStopDown
,
IO_VALUE
.
LOW
);
IOManager
.
IOMove
(
IO_Type
.
OutL_InStopDown
,
IO_VALUE
.
LOW
);
IOManager
.
IOMove
(
IO_Type
.
OutL_OutStopDown
,
IO_VALUE
.
LOW
);
IOManager
.
IOMove
(
IO_Type
.
OutL_OutStopDown
,
IO_VALUE
.
LOW
);
AgvClient
.
SetStatus
(
Config
.
InL_AgvName
);
AgvClient
.
SetStatus
(
Config
.
OutL_AgvName
);
mainTimer
.
Enabled
=
true
;
serverConnectTimer
.
Enabled
=
true
;
}
...
...
@@ -317,16 +320,21 @@ namespace OnlineStore.DeviceLibrary
else
if
(
span
.
TotalMilliseconds
>
StopDownMS
)
{
il_outstopCheckWarch
.
Stop
();
if
(
IOManager
.
IOValue
(
IO_Type
.
InL_OutStopDown
).
Equals
(
IO_VALUE
.
HIGH
))
ClientAction
currA
=
AgvClient
.
GetAction
(
Config
.
InL_AgvName
);
if
(
currA
.
Equals
(
ClientAction
.
None
)
||
currA
.
Equals
(
ClientAction
.
NeedLeave
)
||
currA
.
Equals
(
ClientAction
.
NeedEnter
))
{
IOManager
.
IOMove
(
IO_Type
.
InL_OutStopDown
,
IO_VALUE
.
LOW
);
}
}
if
(
IOManager
.
IOValue
(
IO_Type
.
InL_OutStopDown
).
Equals
(
IO_VALUE
.
HIGH
))
{
IOManager
.
IOMove
(
IO_Type
.
InL_OutStopDown
,
IO_VALUE
.
LOW
);
}
}
}
//如果是出口无料架,NeedLeave状态,改为None
if
(
IOManager
.
IOValue
(
IO_Type
.
InL_OutStopCheck
).
Equals
(
IO_VALUE
.
LOW
)
&&
AgvClient
.
GetAction
(
Config
.
InL_AgvName
).
Equals
(
ClientAction
.
NeedLeave
))
{
il_outstopCheckWarch
.
Stop
();
LogUtil
.
info
(
" 入库线体出口无料架 ,更改["
+
Config
.
InL_AgvName
+
"] 状态[None] "
);
AgvClient
.
Set
Status
(
Config
.
InL_AgvName
,
""
,
ClientAction
.
None
);
AgvClient
.
Set
ToNone
(
Config
.
InL_AgvName
,
""
);
}
}
...
...
@@ -458,7 +466,7 @@ namespace OnlineStore.DeviceLibrary
#
region
与服务器通信定时器,每
1
秒向服务器通知一次状态
,
同时执行出库操作
private
string
LastInShelfId
=
""
;
p
rivate
string
LastOutShelfId
=
""
;
p
ublic
string
LastOutShelfId
=
""
;
private
bool
isInProcess
=
false
;
public
void
server_connect_timer_Tick
(
object
sender
,
EventArgs
e
)
{
...
...
source/DeviceLibrary/acVmiLine/VMILineBean_Partial.cs
查看文件 @
f9ebe4b
...
...
@@ -83,7 +83,7 @@ namespace OnlineStore.DeviceLibrary
}
}
public
void
StopIOMove
(
string
ioType
,
int
ms
=
1000
)
public
void
StopIOMove
(
string
ioType
,
int
ms
=
1000
)
{
Task
.
Factory
.
StartNew
(
delegate
{
...
...
source/DeviceLibrary/agvClient/AgvClient.cs
查看文件 @
f9ebe4b
...
...
@@ -67,7 +67,8 @@ namespace OnlineStore.DeviceLibrary
{
RFIDData
data
=
new
RFIDData
(
content
);
LogUtil
.
info
(
"收到 AgvClient_Ready ["
+
id
+
"] ["
+
data
.
ToData
()
+
"] "
);
string
logName
=
"收到 AgvClient_Ready ["
+
id
+
"] ["
+
data
.
NumStr
()
+
"] "
;
LogUtil
.
info
(
logName
);
UpdateAction
(
id
,
Asa
.
ClientAction
.
Ready
);
if
(
id
.
Equals
(
LineManager
.
Config
.
OutL_AgvName
))
...
...
@@ -77,48 +78,65 @@ namespace OnlineStore.DeviceLibrary
Task
.
Factory
.
StartNew
(
delegate
{
SetStatus
(
id
,
""
,
ClientAction
.
MayEnter
);
LogUtil
.
info
(
"收到 AgvClient_Ready ["
+
id
+
"] ["
+
data
.
ToData
()
+
"]
调用 MayEnter ,等待OutL_InCheck"
);
WaitUtil
.
Wait
(
60000
,
delegate
LogUtil
.
info
(
logName
+
"
调用 MayEnter ,等待OutL_InCheck"
);
try
{
return
IOManager
.
IOValue
(
IO_Type
.
OutL_InCheck
).
Equals
(
IO_VALUE
.
HIGH
);
},
"等待OutL_InCheck=HIGH"
);
if
(
IOManager
.
IOValue
(
IO_Type
.
OutL_InCheck
).
Equals
(
IO_VALUE
.
HIGH
))
{
//两秒后改为离开状态
Thread
.
Sleep
(
2000
);
SetStatus
(
id
,
""
,
ClientAction
.
FinishEnter
);
Thread
.
Sleep
(
2000
);
SetStatus
(
id
,
""
,
ClientAction
.
None
);
WaitUtil
.
Wait
(
60000
,
delegate
{
return
IOManager
.
IOValue
(
IO_Type
.
OutL_InCheck
).
Equals
(
IO_VALUE
.
HIGH
);
},
"等待OutL_InCheck=HIGH"
);
}
else
catch
(
Exception
ex
)
{
LogUtil
.
error
(
"AgvClient_Ready ["
+
id
+
"] ["
+
data
.
ToData
()
+
"] 调用 MayEnter ,等待OutL_InCheck超时"
);
LogUtil
.
error
(
logName
+
":"
+
ex
.
ToString
()
);
}
//两秒后改为离开状态
Thread
.
Sleep
(
3000
);
LogUtil
.
info
(
logName
+
" ,调用 FinishEnter "
);
SetStatus
(
id
,
""
,
ClientAction
.
FinishEnter
);
Thread
.
Sleep
(
5000
);
LogUtil
.
info
(
logName
+
" ,处理结束 更新状态为None "
);
SetStatus
(
id
,
""
,
ClientAction
.
None
);
});
}
else
{
LogUtil
.
error
(
logName
+
" OutL_InCheck 检测到有料架,AGV的料架无法进入"
);
SetStatus
(
id
,
""
,
ClientAction
.
None
,
ClientLevel
.
High
);
}
}
else
if
(
id
.
Equals
(
LineManager
.
Config
.
InL_AgvName
))
{
string
shefId
=
LineManager
.
VMILine
.
LastOutShelfId
;
if
(
IOManager
.
IOValue
(
IO_Type
.
InL_OutStopCheck
).
Equals
(
IO_VALUE
.
HIGH
))
{
LineManager
.
VMILine
.
StopIOMove
(
IO_Type
.
InL_OutStopDown
,
2
000
);
LineManager
.
VMILine
.
StopIOMove
(
IO_Type
.
InL_OutStopDown
,
3
000
);
//agvClient.MayLeave(id);
SetStatus
(
id
,
""
,
ClientAction
.
MayLeave
);
LogUtil
.
info
(
"收到 AgvClient_Ready ["
+
id
+
"] ["
+
data
.
ToData
()
+
"] ,下降 InL_OutStopDown ,调用 MayLeave "
);
SetStatus
(
id
,
shefId
,
ClientAction
.
MayLeave
);
LogUtil
.
info
(
logName
+
"下降 InL_OutStopDown ,调用 MayLeave "
+
shefId
);
Task
.
Factory
.
StartNew
(
delegate
{
//两秒后改为离开状态
Thread
.
Sleep
(
2000
);
SetStatus
(
id
,
""
,
ClientAction
.
FinishLeave
);
Thread
.
Sleep
(
5000
);
LogUtil
.
info
(
logName
+
" ,调用 FinishLeave "
+
shefId
);
SetStatus
(
id
,
shefId
,
ClientAction
.
FinishLeave
);
Thread
.
Sleep
(
2
000
);
Thread
.
Sleep
(
5
000
);
LogUtil
.
info
(
logName
+
" ,处理结束 更新状态为None "
);
SetStatus
(
id
,
""
,
ClientAction
.
None
);
});
}
else
{
LogUtil
.
error
(
logName
+
" InL_OutStopCheck 未检测到料架,无法将料架进入AGV"
);
SetStatus
(
id
,
""
,
ClientAction
.
None
,
ClientLevel
.
High
);
}
}
}
private
static
void
AgvClient_Arrive
(
string
id
,
byte
[]
content
)
...
...
@@ -128,10 +146,11 @@ namespace OnlineStore.DeviceLibrary
LogUtil
.
info
(
"收到 AgvClient_Arrive ["
+
id
+
"] ["
+
data
.
ToData
()
+
"] "
);
}
public
static
bool
SetToNone
(
string
id
,
string
shelfId
=
""
)
{
ClientAction
currA
=
GetAction
(
id
);
if
(
currA
.
Equals
(
ClientAction
.
None
)
||
currA
.
Equals
(
ClientAction
.
FinishLeave
)
||
currA
.
Equals
(
ClientAction
.
FinishEnter
)
||
currA
.
Equals
(
ClientAction
.
NeedLeave
)
||
currA
.
Equals
(
ClientAction
.
NeedEnter
))
if
(
currA
.
Equals
(
ClientAction
.
None
)
||
currA
.
Equals
(
ClientAction
.
NeedLeave
)
||
currA
.
Equals
(
ClientAction
.
NeedEnter
))
{
SetStatus
(
id
,
shelfId
,
ClientAction
.
None
);
return
true
;
...
...
@@ -141,7 +160,7 @@ namespace OnlineStore.DeviceLibrary
public
static
bool
NeedEnter
(
string
id
,
string
shelfId
)
{
ClientAction
currA
=
GetAction
(
id
);
if
(
currA
.
Equals
(
ClientAction
.
None
)
||
currA
.
Equals
(
ClientAction
.
FinishLeave
)
||
currA
.
Equals
(
ClientAction
.
FinishEnter
)
||
currA
.
Equals
(
ClientAction
.
NeedLeave
)
||
currA
.
Equals
(
ClientAction
.
NeedEnter
))
if
(
currA
.
Equals
(
ClientAction
.
None
)
||
currA
.
Equals
(
ClientAction
.
NeedLeave
)
||
currA
.
Equals
(
ClientAction
.
NeedEnter
))
{
SetStatus
(
id
,
shelfId
,
ClientAction
.
NeedEnter
);
return
true
;
...
...
@@ -150,9 +169,8 @@ namespace OnlineStore.DeviceLibrary
}
public
static
bool
NeedLeave
(
string
id
,
string
shelfId
)
{
ClientAction
currA
=
GetAction
(
id
);
if
(
currA
.
Equals
(
ClientAction
.
None
)
||
currA
.
Equals
(
ClientAction
.
FinishLeave
)
||
currA
.
Equals
(
ClientAction
.
FinishEnter
)
||
currA
.
Equals
(
ClientAction
.
NeedLeave
)
||
currA
.
Equals
(
ClientAction
.
NeedEnter
))
if
(
currA
.
Equals
(
ClientAction
.
None
)
||
currA
.
Equals
(
ClientAction
.
NeedLeave
)
||
currA
.
Equals
(
ClientAction
.
NeedEnter
))
{
SetStatus
(
id
,
shelfId
,
ClientAction
.
NeedLeave
);
return
true
;
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论