Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
RC1250-ACPackingStore
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 5229fc72
由
张东亮
编写于
2023-03-15 13:07:14 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
治具出入库更改
1 个父辈
7c97fdf2
显示空白字符变更
内嵌
并排
正在显示
43 个修改的文件
包含
3164 行增加
和
2819 行删除
RC1250-ACPackingStore.sln
source/ACPackingStore/ACPackingStore.csproj
source/ACPackingStore/App.config
source/ACPackingStore/FrmAbout.Designer.cs
source/ACPackingStore/FrmAbout.cs
source/ACPackingStore/FrmAxisDebug.cs
source/ACPackingStore/FrmBox.cs
source/ACPackingStore/FrmPwd.cs
source/ACPackingStore/FrmStore.cs
source/ACPackingStore/Program.cs
source/ACPackingStore/positionTool/FrmPositionTool.cs
source/ACPackingStore/useControl/AxisMoveControl.cs
source/Common/Common.csproj
source/Common/Setting_Init.cs
source/Common/util/ConfigAppSettings.cs
source/Common/util/HttpHelper.cs
source/Common/util/HumitureController.cs
source/Common/util/LogUtil.cs
source/DeviceLibrary/ACPackingStore/AC_BOX_Bean_Partial.cs
source/DeviceLibrary/ACPackingStore/AC_BOX_Bean_Shelf.cs
source/DeviceLibrary/DeviceLibrary.csproj
source/DeviceLibrary/ACPackingStore/AC_BOX_Bean.cs → source/DeviceLibrary/PackingStore/AC_BOX_Bean.cs
source/DeviceLibrary/PackingStore/AC_BOX_Bean_AGV.cs
source/DeviceLibrary/PackingStore/AC_BOX_Bean_InStore.cs
source/DeviceLibrary/PackingStore/AC_BOX_Bean_OutStore.cs
source/DeviceLibrary/PackingStore/AC_BOX_Bean_Partial.cs
source/DeviceLibrary/PackingStore/AC_BOX_Bean_ScanCode.cs
source/DeviceLibrary/PackingStore/AC_BOX_Bean_Shelf.cs
source/DeviceLibrary/PackingStore/AC_BOX_Bean_server_connect.cs
source/DeviceLibrary/ACPackingStore/EnteryDoorBean.cs → source/DeviceLibrary/PackingStore/EnteryDoorBean.cs
source/DeviceLibrary/ACPackingStore/HumitureBean.cs → source/DeviceLibrary/PackingStore/HumitureBean.cs
source/DeviceLibrary/ACPackingStore/PackingStoreBean.cs → source/DeviceLibrary/PackingStore/PackingStoreBean.cs
source/DeviceLibrary/ACPackingStore/StoreManager.cs → source/DeviceLibrary/PackingStore/StoreManager.cs
source/DeviceLibrary/ACPackingStore/_system~.ini → source/DeviceLibrary/PackingStore/_system~.ini
source/DeviceLibrary/agvClient/AgvClient.cs
source/DeviceLibrary/device/IO/AIOBOX/AIOBOXManager.cs
source/DeviceLibrary/device/IO/IOManager.cs
source/DeviceLibrary/device/PanasonicServo/ACServerManager.cs
source/DeviceLibrary/device/halcon/CodeManager.cs
source/DeviceLibrary/store/InOutParam.cs
source/DeviceLibrary/store/KTK_Store.cs
source/DeviceLibrary/store/StoreStep.cs
source/DeviceLibrary/store/model/StoreMoveInfo.cs → source/DeviceLibrary/store/model/DeviceMoveInfo.cs
RC1250-ACPackingStore.sln
查看文件 @
5229fc7
Microsoft Visual Studio Solution File, Format Version 12.00
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio
15
# Visual Studio
Version 17
VisualStudioVersion = 1
5.0.27130.2024
VisualStudioVersion = 1
7.5.33414.496
MinimumVisualStudioVersion = 10.0.40219.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common", "source\Common\Common.csproj", "{43CDD09E-FCF3-4960-A01D-3BBFE9933122}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common", "source\Common\Common.csproj", "{43CDD09E-FCF3-4960-A01D-3BBFE9933122}"
EndProject
EndProject
...
@@ -13,6 +13,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LoadCSVLibrary", "source\Lo
...
@@ -13,6 +13,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LoadCSVLibrary", "source\Lo
EndProject
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ACPackingStore", "source\ACPackingStore\ACPackingStore.csproj", "{0D2542F5-DD62-4352-82D0-383D9A045E74}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ACPackingStore", "source\ACPackingStore\ACPackingStore.csproj", "{0D2542F5-DD62-4352-82D0-383D9A045E74}"
EndProject
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConfigHelper", "..\..\..\CSharp-Workspace\MyProject\DLL\ConfigHelper\ConfigHelper\ConfigHelper.csproj", "{290182DB-D949-434E-9FF7-C59BDE3F433A}"
EndProject
Global
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|Any CPU = Debug|Any CPU
...
@@ -39,6 +41,10 @@ Global
...
@@ -39,6 +41,10 @@ Global
{0D2542F5-DD62-4352-82D0-383D9A045E74}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0D2542F5-DD62-4352-82D0-383D9A045E74}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0D2542F5-DD62-4352-82D0-383D9A045E74}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0D2542F5-DD62-4352-82D0-383D9A045E74}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0D2542F5-DD62-4352-82D0-383D9A045E74}.Release|Any CPU.Build.0 = Release|Any CPU
{0D2542F5-DD62-4352-82D0-383D9A045E74}.Release|Any CPU.Build.0 = Release|Any CPU
{290182DB-D949-434E-9FF7-C59BDE3F433A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{290182DB-D949-434E-9FF7-C59BDE3F433A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{290182DB-D949-434E-9FF7-C59BDE3F433A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{290182DB-D949-434E-9FF7-C59BDE3F433A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
HideSolutionNode = FALSE
...
...
source/ACPackingStore/ACPackingStore.csproj
查看文件 @
5229fc7
...
@@ -181,6 +181,10 @@
...
@@ -181,6 +181,10 @@
</None>
</None>
</ItemGroup>
</ItemGroup>
<ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\..\CSharp-Workspace\MyProject\DLL\ConfigHelper\ConfigHelper\ConfigHelper.csproj">
<Project>{290182DB-D949-434E-9FF7-C59BDE3F433A}</Project>
<Name>ConfigHelper</Name>
</ProjectReference>
<ProjectReference Include="..\Common\Common.csproj">
<ProjectReference Include="..\Common\Common.csproj">
<Project>{43cdd09e-fcf3-4960-a01d-3bbfe9933122}</Project>
<Project>{43cdd09e-fcf3-4960-a01d-3bbfe9933122}</Project>
<Name>Common</Name>
<Name>Common</Name>
...
...
source/ACPackingStore/App.config
查看文件 @
5229fc7
...
@@ -3,64 +3,6 @@
...
@@ -3,64 +3,6 @@
<
configSections
>
<
configSections
>
<
section
name
=
"log4net"
type
=
"log4net.Config.Log4NetConfigurationSectionHandler,log4net"
/>
<
section
name
=
"log4net"
type
=
"log4net.Config.Log4NetConfigurationSectionHandler,log4net"
/>
</
configSections
>
</
configSections
>
<
appSettings
>
<!--是否开机自动启动料仓-->
<
add
key
=
"App_AutoRun"
value
=
"1"
/>
<
add
key
=
"App_Title"
value
=
"包装料料仓"
/>
<!-- 开始吹气的判断值(配置值=服务器发送的湿度值-开始吹气值)-->
<
add
key
=
"StartBlowValue"
value
=
"4"
/>
<!-- 停止吹气的判断值(配置值=服务器发送的湿度值-停止吹气值)-->
<
add
key
=
"StopBlowValue"
value
=
"4"
/>
<!--
Server
address
-->
<
add
key
=
"http.server"
value
=
"http://10.85.160.25/myproject/"
/>
<!--
storeType
-->
<
add
key
=
"store_count"
value
=
"2"
/>
<
add
key
=
"Store_ConfigPath"
value
=
"\StoreConfig\StoreConfig.csv"
/>
<!--
start
one
store
config
-->
<
add
key
=
"Shelf_Position_Config"
value
=
"\StoreConfig\shelfPosition.csv"
/>
<
add
key
=
"Store_Position_Config"
value
=
"\StoreConfig\linePositions.csv"
/>
<
add
key
=
"BOX_ConfigPath"
value
=
"\StoreConfig\BoxConfig.csv"
/>
<
add
key
=
"Store_Type"
value
=
"RC_AC_PA"
/>
<
add
key
=
"Store_CID"
value
=
"packing-store"
/>
<
add
key
=
"Store_CID_1"
value
=
"packing-19"
/>
<
add
key
=
"Store_CID_2"
value
=
"packing-20"
/>
<!--
end
one
store
config
-->
<
add
key
=
"ACBaudRate"
value
=
"115200"
/>
<
add
key
=
"InOutDefaultPosition"
value
=
"52000"
/>
<
add
key
=
"Config_Pwd"
value
=
"123456"
/>
<!--二维码类型列表配置,用
#分割,一维码=Barcode 二维码: QR Code#Data Matrix ECC 200#Micro QR Code-->
<
add
key
=
"CodeType"
value
=
"QR Code#Data Matrix ECC 200"
/>
<!--二维码参数文件所在路径,文件名与二维码类型名一样-->
<
add
key
=
"CodeParamPath"
value
=
"\CodeParam\"
/>
<!--出库等待料盘拿走的时间,秒-->
<
add
key
=
"OutStoreWaitSeconds"
value
=
"1"
/>
<!--温控器类型,
0
=壁挂王字壳温湿度变送器,
1
=妙昕温湿度记录仪-->
<
add
key
=
"HumitureControllerType"
value
=
"0"
/>
<
add
key
=
"UseAIOBOX"
value
=
"1"
/>
<
add
key
=
"DIMS"
value
=
"60"
/>
<
add
key
=
"DOMS"
value
=
"300"
/>
<!--流水线地址和端口配置-->
<
add
key
=
"LineServerIp"
value
=
"192.168.101.11"
/>
<
add
key
=
"LineServerPort"
value
=
"5246"
/>
<!--是否调试状态-->
<
add
key
=
"IsInDebug"
value
=
"1"
/>
<
add
key
=
"UseBuzzer"
value
=
"0"
/>
<!--
IO
模块是否主动上传-->
<
add
key
=
"AIOAutoUpload"
value
=
"0"
/>
<!--
AGV
调度服务器地址-->
<
add
key
=
"AgvServerIp"
value
=
"10.85.160.20"
/>
<
add
key
=
"CodeCount"
value
=
"3"
/>
<
add
key
=
"Tool_P3_Offset"
value
=
"7000"
/>
<
add
key
=
"Tool_P4_Offset"
value
=
"-2000"
/>
<
add
key
=
"Tool_P5_Offset"
value
=
"-2000"
/>
<
add
key
=
"Tool_P6_Offset"
value
=
"7000"
/>
<
add
key
=
"Tool_TargetSpeed"
value
=
"20"
/>
<
add
key
=
"Tool_TargetPosition"
value
=
"1835000"
/>
<!--是否启用入料口移门,
1
=启用,
0
=禁用-->
<
add
key
=
"UseDoor"
value
=
"1"
/>
<
add
key
=
"Agv_Log_Open"
value
=
"1"
/>
<
add
key
=
"AutoShelfInstore"
value
=
"1"
/>
</
appSettings
>
<
log4net
>
<
log4net
>
<
appender
name
=
"RollingLogFileAppender"
type
=
"log4net.Appender.RollingFileAppender"
>
<
appender
name
=
"RollingLogFileAppender"
type
=
"log4net.Appender.RollingFileAppender"
>
<
file
value
=
"logs/Packing-store-19-20.log"
/>
<
file
value
=
"logs/Packing-store-19-20.log"
/>
...
@@ -69,7 +11,7 @@
...
@@ -69,7 +11,7 @@
<
rollingStyle
value
=
"Date"
/>
<
rollingStyle
value
=
"Date"
/>
<
datePattern
value
=
"yyyy-MM-dd"
/>
<
datePattern
value
=
"yyyy-MM-dd"
/>
<
layout
type
=
"log4net.Layout.PatternLayout"
>
<
layout
type
=
"log4net.Layout.PatternLayout"
>
<
conversionPattern
value
=
"[%d
ate
][%t]%-5p %m%n"
/>
<
conversionPattern
value
=
"[%d][%t]%-5p %m%n"
/>
</
layout
>
</
layout
>
</
appender
>
</
appender
>
<
appender
name
=
"TheRFID"
type
=
"log4net.Appender.RollingFileAppender"
>
<
appender
name
=
"TheRFID"
type
=
"log4net.Appender.RollingFileAppender"
>
...
@@ -79,7 +21,7 @@
...
@@ -79,7 +21,7 @@
<
rollingStyle
value
=
"Date"
/>
<
rollingStyle
value
=
"Date"
/>
<
datePattern
value
=
"yyyy-MM-dd"
/>
<
datePattern
value
=
"yyyy-MM-dd"
/>
<
layout
type
=
"log4net.Layout.PatternLayout"
>
<
layout
type
=
"log4net.Layout.PatternLayout"
>
<
conversionPattern
value
=
"[%d
ate
][%t]%-5p %m%n"
/>
<
conversionPattern
value
=
"[%d][%t]%-5p %m%n"
/>
</
layout
>
</
layout
>
</
appender
>
</
appender
>
<
logger
name
=
"RollingLogFileAppender"
>
<
logger
name
=
"RollingLogFileAppender"
>
...
@@ -87,13 +29,9 @@
...
@@ -87,13 +29,9 @@
<
appender
-
ref
ref
=
"RollingLogFileAppender"
/>
<
appender
-
ref
ref
=
"RollingLogFileAppender"
/>
</
logger
>
</
logger
>
<
logger
name
=
"TheRFID"
>
<
logger
name
=
"TheRFID"
>
<
level
value
=
"
Debug
"
/>
<
level
value
=
"
info
"
/>
<
appender
-
ref
ref
=
"TheRFID"
/>
<
appender
-
ref
ref
=
"TheRFID"
/>
</
logger
>
</
logger
>
<
root
>
<
level
value
=
"Info"
/>
<
appender
-
ref
ref
=
"RollingLogFileAppender"
/>
</
root
>
</
log4net
>
</
log4net
>
<
startup
>
<
startup
>
<
supportedRuntime
version
=
"v4.0"
sku
=
".NETFramework,Version=v4.6.1"
/>
<
supportedRuntime
version
=
"v4.0"
sku
=
".NETFramework,Version=v4.6.1"
/>
...
...
source/ACPackingStore/FrmAbout.Designer.cs
查看文件 @
5229fc7
...
@@ -59,6 +59,7 @@
...
@@ -59,6 +59,7 @@
this
.
lblVersion
.
TabIndex
=
276
;
this
.
lblVersion
.
TabIndex
=
276
;
this
.
lblVersion
.
Text
=
"版本号:1.1.0000.0000"
;
this
.
lblVersion
.
Text
=
"版本号:1.1.0000.0000"
;
this
.
lblVersion
.
TextAlign
=
System
.
Drawing
.
ContentAlignment
.
MiddleCenter
;
this
.
lblVersion
.
TextAlign
=
System
.
Drawing
.
ContentAlignment
.
MiddleCenter
;
this
.
lblVersion
.
Click
+=
new
System
.
EventHandler
(
this
.
lblVersion_Click
);
//
//
// lblTime
// lblTime
//
//
...
@@ -94,7 +95,7 @@
...
@@ -94,7 +95,7 @@
//
//
// FrmAbout
// FrmAbout
//
//
this
.
AutoScaleDimensions
=
new
System
.
Drawing
.
SizeF
(
7F
,
17
F
);
this
.
AutoScaleDimensions
=
new
System
.
Drawing
.
SizeF
(
9F
,
20
F
);
this
.
AutoScaleMode
=
System
.
Windows
.
Forms
.
AutoScaleMode
.
Font
;
this
.
AutoScaleMode
=
System
.
Windows
.
Forms
.
AutoScaleMode
.
Font
;
this
.
ClientSize
=
new
System
.
Drawing
.
Size
(
553
,
222
);
this
.
ClientSize
=
new
System
.
Drawing
.
Size
(
553
,
222
);
this
.
Controls
.
Add
(
this
.
btnCopy
);
this
.
Controls
.
Add
(
this
.
btnCopy
);
...
...
source/ACPackingStore/FrmAbout.cs
查看文件 @
5229fc7
...
@@ -37,5 +37,10 @@ namespace OnlineStore.ACPackingStore
...
@@ -37,5 +37,10 @@ namespace OnlineStore.ACPackingStore
{
{
Clipboard
.
SetDataObject
(
GetCodeNum
(),
true
);
Clipboard
.
SetDataObject
(
GetCodeNum
(),
true
);
}
}
private
void
lblVersion_Click
(
object
sender
,
EventArgs
e
)
{
ConfigHelper
.
AdvanceConfigForm
.
ShowEditDialog
(
this
);
}
}
}
}
}
source/ACPackingStore/FrmAxisDebug.cs
查看文件 @
5229fc7
...
@@ -61,7 +61,7 @@ namespace OnlineStore.ACPackingStore
...
@@ -61,7 +61,7 @@ namespace OnlineStore.ACPackingStore
/// </summary>
/// </summary>
private
bool
InOutIsIsP1
()
private
bool
InOutIsIsP1
()
{
{
int
InOutDefaultPosition
=
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
InOutDefaultPosition
)
;
int
InOutDefaultPosition
=
Setting_Init
.
InOutDefaultPosition
;
//if (InOutDefaultPosition > 3000 || InOutDefaultPosition.Equals(0))
//if (InOutDefaultPosition > 3000 || InOutDefaultPosition.Equals(0))
//{
//{
// InOutDefaultPosition = 3000;
// InOutDefaultPosition = 3000;
...
...
source/ACPackingStore/FrmBox.cs
查看文件 @
5229fc7
...
@@ -383,7 +383,7 @@ namespace OnlineStore.ACPackingStore
...
@@ -383,7 +383,7 @@ namespace OnlineStore.ACPackingStore
//位置配置
//位置配置
string
appPath
=
Application
.
StartupPath
;
string
appPath
=
Application
.
StartupPath
;
//如果总配置文件存在,保存到总的配置文件
//如果总配置文件存在,保存到总的配置文件
string
positionConfigFile
=
appPath
+
ConfigAppSettings
.
GetValue
(
Setting_Init
.
Store_Position_Config
)
;
string
positionConfigFile
=
appPath
+
Setting_Init
.
Store_Position_Config
;
if
(!
File
.
Exists
(
positionConfigFile
))
if
(!
File
.
Exists
(
positionConfigFile
))
{
{
string
nameStr
=
BoxBean
.
DeviceID
.
ToString
();
string
nameStr
=
BoxBean
.
DeviceID
.
ToString
();
...
@@ -476,7 +476,7 @@ namespace OnlineStore.ACPackingStore
...
@@ -476,7 +476,7 @@ namespace OnlineStore.ACPackingStore
/// </summary>
/// </summary>
private
bool
InOutIsIsP1
()
private
bool
InOutIsIsP1
()
{
{
int
InOutDefaultPosition
=
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
InOutDefaultPosition
)
;
int
InOutDefaultPosition
=
Setting_Init
.
InOutDefaultPosition
;
int
currValue
=
ACServerManager
.
GetActualtPosition
(
BoxBean
.
Config
.
InOut_Axis
.
DeviceName
,
BoxBean
.
Config
.
InOut_Axis
.
GetAxisValue
());
int
currValue
=
ACServerManager
.
GetActualtPosition
(
BoxBean
.
Config
.
InOut_Axis
.
DeviceName
,
BoxBean
.
Config
.
InOut_Axis
.
GetAxisValue
());
if
(
currValue
<=
InOutDefaultPosition
)
if
(
currValue
<=
InOutDefaultPosition
)
{
{
...
@@ -869,7 +869,7 @@ namespace OnlineStore.ACPackingStore
...
@@ -869,7 +869,7 @@ namespace OnlineStore.ACPackingStore
pso
.
UpDownAxis_HP102
=
FormUtil
.
GetIntValue
(
txtUpdownP102
);
pso
.
UpDownAxis_HP102
=
FormUtil
.
GetIntValue
(
txtUpdownP102
);
}
}
//位置配置
//位置配置
string
positionConfigFile
=
Application
.
StartupPath
+
ConfigAppSettings
.
GetValue
(
Setting_Init
.
Shelf_Position_Config
)
;
string
positionConfigFile
=
Application
.
StartupPath
+
Setting_Init
.
Shelf_Position_Config
;
if
(!
File
.
Exists
(
positionConfigFile
))
if
(!
File
.
Exists
(
positionConfigFile
))
{
{
string
nameStr
=
BoxBean
.
DeviceID
.
ToString
();
string
nameStr
=
BoxBean
.
DeviceID
.
ToString
();
...
@@ -970,10 +970,10 @@ namespace OnlineStore.ACPackingStore
...
@@ -970,10 +970,10 @@ namespace OnlineStore.ACPackingStore
private
void
btnSaveCID_Click
(
object
sender
,
EventArgs
e
)
private
void
btnSaveCID_Click
(
object
sender
,
EventArgs
e
)
{
{
string
cid
=
txtCID
.
Text
.
Trim
();
string
cid
=
txtCID
.
Text
.
Trim
();
DialogResult
result
=
MessageBox
.
Show
(
"确定将CID修改为【"
+
cid
+
"】
,修改后需要重启生效
"
,
""
,
MessageBoxButtons
.
YesNo
);
DialogResult
result
=
MessageBox
.
Show
(
"确定将CID修改为【"
+
cid
+
"】"
,
""
,
MessageBoxButtons
.
YesNo
);
if
(
result
.
Equals
(
DialogResult
.
Yes
))
if
(
result
.
Equals
(
DialogResult
.
Yes
))
{
{
ConfigAppSettings
.
SaveValue
(
Setting_Init
.
Store_CID
+
"_"
+
BoxBean
.
DeviceID
,
cid
);
ConfigAppSettings
.
SaveValue
(
"Store_CID"
+
"_"
+
BoxBean
.
DeviceID
,
cid
);
}
}
}
}
...
@@ -1019,7 +1019,7 @@ namespace OnlineStore.ACPackingStore
...
@@ -1019,7 +1019,7 @@ namespace OnlineStore.ACPackingStore
{
{
string
appPath
=
Application
.
StartupPath
;
string
appPath
=
Application
.
StartupPath
;
//如果总配置文件存在,保存到总的配置文件
//如果总配置文件存在,保存到总的配置文件
string
positionConfigFile
=
appPath
+
ConfigAppSettings
.
GetValue
(
Setting_Init
.
Store_Position_Config
)
;
string
positionConfigFile
=
appPath
+
Setting_Init
.
Store_Position_Config
;
if
(!
File
.
Exists
(
positionConfigFile
))
if
(!
File
.
Exists
(
positionConfigFile
))
{
{
string
nameStr
=
BoxBean
.
DeviceID
.
ToString
();
string
nameStr
=
BoxBean
.
DeviceID
.
ToString
();
...
...
source/ACPackingStore/FrmPwd.cs
查看文件 @
5229fc7
...
@@ -31,11 +31,11 @@ namespace OnlineStore.ACPackingStore
...
@@ -31,11 +31,11 @@ namespace OnlineStore.ACPackingStore
private
void
btnNext_Click
(
object
sender
,
EventArgs
e
)
private
void
btnNext_Click
(
object
sender
,
EventArgs
e
)
{
{
string
pwd
=
txtPwd
.
Text
;
string
pwd
=
txtPwd
.
Text
;
string
configPwd
=
ConfigAppSettings
.
GetValue
(
Setting_Init
.
Config_Pwd
)
;
string
configPwd
=
Setting_Init
.
Config_Pwd
;
if
(
configPwd
.
Equals
(
""
))
if
(
configPwd
.
Equals
(
""
))
{
{
configPwd
=
"123456"
;
configPwd
=
"123456"
;
ConfigAppSettings
.
SaveValue
(
Setting_Init
.
Config_Pwd
,
configPwd
)
;
Setting_Init
.
Config_Pwd
=
configPwd
;
}
}
if
(
pwd
.
Equals
(
configPwd
))
if
(
pwd
.
Equals
(
configPwd
))
{
{
...
...
source/ACPackingStore/FrmStore.cs
查看文件 @
5229fc7
...
@@ -57,9 +57,9 @@ namespace OnlineStore.ACPackingStore
...
@@ -57,9 +57,9 @@ namespace OnlineStore.ACPackingStore
chbAutoRun
.
Checked
=
store
.
UseBuzzer
;
chbAutoRun
.
Checked
=
store
.
UseBuzzer
;
chbAutoShelfInstore
.
Checked
=
store
.
AutoShelfInstore
;
chbAutoShelfInstore
.
Checked
=
store
.
AutoShelfInstore
;
this
.
Text
=
ConfigAppSettings
.
GetValue
(
Setting_Init
.
App_Title
)
;
this
.
Text
=
Setting_Init
.
App_Title
;
chbAutoRun
.
Checked
=
(
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
App_AutoRun
).
Equals
(
1
))
;
chbAutoRun
.
Checked
=
Setting_Init
.
App_AutoRun
;
chbDoorCanMove
.
Checked
=
(
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
UseDoor
).
Equals
(
1
))
;
chbDoorCanMove
.
Checked
=
Setting_Init
.
UseDoor
;
// LogUtil.logBox = this.logBox;
// LogUtil.logBox = this.logBox;
// HideForm();
// HideForm();
LoadOk
=
true
;
LoadOk
=
true
;
...
@@ -182,16 +182,16 @@ namespace OnlineStore.ACPackingStore
...
@@ -182,16 +182,16 @@ namespace OnlineStore.ACPackingStore
//如果料仓还在运行状态,先关闭料仓
//如果料仓还在运行状态,先关闭料仓
if
(!
store
.
storeRunStatus
.
Equals
(
StoreRunStatus
.
Wait
))
if
(!
store
.
storeRunStatus
.
Equals
(
StoreRunStatus
.
Wait
))
{
{
LogUtil
.
info
(
"ExitApp 停止"
+
store
.
Name
+
"运行 "
);
LogUtil
.
info
(
"ExitApp 停止"
+
store
.
Name
+
"运行 "
);
store
.
StopRun
();
store
.
StopRun
();
}
}
else
else
{
{
foreach
(
AC_BOX_Bean
bean
in
store
.
BoxMap
.
Values
)
foreach
(
AC_BOX_Bean
bean
in
store
.
BoxMap
.
Values
)
{
{
if
(
bean
.
storeRunStatus
.
Equals
(
StoreRunStatus
.
Wait
).
Equals
(
false
))
if
(
bean
.
storeRunStatus
.
Equals
(
StoreRunStatus
.
Wait
).
Equals
(
false
))
{
{
LogUtil
.
info
(
"ExitApp 停止"
+
bean
.
Name
+
"运行 "
);
LogUtil
.
info
(
"ExitApp 停止"
+
bean
.
Name
+
"运行 "
);
bean
.
StopRun
();
bean
.
StopRun
();
}
}
}
}
...
@@ -245,7 +245,7 @@ namespace OnlineStore.ACPackingStore
...
@@ -245,7 +245,7 @@ namespace OnlineStore.ACPackingStore
MessageBox
.
Show
(
store
.
Name
+
"当前状态:"
+
store
.
storeRunStatus
+
",不能启动!"
);
MessageBox
.
Show
(
store
.
Name
+
"当前状态:"
+
store
.
storeRunStatus
+
",不能启动!"
);
return
;
return
;
}
}
LogUtil
.
info
(
"开始启动"
);
LogUtil
.
info
(
"开始启动"
);
startTimer
.
Interval
=
300
;
startTimer
.
Interval
=
300
;
startTimer
.
Elapsed
+=
timer_Elapsed
;
startTimer
.
Elapsed
+=
timer_Elapsed
;
startTimer
.
AutoReset
=
false
;
startTimer
.
AutoReset
=
false
;
...
@@ -373,8 +373,8 @@ namespace OnlineStore.ACPackingStore
...
@@ -373,8 +373,8 @@ namespace OnlineStore.ACPackingStore
{
{
sbResult
.
AppendFormat
(
DateTime
.
Now
.
ToLongTimeString
()
+
", 名称:{0} 内存大小:{1}M "
,
process
.
ProcessName
,
process
.
PrivateMemorySize64
/
1024
/
1024F
);
sbResult
.
AppendFormat
(
DateTime
.
Now
.
ToLongTimeString
()
+
", 名称:{0} 内存大小:{1}M "
,
process
.
ProcessName
,
process
.
PrivateMemorySize64
/
1024
/
1024F
);
totalMemery
+=
process
.
PrivateMemorySize64
/
1024
;
totalMemery
+=
process
.
PrivateMemorySize64
/
1024
;
double
value
=
(
process
.
TotalProcessorTime
-
prevCpuTime
).
TotalMilliseconds
/
interval
/
Environment
.
ProcessorCount
;
double
value
=
(
process
.
TotalProcessorTime
-
prevCpuTime
).
TotalMilliseconds
/
interval
/
Environment
.
ProcessorCount
;
sbResult
.
AppendFormat
(
" CPU : "
+
Math
.
Round
(
value
,
2
)
+
"%"
);
sbResult
.
AppendFormat
(
" CPU : "
+
Math
.
Round
(
value
,
2
)
+
"%"
);
// string result = string.Format("进程总数 {0} 个,共占内存:{1}MB \n", processes.Length, totalMemery / 1024) + sbResult.ToString();
// string result = string.Format("进程总数 {0} 个,共占内存:{1}MB \n", processes.Length, totalMemery / 1024) + sbResult.ToString();
LogUtil
.
info
(
sbResult
.
ToString
());
LogUtil
.
info
(
sbResult
.
ToString
());
}
}
...
@@ -384,7 +384,7 @@ namespace OnlineStore.ACPackingStore
...
@@ -384,7 +384,7 @@ namespace OnlineStore.ACPackingStore
}
}
catch
(
Exception
ex
)
catch
(
Exception
ex
)
{
{
LogUtil
.
error
(
"LogM Error: "
+
ex
.
ToString
());
LogUtil
.
error
(
"LogM Error: "
+
ex
.
ToString
());
}
}
}
}
private
void
timer1_Tick
(
object
sender
,
EventArgs
e
)
private
void
timer1_Tick
(
object
sender
,
EventArgs
e
)
...
@@ -396,12 +396,12 @@ namespace OnlineStore.ACPackingStore
...
@@ -396,12 +396,12 @@ namespace OnlineStore.ACPackingStore
lblServerMsg
.
Text
=
HttpHelper
.
LastServerMsg
;
lblServerMsg
.
Text
=
HttpHelper
.
LastServerMsg
;
ReadIOList
();
ReadIOList
();
string
msg
=
""
;
string
msg
=
""
;
foreach
(
AC_BOX_Bean
box
in
StoreManager
.
Store
.
BoxMap
.
Values
)
foreach
(
AC_BOX_Bean
box
in
StoreManager
.
Store
.
BoxMap
.
Values
)
{
{
string
s
=
box
.
GetWarnMsg
();
string
s
=
box
.
GetWarnMsg
();
if
(!
s
.
Equals
(
""
))
if
(!
s
.
Equals
(
""
))
{
{
msg
+=
box
.
Name
+
":"
+
s
+
"\r"
;
msg
+=
box
.
Name
+
":"
+
s
+
"\r"
;
}
}
}
}
if
(!
chbAGV
.
Checked
.
Equals
(
AgvClient
.
CurrCancelState
))
if
(!
chbAGV
.
Checked
.
Equals
(
AgvClient
.
CurrCancelState
))
...
@@ -410,7 +410,7 @@ namespace OnlineStore.ACPackingStore
...
@@ -410,7 +410,7 @@ namespace OnlineStore.ACPackingStore
}
}
if
(!
chbAutoShelfInstore
.
Checked
.
Equals
(
store
.
AutoShelfInstore
))
if
(!
chbAutoShelfInstore
.
Checked
.
Equals
(
store
.
AutoShelfInstore
))
{
{
chbAutoShelfInstore
.
Checked
=
store
.
AutoShelfInstore
;
chbAutoShelfInstore
.
Checked
=
store
.
AutoShelfInstore
;
}
}
label1
.
Text
=
"agvClient.CancelState="
+
AgvClient
.
getState
();
label1
.
Text
=
"agvClient.CancelState="
+
AgvClient
.
getState
();
lblWarnMsg
.
Text
=
msg
;
lblWarnMsg
.
Text
=
msg
;
...
@@ -425,12 +425,12 @@ namespace OnlineStore.ACPackingStore
...
@@ -425,12 +425,12 @@ namespace OnlineStore.ACPackingStore
}
}
if
(
chbAutoRun
.
Checked
)
if
(
chbAutoRun
.
Checked
)
{
{
ConfigAppSettings
.
SaveValue
(
Setting_Init
.
App_AutoRun
,
1
)
;
Setting_Init
.
App_AutoRun
=
true
;
ManagerUtil
.
AutoRun
(
Application
.
ExecutablePath
,
true
);
ManagerUtil
.
AutoRun
(
Application
.
ExecutablePath
,
true
);
}
}
else
else
{
{
ConfigAppSettings
.
SaveValue
(
Setting_Init
.
App_AutoRun
,
0
)
;
Setting_Init
.
App_AutoRun
=
false
;
ManagerUtil
.
AutoRun
(
Application
.
ExecutablePath
,
false
);
ManagerUtil
.
AutoRun
(
Application
.
ExecutablePath
,
false
);
}
}
}
}
...
@@ -489,9 +489,9 @@ namespace OnlineStore.ACPackingStore
...
@@ -489,9 +489,9 @@ namespace OnlineStore.ACPackingStore
private
void
toolStripMenuItem2_Click
(
object
sender
,
EventArgs
e
)
private
void
toolStripMenuItem2_Click
(
object
sender
,
EventArgs
e
)
{
{
if
(
toolStripMenuItem2
.
Text
.
Equals
(
"启用调试"
))
if
(
toolStripMenuItem2
.
Text
.
Equals
(
"启用调试"
))
{
{
DebugOpen
(
true
);
DebugOpen
(
true
);
}
}
else
else
{
{
...
@@ -544,14 +544,14 @@ namespace OnlineStore.ACPackingStore
...
@@ -544,14 +544,14 @@ namespace OnlineStore.ACPackingStore
if
(
chbUseBuzzer
.
Checked
)
if
(
chbUseBuzzer
.
Checked
)
{
{
store
.
UseBuzzer
=
true
;
store
.
UseBuzzer
=
true
;
ConfigAppSettings
.
SaveValue
(
Setting_Init
.
UseBuzzer
,
1
)
;
Setting_Init
.
UseBuzzer
=
store
.
UseBuzzer
;
LogUtil
.
info
(
"勾选:启用蜂鸣器"
);
LogUtil
.
info
(
"勾选:启用蜂鸣器"
);
}
}
else
else
{
{
store
.
UseBuzzer
=
false
;
store
.
UseBuzzer
=
false
;
ConfigAppSettings
.
SaveValue
(
Setting_Init
.
UseBuzzer
,
0
)
;
Setting_Init
.
UseBuzzer
=
store
.
UseBuzzer
;
LogUtil
.
info
(
"去掉:启用蜂鸣器"
);
LogUtil
.
info
(
"去掉:启用蜂鸣器"
);
}
}
}
}
...
@@ -581,14 +581,14 @@ namespace OnlineStore.ACPackingStore
...
@@ -581,14 +581,14 @@ namespace OnlineStore.ACPackingStore
if
(
chbAutoShelfInstore
.
Checked
)
if
(
chbAutoShelfInstore
.
Checked
)
{
{
store
.
AutoShelfInstore
=
true
;
store
.
AutoShelfInstore
=
true
;
ConfigAppSettings
.
SaveValue
(
Setting_Init
.
AutoShelfInstore
,
1
)
;
Setting_Init
.
AutoShelfInstore
=
store
.
AutoShelfInstore
;
LogUtil
.
info
(
"勾选:检测到料架自动入库"
);
LogUtil
.
info
(
"勾选:检测到料架自动入库"
);
}
}
else
else
{
{
store
.
AutoShelfInstore
=
false
;
store
.
AutoShelfInstore
=
false
;
ConfigAppSettings
.
SaveValue
(
Setting_Init
.
AutoShelfInstore
,
0
)
;
Setting_Init
.
AutoShelfInstore
=
store
.
AutoShelfInstore
;
LogUtil
.
info
(
"去掉:检测到料架自动入库"
);
LogUtil
.
info
(
"去掉:检测到料架自动入库"
);
}
}
}
}
...
@@ -620,14 +620,14 @@ namespace OnlineStore.ACPackingStore
...
@@ -620,14 +620,14 @@ namespace OnlineStore.ACPackingStore
if
(
chbDoorCanMove
.
Checked
)
if
(
chbDoorCanMove
.
Checked
)
{
{
// store.AutoShelfInstore = true;
// store.AutoShelfInstore = true;
ConfigAppSettings
.
SaveValue
(
Setting_Init
.
UseDoor
,
1
)
;
Setting_Init
.
UseDoor
=
true
;
LogUtil
.
info
(
"勾选:启用入料口移门"
);
LogUtil
.
info
(
"勾选:启用入料口移门"
);
}
}
else
else
{
{
// store.AutoShelfInstore = false;
// store.AutoShelfInstore = false;
ConfigAppSettings
.
SaveValue
(
Setting_Init
.
UseDoor
,
0
)
;
Setting_Init
.
UseDoor
=
false
;
LogUtil
.
info
(
"去掉:启用入料口移门"
);
LogUtil
.
info
(
"去掉:启用入料口移门"
);
}
}
}
}
...
...
source/ACPackingStore/Program.cs
查看文件 @
5229fc7
...
@@ -9,6 +9,8 @@ using System.Linq;
...
@@ -9,6 +9,8 @@ using System.Linq;
using
System.Runtime.InteropServices
;
using
System.Runtime.InteropServices
;
using
System.Threading.Tasks
;
using
System.Threading.Tasks
;
using
System.Windows.Forms
;
using
System.Windows.Forms
;
using
OnlineStore.DeviceLibrary
;
using
log4net.Repository.Hierarchy
;
namespace
OnlineStore.ACPackingStore
namespace
OnlineStore.ACPackingStore
{
{
...
@@ -59,9 +61,8 @@ namespace OnlineStore.ACPackingStore
...
@@ -59,9 +61,8 @@ namespace OnlineStore.ACPackingStore
// 因为方法三只能是最小化的窗体显示出来,如果隐藏到托盘中则不能把运行的程序显示出来
// 因为方法三只能是最小化的窗体显示出来,如果隐藏到托盘中则不能把运行的程序显示出来
Process
currentproc
=
Process
.
GetCurrentProcess
();
Process
currentproc
=
Process
.
GetCurrentProcess
();
Process
[]
processcollection
=
Process
.
GetProcessesByName
(
currentproc
.
ProcessName
.
Replace
(
".vshost"
,
string
.
Empty
));
Process
[]
processcollection
=
Process
.
GetProcessesByName
(
currentproc
.
ProcessName
.
Replace
(
".vshost"
,
string
.
Empty
));
bool
isShow
=
false
;
// 该程序已经运行,
// 该程序已经运行,
bool
isShow
=
false
;
if
(
processcollection
.
Length
>=
1
)
if
(
processcollection
.
Length
>=
1
)
{
{
foreach
(
Process
process
in
processcollection
)
foreach
(
Process
process
in
processcollection
)
...
@@ -71,7 +72,7 @@ namespace OnlineStore.ACPackingStore
...
@@ -71,7 +72,7 @@ namespace OnlineStore.ACPackingStore
// 如果进程的句柄为0,即代表没有找到该窗体,即该窗体隐藏的情况时
// 如果进程的句柄为0,即代表没有找到该窗体,即该窗体隐藏的情况时
if
(
process
.
MainWindowHandle
.
ToInt32
().
Equals
(
0
))
if
(
process
.
MainWindowHandle
.
ToInt32
().
Equals
(
0
))
{
{
string
formTitle
=
ConfigAppSettings
.
GetValue
(
Setting_Init
.
App_Title
)
;
string
formTitle
=
Setting_Init
.
App_Title
;
// 获得窗体句柄
// 获得窗体句柄
formhwnd
=
FindWindow
(
null
,
formTitle
);
formhwnd
=
FindWindow
(
null
,
formTitle
);
// 重新显示该窗体并切换到带入到前台
// 重新显示该窗体并切换到带入到前台
...
@@ -94,6 +95,7 @@ namespace OnlineStore.ACPackingStore
...
@@ -94,6 +95,7 @@ namespace OnlineStore.ACPackingStore
if
(!
isShow
)
if
(!
isShow
)
{
{
System
.
Net
.
ServicePointManager
.
DefaultConnectionLimit
=
512
;
System
.
Net
.
ServicePointManager
.
DefaultConnectionLimit
=
512
;
Setting_Init
.
Init
();
XmlConfigurator
.
Configure
();
XmlConfigurator
.
Configure
();
Application
.
EnableVisualStyles
();
Application
.
EnableVisualStyles
();
Application
.
SetCompatibleTextRenderingDefault
(
false
);
Application
.
SetCompatibleTextRenderingDefault
(
false
);
...
...
source/ACPackingStore/positionTool/FrmPositionTool.cs
查看文件 @
5229fc7
...
@@ -66,12 +66,12 @@ namespace OnlineStore.ACPackingStore
...
@@ -66,12 +66,12 @@ namespace OnlineStore.ACPackingStore
IOManager
.
instance
.
ConnectionIOList
(
new
List
<
string
>
{
/*IoIp*/
});
IOManager
.
instance
.
ConnectionIOList
(
new
List
<
string
>
{
/*IoIp*/
});
}
}
P3Offset
=
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
Tool_P3_Offset
)
;
P3Offset
=
Setting_Init
.
Tool_P3_Offset
;
P4Offset
=
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
Tool_P4_Offset
)
;
P4Offset
=
Setting_Init
.
Tool_P4_Offset
;
P5Offset
=
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
Tool_P5_Offset
)
;
P5Offset
=
Setting_Init
.
Tool_P5_Offset
;
P6Offset
=
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
Tool_P6_Offset
)
;
P6Offset
=
Setting_Init
.
Tool_P6_Offset
;
int
tSpeed
=
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
Tool_TargetSpeed
)
;
int
tSpeed
=
Setting_Init
.
Tool_TargetSpeed
;
int
tPosition
=
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
Tool_TargetPosition
)
;
int
tPosition
=
Setting_Init
.
Tool_TargetPosition
;
if
(
P3Offset
.
Equals
(
0
))
P3Offset
=
6000
;
if
(
P3Offset
.
Equals
(
0
))
P3Offset
=
6000
;
if
(
P4Offset
.
Equals
(
0
))
P4Offset
=
-
6000
;
if
(
P4Offset
.
Equals
(
0
))
P4Offset
=
-
6000
;
...
@@ -197,12 +197,12 @@ namespace OnlineStore.ACPackingStore
...
@@ -197,12 +197,12 @@ namespace OnlineStore.ACPackingStore
private
void
SaveConfig
(
int
speed
,
int
position
)
private
void
SaveConfig
(
int
speed
,
int
position
)
{
{
//保存配置
//保存配置
ConfigAppSettings
.
SaveValue
(
Setting_Init
.
Tool_P3_Offset
,
P3Offset
)
;
Setting_Init
.
Tool_P3_Offset
=
P3Offset
;
ConfigAppSettings
.
SaveValue
(
Setting_Init
.
Tool_P4_Offset
,
P4Offset
)
;
Setting_Init
.
Tool_P4_Offset
=
P4Offset
;
ConfigAppSettings
.
SaveValue
(
Setting_Init
.
Tool_P5_Offset
,
P5Offset
)
;
Setting_Init
.
Tool_P5_Offset
=
P5Offset
;
ConfigAppSettings
.
SaveValue
(
Setting_Init
.
Tool_P6_Offset
,
P6Offset
)
;
Setting_Init
.
Tool_P6_Offset
=
P6Offset
;
ConfigAppSettings
.
SaveValue
(
Setting_Init
.
Tool_TargetSpeed
,
speed
)
;
Setting_Init
.
Tool_TargetSpeed
=
speed
;
ConfigAppSettings
.
SaveValue
(
Setting_Init
.
Tool_TargetPosition
,
position
)
;
Setting_Init
.
Tool_TargetPosition
=
position
;
}
}
private
void
btnAbsMove_Click
(
object
sender
,
EventArgs
e
)
private
void
btnAbsMove_Click
(
object
sender
,
EventArgs
e
)
{
{
...
...
source/ACPackingStore/useControl/AxisMoveControl.cs
查看文件 @
5229fc7
...
@@ -66,7 +66,7 @@ namespace OnlineStore.ACPackingStore
...
@@ -66,7 +66,7 @@ namespace OnlineStore.ACPackingStore
/// </summary>
/// </summary>
private
bool
InOutIsIsP1
()
private
bool
InOutIsIsP1
()
{
{
int
InOutDefaultPosition
=
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
InOutDefaultPosition
)
;
int
InOutDefaultPosition
=
Setting_Init
.
InOutDefaultPosition
;
int
currValue
=
ACServerManager
.
GetActualtPosition
(
BoxBean
.
Config
.
InOut_Axis
.
DeviceName
,
BoxBean
.
Config
.
InOut_Axis
.
GetAxisValue
());
int
currValue
=
ACServerManager
.
GetActualtPosition
(
BoxBean
.
Config
.
InOut_Axis
.
DeviceName
,
BoxBean
.
Config
.
InOut_Axis
.
GetAxisValue
());
if
(
currValue
<=
InOutDefaultPosition
)
if
(
currValue
<=
InOutDefaultPosition
)
{
{
...
...
source/Common/Common.csproj
查看文件 @
5229fc7
...
@@ -74,6 +74,12 @@
...
@@ -74,6 +74,12 @@
<ItemGroup>
<ItemGroup>
<WCFMetadata Include="Service References\" />
<WCFMetadata Include="Service References\" />
</ItemGroup>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\..\CSharp-Workspace\MyProject\DLL\ConfigHelper\ConfigHelper\ConfigHelper.csproj">
<Project>{290182db-d949-434e-9ff7-c59bde3f433a}</Project>
<Name>ConfigHelper</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
Other similar extension points exist, see Microsoft.Common.targets.
...
...
source/Common/Setting_Init.cs
查看文件 @
5229fc7
using
System
;
using
ConfigHelper
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
namespace
OnlineStore.Common
namespace
OnlineStore.Common
...
@@ -11,97 +8,92 @@ namespace OnlineStore.Common
...
@@ -11,97 +8,92 @@ namespace OnlineStore.Common
/// </summary>
/// </summary>
public
class
Setting_Init
public
class
Setting_Init
{
{
public
static
string
Agv_Log_Open
=
"Agv_Log_Open"
;
public
static
void
Init
()
public
static
string
Server_Log_Open
=
"Server_Log_Open"
;
{
/// <summary>
ConfigHelper
.
Config
.
MyConfig
=
typeof
(
Setting_Init
);
/// 系统启动时自动启动料仓,=1时自动启动,并隐藏窗口,=0时不需要
}
/// </summary>
[
MyConfigComment
(
"是否打开AGV日志"
)]
public
static
string
App_AutoRun
=
"App_AutoRun"
;
public
static
MyConfig
<
bool
>
Log_OpenAgv
=
true
;
/// <summary>
[
MyConfigComment
(
"是否打开AGV日志"
)]
/// 系统主界面标题
public
static
MyConfig
<
bool
>
Log_OpenServer
=
true
;
/// </summary>
public
static
string
App_Title
=
"App_Title"
;
[
MyConfigComment
(
"系统启动时自动启动料仓,true时自动启动,并隐藏窗口;false时不需要"
)]
public
static
MyConfig
<
bool
>
App_AutoRun
=
true
;
[
MyConfigComment
(
"系统主界面标题"
)]
public
static
string
http_server
=
"http.server"
;
public
static
MyConfig
<
string
>
App_Title
=
"包装料仓"
;
public
static
string
Store_CID
=
"Store_CID"
;
[
MyConfigComment
(
"料仓配置路径"
)]
public
static
MyConfig
<
string
>
BOX_ConfigPath
=
"\\StoreConfig\\BoxConfig.csv"
;
/// <summary>
[
MyConfigComment
(
"料仓点位配置路径"
)]
/// 料仓数量
public
static
MyConfig
<
string
>
Store_Position_Config
=
"\\StoreConfig\\linePositions.csv"
;
/// </summary>
public
static
string
store_count
=
"store_count"
;
[
MyConfigComment
(
"服务器地址"
)]
/// <summary>
public
static
MyConfig
<
string
>
http_server
=
"http://172.16.77.86/myproject/"
;
/// 料仓类型,1=在线料仓
[
MyConfigComment
(
"料仓CID,每个仓唯一"
)]
/// </summary>
public
static
MyConfig
<
string
>
Store_CID
=
"packing-store"
;
public
static
string
Store_Type
=
"Store_Type"
;
[
MyConfigComment
(
"软件上料仓数量"
)]
public
static
string
BOX_ConfigPath
=
"BOX_ConfigPath"
;
public
static
MyConfig
<
int
>
store_count
=
2
;
public
static
string
Store_Position_Config
=
"Store_Position_Config"
;
[
MyConfigComment
(
"料仓类型"
)]
/// <summary>
public
static
MyConfig
<
string
>
Store_Type
=
"RC_AC_PA"
;
/// 摄像机名称,多个中间使用#分割
/// </summary>
[
MyConfigComment
(
"摄像机名称,多个中间使用#分割"
)]
public
static
string
CameraName
=
"CameraName"
;
public
static
MyConfig
<
string
>
CameraName
=
""
;
/// <summary>
[
MyConfigComment
(
"需要识别的二维码类型,多个中间使用#分割"
)]
/// 需要识别的二维码类型,多个中间使用#分割
public
static
MyConfig
<
string
>
CodeType
=
"QR Code#Data Matrix ECC 200"
;
/// </summary>
[
MyConfigComment
(
"是否开启吹气"
)]
public
static
string
CodeType
=
"CodeType"
;
public
static
MyConfig
<
bool
>
OpenBlow
=
false
;
[
MyConfigComment
(
"开始吹气的判断值(配置值=服务器发送的湿度值-开始吹气值)"
)]
/// <summary>
public
static
MyConfig
<
int
>
StartBlowValue
=
4
;
/// 开始吹气的判断值(配置值=服务器发送的湿度值-开始吹气值)
[
MyConfigComment
(
"停止吹气的判断值(配置值=服务器发送的湿度值-停止吹气值)"
)]
/// </summary>
public
static
MyConfig
<
int
>
StopBlowValue
=
4
;
public
static
string
StartBlowValue
=
"StartBlowValue"
;
[
MyConfigComment
(
"二维码参数文件所在路径,文件名与二维码类型名一样"
)]
/// <summary>
public
static
MyConfig
<
string
>
CodeParamPath
=
"\\CodeParam\\"
;
/// 停止吹气的判断值(配置值=服务器发送的湿度值-停止吹气值)
/// </summary>
[
MyConfigComment
(
"进出轴最大待机点,需要小于3000"
)]
public
static
string
StopBlowValue
=
"StopBlowValue"
;
public
static
MyConfig
<
int
>
InOutDefaultPosition
=
52000
;
[
MyConfigComment
(
"配置的登录密码"
)]
/// <summary>
public
static
MyConfig
<
string
>
Config_Pwd
=
"123456"
;
/// 配置文件路径 Data Matrix ECC 200.dcm
/// </summary>
[
MyConfigComment
(
"出库等待料盘拿走的时间,秒"
)]
public
static
string
CodeParamPath
=
"CodeParamPath"
;
public
static
MyConfig
<
int
>
OutStoreWaitSeconds
=
30
;
/// <summary>
[
MyConfigComment
(
"温控器类型,0=壁挂王字壳温湿度变送器,1=妙昕温湿度记录仪"
)]
/// 进出轴最大待机点,需要小于3000
public
static
MyConfig
<
int
>
HumitureControllerType
=
0
;
/// </summary>
public
static
string
InOutDefaultPosition
=
"InOutDefaultPosition"
;
[
MyConfigComment
(
"是否使用零点IO模块"
)]
public
static
MyConfig
<
bool
>
UseAIOBOX
=
true
;
public
static
string
Config_Pwd
=
"Config_Pwd"
;
/// <summary>
[
MyConfigComment
(
"伺服通讯波特率"
)]
/// 出库等待料盘拿走的时间,秒
public
static
MyConfig
<
int
>
ACBaudRate
=
115200
;
/// </summary>
public
static
string
OutStoreWaitSeconds
=
"OutStoreWaitSeconds"
;
[
MyConfigComment
(
"料仓配置文件路径"
)]
public
static
MyConfig
<
string
>
Store_ConfigPath
=
"\\StoreConfig\\StoreConfig.csv"
;
/// <summary>
[
MyConfigComment
(
"是否使用蜂鸣器"
)]
/// 温控器类型,0=壁挂王字壳温湿度变送器,1=妙昕温湿度记录仪
public
static
MyConfig
<
bool
>
UseBuzzer
=
false
;
/// </summary>
[
MyConfigComment
(
"料架点位配置文件路径"
)]
public
static
string
HumitureControllerType
=
"HumitureControllerType"
;
public
static
MyConfig
<
string
>
Shelf_Position_Config
=
"\\StoreConfig\\shelfPosition.csv"
;
public
static
string
UseAIOBOX
=
"UseAIOBOX"
;
[
MyConfigComment
(
""
)]
public
static
MyConfig
<
int
>
Tool_P3_Offset
=
7000
;
public
static
string
LineServerIp
=
"LineServerIp"
;
[
MyConfigComment
(
""
)]
public
static
string
LineServerPort
=
"LineServerPort"
;
public
static
MyConfig
<
int
>
Tool_P4_Offset
=
-
2000
;
[
MyConfigComment
(
""
)]
public
static
MyConfig
<
int
>
Tool_P5_Offset
=
-
2000
;
public
static
string
ACBaudRate
=
"ACBaudRate"
;
[
MyConfigComment
(
""
)]
public
static
MyConfig
<
int
>
Tool_P6_Offset
=
7000
;
public
static
string
Store_ConfigPath
=
"Store_ConfigPath"
;
[
MyConfigComment
(
""
)]
public
static
string
UseBuzzer
=
"UseBuzzer"
;
public
static
MyConfig
<
int
>
Tool_TargetSpeed
=
20
;
public
static
string
Shelf_Position_Config
=
"Shelf_Position_Config"
;
[
MyConfigComment
(
""
)]
public
static
MyConfig
<
int
>
Tool_TargetPosition
=
1835000
;
[
MyConfigComment
(
"AGV调度服务器IP"
)]
public
static
string
Tool_P3_Offset
=
"Tool_P3_Offset"
;
public
static
MyConfig
<
string
>
AgvServerIp
=
"172.16.77.76"
;
public
static
string
Tool_P4_Offset
=
"Tool_P4_Offset"
;
[
MyConfigComment
(
"条码数量"
)]
public
static
string
Tool_P5_Offset
=
"Tool_P5_Offset"
;
public
static
MyConfig
<
int
>
CodeCount
=
3
;
public
static
string
Tool_P6_Offset
=
"Tool_P6_Offset"
;
[
MyConfigComment
(
"是否检测到料架自动入库"
)]
public
static
MyConfig
<
bool
>
AutoShelfInstore
=
true
;
public
static
string
Tool_TargetSpeed
=
"Tool_TargetSpeed"
;
[
MyConfigComment
(
"是否启用入料口移门"
)]
public
static
string
Tool_TargetPosition
=
"Tool_TargetPosition"
;
public
static
MyConfig
<
bool
>
UseDoor
=
true
;
public
static
string
AgvServerIp
=
"AgvServerIp"
;
public
static
string
CodeCount
=
"CodeCount"
;
public
static
string
AutoShelfInstore
=
"AutoShelfInstore"
;
public
static
string
UseDoor
=
"UseDoor"
;
}
}
}
}
source/Common/util/ConfigAppSettings.cs
查看文件 @
5229fc7
...
@@ -26,52 +26,18 @@ namespace OnlineStore.Common
...
@@ -26,52 +26,18 @@ namespace OnlineStore.Common
Interlocked
.
Increment
(
ref
seq
);
Interlocked
.
Increment
(
ref
seq
);
return
seq
;
return
seq
;
}
}
public
static
string
GetValue
(
string
key
)
public
static
string
GetValue
(
string
key
,
string
defaultVal
=
""
)
{
{
System
.
Configuration
.
Configuration
config
=
ConfigurationManager
.
OpenExeConfiguration
(
ConfigurationUserLevel
.
None
);
return
ConfigHelper
.
Config
.
Get
(
key
,
defaultVal
);
if
(
config
.
AppSettings
.
Settings
[
key
]
==
null
)
{
LogUtil
.
error
(
"未找到配置:"
+
key
+
",请检查配置是否完整!"
);
return
""
;
}
else
{
return
config
.
AppSettings
.
Settings
[
key
].
Value
;
}
}
}
public
static
decimal
GetNumValue
(
string
key
)
public
static
decimal
GetNumValue
(
string
key
)
{
{
decimal
a
=
0
;
return
ConfigHelper
.
Config
.
Get
<
decimal
>(
key
);
System
.
Configuration
.
Configuration
config
=
ConfigurationManager
.
OpenExeConfiguration
(
ConfigurationUserLevel
.
None
);
if
(
config
.
AppSettings
.
Settings
[
key
]
==
null
)
{
LogUtil
.
error
(
"未找到配置:"
+
key
+
",请检查配置是否完整!"
);
return
a
;
}
else
{
{
Decimal
.
TryParse
(
config
.
AppSettings
.
Settings
[
key
].
Value
,
out
a
);
}
}
return
a
;
}
public
static
int
GetIntValue
(
string
key
)
{
int
a
=
0
;
System
.
Configuration
.
Configuration
config
=
ConfigurationManager
.
OpenExeConfiguration
(
ConfigurationUserLevel
.
None
);
if
(
config
.
AppSettings
.
Settings
[
key
]
==
null
)
{
LogUtil
.
error
(
"未找到配置:"
+
key
+
",请检查配置是否完整!"
);
return
a
;
}
}
else
public
static
int
GetIntValue
(
string
key
,
int
val
=
0
)
{
{
{
return
ConfigHelper
.
Config
.
Get
<
int
>(
key
,
val
);
Int32
.
TryParse
(
config
.
AppSettings
.
Settings
[
key
].
Value
,
out
a
);
}
}
return
a
;
}
}
public
static
void
SaveValue
(
string
key
,
int
value
)
public
static
void
SaveValue
(
string
key
,
int
value
)
{
{
...
@@ -79,81 +45,7 @@ namespace OnlineStore.Common
...
@@ -79,81 +45,7 @@ namespace OnlineStore.Common
}
}
public
static
void
SaveValue
(
string
key
,
string
value
)
public
static
void
SaveValue
(
string
key
,
string
value
)
{
{
try
ConfigHelper
.
Config
.
Set
(
key
,
value
);
{
if
(
key
.
Equals
(
""
)
||
value
.
Equals
(
""
))
{
return
;
}
//增加的内容写在appSettings段下 <add key="RegCode" value="0"/>
System
.
Configuration
.
Configuration
config
=
ConfigurationManager
.
OpenExeConfiguration
(
ConfigurationUserLevel
.
None
);
if
(
config
.
AppSettings
.
Settings
[
key
]
==
null
)
{
SetValue
(
key
,
value
);
}
else
{
UpdateConfig
(
key
,
value
);
}
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
"SaveValue保存配置出错:AppKey="
+
key
+
",AppValue="
+
value
+
","
+
ex
.
StackTrace
);
}
}
/// <summary>
/// 更新配置文件信息
/// </summary>
/// <param name="name">配置文件字段名称</param>
/// <param name="Xvalue">值</param>
private
static
void
UpdateConfig
(
string
name
,
string
Xvalue
)
{
try
{
XmlDocument
doc
=
new
XmlDocument
();
doc
.
Load
(
Application
.
ExecutablePath
+
".config"
);
XmlNode
node
=
doc
.
SelectSingleNode
(
@"//add[@key='"
+
name
+
"']"
);
XmlElement
ele
=
(
XmlElement
)
node
;
ele
.
SetAttribute
(
"value"
,
Xvalue
);
doc
.
Save
(
Application
.
ExecutablePath
+
".config"
);
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
"UpdateConfig保存配置出错:name="
+
name
+
",Xvalue="
+
Xvalue
+
","
+
ex
.
StackTrace
);
}
}
///<summary>
///向.config文件的appKey结写入信息AppValue 保存设置
///</summary>
///<param name="AppKey">节点名</param>
///<param name="AppValue">值</param>
private
static
void
SetValue
(
String
AppKey
,
String
AppValue
)
{
try
{
XmlDocument
xDoc
=
new
XmlDocument
();
xDoc
.
Load
(
System
.
Windows
.
Forms
.
Application
.
ExecutablePath
+
".config"
);
XmlNode
xNode
;
XmlElement
xElem1
;
XmlElement
xElem2
;
xNode
=
xDoc
.
SelectSingleNode
(
"//appSettings"
);
xElem1
=
(
XmlElement
)
xNode
.
SelectSingleNode
(
"//add[@key='"
+
AppKey
+
"']"
);
if
(
xElem1
!=
null
)
xElem1
.
SetAttribute
(
"value"
,
AppValue
);
else
{
xElem2
=
xDoc
.
CreateElement
(
"add"
);
xElem2
.
SetAttribute
(
"key"
,
AppKey
);
xElem2
.
SetAttribute
(
"value"
,
AppValue
);
xNode
.
AppendChild
(
xElem2
);
}
xDoc
.
Save
(
System
.
Windows
.
Forms
.
Application
.
ExecutablePath
+
".config"
);
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
"SetValue保存配置出错:AppKey="
+
AppKey
+
",AppValue="
+
AppValue
+
","
+
ex
.
StackTrace
);
}
}
}
}
}
}
}
source/Common/util/HttpHelper.cs
查看文件 @
5229fc7
...
@@ -120,12 +120,11 @@ namespace OnlineStore.Common
...
@@ -120,12 +120,11 @@ namespace OnlineStore.Common
}
}
return
null
;
return
null
;
}
}
private
static
int
isLog
=
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
Server_Log_Open
);
public
static
string
LastServerMsg
=
""
;
public
static
string
LastServerMsg
=
""
;
private
static
string
PostJson
(
string
url
,
string
paramData
,
Encoding
encoding
,
out
bool
isTimeOut
)
private
static
string
PostJson
(
string
url
,
string
paramData
,
Encoding
encoding
,
out
bool
isTimeOut
)
{
{
isTimeOut
=
false
;
isTimeOut
=
false
;
if
(
isLog
==
1
)
if
(
Setting_Init
.
Log_OpenServer
)
{
{
LogUtil
.
info
(
"给服务器发送数据【"
+
paramData
+
"】 "
);
LogUtil
.
info
(
"给服务器发送数据【"
+
paramData
+
"】 "
);
}
}
...
@@ -156,7 +155,7 @@ namespace OnlineStore.Common
...
@@ -156,7 +155,7 @@ namespace OnlineStore.Common
{
{
LogUtil
.
error
(
"POST ERROR:"
+
ex
.
ToString
(),
1
);
LogUtil
.
error
(
"POST ERROR:"
+
ex
.
ToString
(),
1
);
}
}
if
(
isLog
==
1
)
if
(
Setting_Init
.
Log_OpenServer
)
{
{
LogUtil
.
info
(
"收到服务器数据【"
+
result
+
"】"
);
LogUtil
.
info
(
"收到服务器数据【"
+
result
+
"】"
);
}
}
...
@@ -186,7 +185,7 @@ namespace OnlineStore.Common
...
@@ -186,7 +185,7 @@ namespace OnlineStore.Common
}
}
IsTimeOut
=
false
;
IsTimeOut
=
false
;
if
(
isLog
==
1
)
if
(
Setting_Init
.
Log_OpenServer
)
{
{
LogUtil
.
info
(
"给服务器发送数据【"
+
url
+
"】【"
+
paramData
+
"】 "
);
LogUtil
.
info
(
"给服务器发送数据【"
+
url
+
"】【"
+
paramData
+
"】 "
);
}
}
...
@@ -216,7 +215,7 @@ namespace OnlineStore.Common
...
@@ -216,7 +215,7 @@ namespace OnlineStore.Common
LogUtil
.
error
(
"POST ["
+
url
+
"] ERROR:"
+
e
.
ToString
(),
101
);
LogUtil
.
error
(
"POST ["
+
url
+
"] ERROR:"
+
e
.
ToString
(),
101
);
}
}
if
(
isLog
==
1
)
if
(
Setting_Init
.
Log_OpenServer
)
{
{
LogUtil
.
info
(
"收到服务器数据【"
+
result
+
"】"
);
LogUtil
.
info
(
"收到服务器数据【"
+
result
+
"】"
);
}
}
...
...
source/Common/util/HumitureController.cs
查看文件 @
5229fc7
...
@@ -24,7 +24,7 @@ namespace OnlineStore.Common
...
@@ -24,7 +24,7 @@ namespace OnlineStore.Common
private
static
string
LogName
=
""
;
private
static
string
LogName
=
""
;
private
static
Dictionary
<
string
,
AcSerialBean
>
serialBeanMap
=
new
Dictionary
<
string
,
AcSerialBean
>();
private
static
Dictionary
<
string
,
AcSerialBean
>
serialBeanMap
=
new
Dictionary
<
string
,
AcSerialBean
>();
public
static
int
HumitureControllerType
=
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
HumitureControllerType
)
;
public
static
int
HumitureControllerType
=
Setting_Init
.
HumitureControllerType
;
public
static
bool
Init
(
string
port
)
public
static
bool
Init
(
string
port
)
{
{
if
(
serialBeanMap
.
ContainsKey
(
port
))
if
(
serialBeanMap
.
ContainsKey
(
port
))
...
...
source/Common/util/LogUtil.cs
查看文件 @
5229fc7
using
System
;
using
log4net
;
using
System
;
using
System.Collections.Generic
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
log4net
;
using
System.Reflection
;
using
System.Drawing
;
using
System.Drawing
;
namespace
OnlineStore.Common
namespace
OnlineStore.Common
{
{
public
class
LogUtil
public
class
LogUtil
{
{
public
static
readonly
ILog
AIOLog
=
LogManager
.
GetLogger
(
"AIOBOXLog"
);
private
static
LogUtil
instance
=
new
LogUtil
();
public
delegate
void
ShowLog
(
string
msg
,
Color
color
);
public
delegate
void
ShowLog
(
string
msg
,
Color
color
);
public
static
readonly
ILog
LOGGER
=
LogManager
.
GetLogger
(
"RollingLogFileAppender"
);
public
static
readonly
ILog
LOGGER
=
LogManager
.
GetLogger
(
"RollingLogFileAppender"
);
...
@@ -29,19 +23,7 @@ namespace OnlineStore.Common
...
@@ -29,19 +23,7 @@ namespace OnlineStore.Common
log
.
Info
(
" - "
+
msg
);
log
.
Info
(
" - "
+
msg
);
AddToBox
(
msg
,
Color
.
Black
);
AddToBox
(
msg
,
Color
.
Black
);
}
}
public
static
void
info
(
ILog
log
,
string
msg
,
Color
color
)
{
log
.
Info
(
" - "
+
msg
);
AddToBox
(
msg
,
color
);
}
public
static
void
debug
(
ILog
log
,
string
msg
,
Color
color
)
{
log
.
Debug
(
" - "
+
msg
);
if
(
debug_opened
)
{
AddToBox
(
msg
,
color
);
}
}
public
static
void
debug
(
ILog
log
,
string
msg
)
public
static
void
debug
(
ILog
log
,
string
msg
)
{
{
log
.
Debug
(
" - "
+
msg
);
log
.
Debug
(
" - "
+
msg
);
...
@@ -125,8 +107,10 @@ namespace OnlineStore.Common
...
@@ -125,8 +107,10 @@ namespace OnlineStore.Common
LastText
=
text
;
LastText
=
text
;
if
(
logBox
.
Visible
)
if
(
logBox
.
Visible
)
{
{
logBox
.
Invoke
(
new
Action
(()
=>
{
logBox
.
Text
=
text
;
logBox
.
Text
=
text
;
logBox
.
ForeColor
=
color
;
// logBox.Focus(); //使文本框获取焦点
// logBox.Focus(); //使文本框获取焦点
logBox
.
AppendText
(
now
.
ToLongTimeString
()
+
" "
+
msg
+
Environment
.
NewLine
);
//增加文本
logBox
.
AppendText
(
now
.
ToLongTimeString
()
+
" "
+
msg
+
Environment
.
NewLine
);
//增加文本
...
@@ -138,6 +122,9 @@ namespace OnlineStore.Common
...
@@ -138,6 +122,9 @@ namespace OnlineStore.Common
logBox
.
ScrollToCaret
();
//滚动到控件光标处
logBox
.
ScrollToCaret
();
//滚动到控件光标处
}
}
}
}
));
}
}
}
catch
(
Exception
ex
)
catch
(
Exception
ex
)
{
{
...
...
source/DeviceLibrary/ACPackingStore/AC_BOX_Bean_Partial.cs
deleted
100644 → 0
查看文件 @
7c97fdf
using
Asa
;
using
OnlineStore.Common
;
using
OnlineStore.LoadCSVLibrary
;
using
System
;
using
System.Collections.Concurrent
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading
;
using
System.Threading.Tasks
;
namespace
OnlineStore.DeviceLibrary
{
partial
class
AC_BOX_Bean
{
#
region
出入库结果验证
public
bool
CompressSigTimeOut
=
false
;
public
bool
IsScanCodeWithLockedShelf
=
true
;
//锁定的料架是否扫码
private
void
CheckWait
()
{
List
<
WaitResultInfo
>
list
=
MoveInfo
.
WaitList
;
//当等待超过一分钟时,需要打印提示
TimeSpan
span
=
DateTime
.
Now
-
MoveInfo
.
LastSetpTime
;
string
NotOkMsg
=
""
;
if
(
list
.
Count
<=
0
)
{
MoveInfo
.
EndStepWait
();
return
;
}
bool
isOk
=
true
;
if
(
MoveInfo
.
OneWaitCanEndStep
)
{
isOk
=
false
;
}
foreach
(
WaitResultInfo
wait
in
list
)
{
if
(
wait
.
IsEnd
)
{
continue
;
}
NotOkMsg
=
wait
.
ToStr
();
if
(
wait
.
WaitType
.
Equals
(
WaitEnum
.
W001_AxisMove
))
{
string
msg
=
""
;
if
(
wait
.
IsHomeMove
)
{
wait
.
IsEnd
=
ACHomeMoveIsEnd
(
wait
.
AxisInfo
,
out
msg
);
}
else
{
wait
.
IsEnd
=
ACAxisMoveIsEnd
(
wait
.
AxisInfo
,
wait
.
TargetPosition
,
wait
.
TargetSpeed
,
out
msg
);
}
if
(!
msg
.
Equals
(
""
))
{
isOk
=
false
;
WarnMsg
=
msg
;
Alarm
(
StoreAlarmType
.
AxisMoveError
,
GetAlarmCodeByAxis
(
wait
.
AxisInfo
).
ToString
(),
WarnMsg
,
MoveInfo
.
MoveType
);
break
;
}
}
else
if
(
wait
.
WaitType
.
Equals
(
WaitEnum
.
W002_IOValue
))
{
wait
.
IsEnd
=
IOValue
(
wait
.
IoType
).
Equals
(
wait
.
IoValue
);
int
timeOutMs
=
Config
.
IOSingle_TimerOut
;
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_08_WaitLineIn
)
||
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_04_WaitTakeSingle
))
{
timeOutMs
=
30000
;
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_03_LineRun
))
{
timeOutMs
=
40000
;
}
if
((!
wait
.
IsEnd
)
&&
span
.
TotalMilliseconds
>
timeOutMs
&&
NoAlarm
())
{
ConfigIO
io
=
Config
.
getWaitIO
(
wait
.
IoType
);
WarnMsg
=
Name
+
"["
+
MoveInfo
.
MoveType
+
"]["
+
MoveInfo
.
MoveStep
+
"] 等待("
+
io
.
DisplayStr
+
"="
+
wait
.
IoValue
+
") 超时"
;
if
(
WarnMsg
.
Contains
(
IO_Type
.
Compress_Check
)
&&
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_09_CheckComSig
))
{
CompressSigTimeOut
=
true
;
WarnMsg
+=
"出库时料叉未检测到信号!"
;
}
Alarm
(
StoreAlarmType
.
IoSingleTimeOut
,
io
.
ElectricalDefinition
,
WarnMsg
,
MoveInfo
.
MoveType
);
LogUtil
.
error
(
Name
+
"["
+
MoveInfo
.
MoveType
+
"]["
+
MoveInfo
.
MoveStep
+
"] 等待("
+
io
.
DisplayStr
+
"="
+
wait
.
IoValue
+
") 超时"
,
logType
+
14
);
if
(!
MoveInfo
.
OneWaitCanEndStep
)
{
isOk
=
false
;
break
;
}
}
}
else
if
(
wait
.
WaitType
.
Equals
(
WaitEnum
.
W003_Time
))
{
wait
.
IsEnd
=
(
span
.
TotalMilliseconds
>=
wait
.
TimeMSeconds
);
}
else
if
(
wait
.
WaitType
.
Equals
(
WaitEnum
.
W007_ReelHeight
))
{
}
else
if
(
wait
.
WaitType
.
Equals
(
WaitEnum
.
W008_Compress
))
{
//等待信号亮或者走到绝对位置才停止
if
(
IOValue
(
TargetIoType
).
Equals
(
TargetIoValue
))
{
LogUtil
.
info
(
"CheckWait 检测到"
+
TargetIoType
+
"="
+
TargetIoValue
+
",停止压紧轴运行"
);
wait
.
IsEnd
=
true
;
ComAxisStopCheck
();
}
else
{
bool
moveOk
=
ACServerManager
.
GetBusyStatus
(
wait
.
AxisInfo
.
DeviceName
,
wait
.
AxisInfo
.
GetAxisValue
()).
Equals
(
0
);
if
(
moveOk
)
{
//TODO 判断是否达到高度,如果未达到,继续上升
wait
.
IsEnd
=
true
;
ComAxisStopCheck
();
}
}
}
else
if
(
wait
.
WaitType
.
Equals
(
WaitEnum
.
W009_ScanCode
))
{
wait
.
IsEnd
=
(
LastScanCodes
.
Count
>
0
);
}
else
if
(
wait
.
WaitType
.
Equals
(
WaitEnum
.
W010_AgvStatus
))
{
if
(
wait
.
AgvAction
.
Equals
((
int
)
ClientAction
.
Ready
))
{
//Ready时使用状态判断,arrive时需要判断料架号是否正确
ClientAction
agvA
=
AgvClient
.
GetAction
(
Config
.
AgvNodeName
);
wait
.
IsEnd
=
((
int
)
agvA
).
Equals
(
wait
.
AgvAction
);
}
if
(!
wait
.
IsEnd
&&
span
.
TotalSeconds
>
10
)
{
//如果是等待AGV到达,等待有料架信号也算结束
if
(
wait
.
AgvAction
.
Equals
((
int
)
ClientAction
.
Arrive
)
&&
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_00_ReadyShelf
))
{
if
(
IOValue
(
IO_Type
.
LineTake_Check
).
Equals
(
IO_VALUE
.
HIGH
))
{
LogInfo
(
"BI_01_ReadyShelf 等待agv到达Arrive,检测到 LineTake_Check 信号,结束等待"
);
wait
.
IsEnd
=
true
;
}
else
if
(
IOValue
(
IO_Type
.
LineIn_Check
).
Equals
(
IO_VALUE
.
HIGH
))
{
LogInfo
(
"BI_01_ReadyShelf 等待agv到达Arrive,检测到 LineIn_Check 信号,结束等待"
);
wait
.
IsEnd
=
true
;
}
}
else
if
(
wait
.
AgvAction
.
Equals
((
int
)
ClientAction
.
Arrive
)
&&
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_03_WaitEmptyAgv
))
{
if
(
IOValue
(
IO_Type
.
LineTake_Check
).
Equals
(
IO_VALUE
.
LOW
)
&&
IOValue
(
IO_Type
.
LineIn_Check
).
Equals
(
IO_VALUE
.
LOW
))
{
LogInfo
(
"BS_03_WaitArrive 等待agv到达Arrive,检测到 LineTake_Check和LineIn_Check都没有信号,结束等待"
);
wait
.
IsEnd
=
true
;
}
}
}
}
else
if
(
wait
.
WaitType
.
Equals
(
WaitEnum
.
W011_DoorCloseEvent
))
{
if
(
AgvClient
.
closeDoorTimeMap
.
ContainsKey
(
Config
.
AgvNodeName
))
{
DateTime
time
=
AgvClient
.
closeDoorTimeMap
[
Config
.
AgvNodeName
];
if
(
time
>=
MoveInfo
.
LastSetpTime
)
{
wait
.
IsEnd
=
true
;
}
}
}
if
(
wait
.
IsEnd
)
{
if
(
MoveInfo
.
OneWaitCanEndStep
)
{
isOk
=
true
;
break
;
}
}
else
{
if
(!
MoveInfo
.
OneWaitCanEndStep
)
{
isOk
=
false
;
break
;
}
}
}
if
(
isOk
)
{
MoveInfo
.
EndStepWait
();
}
else
if
(
span
.
TotalSeconds
>
MoveInfo
.
TimeOutSeconds
)
{
if
(
NotOkMsg
.
Contains
(
IO_Type
.
Compress_Check
)
&&
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_09_CheckComSig
))
{
CompressSigTimeOut
=
true
;
NotOkMsg
+=
"出库时料叉未检测到信号!"
;
}
WarnMsg
=
Name
+
"["
+
MoveInfo
.
MoveType
+
"]["
+
MoveInfo
.
MoveStep
+
"]等待 "
+
NotOkMsg
+
"超时["
+
FormUtil
.
GetSpanStr
(
span
)
+
"] "
;
int
second
=
10
;
second
=
(
int
)(
MoveInfo
.
TimeOutSeconds
/
span
.
TotalSeconds
)
*
10
;
if
(
second
>
120
)
{
second
=
120
;
}
else
if
(
second
<
10
)
{
second
=
10
;
}
LogUtil
.
error
(
WarnMsg
,
logType
+
100
,
second
);
Alarm
(
StoreAlarmType
.
IoSingleTimeOut
,
""
,
WarnMsg
,
MoveInfo
.
MoveType
);
}
}
private
static
DateTime
lastComRHomeTime
=
DateTime
.
Now
;
private
void
InOutBackToP1
(
int
InOut_P1
)
{
//判断是否在P1,如果是,不需要运行
if
(
ACServerManager
.
isInPosition
(
Config
.
InOut_Axis
,
InOut_P1
))
{
LogUtil
.
debug
(
Name
+
"进出轴当前已经在P1,不需要再回P1"
);
}
else
{
ACAxisMove
(
Config
.
InOut_Axis
,
InOut_P1
,
Config
.
InOutAxis_P1_Speed
);
}
//StoreMove.WaitList.Add(WaitResultInfo.WaitAxisOrg(Config.InOut_Axis,IO_VALUE.HIGH));
}
#
endregion
public
ConcurrentQueue
<
InOutParam
>
waitOutStoreList
=
new
ConcurrentQueue
<
InOutParam
>();
private
List
<
string
>
LastScanCodes
=
new
List
<
string
>();
private
int
ComTargetPosition
=
0
;
private
int
LastWidth
=
0
;
private
int
LastHeight
=
0
;
private
string
CurrShelfID
=
""
;
/// <summary>
/// 最后一次使用的料架号
/// </summary>
// private string LastRfidID = "";//服务器发送的出库rfid
private
InOutParam
LastOutParam
=
new
InOutParam
();
private
string
GetLastRfid
()
{
//出库料架使用,返回上次使用的料架绑定的虚拟料架号
return
LastOutParam
.
rfid
;
}
#
region
入库
private
void
ClearLastTrayInfo
()
{
LastScanCodes
=
new
List
<
string
>();
ComTargetPosition
=
0
;
LastWidth
=
0
;
LastHeight
=
0
;
}
private
DateTime
startInStoreTime
=
DateTime
.
Now
;
/// <summary>
/// 开始单盘入库
/// </summary>
public
override
void
StartInStoreMove
(
InOutParam
param
)
{
startInStoreTime
=
DateTime
.
Now
;
string
posId
=
param
!=
null
?
param
.
PosID
:
""
;
if
(
isInSuddenDown
||
isNoAirCheck
||
(!
storeRunStatus
.
Equals
(
StoreRunStatus
.
Runing
))
||
(!
MoveInfo
.
MoveType
.
Equals
(
StoreMoveType
.
None
)))
{
LogUtil
.
error
(
Name
+
" 启动出库出错,忙碌或报警中 ,storeStatus="
+
storeRunStatus
+
",MoveType="
+
MoveInfo
.
MoveType
+
",isInSuddenDown="
+
isInSuddenDown
+
",isNoAirCheck"
+
isNoAirCheck
);
return
;
}
if
(!
StoreManager
.
LoadInoutParam
(
param
,
true
,
this
))
{
LogUtil
.
error
(
Name
+
" 启动入库【"
+
param
.
ToStr
()
+
"】出错,找不到库位信息"
);
return
;
}
LogInfo
(
" 启动入库【"
+
param
.
ToStr
()
+
"】,压紧点P2【"
+
param
.
MoveP
.
ComPress_P2
+
"】压紧前点P3【"
+
param
.
MoveP
.
ComPress_P3
+
"】"
);
storeRunStatus
=
StoreRunStatus
.
Busy
;
storeStatus
=
StoreStatus
.
InStoreExecute
;
MoveInfo
.
NewMove
(
StoreMoveType
.
InStore
,
param
);
//新的料架库位
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_11_InoutToP1
);
MoveInfo
.
SingleInstore
=
true
;
InOutStoreLog
(
"料架取料:"
+
MoveInfo
.
SLog
+
" 叉子后退到待机点P1, 重置盘信息"
);
ACAxisMove
(
Config
.
InOut_Axis
,
Config
.
InOutAxis_P1_Position
,
Config
.
InOutAxis_P1_Speed
);
ClearLastTrayInfo
();
//LastRfidID = "";
LastOutParam
=
new
InOutParam
();
}
/// <summary>
/// 开始料架入库
/// </summary>
public
void
StartShelfInStore
()
{
bool
canStart
=
(
storeRunStatus
.
Equals
(
StoreRunStatus
.
Runing
)
&&
MoveInfo
.
MoveType
.
Equals
(
StoreMoveType
.
None
));
if
(!
canStart
||
isInSuddenDown
||
isNoAirCheck
||
(
alarmType
.
Equals
(
StoreAlarmType
.
None
).
Equals
(
false
)))
{
return
;
}
storeRunStatus
=
StoreRunStatus
.
Busy
;
storeStatus
=
StoreStatus
.
InStoreExecute
;
// EmprtShelfList = new ConcurrentQueue<string>();
if
(
IOValue
(
IO_Type
.
LineIn_Check
).
Equals
(
IO_VALUE
.
HIGH
))
{
MoveInfo
.
NewMove
(
StoreMoveType
.
InStore
,
new
InOutParam
());
MoveInfo
.
MoveParam
.
MoveP
=
new
LineMoveP
(
Config
);
MoveInfo
.
ShelfPositionList
=
new
List
<
string
>(
ShelfPosList
);
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_01_DoorOpen
);
LogInfo
(
" 空闲中,检测到入料口有料架,启动料架入库 "
+
MoveInfo
.
SLog
+
""
);
// CylinderMove(MoveInfo, IO_Type.EntranceDoor_Close, IO_Type.EntranceDoor_Open);
// DoorBean.StartOpen(MoveInfo);
}
else
if
(
IOValue
(
IO_Type
.
LineTake_Check
).
Equals
(
IO_VALUE
.
HIGH
))
{
MoveInfo
.
NewMove
(
StoreMoveType
.
InStore
,
new
InOutParam
());
MoveInfo
.
MoveParam
.
MoveP
=
new
LineMoveP
(
Config
);
MoveInfo
.
ShelfPositionList
=
new
List
<
string
>(
ShelfPosList
);
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_06_DoorClose
);
LogInfo
(
" 空闲中,检测到入料口有料架,启动料架入库 "
+
MoveInfo
.
SLog
+
""
);
}
else
{
LogInfo
(
" 空闲中,需要料架入库,料架入库 "
+
MoveInfo
.
SLog
+
":入料口移门打开,更新 WaitShelfEnter=false"
);
WaitShelfEnter
=
false
;
MoveInfo
.
NewMove
(
StoreMoveType
.
InStore
,
new
InOutParam
());
MoveInfo
.
MoveParam
.
MoveP
=
new
LineMoveP
(
Config
);
MoveInfo
.
ShelfPositionList
=
new
List
<
string
>(
ShelfPosList
);
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_01_DoorOpen
);
DoorBean
.
StartOpen
(
MoveInfo
);
}
}
private
void
UpdateShelfId
()
{
//读取RFID
RFIDData
data
=
RFIDManager
.
ReadRFID
(
Config
.
RFID_IP
,
true
);
CurrShelfID
=
data
.
NumStr
();
LogUtil
.
info
(
Name
+
"更新当前料架号CurrShelfID=【"
+
CurrShelfID
+
"】,LastRfidID=【"
+
GetLastRfid
()
+
"】"
);
}
private
void
GetPosId
()
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_30_SetInstoreParam
);
InOutStoreLog
(
"不扫码 "
+
MoveInfo
.
SLog
+
": 获取库位号"
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
10000
));
if
(
MoveInfo
.
IsShelfLocked
)
{
bool
result
=
GetPosIdByCode
();
if
(!
result
)
//获取库位失败
{
MoveInfo
.
MoveParam
.
PosID
=
""
;
StartSendTray
(
"锁定库位:获取入库库位失败"
);
}
else
{
MoveInfo
.
EndStepWait
();
}
}
}
private
void
StartMoveToBag
()
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_51_MoveToBag
);
InOutStoreLog
(
"入库 "
+
MoveInfo
.
SLog
+
":到库位点,旋转轴至P2( 库位点)轴2(上下) 至P3(库位入库前点)"
);
ACAxisMove
(
Config
.
Middle_Axis
,
MoveInfo
.
MoveParam
.
MoveP
.
Middle_P2
,
Config
.
MiddleAxis_P2_Speed
);
ACAxisMove
(
Config
.
UpDown_Axis
,
MoveInfo
.
MoveParam
.
MoveP
.
UpDown_P3
,
Config
.
UpDownAxis_P3_Speed
);
}
private
void
StartSendTray
(
string
str
=
"扫码失败"
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_71_ToNGDoor
);
InOutStoreLog
(
" NG料 "
+
MoveInfo
.
SLog
+
":"
+
str
+
",升降轴到NG门口高点P12,旋转轴到NG门口P11"
);
//if(MoveInfo.IsShelfLocked)//锁定料架,扫码失败则清除当前位置
{
StoreManager
.
ClearLockLoc
(
Name
,
CurrShelfID
,
MoveInfo
.
currShelfIndex
);
}
ACAxisMove
(
Config
.
UpDown_Axis
,
MoveInfo
.
MoveParam
.
MoveP
.
UpDown_P12
,
Config
.
UpDownAxis_P1_Speed
);
ACAxisMove
(
Config
.
Middle_Axis
,
MoveInfo
.
MoveParam
.
MoveP
.
Middle_P11
,
Config
.
MiddleAxis_P1_Speed
);
}
private
void
StartMoveTrayBack
(
string
str
=
"料盘不属于该仓库"
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_10_ToShelfPosition
);
InOutStoreLog
(
"送出料盘 "
+
MoveInfo
.
SLog
+
":"
+
str
+
",走到料架位置,旋转轴至P101,升降轴至P102"
);
ACAxisMove
(
Config
.
UpDown_Axis
,
MoveInfo
.
MoveParam
.
MoveP
.
UpDown_HP102
,
Config
.
UpDownAxis_P102_Speed
);
ACAxisMove
(
Config
.
Middle_Axis
,
MoveInfo
.
MoveParam
.
MoveP
.
Middle_P101
,
Config
.
MiddleAxis_P101_Speed
);
}
protected
override
void
InStoreProcess
()
{
LineMoveP
moveP
=
MoveInfo
.
MoveParam
.
MoveP
;
if
(
MoveInfo
.
IsInWait
)
{
CheckWait
();
}
if
(
MoveInfo
.
IsInWait
)
{
return
;
}
#
region
料架取料盘扫码获取
POSID
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_10_StartGetTray
))
{
if
(
MoveInfo
.
IsShelfLocked
)
{
if
(
MoveInfo
.
NextLockedShelfPos
())
{
//新的料架库位
startInStoreTime
=
DateTime
.
Now
;
MoveInfo
.
SingleInstore
=
false
;
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_11_InoutToP1
);
InOutStoreLog
(
"料架取料 "
+
MoveInfo
.
SLog
+
":叉子后退到待机点P1, 重置盘信息"
);
ACAxisMove
(
Config
.
InOut_Axis
,
Config
.
InOutAxis_P1_Position
,
Config
.
InOutAxis_P1_Speed
);
ClearLastTrayInfo
();
}
else
{
//所有料盘已取料完成,送出料架
StartShelfOut
();
}
}
else
{
if
(
MoveInfo
.
NextShelfPos
())
{
//新的料架库位
startInStoreTime
=
DateTime
.
Now
;
MoveInfo
.
SingleInstore
=
false
;
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_11_InoutToP1
);
InOutStoreLog
(
"料架取料 "
+
MoveInfo
.
SLog
+
":叉子后退到待机点P1, 重置盘信息"
);
ACAxisMove
(
Config
.
InOut_Axis
,
Config
.
InOutAxis_P1_Position
,
Config
.
InOutAxis_P1_Speed
);
ClearLastTrayInfo
();
}
else
{
//所有料盘已取料完成,送出料架
StartShelfOut
();
}
}
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_11_InoutToP1
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_12_MoveToShelf
);
InOutStoreLog
(
"料架取料 "
+
MoveInfo
.
SLog
+
":升降轴到P101低点["
+
moveP
.
UpDown_LP101
+
"],旋转轴到P101点["
+
moveP
.
Middle_P101
+
"],压紧轴到压紧前点p3["
+
Config
.
CompAxis_Max_P3
+
"]"
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_LP101
,
Config
.
UpDownAxis_P102_Speed
);
ACAxisMove
(
Config
.
Middle_Axis
,
moveP
.
Middle_P101
,
Config
.
MiddleAxis_P101_Speed
);
ACAxisMove
(
Config
.
Comp_Axis
,
Config
.
CompAxis_Max_P3
,
Config
.
CompAxis_P3_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_12_MoveToShelf
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_13_InoutToP101
);
InOutStoreLog
(
"料架取料 "
+
MoveInfo
.
SLog
+
":叉子前进到P101点["
+
moveP
.
InOut_P101
+
"]"
,
true
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P101
,
Config
.
InOutAxis_P101_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_13_InoutToP101
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_14_UpdownToP102
);
InOutStoreLog
(
"料架取料 "
+
MoveInfo
.
SLog
+
":升降轴上升到P102点["
+
moveP
.
UpDown_HP102
+
"]"
,
true
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_HP102
,
Config
.
UpDownAxis_P101_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_14_UpdownToP102
))
{
if
(
MoveInfo
.
SingleInstore
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_16_ComDownMove
);
InOutStoreLog
(
"单盘入库,料架取料 "
+
MoveInfo
.
SLog
+
":压紧轴走到压紧点P2: "
+
MoveInfo
.
MoveParam
.
MoveP
.
ComPress_P2
);
ACAxisMove
(
Config
.
Comp_Axis
,
MoveInfo
.
MoveParam
.
MoveP
.
ComPress_P2
,
Config
.
CompAxis_P2_Speed
);
}
else
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_15_StartCompress
);
InOutStoreLog
(
"料架取料 "
+
MoveInfo
.
SLog
+
":压紧轴开始缓慢压紧到P4 :"
+
Config
.
CompAxis_P4_Position
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitComAxis
(
Config
.
Comp_Axis
,
Config
.
CompAxis_P4_Position
,
Config
.
CompAxis_P4_Speed
));
Config
.
Comp_Axis
.
TargetPosition
=
Config
.
CompAxis_P4_Position
;
ACServerManager
.
AbsMove
(
Config
.
Comp_Axis
.
DeviceName
,
Config
.
Comp_Axis
.
GetAxisValue
(),
Config
.
CompAxis_P4_Position
,
Config
.
CompAxis_P4_Speed
);
ComAxisStartCheck
();
}
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_15_StartCompress
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_16_ComDownMove
);
int
currPosition
=
ACServerManager
.
GetActualtPosition
(
Config
.
Comp_Axis
);
ComTargetPosition
=
currPosition
;
int
targetP
=
currPosition
+
Config
.
CompAxis_Down_Position
;
LastHeight
=
Config
.
GetComP2PlateH
(
targetP
);
MoveInfo
.
MoveParam
.
MoveP
.
ComPress_P2
=
targetP
;
MoveInfo
.
MoveParam
.
MoveP
.
ComPress_P3
=
targetP
+
Config
.
CompAxis_P3_P2_Value
;
InOutStoreLog
(
"料架取料 "
+
MoveInfo
.
SLog
+
":检测到Compress_Check,盘高【"
+
LastHeight
+
"】,向下压紧 ["
+
Config
.
CompAxis_Down_Position
+
"] 目标 ["
+
targetP
+
"]记录ComP2["
+
targetP
+
"]ComP3["
+
MoveInfo
.
MoveParam
.
MoveP
.
ComPress_P3
+
"]"
);
ACAxisMove
(
Config
.
Comp_Axis
,
targetP
,
Config
.
CompAxis_P1_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_16_ComDownMove
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_17_InoutBack
);
InOutStoreLog
(
"料架取料 "
+
MoveInfo
.
SLog
+
":叉子后退到扫码点"
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P1
,
Config
.
CompAxis_P1_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_17_InoutBack
))
{
if
(
MoveInfo
.
SingleInstore
)
{
//单盘入库,不需要扫码
StartMoveToBag
();
}
else
if
(
MoveInfo
.
IsShelfLocked
&&
!
IsScanCodeWithLockedShelf
)
{
//该料架已锁定库位,不需要扫码,直接查询服务器
GetPosId
();
}
else
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_21_ToScanPosition
);
InOutStoreLog
(
"扫码 "
+
MoveInfo
.
SLog
+
":升降轴到P2,旋转轴到P1"
,
true
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_P2
,
Config
.
UpDownAxis_P1_Speed
);
ACAxisMove
(
Config
.
Middle_Axis
,
moveP
.
Middle_P1
,
Config
.
MiddleAxis_P1_Speed
);
}
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_21_ToScanPosition
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_22_InOutToP2
);
InOutStoreLog
(
"扫码 "
+
MoveInfo
.
SLog
+
":进出轴到P2"
,
true
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P2
,
Config
.
InOutAxis_P2_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_22_InOutToP2
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_23_PutTrayDown
);
InOutStoreLog
(
"扫码 "
+
MoveInfo
.
SLog
+
":升降轴到扫码低点P1,压紧轴到压紧前点P3"
,
true
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_P1
,
Config
.
UpDownAxis_P2_Speed
);
ACAxisMove
(
Config
.
Comp_Axis
,
moveP
.
ComPress_P3
,
Config
.
CompAxis_P3_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_23_PutTrayDown
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_24_InOutToP1
);
InOutStoreLog
(
"扫码 "
+
MoveInfo
.
SLog
+
":进出轴返回待机点P1"
,
true
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P1
,
Config
.
CompAxis_P1_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_24_InOutToP1
))
{
IO_VALUE
io1
=
IOValue
(
IO_Type
.
TrayCheck_1
);
IO_VALUE
io2
=
IOValue
(
IO_Type
.
TrayCheck_2
);
IO_VALUE
io3
=
IOValue
(
IO_Type
.
TrayCheck_3
);
IO_VALUE
io4
=
IOValue
(
IO_Type
.
TrayCheck_4
);
if
(
io3
.
Equals
(
IO_VALUE
.
HIGH
)
||
io4
.
Equals
(
IO_VALUE
.
HIGH
))
{
LastWidth
=
15
;
}
else
if
(
io1
.
Equals
(
IO_VALUE
.
HIGH
)
||
io2
.
Equals
(
IO_VALUE
.
HIGH
))
{
LastWidth
=
7
;
}
else
{
LastWidth
=
0
;
LogUtil
.
debug
(
"未检测到识别区料盘检测信号, 设置默认宽度=0"
);
}
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_25_ScanCode
);
InOutStoreLog
(
"扫码 "
+
MoveInfo
.
SLog
+
":料盘识别 ["
+
io1
+
"] ["
+
io2
+
"] ["
+
io3
+
"] ["
+
io4
+
"] ,宽度【"
+
LastWidth
+
"】,开始扫码"
);
MoveInfo
.
OneWaitCanEndStep
=
true
;
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
12000
));
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitCode
());
Task
.
Factory
.
StartNew
(
delegate
{
IOMove
(
IO_Type
.
Camera_Led
,
IO_VALUE
.
HIGH
);
LastScanCodes
=
CodeManager
.
CameraScan
(
Config
.
GetCameraList
(),
Name
);
if
(
LastScanCodes
.
Count
<=
0
)
{
Thread
.
Sleep
(
1
);
LastScanCodes
=
CodeManager
.
CameraScan
(
Config
.
GetCameraList
(),
Name
);
}
IOMove
(
IO_Type
.
Camera_Led
,
IO_VALUE
.
LOW
);
});
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_25_ScanCode
))
{
if
(
LastScanCodes
.
Count
<=
0
&&
LastWidth
.
Equals
(
0
)
&&
LastHeight
.
Equals
(
8
))
{
storeStatus
=
StoreStatus
.
InStoreExecute
;
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_10_StartGetTray
);
InOutStoreLog
(
"扫码 "
+
MoveInfo
.
SLog
+
": 扫码失败,尺寸"
+
LastWidth
+
"*"
+
LastHeight
+
",认为没拿到料盘,继续循环料架取料盘"
);
}
else
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_27_InoutToP2
);
InOutStoreLog
(
"扫码 "
+
MoveInfo
.
SLog
+
":进出轴到P2"
,
true
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P2
,
Config
.
InOutAxis_P2_Speed
);
}
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_27_InoutToP2
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_28_GetScanPTray
);
InOutStoreLog
(
"扫码 "
+
MoveInfo
.
SLog
+
":升降轴到扫码高P2,压紧轴到压紧点P2"
,
true
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_P2
,
Config
.
UpDownAxis_P2_Speed
);
ACAxisMove
(
Config
.
Comp_Axis
,
moveP
.
ComPress_P2
,
Config
.
CompAxis_P2_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_28_GetScanPTray
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_29_InoutBackP1
);
InOutStoreLog
(
"扫码 "
+
MoveInfo
.
SLog
+
":进出轴返回"
,
true
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P1
,
Config
.
InOutAxis_P1_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_29_InoutBackP1
))
{
if
(
LastScanCodes
.
Count
<=
0
)
{
StartSendTray
();
}
else
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_30_SetInstoreParam
);
InOutStoreLog
(
"扫码 "
+
MoveInfo
.
SLog
+
": 获取库位号"
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
((
int
)
TimeSpan
.
FromMinutes
(
75
).
TotalMilliseconds
));
bool
result
=
GetPosIdByCode
(
MoveInfo
.
currShelfIndex
,
out
CodeResultType
codeResult
);
if
(!
result
)
//获取库位失败
{
if
(
codeResult
==
CodeResultType
.
NotPosForPutIn
)
//库位不在该料仓,将该料盘放回料架
{
//MoveInfo.MoveParam.PosID = "";
StartMoveTrayBack
(
"此料盘不属于该仓库,放回料架"
);
}
else
//无法获取库位信息
{
MoveInfo
.
MoveParam
.
PosID
=
""
;
StartSendTray
(
"获取入库库位失败"
);
}
}
else
{
MoveInfo
.
EndStepWait
();
}
}
}
#
endregion
#
region
入库逻辑
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_30_SetInstoreParam
))
{
StartMoveToBag
();
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_51_MoveToBag
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_52_DeviceToBag
);
InOutStoreLog
(
"入库 "
+
MoveInfo
.
SLog
+
":叉子进入库位中,进出轴到库位P3"
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P3
,
Config
.
InOutAxis_P3_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_52_DeviceToBag
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_53_PutWareToBag
);
InOutStoreLog
(
"入库 "
+
MoveInfo
.
SLog
+
":放下物品,升降轴到库位缓冲点P4,压紧轴到P3"
);
// 5= 入仓位完成(料仓Box把料盘放入对应的库位中,装置还未恢复原始状态)
string
posId
=
MoveInfo
.
MoveParam
!=
null
?
MoveInfo
.
MoveParam
.
PosID
:
""
;
lastPosId
=
posId
;
lastPosIdStatus
=
StoreStatus
.
InStoreEnd
;
storeStatus
=
StoreStatus
.
InStoreEnd
;
//手动发给服务器状态,防止没有手动
//SendLineStatus(StoreID, posId, StoreStatus.InStoreEnd);
ACAxisMove
(
Config
.
Comp_Axis
,
moveP
.
ComPress_P3
,
Config
.
CompAxis_P3_Speed
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_P4
,
Config
.
UpDownAxis_P4_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_53_PutWareToBag
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_54_DeviceBackFromBag
);
InOutStoreLog
(
"入库 "
+
MoveInfo
.
SLog
+
":叉子从库位中返回,进出轴到P1"
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P1
,
Config
.
InOutAxis_P1_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_54_DeviceBackFromBag
))
{
if
(
MoveInfo
.
SingleInstore
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_55_GoBack
);
InOutStoreLog
(
"入库 "
+
MoveInfo
.
SLog
+
":返回待机点,轴2/轴1/轴4动作至P1( 待机点))开始"
);
ACAxisMove
(
Config
.
Comp_Axis
,
moveP
.
ComPress_P1
,
Config
.
CompAxis_P1_Speed
);
ACAxisMove
(
Config
.
Middle_Axis
,
moveP
.
Middle_P1
,
Config
.
MiddleAxis_P1_Speed
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_P1
,
Config
.
UpDownAxis_P1_Speed
);
}
else
{
TimeSpan
span
=
DateTime
.
Now
-
startInStoreTime
;
storeStatus
=
StoreStatus
.
InStoreExecute
;
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_10_StartGetTray
);
InOutStoreLog
(
"料架入库 "
+
MoveInfo
.
SLog
+
":上一盘入库结束, 耗时【"
+
FormUtil
.
GetSpanStr
(
span
)
+
"】,旋转轴返回待机点,继续循环料架取料盘"
);
ACAxisMove
(
Config
.
Middle_Axis
,
moveP
.
Middle_P1
,
Config
.
MiddleAxis_P1_Speed
);
}
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_55_GoBack
))
{
TimeSpan
span
=
DateTime
.
Now
-
startInStoreTime
;
StoreManager
.
ClearLockLoc
(
Name
,
CurrShelfID
,
MoveInfo
.
currShelfIndex
);
if
(
MoveInfo
.
SingleInstore
)
{
string
posId
=
MoveInfo
.
MoveParam
!=
null
?
MoveInfo
.
MoveParam
.
PosID
:
""
;
LogInfo
(
" 【"
+
posId
+
"】单盘入库结束,耗时【"
+
FormUtil
.
GetSpanStr
(
span
)
+
"】!"
);
MoveEndToRuningStatus
();
AutoInout
.
InOutEndProcess
(
this
,
StoreMoveType
.
InStore
);
}
else
{
storeStatus
=
StoreStatus
.
InStoreExecute
;
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_10_StartGetTray
);
InOutStoreLog
(
"料架入库 "
+
MoveInfo
.
SLog
+
":上一盘入库结束, 耗时【"
+
FormUtil
.
GetSpanStr
(
span
)
+
"】继续循环料架取料盘"
);
}
}
#
endregion
#
region
把料盘送到
NG
逻辑
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_71_ToNGDoor
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_72_NGDoorUp
);
InOutStoreLog
(
"NG料 "
+
MoveInfo
.
SLog
+
":NG升降门上升"
,
true
);
CylinderMove
(
MoveInfo
,
IO_Type
.
NGDoorCylinder_Down
,
IO_Type
.
NGDoowCylinder_Up
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_72_NGDoorUp
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_73_InoutToNGDoor
);
InOutStoreLog
(
"NG料 "
+
MoveInfo
.
SLog
+
":进出轴到NG料门口位置P11"
,
true
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P11
,
Config
.
InOutAxis_P2_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_73_InoutToNGDoor
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_74_UpdownDown
);
InOutStoreLog
(
"NG料 "
+
MoveInfo
.
SLog
+
":升降轴到P11,压紧轴到P3,放下料盘"
,
true
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_P11
,
Config
.
UpDownAxis_P2_Speed
);
ACAxisMove
(
Config
.
Comp_Axis
,
moveP
.
ComPress_P3
,
Config
.
CompAxis_P3_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_74_UpdownDown
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_75_InoutToP1
);
InOutStoreLog
(
"NG料 "
+
MoveInfo
.
SLog
+
":叉子后退到P1"
,
true
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P1
,
Config
.
InOutAxis_P1_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_75_InoutToP1
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_76_NGDoorDown
);
InOutStoreLog
(
"NG料 "
+
MoveInfo
.
SLog
+
":关门NG料门,送出料盘结束"
,
true
);
CylinderMove
(
MoveInfo
,
IO_Type
.
NGDoowCylinder_Up
,
IO_Type
.
NGDoorCylinder_Down
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_76_NGDoorDown
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_77_NGLineRun
);
InOutStoreLog
(
"料架入库 "
+
MoveInfo
.
SLog
+
":NG流水线转动30s"
,
true
);
IOMove
(
IO_Type
.
NGLine_BackRun
,
IO_VALUE
.
LOW
);
IOMove
(
IO_Type
.
NGLine_Run
,
IO_VALUE
.
HIGH
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
30000
));
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_77_NGLineRun
))
{
IOMove
(
IO_Type
.
NGLine_Run
,
IO_VALUE
.
LOW
);
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_10_StartGetTray
);
InOutStoreLog
(
"料架入库 "
+
MoveInfo
.
SLog
+
":停止NG线体转动,继续循环料架取料盘"
);
}
#
endregion
#
region
把料盘送回料架逻辑
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_10_ToShelfPosition
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_11_ToShelf
);
InOutStoreLog
(
"送出料盘 "
+
MoveInfo
.
SLog
+
":叉子进出料口,进出轴至P101"
,
true
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P101
,
Config
.
InOutAxis_P101_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_11_ToShelf
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_12_PutReel
);
InOutStoreLog
(
"送出料盘 "
+
MoveInfo
.
SLog
+
":放下物品,压紧轴到P1,升降轴至P101,清空 taskData=null "
);
ACAxisMove
(
Config
.
Comp_Axis
,
moveP
.
ComPress_P1
,
Config
.
CompAxis_P1_Speed
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_LP101
,
Config
.
UpDownAxis_P101_Speed
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
1000
));
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_12_PutReel
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_13_InoutBack
);
InOutStoreLog
(
"送出料盘 "
+
MoveInfo
.
SLog
+
":叉子从出料口返回, 进出轴到P1 "
,
true
);
InOutBackToP1
(
moveP
.
InOut_P1
);
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_13_InoutBack
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_10_StartGetTray
);
InOutStoreLog
(
"送出料盘结束 "
+
MoveInfo
.
SLog
+
": 升降轴返回,升降轴到P1,顶升下降,继续循环料架取料盘"
);
// ACAxisMove(Config.UpDown_Axis, moveP.UpDown_P1, Config.UpDownAxis_P1_Speed);
}
#
endregion
//料架进入逻辑
else
if
(
MoveInfo
.
MoveStep
<
StoreMoveStep
.
BI_10_StartGetTray
)
{
ShelfEnterProcess
();
}
//料架送出逻辑
else
if
(
MoveInfo
.
MoveStep
>=
StoreMoveStep
.
BS_01_TopDown
)
{
ShelfOutProcess
();
}
else
{
LogInfo
(
" 入库,MoveStep="
+
MoveInfo
.
MoveStep
+
",没有对应的处理!"
);
}
}
#
endregion
#
region
压紧轴压紧处理
private
System
.
Timers
.
Timer
axisCheckTimer
=
null
;
private
string
TargetIoType
=
IO_Type
.
Compress_Check
;
private
IO_VALUE
TargetIoValue
=
IO_VALUE
.
HIGH
;
public
bool
ComAxisStartCheck
(
string
targetIo
=
""
,
IO_VALUE
value
=
IO_VALUE
.
HIGH
)
{
if
(
String
.
IsNullOrEmpty
(
targetIo
))
{
targetIo
=
IO_Type
.
Compress_Check
;
}
if
(
axisCheckTimer
==
null
)
{
axisCheckTimer
=
new
System
.
Timers
.
Timer
();
axisCheckTimer
.
AutoReset
=
true
;
axisCheckTimer
.
Interval
+=
50
;
axisCheckTimer
.
Elapsed
+=
CheckTimer_Elapsed
;
axisCheckTimer
.
Enabled
=
false
;
}
TargetIoValue
=
value
;
TargetIoType
=
targetIo
;
axisCheckTimer
.
Start
();
return
true
;
}
private
bool
ComAxisStopCheck
()
{
if
(!(
axisCheckTimer
==
null
))
{
ACServerManager
.
SuddenStop
(
Config
.
Comp_Axis
);
axisCheckTimer
.
Stop
();
}
return
true
;
}
private
bool
IsInProcess
=
false
;
private
void
CheckTimer_Elapsed
(
object
sender
,
System
.
Timers
.
ElapsedEventArgs
e
)
{
if
(
IsInProcess
)
{
return
;
}
IsInProcess
=
true
;
if
(
IOValue
(
TargetIoType
).
Equals
(
TargetIoValue
))
{
LogUtil
.
info
(
Name
+
"压紧轴运动:检测到 "
+
TargetIoType
+
"="
+
TargetIoValue
+
",停止运动"
);
ACServerManager
.
SuddenStop
(
Config
.
Comp_Axis
.
DeviceName
,
Config
.
Comp_Axis
.
GetAxisValue
());
ComAxisStopCheck
();
}
IsInProcess
=
false
;
}
#
endregion
#
region
出库
private
DateTime
startOutStoreTime
=
DateTime
.
Now
;
public
bool
IsIgnoreComSig
=
false
;
//忽略料叉压紧信号
private
void
StartExecuctOut
(
InOutParam
param
)
{
bool
result
;
if
(
param
.
urgentReel
)
{
result
=
StartUrgentOutStoreMove
(
param
);
}
else
{
result
=
StartOutStoreMove
(
param
);
}
if
(!
result
)
{
LogInfo
(
" 执行出库【"
+
param
.
ToStr
()
+
"】失败,加入等待队列"
);
waitOutStoreList
.
Enqueue
(
param
);
}
}
/// <summary>
/// 开始出库运动
/// </summary>
public
override
bool
StartOutStoreMove
(
InOutParam
param
)
{
startOutStoreTime
=
DateTime
.
Now
;
string
posId
=
param
!=
null
?
param
.
PosID
:
""
;
if
(
isInSuddenDown
||
isNoAirCheck
||
(!
storeRunStatus
.
Equals
(
StoreRunStatus
.
Runing
))
||
(!
MoveInfo
.
MoveType
.
Equals
(
StoreMoveType
.
None
)))
{
LogUtil
.
error
(
Name
+
" 启动出库【"
+
param
.
ToStr
()
+
"】失败,忙碌或报警中 ,storeStatus:"
+
storeRunStatus
+
",MoveType:"
+
MoveInfo
.
MoveType
+
",isInSuddenDown:"
+
isInSuddenDown
+
",isNoAirCheck:"
+
isNoAirCheck
);
return
false
;
}
if
(
WaitShelfEnter
)
{
LogUtil
.
error
(
Name
+
" 启动出库【"
+
param
.
ToStr
()
+
"】失败,WaitShelfEnter=true ,需要等待入库结束才能出库"
);
return
false
;
}
if
(!
StoreManager
.
LoadInoutParam
(
param
,
false
,
this
))
{
LogUtil
.
error
(
Name
+
" 启动出库【"
+
param
.
ToStr
()
+
"】出错,找不到库位信息"
);
return
false
;
}
taskData
=
null
;
storeStatus
=
StoreStatus
.
OutStoreExecute
;
storeRunStatus
=
StoreRunStatus
.
Busy
;
MoveInfo
.
NewMove
(
StoreMoveType
.
OutStore
,
param
);
LogInfo
(
"启动出库【"
+
param
.
ToStr
()
+
"】 "
);
//出库前shelfPosID需要固定,出库时根据rfid判断是否需要出入料架
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_01_InoutBack
);
InOutStoreLog
(
"出库 "
+
MoveInfo
.
SLog
+
":进出轴到P1 开始"
);
InOutBackToP1
(
MoveInfo
.
MoveParam
.
MoveP
.
InOut_P1
);
return
true
;
}
/// <summary>
/// 开始紧急料出库运动
/// </summary>
public
bool
StartUrgentOutStoreMove
(
InOutParam
param
)
{
startOutStoreTime
=
DateTime
.
Now
;
string
posId
=
param
!=
null
?
param
.
PosID
:
""
;
if
(
isInSuddenDown
||
isNoAirCheck
||
(!
storeRunStatus
.
Equals
(
StoreRunStatus
.
Runing
))
||
(!
MoveInfo
.
MoveType
.
Equals
(
StoreMoveType
.
None
)))
{
LogUtil
.
error
(
Name
+
" 启动紧急料出库【"
+
param
.
ToStr
()
+
"】失败,忙碌或报警中 ,storeStatus:"
+
storeRunStatus
+
",MoveType:"
+
MoveInfo
.
MoveType
+
",isInSuddenDown:"
+
isInSuddenDown
+
",isNoAirCheck:"
+
isNoAirCheck
);
return
false
;
}
if
(
WaitShelfEnter
)
{
LogUtil
.
error
(
Name
+
" 启动紧急料出库【"
+
param
.
ToStr
()
+
"】失败,WaitShelfEnter=true ,需要等待入库结束才能出库"
);
return
false
;
}
if
(!
StoreManager
.
LoadInoutParam
(
param
,
false
,
this
))
{
LogUtil
.
error
(
Name
+
" 启动紧急料出库【"
+
param
.
ToStr
()
+
"】出错,找不到库位信息"
);
return
false
;
}
CylinderMove
(
MoveInfo
,
IO_Type
.
TopCylinder_Down
,
IO_Type
.
TopCylinder_Up
);
taskData
=
null
;
storeStatus
=
StoreStatus
.
OutStoreExecute
;
storeRunStatus
=
StoreRunStatus
.
Busy
;
MoveInfo
.
NewMove
(
StoreMoveType
.
OutStore
,
param
);
LogInfo
(
"启动紧急料出库【"
+
param
.
ToStr
()
+
"】 "
);
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_01_InoutBack
);
InOutStoreLog
(
"紧急料出库 "
+
MoveInfo
.
SLog
+
":进出轴到P1 开始"
);
InOutBackToP1
(
MoveInfo
.
MoveParam
.
MoveP
.
InOut_P1
);
return
true
;
}
private
void
SO_03_ToBagPosition
()
{
LineMoveP
movep
=
MoveInfo
.
MoveParam
.
MoveP
;
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_03_ToPosition
);
InOutStoreLog
(
"出库 "
+
MoveInfo
.
SLog
+
":走到库位,压紧轴至P3["
+
movep
.
ComPress_P3
+
"] ,旋转轴至P2["
+
movep
.
Middle_P2
+
"],升降轴至P5["
+
movep
.
UpDown_P5
+
"] ,顶升上升"
);
ACAxisMove
(
Config
.
Comp_Axis
,
movep
.
ComPress_P3
,
Config
.
CompAxis_P3_Speed
);
ACAxisMove
(
Config
.
Middle_Axis
,
movep
.
Middle_P2
,
Config
.
MiddleAxis_P2_Speed
);
ACAxisMove
(
Config
.
UpDown_Axis
,
movep
.
UpDown_P5
,
Config
.
UpDownAxis_P5_Speed
);
CylinderMove
(
MoveInfo
,
IO_Type
.
TopCylinder_Down
,
IO_Type
.
TopCylinder_Up
);
}
protected
override
void
OutStoreProcess
()
{
LineMoveP
moveP
=
MoveInfo
.
MoveParam
.
MoveP
;
if
(
MoveInfo
.
IsInWait
)
{
CheckWait
();
}
if
(
MoveInfo
.
IsInWait
)
{
return
;
}
#
region
把紧急料盘送到紧急料箱逻辑
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_15_ToUrgentDoor
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_16_UrgentDoorUp
);
InOutStoreLog
(
"紧急料 "
+
MoveInfo
.
SLog
+
":升降门上升"
,
true
);
CylinderMove
(
MoveInfo
,
IO_Type
.
NGDoorCylinder_Down
,
IO_Type
.
NGDoowCylinder_Up
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_16_UrgentDoorUp
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_17_InoutToUrgentDoor
);
InOutStoreLog
(
"紧急料 "
+
MoveInfo
.
SLog
+
":进出轴到升降门口位置P11"
,
true
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P11
,
Config
.
InOutAxis_P2_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_17_InoutToUrgentDoor
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_18_UpdownDown
);
InOutStoreLog
(
"紧急料 "
+
MoveInfo
.
SLog
+
":升降轴到P11,压紧轴到P3,放下料盘"
,
true
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_P11
,
Config
.
UpDownAxis_P2_Speed
);
ACAxisMove
(
Config
.
Comp_Axis
,
moveP
.
ComPress_P3
,
Config
.
CompAxis_P3_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_18_UpdownDown
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_19_InoutToP1
);
InOutStoreLog
(
"紧急料 "
+
MoveInfo
.
SLog
+
":叉子后退到P1"
,
true
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P1
,
Config
.
InOutAxis_P1_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_19_InoutToP1
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_20_UrgentDoorDown
);
InOutStoreLog
(
"紧急料 "
+
MoveInfo
.
SLog
+
":关闭升降门,送出料盘结束"
,
true
);
CylinderMove
(
MoveInfo
,
IO_Type
.
NGDoowCylinder_Up
,
IO_Type
.
NGDoorCylinder_Down
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
1000
));
taskData
=
null
;
Task
.
Factory
.
StartNew
(
delegate
{
int
posLoc
=
StoreManager
.
GetShelfPosIndex
(
MoveInfo
.
MoveParam
.
ShelfPosID
,
ShelfPosList
);
//紧急料发PutFinished
if
(
MoveInfo
.
MoveParam
.
urgentReel
)
{
string
msg
=
StoreManager
.
afterPutCut
(
Name
,
"1000A"
,
MoveInfo
.
MoveParam
.
WareCode
,
CID
,
1
,
out
taskData
);
if
(
String
.
IsNullOrEmpty
(
msg
).
Equals
(
false
))
{
LogUtil
.
error
(
Name
+
"["
+
MoveInfo
.
MoveParam
.
WareCode
+
"] ["
+
"1000A"
+
"_"
+
GetLastRfid
()
+
"] ["
+
1
+
"] afterPutCut 结果:"
+
msg
);
}
}
});
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_20_UrgentDoorDown
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_21_UrgentLineRun
);
InOutStoreLog
(
"紧急料出库 "
+
MoveInfo
.
SLog
+
":流水线转动30s"
,
true
);
IOMove
(
IO_Type
.
NGLine_Run
,
IO_VALUE
.
LOW
);
IOMove
(
IO_Type
.
NGLine_BackRun
,
IO_VALUE
.
HIGH
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
30000
));
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_21_UrgentLineRun
))
{
IOMove
(
IO_Type
.
NGLine_BackRun
,
IO_VALUE
.
LOW
);
InOutStoreLog
(
"紧急料出库 "
+
MoveInfo
.
SLog
+
":停止紧急料线体转动"
);
bool
isFinish
=
false
;
if
(
MoveInfo
.
MoveParam
.
urgentReel
)
{
if
(
taskData
!=
null
&&
taskData
.
urgentPackageTask
<=
0
)
{
InOutStoreLog
(
"紧急料出库完成,urgentPackageTask="
+
taskData
.
urgentPackageTask
+
""
);
isFinish
=
true
;
}
else
if
(
taskData
==
null
)
{
InOutStoreLog
(
"紧急料出库完成,taskData=null"
);
isFinish
=
true
;
}
}
if
(!
isFinish
)
{
TimeSpan
span
=
DateTime
.
Now
-
startOutStoreTime
;
string
posId
=
MoveInfo
.
MoveParam
!=
null
?
MoveInfo
.
MoveParam
.
PosID
:
""
;
storeStatus
=
StoreStatus
.
StoreOnline
;
LogInfo
(
" 【"
+
posId
+
"】 "
+
" 紧急料出库结束,耗时【"
+
FormUtil
.
GetSpanStr
(
span
)
+
"】!"
);
if
(
StoreManager
.
Store
.
AutoShelfInstore
)
{
LogInfo
(
"紧急料还有出库任务,设置 AutoShelfInstore = false"
);
ConfigAppSettings
.
SaveValue
(
Setting_Init
.
AutoShelfInstore
,
0
);
StoreManager
.
Store
.
AutoShelfInstore
=
false
;
}
}
else
{
CylinderMove
(
MoveInfo
,
IO_Type
.
TopCylinder_Up
,
IO_Type
.
TopCylinder_Down
);
}
MoveEndToRuningStatus
();
AutoInout
.
InOutEndProcess
(
this
,
StoreMoveType
.
OutStore
);
}
#
endregion
#
region
出入库步骤
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_01_InoutBack
)
{
//判断是否需要送出料架,是否需要进入料架,是否可以直接开始,是否是紧急料
if
(
MoveInfo
.
MoveParam
.
urgentReel
||
MoveInfo
.
MoveParam
.
rfid
.
Equals
(
""
))
{
SO_03_ToBagPosition
();
}
else
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_02_TopDown
);
InOutStoreLog
(
"出库 "
+
MoveInfo
.
SLog
+
":顶升下降"
);
CylinderMove
(
MoveInfo
,
IO_Type
.
TopCylinder_Up
,
IO_Type
.
TopCylinder_Down
);
}
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_02_TopDown
)
{
if
(
IOValue
(
IO_Type
.
LineTake_Check
).
Equals
(
IO_VALUE
.
HIGH
))
{
string
LastRfidID
=
GetLastRfid
();
// if (IsRightShelfId(CurrShelfID, MoveInfo.MoveParam.realRfid))
if
(
MoveInfo
.
MoveParam
.
rfid
.
Equals
(
LastRfidID
))
{
LogUtil
.
error
(
"出库 【"
+
LastRfidID
+
"】 【"
+
MoveInfo
.
MoveParam
.
rfid
+
","
+
MoveInfo
.
MoveParam
.
realRfid
+
"】 同料架,开始取料"
);
SO_03_ToBagPosition
();
return
;
}
else
{
//重新记录
LogInfo
(
" 执行出库【"
+
MoveInfo
.
MoveParam
.
ToStr
()
+
"】失败,料架号不一致,加入等待队列"
);
waitOutStoreList
.
Enqueue
(
MoveInfo
.
MoveParam
);
LogUtil
.
error
(
Name
+
"出库 【"
+
LastRfidID
+
"】 【"
+
MoveInfo
.
MoveParam
.
rfid
+
","
+
MoveInfo
.
MoveParam
.
realRfid
+
"】不同料架,送出当前料架,稍后重新出库"
);
// MoveInfo.MoveParam.rfid = LastRfidID;
MoveInfo
.
NewMove
(
StoreMoveType
.
OutStore
,
LastOutParam
);
//送出料架,并且记录出库信息,等会重新出库
StartShelfOut
();
return
;
}
}
else
if
(
IOValue
(
IO_Type
.
LineTake_Check
).
Equals
(
IO_VALUE
.
LOW
)
&&
(!
MoveInfo
.
MoveParam
.
rfid
.
Equals
(
""
)))
{
if
(
CurrShelfID
.
EndsWith
(
"00"
))
{
CurrShelfID
=
""
;
}
string
mark
=
GetMarkInfo
();
// string rfid = MoveInfo.MoveParam.rfid;
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_00_ReadyShelf
);
InOutStoreLog
(
"出库 "
+
MoveInfo
.
SLog
+
": NeedEnter["
+
mark
+
"]["
+
MoveInfo
.
MoveParam
.
rfid
+
"],等待agv_Arrive 或有料架,进出轴到P1"
);
InOutBackToP1
(
MoveInfo
.
MoveParam
.
MoveP
.
InOut_P1
);
//需要先叫agv到达
AgvClient
.
SetStatus
(
Config
.
AgvNodeName
,
mark
,
MoveInfo
.
MoveParam
.
rfid
,
ClientAction
.
NeedEnter
,
ClientLevel
.
High
,
true
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitAgvAction
((
int
)
ClientAction
.
Arrive
));
}
else
{
SO_03_ToBagPosition
();
}
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_03_ToPosition
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_04_ToPos
);
InOutStoreLog
(
"出库 "
+
MoveInfo
.
SLog
+
":叉子进入库位中, 进出轴至P3["
+
moveP
.
InOut_P3
+
"] "
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P3
,
Config
.
InOutAxis_P3_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_04_ToPos
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_05_GetReel
);
InOutStoreLog
(
"出库 "
+
MoveInfo
.
SLog
+
": 拿起物品,升降轴至P6["
+
moveP
.
UpDown_P6
+
"],压紧轴到压紧点P2 :"
+
moveP
.
ComPress_P2
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_P6
,
Config
.
UpDownAxis_P6_Speed
);
ACAxisMove
(
Config
.
Comp_Axis
,
moveP
.
ComPress_P2
,
Config
.
CompAxis_P2_Speed
);
//MoveInfo.WaitList.Add(WaitResultInfo.WaitComAxis(Config.Comp_Axis, Config.CompAxis_P4_Position, Config.CompAxis_P4_Speed));
//Config.Comp_Axis.TargetPosition = Config.CompAxis_P4_Position;
//ACServerManager.AbsMove(Config.Comp_Axis.DeviceName, Config.Comp_Axis.GetAxisValue(), Config.CompAxis_P4_Position, Config.CompAxis_P4_Speed);
//ComAxisStartCheck();
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_05_GetReel
)
{
// SO_06_StartCompress();
//}
//else if (MoveInfo.MoveStep.Equals(StoreMoveStep.SO_06_StartCompress))
//{
// MoveInfo.NextMoveStep(StoreMoveStep.SO_07_ComDownMove);
// int currPosition = ACServerManager.GetActualtPosition(Config.Comp_Axis);
// int targetP = currPosition + Config.CompAxis_Down_Position;
// InOutStoreLog("出库 " + MoveInfo.SLog + ": 再向下压紧 [" + Config.CompAxis_Down_Position + "] 目标 [" + targetP + "] ");
// ACAxisMove(Config.Comp_Axis, targetP, Config.CompAxis_P1_Speed);
//}
//else if (MoveInfo.MoveStep == StoreMoveStep.SO_07_ComDownMove)
//{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_08_InoutBack
);
InOutStoreLog
(
"出库 "
+
MoveInfo
.
SLog
+
":进出轴至待机点P1["
+
moveP
.
InOut_P1
+
"] "
);
InOutBackToP1
(
moveP
.
InOut_P1
);
//把库位的物品放到取到叉子上之后是出仓完成
string
posId
=
MoveInfo
.
MoveParam
!=
null
?
MoveInfo
.
MoveParam
.
PosID
:
""
;
lastPosId
=
posId
;
lastPosIdStatus
=
StoreStatus
.
OutStoreBoxEnd
;
storeStatus
=
StoreStatus
.
OutStoreBoxEnd
;
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_08_InoutBack
)
{
IsIgnoreComSig
=
false
;
CompressSigTimeOut
=
false
;
//LogUtil.info("出库步骤 SO_07_CheckComSig :IsIgnoreComSig = false, CompressSigTimeOut = false");
IO_VALUE
iov
=
IOValue
(
IO_Type
.
Compress_Check
);
if
(
MoveInfo
.
MoveParam
.
urgentReel
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_15_ToUrgentDoor
);
InOutStoreLog
(
"紧急料 "
+
MoveInfo
.
SLog
+
",升降轴到升降门口高点P12,旋转轴到升降门口P11"
);
ACAxisMove
(
Config
.
UpDown_Axis
,
MoveInfo
.
MoveParam
.
MoveP
.
UpDown_P12
,
Config
.
UpDownAxis_P1_Speed
);
ACAxisMove
(
Config
.
Middle_Axis
,
MoveInfo
.
MoveParam
.
MoveP
.
Middle_P11
,
Config
.
MiddleAxis_P1_Speed
);
}
else
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_10_ToShelfPosition
);
InOutStoreLog
(
"出库 "
+
MoveInfo
.
SLog
+
":叉子已到P1,Compress_Check="
+
iov
+
",走到料架位置,旋转轴至P101["
+
moveP
.
Middle_P101
+
"],升降轴至P102["
+
moveP
.
UpDown_HP102
+
"] "
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_HP102
,
Config
.
UpDownAxis_P102_Speed
);
ACAxisMove
(
Config
.
Middle_Axis
,
moveP
.
Middle_P101
,
Config
.
MiddleAxis_P101_Speed
);
}
//MoveInfo.NextMoveStep(StoreMoveStep.SO_09_CheckComSig);
//InOutStoreLog("出库 " + MoveInfo.SLog + ":等待料叉压紧信号 ");
//MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Compress_Check, IO_VALUE.HIGH));
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_09_CheckComSig
)
{
if
(
IOValue
(
IO_Type
.
Compress_Check
).
Equals
(
IO_VALUE
.
HIGH
)
||
IsIgnoreComSig
)
{
IsIgnoreComSig
=
false
;
CompressSigTimeOut
=
false
;
LogUtil
.
info
(
"出库步骤 SO_07_CheckComSig :IsIgnoreComSig = false, CompressSigTimeOut = false"
);
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_10_ToShelfPosition
);
InOutStoreLog
(
"出库 "
+
MoveInfo
.
SLog
+
":走到料架位置,旋转轴至P101,升降轴至P102 "
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_HP102
,
Config
.
UpDownAxis_P102_Speed
);
ACAxisMove
(
Config
.
Middle_Axis
,
moveP
.
Middle_P101
,
Config
.
MiddleAxis_P101_Speed
);
}
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_10_ToShelfPosition
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_11_ToShelf
);
InOutStoreLog
(
"出库 "
+
MoveInfo
.
SLog
+
":叉子进出料口,进出轴至P101"
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P101
,
Config
.
InOutAxis_P101_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_11_ToShelf
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_12_PutReel
);
InOutStoreLog
(
"出库 "
+
MoveInfo
.
SLog
+
":放下物品,压紧轴到P1,升降轴至P101,清空 taskData=null "
);
ACAxisMove
(
Config
.
Comp_Axis
,
moveP
.
ComPress_P1
,
Config
.
CompAxis_P1_Speed
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_LP101
,
Config
.
UpDownAxis_P101_Speed
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
1000
));
taskData
=
null
;
Task
.
Factory
.
StartNew
(
delegate
{
int
posLoc
=
StoreManager
.
GetShelfPosIndex
(
MoveInfo
.
MoveParam
.
ShelfPosID
,
ShelfPosList
);
//分盘料和紧急料发PutFinished
if
(
MoveInfo
.
MoveParam
.
cutReel
||
MoveInfo
.
MoveParam
.
urgentReel
)
{
string
msg
=
StoreManager
.
afterPutCut
(
Name
,
CurrShelfID
,
MoveInfo
.
MoveParam
.
WareCode
,
CID
,
posLoc
,
out
taskData
);
if
(
String
.
IsNullOrEmpty
(
msg
).
Equals
(
false
))
{
LogUtil
.
error
(
Name
+
"["
+
MoveInfo
.
MoveParam
.
WareCode
+
"] ["
+
CurrShelfID
+
"_"
+
GetLastRfid
()
+
"] ["
+
posLoc
+
"] afterPutCut 结果:"
+
msg
);
}
}
else
{
int
newTaskCount
=
0
;
string
msg
=
StoreManager
.
UpdateTrayLoc
(
Name
,
MoveInfo
.
MoveParam
.
WareCode
,
CurrShelfID
+
"@"
+
posLoc
.
ToString
(),
out
newTaskCount
);
if
(
String
.
IsNullOrEmpty
(
msg
).
Equals
(
false
))
{
LogUtil
.
error
(
Name
+
"["
+
MoveInfo
.
MoveParam
.
WareCode
+
"] ["
+
CurrShelfID
+
"_"
+
GetLastRfid
()
+
"] ["
+
posLoc
+
"] UpdateTrayLoc 结果:"
+
msg
);
}
if
(
newTaskCount
>
MoveInfo
.
MoveParam
.
taskCount
)
{
InOutStoreLog
(
"UpdateTrayLoc 返回 newTaskCount="
+
newTaskCount
+
",原有 taskCount="
+
MoveInfo
.
MoveParam
.
taskCount
+
",使用新数据"
);
MoveInfo
.
MoveParam
.
taskCount
=
newTaskCount
;
}
}
});
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_12_PutReel
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_13_InoutBack
);
InOutStoreLog
(
"出库 "
+
MoveInfo
.
SLog
+
":叉子从出料口返回, 进出轴到P1 "
);
InOutBackToP1
(
moveP
.
InOut_P1
);
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_13_InoutBack
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_14_GoBack
);
InOutStoreLog
(
"出库 "
+
MoveInfo
.
SLog
+
": 升降轴返回,升降轴到P1,顶升下降"
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_P1
,
Config
.
UpDownAxis_P1_Speed
);
//发送消息给流水线
// SendOutStoreEnd(MoveInfo);
CylinderMove
(
MoveInfo
,
IO_Type
.
TopCylinder_Up
,
IO_Type
.
TopCylinder_Down
);
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_14_GoBack
)
{
//判断是否需要送出料架
bool
isNeedSend
=
false
;
string
logName
=
"【"
+
CurrShelfID
+
"_"
+
GetLastRfid
()
+
"】"
;
//只有rfid不为空才需要送出料架
if
(
String
.
IsNullOrEmpty
(
MoveInfo
.
MoveParam
.
rfid
))
{
InOutStoreLog
(
"出库完成,未设置rfid,不需要送出料架"
);
isNeedSend
=
false
;
}
else
if
(
MoveInfo
.
MoveParam
.
cutReel
)
{
if
(
taskData
!=
null
&&
taskData
.
cutPackageTask
<=
0
)
{
InOutStoreLog
(
logName
+
"分盘料出库完成,cutPackageTask="
+
taskData
.
cutPackageTask
+
",送出料架"
);
isNeedSend
=
true
;
}
else
if
(
taskData
==
null
)
{
InOutStoreLog
(
logName
+
"分盘料出库完成,taskData=null,送出料架"
);
isNeedSend
=
true
;
}
}
else
if
(
MoveInfo
.
MoveParam
.
urgentReel
)
{
if
(
taskData
!=
null
&&
taskData
.
urgentPackageTask
<=
0
)
{
InOutStoreLog
(
logName
+
"紧急料出库完成,urgentPackageTask="
+
taskData
.
urgentPackageTask
+
",送出料架"
);
isNeedSend
=
true
;
}
else
if
(
taskData
==
null
)
{
InOutStoreLog
(
logName
+
"紧急料出库完成,taskData=null,送出料架"
);
isNeedSend
=
true
;
}
}
else
if
(
MoveInfo
.
MoveParam
.
taskCount
<=
0
)
{
InOutStoreLog
(
logName
+
"出库完成,taskCount="
+
MoveInfo
.
MoveParam
.
taskCount
+
" 送出料架"
);
isNeedSend
=
true
;
}
if
(
isNeedSend
)
{
StartShelfOut
();
}
else
{
TimeSpan
span
=
DateTime
.
Now
-
startOutStoreTime
;
string
posId
=
MoveInfo
.
MoveParam
!=
null
?
MoveInfo
.
MoveParam
.
PosID
:
""
;
storeStatus
=
StoreStatus
.
StoreOnline
;
LogInfo
(
" 【"
+
posId
+
"】 "
+
logName
+
" 出库结束,耗时【"
+
FormUtil
.
GetSpanStr
(
span
)
+
"】!"
);
if
(!
String
.
IsNullOrEmpty
(
MoveInfo
.
MoveParam
.
rfid
))
{
if
(
StoreManager
.
Store
.
AutoShelfInstore
)
{
LogInfo
(
" 料架"
+
logName
+
"还有出库任务,设置 AutoShelfInstore = false"
);
ConfigAppSettings
.
SaveValue
(
Setting_Init
.
AutoShelfInstore
,
0
);
StoreManager
.
Store
.
AutoShelfInstore
=
false
;
}
}
MoveEndToRuningStatus
();
AutoInout
.
InOutEndProcess
(
this
,
StoreMoveType
.
OutStore
);
}
}
#
endregion
else
if
(
MoveInfo
.
MoveStep
<=
StoreMoveStep
.
SO_01_InoutBack
)
{
ShelfEnterProcess
();
}
else
if
(
MoveInfo
.
MoveStep
>=
StoreMoveStep
.
BS_01_TopDown
)
{
ShelfOutProcess
();
}
else
{
LogUtil
.
error
(
Name
+
" 出库处理,moveStatus="
+
MoveInfo
.
MoveStep
+
",没有对应的处理!"
);
}
}
//private void SO_06_StartCompress()
//{
// //如果检测信号亮或者当前位置大于P4,直接走相对位置
// if (IOValue(IO_Type.Compress_Check).Equals(IO_VALUE.HIGH) || (MoveInfo.MoveParam.MoveP.ComPress_P2 >= Config.CompAxis_P4_Position))
// {
// MoveInfo.NextMoveStep(StoreMoveStep.SO_07_ComDownMove);
// int currPosition = ACServerManager.GetActualtPosition(Config.Comp_Axis);
// int targetP = currPosition + Config.CompAxis_Down_Position;
// InOutStoreLog("出库 " + MoveInfo.SLog + ": 再向下压紧 [" + Config.CompAxis_Down_Position + "] 目标 [" + targetP + "] ");
// ACAxisMove(Config.Comp_Axis, targetP, Config.CompAxis_P1_Speed);
// }
// else
// {
// MoveInfo.NextMoveStep(StoreMoveStep.SO_06_StartCompress);
// InOutStoreLog("出库 " + MoveInfo.SLog + ":压紧轴开始缓慢压紧到P4 :" + Config.CompAxis_P4_Position);
// MoveInfo.WaitList.Add(WaitResultInfo.WaitComAxis(Config.Comp_Axis, Config.CompAxis_P4_Position, Config.CompAxis_P4_Speed));
// Config.Comp_Axis.TargetPosition = Config.CompAxis_P4_Position;
// ACServerManager.AbsMove(Config.Comp_Axis.DeviceName, Config.Comp_Axis.GetAxisValue(), Config.CompAxis_P4_Position, Config.CompAxis_P4_Speed);
// ComAxisStartCheck();
// }
//}
#
endregion
}
}
source/DeviceLibrary/ACPackingStore/AC_BOX_Bean_Shelf.cs
deleted
100644 → 0
查看文件 @
7c97fdf
using
Asa
;
using
OnlineStore.Common
;
using
OnlineStore.LoadCSVLibrary
;
using
System
;
using
System.Collections.Concurrent
;
using
System.Collections.Generic
;
using
System.Diagnostics
;
using
System.Linq
;
using
System.Text
;
using
System.Threading
;
using
System.Threading.Tasks
;
namespace
OnlineStore.DeviceLibrary
{
public
partial
class
AC_BOX_Bean
{
#
region
料架进出料仓处理:出入库模块共用
private
void
BI_04_WaitTakeSingle
(
string
moveName
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_04_WaitTakeSingle
);
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
" 线体正转,等待LineIn_Check=Low, 信号LineTake_Check=High"
);
LineRun
();
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
LineIn_Check
,
IO_VALUE
.
LOW
));
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
LineTake_Check
,
IO_VALUE
.
HIGH
));
}
private
void
ShelfEnterProcess
()
{
string
mark
=
GetMarkInfo
();
string
moveName
=
"入库料架["
+
CurrShelfID
+
"]"
;
bool
instoreShelf
=
true
;
if
(
MoveInfo
.
MoveType
.
Equals
(
StoreMoveType
.
OutStore
))
{
instoreShelf
=
false
;
moveName
=
"出库料架["
+
CurrShelfID
+
"]["
+
mark
+
"]"
;
}
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_00_ReadyShelf
))
{
if
(
IOValue
(
IO_Type
.
LineIn_Check
).
Equals
(
IO_VALUE
.
HIGH
))
{
BI_04_WaitTakeSingle
(
moveName
);
}
else
if
(
IOValue
(
IO_Type
.
LineTake_Check
).
Equals
(
IO_VALUE
.
HIGH
))
{
BI_04_WaitTakeSingle
(
moveName
);
}
else
{
// MoveInfo.ShelfPositionList = new List<string>(ShelfPosList);
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
" agv已到达,打开入料口移门"
);
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_01_DoorOpen
);
DoorBean
.
StartOpen
(
MoveInfo
);
}
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_01_DoorOpen
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_03_LineRun
);
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
"调用AgvClient.MayEnter,线体正转,等待LineIn_Check 或LineTake_Check 信号"
);
AgvClient
.
SetStatus
(
Config
.
AgvNodeName
,
mark
,
""
,
ClientAction
.
MayEnter
,
ClientLevel
.
High
,
true
);
LineRun
();
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
LineIn_Check
,
IO_VALUE
.
HIGH
));
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
LineTake_Check
,
IO_VALUE
.
HIGH
));
MoveInfo
.
OneWaitCanEndStep
=
true
;
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_03_LineRun
))
{
BI_04_WaitTakeSingle
(
moveName
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_04_WaitTakeSingle
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_05_LineStop
);
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
"调用Agv "
+
Config
.
AgvNodeName
+
" FinishEnter,取料位检测到信号,继续转动"
);
LineRun
();
AgvClient
.
SetStatus
(
Config
.
AgvNodeName
,
mark
,
""
,
ClientAction
.
FinishEnter
,
ClientLevel
.
High
,
true
);
if
(!
instoreShelf
)
{
if
(
MoveInfo
.
MoveParam
.
ShelfPosID
.
Equals
(
""
))
{
MoveInfo
.
MoveParam
.
UpdateShelfPosId
(
ShelfPosList
[
0
]);
InOutStoreLog
(
"出库 "
+
MoveInfo
.
SLog
+
": ShelfPosID未设置,默认ShelfPosID="
+
MoveInfo
.
MoveParam
.
ShelfPosID
);
}
}
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_05_LineStop
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_06_DoorClose
);
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
"入料口移门关闭 "
);
DoorBean
.
StartClose
(
MoveInfo
);
if
(!
instoreShelf
)
{
InOutStoreLog
(
"出库 "
+
MoveInfo
.
SLog
+
": 走到库位,压紧轴至P3(压紧前点) ,旋转轴至P2(库位点),升降轴至P5(库位出库前点)"
);
ACAxisMove
(
Config
.
Comp_Axis
,
MoveInfo
.
MoveParam
.
MoveP
.
ComPress_P3
,
Config
.
CompAxis_P3_Speed
);
ACAxisMove
(
Config
.
Middle_Axis
,
MoveInfo
.
MoveParam
.
MoveP
.
Middle_P2
,
Config
.
MiddleAxis_P2_Speed
);
ACAxisMove
(
Config
.
UpDown_Axis
,
MoveInfo
.
MoveParam
.
MoveP
.
UpDown_P5
,
Config
.
UpDownAxis_P5_Speed
);
}
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_06_DoorClose
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_07_LineRun
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
7000
));
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
"继续转动 7000"
);
LineRun
();
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_07_LineRun
))
{
LineStop
();
UpdateShelfId
();
//如果未读到料架号,将料架送出
if
(
CurrShelfID
.
EndsWith
(
"00"
)
&&
MoveInfo
.
MoveType
.
Equals
(
StoreMoveType
.
OutStore
))
{
LogInfo
(
" 执行出库【"
+
MoveInfo
.
MoveParam
.
ToStr
()
+
"】失败,料架号["
+
CurrShelfID
+
"]无效,加入等待队列"
);
waitOutStoreList
.
Enqueue
(
MoveInfo
.
MoveParam
.
NewParam
());
LogUtil
.
error
(
Name
+
"出库 料架号["
+
CurrShelfID
+
"]无效,送出料架,稍后重新出库"
);
MoveInfo
.
MoveParam
.
rfid
=
CurrShelfID
;
//送出料架,并且记录出库信息,等会重新出库
StartShelfOut
();
return
;
}
//如果该料架为入库料架,此时有出库任务,执行入库任务
if
(
StoreManager
.
CheckShelfInfo
(
CurrShelfID
)
&&
MoveInfo
.
MoveType
.
Equals
(
StoreMoveType
.
OutStore
))
{
LogInfo
(
Name
+
"出库"
+
mark
+
"->入库 料架号["
+
CurrShelfID
+
"]为入库料架,进行入库"
);
MoveInfo
.
NewMove
(
StoreMoveType
.
InStore
,
new
InOutParam
());
MoveInfo
.
MoveParam
.
MoveP
=
new
LineMoveP
(
Config
);
MoveInfo
.
ShelfPositionList
=
new
List
<
string
>(
ShelfPosList
);
mark
=
"0"
;
instoreShelf
=
true
;
}
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_08_LocationUp
);
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
"停止线体,读取料架"
+
CurrShelfID
+
",设置"
+
Config
.
AgvNodeName
+
"=None"
);
AgvClient
.
SetStatus
(
Config
.
AgvNodeName
,
mark
);
// CylinderMove(MoveInfo, IO_Type.LocationCylinder_Down, IO_Type.LocationCylinder_Up);
if
(!
instoreShelf
)
{
if
(
MoveInfo
.
MoveParam
.
ShelfPosID
.
Equals
(
""
))
{
MoveInfo
.
MoveParam
.
UpdateShelfPosId
(
ShelfPosList
[
0
]);
InOutStoreLog
(
"出库 "
+
MoveInfo
.
SLog
+
": ShelfPosID未设置,默认ShelfPosID="
+
MoveInfo
.
MoveParam
.
ShelfPosID
);
}
// LastRfidID = MoveInfo.MoveParam.rfid;
LastOutParam
=
MoveInfo
.
MoveParam
;
InOutStoreLog
(
"出库 "
+
MoveInfo
.
SLog
+
":叉子进入库位中, 进出轴至P3(库位取放料点) "
);
ACAxisMove
(
Config
.
InOut_Axis
,
MoveInfo
.
MoveParam
.
MoveP
.
InOut_P3
,
Config
.
InOutAxis_P3_Speed
);
}
else
{
LastOutParam
=
new
InOutParam
();
// LastRfidID = "";
}
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_08_LocationUp
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_09_TopCylinderUp
);
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
""
+
CurrShelfID
+
"顶升上升"
);
CylinderMove
(
MoveInfo
,
IO_Type
.
TopCylinder_Down
,
IO_Type
.
TopCylinder_Up
);
if
(!
instoreShelf
)
{
InOutStoreLog
(
"出库 "
+
MoveInfo
.
SLog
+
": 拿起物品,升降轴至P6["
+
MoveInfo
.
MoveParam
.
MoveP
.
UpDown_P6
+
"],压紧轴到压紧点P2 :"
+
MoveInfo
.
MoveParam
.
MoveP
.
ComPress_P2
);
ACAxisMove
(
Config
.
Comp_Axis
,
MoveInfo
.
MoveParam
.
MoveP
.
ComPress_P2
,
Config
.
CompAxis_P2_Speed
);
ACAxisMove
(
Config
.
UpDown_Axis
,
MoveInfo
.
MoveParam
.
MoveP
.
UpDown_P6
,
Config
.
UpDownAxis_P6_Speed
);
//MoveInfo.WaitList.Add(WaitResultInfo.WaitComAxis(Config.Comp_Axis, Config.CompAxis_P4_Position, Config.CompAxis_P4_Speed));
//Config.Comp_Axis.TargetPosition = Config.CompAxis_P4_Position;
//ACServerManager.AbsMove(Config.Comp_Axis.DeviceName, Config.Comp_Axis.GetAxisValue(), Config.CompAxis_P4_Position, Config.CompAxis_P4_Speed);
//ComAxisStartCheck();
}
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_09_TopCylinderUp
))
{
if
(
instoreShelf
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_10_StartGetTray
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
((
int
)
TimeSpan
.
FromMinutes
(
75
).
TotalMilliseconds
));
//获取料架的锁定状态
bool
lockState
=
StoreManager
.
GetShelfLockInfo
(
Name
,
CID
,
CurrShelfID
,
out
MoveInfo
.
shelfLockDatas
);
if
(
lockState
&&
MoveInfo
.
shelfLockDatas
!=
null
)
{
MoveInfo
.
IsShelfLocked
=
true
;
if
(
MoveInfo
.
shelfLockDatas
.
Count
.
Equals
(
0
))
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
"该锁定料架上的料盘不属于该料仓,即将送出锁定料架"
);
else
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
"开始到料架指定位置取料盘 "
);
}
else
{
MoveInfo
.
IsShelfLocked
=
false
;
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
"开始循环料架取料盘 "
);
}
MoveInfo
.
EndStepWait
();
}
else
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_08_InoutBack
);
InOutStoreLog
(
"出库 "
+
MoveInfo
.
SLog
+
":进出轴返回P1["
+
MoveInfo
.
MoveParam
.
MoveP
.
InOut_P1
+
"] "
);
InOutBackToP1
(
MoveInfo
.
MoveParam
.
MoveP
.
InOut_P1
);
//把库位的物品放到取到叉子上之后是出仓完成
string
posId
=
MoveInfo
.
MoveParam
!=
null
?
MoveInfo
.
MoveParam
.
PosID
:
""
;
lastPosId
=
posId
;
lastPosIdStatus
=
StoreStatus
.
OutStoreBoxEnd
;
storeStatus
=
StoreStatus
.
OutStoreBoxEnd
;
//SO_06_StartCompress();
}
}
}
private
void
StartShelfOut
()
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_01_TopDown
);
if
(
MoveInfo
.
MoveType
.
Equals
(
StoreMoveType
.
OutStore
))
{
string
mark
=
GetMarkInfo
();
InOutStoreLog
(
"送出["
+
CurrShelfID
+
"]["
+
mark
+
"]:顶升下降,调用 NeedLeave["
+
mark
+
"]["
+
CurrShelfID
+
"] "
);
AgvClient
.
NeedLeave
(
Config
.
AgvNodeName
,
mark
,
CurrShelfID
);
}
else
{
InOutStoreLog
(
"送出空料架["
+
CurrShelfID
+
"]:顶升下降,调用 NeedLeave[0]["
+
CurrShelfID
+
"],clearPutInRfid["
+
CurrShelfID
+
"]"
);
AgvClient
.
NeedLeave
(
Config
.
AgvNodeName
,
"0"
,
CurrShelfID
);
StoreManager
.
clearPutInRfid
(
Name
,
CurrShelfID
);
ACAxisMove
(
Config
.
UpDown_Axis
,
Config
.
UpDownAxis_P1
,
Config
.
UpDownAxis_P1_Speed
);
}
CylinderMove
(
MoveInfo
,
IO_Type
.
TopCylinder_Up
,
IO_Type
.
TopCylinder_Down
);
}
private
string
GetMarkInfo
(
string
defualtMark
=
"0"
)
{
string
mark
=
defualtMark
;
//如果料架号是空,需要送到VMI线
if
(
MoveInfo
.
MoveType
.
Equals
(
StoreMoveType
.
OutStore
))
{
if
(
CurrShelfID
.
EndsWith
(
"00"
))
{
mark
=
defualtMark
;
}
//包装料会发往分盘区, 紧急料区, 包装线区
// urgentReel 这个为true是紧急料 出到紧急料区
// cutReel 为true是分盘料,AGV会拉到到分盘区
//料串会发到分盘区和紧急料区
//两个都为false 包装料默认拉到包装线体, 料串默认拉到紧急料区
else
if
(
MoveInfo
.
MoveParam
.
urgentReel
)
{
//紧急料,需要到紧急料区
mark
=
MoveInfo
.
MoveParam
.
rfid
+
",urgent"
;
}
else
if
(
MoveInfo
.
MoveParam
.
cutReel
)
{
//cutReel 为true是分盘料,AGV会拉到到分盘区
mark
=
MoveInfo
.
MoveParam
.
rfid
+
",cut"
;
}
else
{
mark
=
MoveInfo
.
MoveParam
.
rfid
+
",pack"
;
}
}
return
mark
;
}
private
void
ShelfOutProcess
()
{
string
mark
=
GetMarkInfo
();
string
moveName
=
"送出空料架["
+
CurrShelfID
+
"]"
;
if
(
MoveInfo
.
MoveType
.
Equals
(
StoreMoveType
.
OutStore
))
{
moveName
=
"送出["
+
CurrShelfID
+
"]["
+
mark
+
"]"
;
}
// LogCPU();
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_01_TopDown
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_02_LocatinDown
);
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
" :定位气缸下降"
);
// CylinderMove(MoveInfo, IO_Type.LocationCylinder_Up, IO_Type.LocationCylinder_Down);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_02_LocatinDown
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_03_WaitEmptyAgv
);
MoveInfo
.
TimeOutSeconds
=
600
;
//MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(30000));
//等待agv到达
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitAgvAction
((
int
)
ClientAction
.
Arrive
));
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
":再次调用 NeedLeave["
+
mark
+
"]["
+
CurrShelfID
+
"],等待Agv "
+
Config
.
AgvNodeName
+
" Arrive ,最多等待1200秒"
);
AgvClient
.
SetStatus
(
Config
.
AgvNodeName
,
mark
,
CurrShelfID
,
ClientAction
.
NeedLeave
,
ClientLevel
.
High
,
true
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_03_WaitEmptyAgv
))
{
//agv到达
if
(
AgvClient
.
GetAction
(
Config
.
AgvNodeName
).
Equals
(
ClientAction
.
Arrive
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_04_DoorOpen
);
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
":agv到达,打开入料口移门"
);
DoorBean
.
StartOpen
(
MoveInfo
);
}
else
{
//如果料架已被拉出,也算结束
if
(
IOValue
(
IO_Type
.
LineIn_Check
).
Equals
(
IO_VALUE
.
LOW
)
&&
IOValue
(
IO_Type
.
LineTake_Check
).
Equals
(
IO_VALUE
.
LOW
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_06_LineBackRun
);
AgvClient
.
SetToNone
(
Config
.
AgvNodeName
);
//如果agv未到达,直接结束
MoveEndToRuningStatus
();
//EmprtShelfList = new ConcurrentQueue<string>();
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
":等待Agv "
+
Config
.
AgvNodeName
+
" Arrive超时,检测不到料架信号,认为料架已离开,出库结束,设置"
+
Config
.
AgvNodeName
+
"=None"
);
}
else
{
TimeSpan
span
=
DateTime
.
Now
-
MoveInfo
.
LastSetpTime
;
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
((
int
)
span
.
TotalMilliseconds
+
30000
));
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
":等待Agv "
+
Config
.
AgvNodeName
+
" Arrive超时,再等待30秒"
);
}
}
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_04_DoorOpen
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_05_WaitReady
);
MoveInfo
.
TimeOutSeconds
=
120
;
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
":移门已打开,调用 MayLeave ["
+
mark
+
"]["
+
CurrShelfID
+
"],等待agv "
+
Config
.
AgvNodeName
+
" Ready"
);
AgvClient
.
SetStatus
(
Config
.
AgvNodeName
,
mark
,
CurrShelfID
,
ClientAction
.
MayLeave
,
ClientLevel
.
High
,
true
);
//等待agv到达
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitAgvAction
((
int
)
ClientAction
.
Ready
));
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_05_WaitReady
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_06_LineBackRun
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
500
));
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
":收到agv "
+
Config
.
AgvNodeName
+
" Ready ,线体开始反转"
);
LineBackRun
();
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_06_LineBackRun
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_07_WaitShelfOut
);
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
":等待取料工位无信号 "
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
LineTake_Check
,
IO_VALUE
.
LOW
));
// MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.LineIn_Check, IO_VALUE.HIGH));
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_07_WaitShelfOut
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_08_WaitLineIn
);
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
":等待 入料口有信号,最多等待30秒"
);
// MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.LineTake_Check, IO_VALUE.LOW));
MoveInfo
.
OneWaitCanEndStep
=
true
;
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
30000
));
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
LineIn_Check
,
IO_VALUE
.
HIGH
));
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_08_WaitLineIn
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_09_WaitTime
);
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
":再转动1000 , 等待入料口无信号,清理RFID"
);
RFIDManager
.
ReadRFID
(
Config
.
RFID_IP
,
true
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
1000
));
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
LineIn_Check
,
IO_VALUE
.
LOW
));
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_09_WaitTime
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_10_WaitAGVLeave
);
MoveInfo
.
TimeOutSeconds
=
180
;
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
":等待DoorClose事件,最多等待180000 "
);
MoveInfo
.
OneWaitCanEndStep
=
true
;
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
180000
));
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitDoorClose
());
//MoveInfo.WaitList.Add(WaitResultInfo.WaitAgvAction(action.FinishOut));
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_10_WaitAGVLeave
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_11_CloseDoor
);
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
":停止线体转动,关闭仓门 ,发送FinishLeave ,等待最少5000"
);
AgvClient
.
SetStatus
(
Config
.
AgvNodeName
,
mark
,
CurrShelfID
,
ClientAction
.
FinishLeave
,
ClientLevel
.
High
,
true
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
5000
));
LineStop
();
DoorBean
.
StartClose
(
MoveInfo
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_11_CloseDoor
))
{
//结束
MoveEndToRuningStatus
();
AgvClient
.
SetStatus
(
Config
.
AgvNodeName
);
//EmprtShelfList = new ConcurrentQueue<string>();
InOutStoreLog
(
moveName
+
MoveInfo
.
SLog
+
":料架"
+
CurrShelfID
+
"已离开 ,设置"
+
Config
.
AgvNodeName
+
"=None,清理rfid"
);
RFIDManager
.
ReadRFID
(
Config
.
RFID_IP
,
true
);
CurrShelfID
=
""
;
LastOutParam
=
new
InOutParam
();
//LastRfidID = "";
}
}
#
endregion
#
region
AGV
internal
bool
ProcessAGVAction
(
string
name
,
string
rfid
,
ClientAction
action
)
{
string
logN
=
name
+
"收到调度"
+
name
+
"="
+
action
+
",RFID["
+
rfid
+
"]"
;
//Arrive收到后打开门
if
(!
action
.
Equals
(
ClientAction
.
Arrive
))
{
LogUtil
.
info
(
Name
+
logN
+
" ,未找到相关处理"
);
return
false
;
}
//出库处理中不处理
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_03_WaitEmptyAgv
))
{
if
(!
rfid
.
Equals
(
""
))
{
string
mark
=
GetMarkInfo
();
LogUtil
.
error
(
Name
+
logN
+
" 当前 BS_03_WaitEmptyAgv,RFID["
+
rfid
+
"]不是空车,不处理agv,重发 NeedLeave ["
+
mark
+
"]["
+
CurrShelfID
+
"]"
);
Task
.
Factory
.
StartNew
(
new
Action
(()=>
{
AgvClient
.
SetStatus
(
Config
.
AgvNodeName
,
mark
,
CurrShelfID
,
ClientAction
.
MayNot
,
ClientLevel
.
High
,
true
);
Thread
.
Sleep
(
10000
);
AgvClient
.
SetStatus
(
Config
.
AgvNodeName
,
mark
,
CurrShelfID
,
ClientAction
.
NeedLeave
,
ClientLevel
.
High
,
true
);
}));
return
false
;
}
//等待空车到达
LogUtil
.
info
(
Name
+
logN
+
",当前 BS_03_WaitEmptyAgv,正在等待料架到达"
);
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_04_DoorOpen
);
InOutStoreLog
(
"送出料架等待空车"
+
MoveInfo
.
SLog
+
":agv到达,打开入料口移门"
);
DoorBean
.
StartOpen
(
MoveInfo
);
return
true
;
}
else
if
(
MoveInfo
.
MoveType
.
Equals
(
StoreMoveType
.
OutStore
)
&&
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_00_ReadyShelf
))
{
if
(
rfid
.
Equals
(
""
))
{
string
mark
=
GetMarkInfo
();
LogUtil
.
error
(
Name
+
logN
+
" 当前出库中 BI_00_ReadyShelf,RFID无效,不处理agv,重发 NeedEnter ["
+
mark
+
"]["
+
MoveInfo
.
MoveParam
.
rfid
+
"]"
);
Task
.
Factory
.
StartNew
(
new
Action
(()
=>
{
AgvClient
.
SetStatus
(
Config
.
AgvNodeName
,
mark
,
CurrShelfID
,
ClientAction
.
MayNot
,
ClientLevel
.
High
,
true
);
Thread
.
Sleep
(
10000
);
AgvClient
.
SetStatus
(
Config
.
AgvNodeName
,
mark
,
MoveInfo
.
MoveParam
.
rfid
,
ClientAction
.
NeedEnter
,
ClientLevel
.
High
,
true
);
}));
return
false
;
}
//出库等待料架到达
LogUtil
.
info
(
Name
+
logN
+
",当前出库中 BI_00_ReadyShelf,正在等待料架到达"
);
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_01_DoorOpen
);
InOutStoreLog
(
"出库等待料架"
+
MoveInfo
.
SLog
+
" agv已到达,打开入料口移门"
);
DoorBean
.
StartOpen
(
MoveInfo
);
return
true
;
}
else
if
(
storeRunStatus
.
Equals
(
StoreRunStatus
.
Runing
)
&&
MoveInfo
.
MoveType
.
Equals
(
StoreMoveType
.
None
)
&&
IOValue
(
IO_Type
.
LineTake_Check
).
Equals
(
IO_VALUE
.
LOW
))
{
//agv到达,开始处理
if
(
rfid
.
Equals
(
""
))
{
LogUtil
.
error
(
Name
+
logN
+
" ,RFID无效,不需要入库处理"
);
return
false
;
}
LogUtil
.
info
(
Name
+
logN
+
" ,检测到料架,开始料架入库"
);
StartShelfInStore
();
return
true
;
}
else
{
LogUtil
.
error
(
Name
+
logN
+
" ,["
+
MoveInfo
.
MoveType
+
"]["
+
MoveInfo
.
MoveStep
+
"]未找到相关处理"
);
}
return
false
;
}
#
endregion
#
region
与服务器通信定时器,每
1
秒向服务器通知一次状态
,
同时执行出库操作
private
string
CodeMsg
=
""
;
private
bool
isInProcess
=
false
;
private
DateTime
lastConTime
=
DateTime
.
Now
;
public
void
server_connect_timer_Tick
(
object
sender
,
EventArgs
e
)
{
if
(
isInProcess
)
{
TimeSpan
span
=
DateTime
.
Now
-
lastConTime
;
if
(
span
.
TotalSeconds
<
60
)
{
return
;
}
}
isInProcess
=
true
;
lastConTime
=
DateTime
.
Now
;
try
{
////HumitureController.QueryData();
//humBean.HumidityProcess(this);
//if (StoreManager.IsConnectServer)
//{
// SendLineStatus();
//}
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
Name
+
"定时SendLineStatus出错:"
+
ex
.
ToString
());
}
finally
{
isInProcess
=
false
;
}
}
/// <summary>
/// 获取整个料仓的状态
/// </summary>
public
Operation
getLineBoxStatus
()
{
//构建发送给服务器的对象
Operation
lineOperation
=
new
Operation
();
lineOperation
.
msg
=
""
;
lineOperation
.
alarmList
=
new
List
<
AlarmInfo
>();
lineOperation
.
cid
=
CID
;
lineOperation
.
seq
=
ConfigAppSettings
.
nextSeq
();
lineOperation
.
status
=
1
;
if
(
WarnMsg
!=
""
)
{
lineOperation
.
status
=
(
int
)
StoreStatus
.
Warning
;
lineOperation
.
msg
=
WarnMsg
;
}
lineOperation
.
status
=
(
int
)
StoreStatus
.
StoreOnline
;
BoxStatus
boxStatus
=
new
BoxStatus
();
boxStatus
.
boxId
=
1
;
boxStatus
.
msg
=
WarnMsg
;
lineOperation
.
msg
=
WarnMsg
;
if
(
WarnMsg
.
Equals
(
""
))
{
boxStatus
.
msg
=
CodeMsg
;
lineOperation
.
msg
=
CodeMsg
;
}
CodeMsg
=
""
;
//WarnMsg = "";
//状态
boxStatus
.
status
=
(
int
)
storeStatus
;
if
(
IsDebug
)
{
boxStatus
.
status
=
(
int
)
StoreStatus
.
Debugging
;
}
else
if
(
storeStatus
.
Equals
(
StoreStatus
.
OutStoreBoxEnd
)
||
storeStatus
.
Equals
(
StoreStatus
.
InStoreEnd
))
{
boxStatus
.
data
.
Add
(
ParamDefine
.
posId
,
lastPosId
);
}
else
if
(!
lastPosId
.
Equals
(
""
))
{
boxStatus
.
data
.
Add
(
ParamDefine
.
posId
,
lastPosId
);
boxStatus
.
status
=
(
int
)
lastPosIdStatus
;
if
(
lastPosId
!=
""
)
{
LogUtil
.
info
(
"给服务器发送出入库完成消息:"
+
Name
+
",status【"
+
lastPosIdStatus
+
"】posId【"
+
lastPosId
+
"】"
);
}
lastPosId
=
""
;
}
//温湿度
//ASTemperateParam param = HumitureServer.GetTemperateParam(Config.Temperate_Serveraddress);
HumitureParam
param
=
humBean
.
LastData
;
if
(
param
!=
null
)
{
boxStatus
.
humidity
=
param
.
Humidity
.
ToString
();
boxStatus
.
temperature
=
param
.
Temperate
.
ToString
();
}
lineOperation
.
boxStatus
.
Add
(
1
,
boxStatus
);
if
(!
alarmType
.
Equals
(
StoreAlarmType
.
None
))
{
lineOperation
.
alarmList
.
Add
(
alarmInfo
);
}
return
lineOperation
;
}
public
void
SendLineStatus
()
{
DateTime
time
=
DateTime
.
Now
;
//构建发送给服务器的对象
Operation
lineOperation
=
getLineBoxStatus
();
//如果还没湿度范围,先获取
if
(
humBean
.
NeedGetTem
())
{
lineOperation
.
op
=
5
;
LogUtil
.
error
(
Name
+
"没有湿度预警范围,需要从服务器获取,发送OP="
+
lineOperation
.
op
,
DeviceID
+
105
);
}
string
server
=
ConfigAppSettings
.
GetValue
(
Setting_Init
.
http_server
);
Operation
resultOperation
=
HttpHelper
.
PostJson
(
StoreManager
.
GetPostApi
(
server
),
lineOperation
,
false
);
//发送状态信息到服务器
if
(
resultOperation
==
null
||
(
resultOperation
.
op
<=
0
))
{
//判断服务端是否返回出库操作
return
;
}
if
(
resultOperation
.
op
.
Equals
(
1
))
{
// ReviceInStoreProcess("", resultOperation);
}
else
if
(
resultOperation
.
op
.
Equals
(
2
))
{
ReviceOutStoreProcess
(
resultOperation
);
}
else
if
(
resultOperation
.
op
.
Equals
(
5
))
{
humBean
.
ProcessHumidityCMD
(
resultOperation
);
}
else
{
LogUtil
.
error
(
"收到服务器命令:op="
+
resultOperation
.
op
+
",未找到对应处理"
);
}
TimeSpan
span
=
DateTime
.
Now
-
time
;
if
(
span
.
TotalMilliseconds
>
10
)
{
LogUtil
.
info
(
Name
+
"执行TimerProcess 共处理了【"
+
span
.
TotalMilliseconds
+
"】毫秒"
);
}
}
private
void
ReviceOutStoreProcess
(
Operation
resultOperation
)
{
DateTime
time
=
DateTime
.
Now
;
Dictionary
<
string
,
string
>
data
=
resultOperation
.
data
;
if
(
data
!=
null
&&
data
.
ContainsKey
(
ParamDefine
.
posId
)
&&
data
.
ContainsKey
(
ParamDefine
.
plateH
)
&&
data
.
ContainsKey
(
ParamDefine
.
plateW
))
{
char
splitChar
=
'|'
;
string
[]
posIdArray
=
data
[
ParamDefine
.
posId
].
Split
(
splitChar
);
string
[]
plateWArray
=
data
[
ParamDefine
.
plateW
].
Split
(
splitChar
);
string
[]
plateHArray
=
data
[
ParamDefine
.
plateH
].
Split
(
splitChar
);
bool
urgentReel
=
FormUtil
.
GetBoolData
(
data
,
ParamDefine
.
urgentReel
);
bool
cutReel
=
FormUtil
.
GetBoolData
(
data
,
ParamDefine
.
cutReel
);
bool
smallReel
=
FormUtil
.
GetBoolData
(
data
,
ParamDefine
.
smallReel
);
string
rfid
=
data
.
ContainsKey
(
ParamDefine
.
rfid
)
?
data
[
ParamDefine
.
rfid
]
:
""
;
int
rfidLoc
=
FormUtil
.
GetIntData
(
data
,
ParamDefine
.
rfidLoc
);
string
barcode
=
data
.
ContainsKey
(
ParamDefine
.
barcode
)
?
data
[
ParamDefine
.
barcode
]
:
""
;
string
realRfid
=
data
.
ContainsKey
(
ParamDefine
.
realRfid
)
?
data
[
ParamDefine
.
realRfid
]
:
""
;
int
taskCount
=
FormUtil
.
GetIntData
(
data
,
ParamDefine
.
taskCount
,
0
);
//urgentReel: true 表示紧急料,需要出到料串上
//cutReel: true 表示分盘料,需要出到料串上
//smallReel: true 小料(7x8),放置到小料架上
//rfid: 分配的料架RFID
//rfidLoc: 料架的架位,值为 - 1时,可以自由分配皮带线, 小料时,架位为1 - 46优先走1 / 2号皮带线,47 - 92优先走3 / 4号皮带线, 70,71,72时只能分配到3 / 4号皮带线; 大料时,架位1 - 6优先走1 / 2号皮带线, 7 - 12优先走3 / 4号皮带线
string
dataStr
=
JsonHelper
.
SerializeObject
(
data
);
LogUtil
.
info
(
"收到服务器出库消息:【"
+
dataStr
+
"】"
);
int
index
=
-
1
;
foreach
(
string
posId
in
posIdArray
)
{
index
++;
int
plateW
=
Convert
.
ToInt32
(
plateWArray
[
index
]);
int
plateH
=
Convert
.
ToInt32
(
plateHArray
[
index
]);
string
shelfPosID
=
StoreManager
.
GetShelfIDByLoc
(
rfidLoc
,
ShelfPosList
);
InOutParam
inoutParam
=
new
InOutParam
(
barcode
,
posId
,
shelfPosID
,
plateW
,
plateH
,
urgentReel
,
cutReel
,
smallReel
,
rfid
,
rfidLoc
,
taskCount
,
realRfid
);
//根据发送的posId获取位置列表
ACBoxPosition
position
=
CSVPositionReader
<
ACBoxPosition
>.
GetPositon
(
posId
);
if
(
position
==
null
)
{
//出入库没有找到服务器发送的库位,需要打印日志方便查询原因
WarnMsg
=
Name
+
"未找到库位:【"
+
inoutParam
.
ToStr
()
+
"】"
;
LogUtil
.
error
(
WarnMsg
);
continue
;
}
try
{
//判断是否接收过此库位的出库信息
if
(
MoveInfo
.
MoveType
.
Equals
(
StoreMoveType
.
OutStore
)
&&
MoveInfo
.
MoveParam
.
PosID
.
Equals
(
posId
))
{
LogUtil
.
error
(
Name
+
" 出库命令【"
+
inoutParam
.
ToStr
()
+
"】重复,正在【"
+
posId
+
"】出库中"
);
continue
;
}
//判断排队列表中是否已存在
List
<
InOutParam
>
reviceList
=
new
List
<
InOutParam
>(
waitOutStoreList
);
reviceList
=
(
from
m
in
reviceList
where
m
.
PosID
.
Equals
(
posId
)
select
m
).
ToList
<
InOutParam
>();
if
(
reviceList
.
Count
>
0
)
{
LogUtil
.
error
(
Name
+
" 出库命令【"
+
inoutParam
.
ToStr
()
+
"】重复,排队列表中已存在【"
+
reviceList
[
0
].
ToStr
()
+
"】"
);
continue
;
}
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
Name
+
"验证出库【"
+
inoutParam
.
ToStr
()
+
"】是否重复出错:"
+
ex
.
ToString
());
}
StartExecuctOut
(
inoutParam
);
}
TimeSpan
span
=
DateTime
.
Now
-
time
;
if
(
span
.
TotalMilliseconds
>
10
)
{
LogInfo
(
Name
+
"执行 ReviceOutStoreProcess 共处理了【"
+
span
.
TotalMilliseconds
+
"】毫秒"
);
}
}
}
#
endregion
#
region
扫码获取库位
/// <summary>
/// 数据接收
/// </summary>
/// <param name="message"></param>
private
bool
GetPosIdByCode
()
{
try
{
if
(
LastWidth
<=
0
)
{
LastWidth
=
7
;
}
//string message = StoreManager.ProcessCode(LastWidth, LastHeight, LastScanCodes);
string
message
=
MoveInfo
.
shelfLockDatas
[
MoveInfo
.
currShelfIndex
].
barcode
;
if
(
message
.
Equals
(
""
)
||
string
.
IsNullOrEmpty
(
message
))
{
CodeMsg
=
"未扫到二维码"
;
LogInfo
(
"未扫到二维码"
);
return
false
;
}
if
(
storeRunStatus
.
Equals
(
StoreRunStatus
.
Wait
))
{
LogInfo
(
"二维码【 "
+
message
+
"】,设备未启动,不需要发送服务器"
);
return
false
;
}
// CodeMsg = "收到二维码【 " + message + "】,发送给服务器获取入库PosID";
LogUtil
.
info
(
Name
+
"二维码【 "
+
message
+
"】,发送给服务器获取入库PosID"
);
//发送扫码内容到服务器进行入库操作
Operation
operation
=
getLineBoxStatus
();
operation
.
op
=
1
;
operation
.
data
=
new
Dictionary
<
string
,
string
>()
{
{
"code"
,
message
},
{
"boxId"
,
1.
ToString
()
},
{
ParamDefine
.
rfid
,
CurrShelfID
}
};
string
server
=
ConfigAppSettings
.
GetValue
(
Setting_Init
.
http_server
);
Operation
resultOperation
=
HttpHelper
.
PostJson
(
StoreManager
.
GetPostApi
(
server
),
operation
,
false
);
if
(
resultOperation
==
null
)
{
CodeMsg
=
"二维码【"
+
message
+
"】没有收到服务器反馈"
;
LogInfo
(
"二维码【 "
+
message
+
"】没有收到服务器反馈!"
);
return
false
;
}
else
if
(!
string
.
IsNullOrEmpty
(
resultOperation
.
msg
))
{
//如果有提示消息,直接显示提示
LogInfo
(
"二维码【 "
+
message
+
"】 :"
+
resultOperation
.
msg
);
return
false
;
}
if
(
resultOperation
.
op
.
Equals
(
1
))
{
Dictionary
<
string
,
string
>
data
=
resultOperation
.
data
;
if
(
data
!=
null
&&
data
.
ContainsKey
(
ParamDefine
.
posId
)
&&
data
.
ContainsKey
(
ParamDefine
.
plateH
)
&&
data
.
ContainsKey
(
ParamDefine
.
plateW
))
{
//服务器返回时有:posId库位编号,plateW:料盘宽度,plateH:料盘高度,
//postId格式BoxId#位置
string
posId
=
data
[
ParamDefine
.
posId
];
int
plateW
=
FormUtil
.
GetIntData
(
data
,
ParamDefine
.
plateW
);
int
plateH
=
FormUtil
.
GetIntData
(
data
,
ParamDefine
.
plateH
);
int
storeId
=
InOutParam
.
GetPosStoreId
(
posId
);
//根据发送的posId获取位置列表
ACBoxPosition
position
=
CSVPositionReader
<
ACBoxPosition
>.
GetPositon
(
posId
);
if
(
position
==
null
)
{
//出入库没有找到服务器发送的库位,需要打印日志方便查询原因
WarnMsg
=
"入库未找到库位:二维码【"
+
message
+
"】库位【"
+
posId
+
"】 "
;
LogUtil
.
error
(
Name
+
"收到服务器入库命令:入库未找到库位:二维码【"
+
message
+
"】库位【"
+
posId
+
"】"
);
return
false
;
}
int
p2
=
Config
.
GetComP2
(
plateH
).
TargetComP2
();
;
int
p3
=
p2
+
Config
.
GetCom_P3_P2
(
plateW
);
LogInfo
(
" 收到服务器入库命令:库位号【"
+
posId
+
"】二维码【"
+
message
+
"】设置入库参数,压紧位置["
+
p2
+
"]["
+
p3
+
"] , 开始入库!"
);
MoveInfo
.
MoveParam
.
UpdatePosId
(
message
,
posId
,
plateW
,
plateH
,
p2
,
p3
);
return
true
;
}
}
else
if
(
resultOperation
.
op
.
Equals
(
2
))
{
ReviceOutStoreProcess
(
resultOperation
);
}
else
if
(
resultOperation
.
op
.
Equals
(
5
))
{
humBean
.
ProcessHumidityCMD
(
resultOperation
);
}
else
{
LogUtil
.
error
(
"收到服务器命令:op="
+
resultOperation
.
op
+
",未找到对应处理"
);
}
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
Name
+
"GetPosIdByCode"
+
ex
.
StackTrace
);
}
return
false
;
}
/// <summary>
/// 扫码枪数据接收
/// </summary>
/// <param name="codeResultType">扫码结果</param>
/// <returns></returns>
public
enum
CodeResultType
{
/// <summary>
/// 未扫到二维码
/// </summary>
NoCode
,
/// <summary>
/// 设备未启动
/// </summary>
DeviceNotOpen
,
/// <summary>
///未收到服务器反馈
/// </summary>
NotResponseFromServer
,
WarnMsg
,
/// <summary>
/// 未找到库位
/// </summary>
NotFoundPos
,
/// <summary>
/// 不属于该仓位
/// </summary>
NotPosForPutIn
,
Error
,
Success
}
private
bool
GetPosIdByCode
(
int
rfidLoc
,
out
CodeResultType
codeResultType
)
{
try
{
if
(
LastWidth
<=
0
)
{
LastWidth
=
7
;
}
string
message
=
StoreManager
.
ProcessCode
(
LastWidth
,
LastHeight
,
LastScanCodes
);
if
(
message
.
Equals
(
""
)
||
string
.
IsNullOrEmpty
(
message
))
{
CodeMsg
=
"未扫到二维码"
;
LogInfo
(
"未扫到二维码"
);
codeResultType
=
CodeResultType
.
NoCode
;
return
false
;
}
if
(
storeRunStatus
.
Equals
(
StoreRunStatus
.
Wait
))
{
LogInfo
(
"二维码【 "
+
message
+
"】,设备未启动,不需要发送服务器"
);
codeResultType
=
CodeResultType
.
DeviceNotOpen
;
return
false
;
}
// CodeMsg = "收到二维码【 " + message + "】,发送给服务器获取入库PosID";
LogUtil
.
debug
(
Name
+
"二维码【 "
+
message
+
"】,发送给服务器获取入库PosID"
);
//查询该料盘所在料仓以及仓位
StoreManager
.
ResultType
resultType
=
StoreManager
.
GetPosForPutIn
(
Name
,
Config
,
message
,
CurrShelfID
,
rfidLoc
,
out
bool
isLockInfoMatch
);
if
(
resultType
==
StoreManager
.
ResultType
.
Error
)
{
codeResultType
=
CodeResultType
.
Error
;
return
false
;
}
else
if
(
resultType
==
StoreManager
.
ResultType
.
NotInThisBox
)
{
codeResultType
=
CodeResultType
.
NotPosForPutIn
;
return
false
;
}
if
(!
isLockInfoMatch
&&
MoveInfo
.
IsShelfLocked
)
//锁定信息不匹配则从第一层开始重新取料,一个料架只重新开始一次
{
MoveInfo
.
IsShelfLocked
=
false
;
MoveInfo
.
currShelfIndex
=
-
1
;
LogUtil
.
info
(
Name
+
"该锁定料架"
+
CurrShelfID
+
"上的料盘信息不匹配,即将从开始位置循环取料"
);
}
//发送扫码内容到服务器进行入库操作
Operation
operation
=
getLineBoxStatus
();
operation
.
op
=
1
;
operation
.
data
=
new
Dictionary
<
string
,
string
>()
{
{
"code"
,
message
},
{
"boxId"
,
1.
ToString
()
},
{
ParamDefine
.
rfid
,
CurrShelfID
}
};
string
server
=
ConfigAppSettings
.
GetValue
(
Setting_Init
.
http_server
);
Operation
resultOperation
=
HttpHelper
.
PostJson
(
StoreManager
.
GetPostApi
(
server
),
operation
,
false
);
if
(
resultOperation
==
null
)
{
CodeMsg
=
"二维码【"
+
message
+
"】没有收到服务器反馈"
;
LogInfo
(
"二维码【 "
+
message
+
"】没有收到服务器反馈!"
);
codeResultType
=
CodeResultType
.
NotResponseFromServer
;
return
false
;
}
else
if
(!
string
.
IsNullOrEmpty
(
resultOperation
.
msg
))
{
//如果有提示消息,直接显示提示
LogInfo
(
"二维码【 "
+
message
+
"】 :"
+
resultOperation
.
msg
);
codeResultType
=
CodeResultType
.
WarnMsg
;
return
false
;
}
if
(
resultOperation
.
op
.
Equals
(
1
))
{
Dictionary
<
string
,
string
>
data
=
resultOperation
.
data
;
if
(
data
!=
null
&&
data
.
ContainsKey
(
ParamDefine
.
posId
)
&&
data
.
ContainsKey
(
ParamDefine
.
plateH
)
&&
data
.
ContainsKey
(
ParamDefine
.
plateW
))
{
//服务器返回时有:posId库位编号,plateW:料盘宽度,plateH:料盘高度,
//postId格式BoxId#位置
string
posId
=
data
[
ParamDefine
.
posId
];
int
plateW
=
FormUtil
.
GetIntData
(
data
,
ParamDefine
.
plateW
);
int
plateH
=
FormUtil
.
GetIntData
(
data
,
ParamDefine
.
plateH
);
int
storeId
=
InOutParam
.
GetPosStoreId
(
posId
);
//根据发送的posId获取位置列表
ACBoxPosition
position
=
CSVPositionReader
<
ACBoxPosition
>.
GetPositon
(
posId
);
if
(
position
==
null
)
{
//出入库没有找到服务器发送的库位,需要打印日志方便查询原因
WarnMsg
=
"入库未找到库位:二维码【"
+
message
+
"】库位【"
+
posId
+
"】 "
;
LogUtil
.
error
(
Name
+
"收到服务器入库命令:入库未找到库位:二维码【"
+
message
+
"】库位【"
+
posId
+
"】"
);
codeResultType
=
CodeResultType
.
NotFoundPos
;
return
false
;
}
int
p2
=
Config
.
GetComP2
(
plateH
).
TargetComP2
();
;
int
p3
=
p2
+
Config
.
GetCom_P3_P2
(
plateW
);
LogInfo
(
" 收到服务器入库命令:库位号【"
+
posId
+
"】二维码【"
+
message
+
"】设置入库参数,压紧位置["
+
p2
+
"]["
+
p3
+
"] , 开始入库!"
);
MoveInfo
.
MoveParam
.
UpdatePosId
(
message
,
posId
,
plateW
,
plateH
,
p2
,
p3
);
codeResultType
=
CodeResultType
.
Success
;
return
true
;
}
}
else
if
(
resultOperation
.
op
.
Equals
(
2
))
{
ReviceOutStoreProcess
(
resultOperation
);
}
else
if
(
resultOperation
.
op
.
Equals
(
5
))
{
humBean
.
ProcessHumidityCMD
(
resultOperation
);
}
else
{
LogUtil
.
error
(
"收到服务器命令:op="
+
resultOperation
.
op
+
",未找到对应处理"
);
}
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
Name
+
"GetPosIdByCode"
+
ex
.
StackTrace
);
}
codeResultType
=
CodeResultType
.
Error
;
return
false
;
}
#
endregion
}
}
source/DeviceLibrary/DeviceLibrary.csproj
查看文件 @
5229fc7
...
@@ -69,13 +69,18 @@
...
@@ -69,13 +69,18 @@
<Reference Include="System.Xml" />
<Reference Include="System.Xml" />
</ItemGroup>
</ItemGroup>
<ItemGroup>
<ItemGroup>
<Compile Include="ACPackingStore\AC_BOX_Bean.cs" />
<Compile Include="PackingStore\AC_BOX_Bean_server_connect.cs" />
<Compile Include="ACPackingStore\AC_BOX_Bean_Partial.cs" />
<Compile Include="PackingStore\AC_BOX_Bean.cs" />
<Compile Include="ACPackingStore\AC_BOX_Bean_Shelf.cs" />
<Compile Include="PackingStore\AC_BOX_Bean_OutStore.cs" />
<Compile Include="ACPackingStore\EnteryDoorBean.cs" />
<Compile Include="PackingStore\AC_BOX_Bean_InStore.cs" />
<Compile Include="ACPackingStore\HumitureBean.cs" />
<Compile Include="PackingStore\AC_BOX_Bean_Partial.cs" />
<Compile Include="ACPackingStore\PackingStoreBean.cs" />
<Compile Include="PackingStore\AC_BOX_Bean_AGV.cs" />
<Compile Include="ACPackingStore\StoreManager.cs" />
<Compile Include="PackingStore\AC_BOX_Bean_ScanCode.cs" />
<Compile Include="PackingStore\AC_BOX_Bean_Shelf.cs" />
<Compile Include="PackingStore\EnteryDoorBean.cs" />
<Compile Include="PackingStore\HumitureBean.cs" />
<Compile Include="PackingStore\PackingStoreBean.cs" />
<Compile Include="PackingStore\StoreManager.cs" />
<Compile Include="agvClient\AgvClient.cs" />
<Compile Include="agvClient\AgvClient.cs" />
<Compile Include="device\halcon\CodeManager.cs" />
<Compile Include="device\halcon\CodeManager.cs" />
<Compile Include="device\IO\AIOBOX\AIOBOXManager.cs" />
<Compile Include="device\IO\AIOBOX\AIOBOXManager.cs" />
...
@@ -96,7 +101,7 @@
...
@@ -96,7 +101,7 @@
<Compile Include="store\InOutParam.cs">
<Compile Include="store\InOutParam.cs">
<SubType>Code</SubType>
<SubType>Code</SubType>
</Compile>
</Compile>
<Compile Include="store\model\
Stor
eMoveInfo.cs">
<Compile Include="store\model\
Devic
eMoveInfo.cs">
<SubType>Code</SubType>
<SubType>Code</SubType>
</Compile>
</Compile>
<Compile Include="store\KTK_Store.cs" />
<Compile Include="store\KTK_Store.cs" />
...
@@ -110,6 +115,10 @@
...
@@ -110,6 +115,10 @@
</Content>
</Content>
</ItemGroup>
</ItemGroup>
<ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\..\CSharp-Workspace\MyProject\DLL\ConfigHelper\ConfigHelper\ConfigHelper.csproj">
<Project>{290182DB-D949-434E-9FF7-C59BDE3F433A}</Project>
<Name>ConfigHelper</Name>
</ProjectReference>
<ProjectReference Include="..\Common\Common.csproj">
<ProjectReference Include="..\Common\Common.csproj">
<Project>{43cdd09e-fcf3-4960-a01d-3bbfe9933122}</Project>
<Project>{43cdd09e-fcf3-4960-a01d-3bbfe9933122}</Project>
<Name>Common</Name>
<Name>Common</Name>
...
...
source/DeviceLibrary/
AC
PackingStore/AC_BOX_Bean.cs
→
source/DeviceLibrary/PackingStore/AC_BOX_Bean.cs
查看文件 @
5229fc7
...
@@ -45,6 +45,11 @@ namespace OnlineStore.DeviceLibrary
...
@@ -45,6 +45,11 @@ namespace OnlineStore.DeviceLibrary
/// </summary>
/// </summary>
public
bool
WaitShelfEnter
=
false
;
public
bool
WaitShelfEnter
=
false
;
private
int
logType
=
1000
;
private
int
logType
=
1000
;
/// <summary>
/// 当前料架编号
/// </summary>
private
string
CurrShelfID
=
""
;
public
AC_BOX_Bean
(
AC_BOX_Config
config
)
public
AC_BOX_Bean
(
AC_BOX_Config
config
)
{
{
Init
();
Init
();
...
@@ -92,8 +97,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -92,8 +97,7 @@ namespace OnlineStore.DeviceLibrary
}
}
}
}
mainTimer
.
Enabled
=
false
;
mainTimer
.
Enabled
=
false
;
int
isAuto
=
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
App_AutoRun
);
if
(
Setting_Init
.
App_AutoRun
)
if
(
isAuto
==
1
)
{
{
mainTimer
.
Enabled
=
true
;
mainTimer
.
Enabled
=
true
;
}
}
...
@@ -266,7 +270,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -266,7 +270,7 @@ namespace OnlineStore.DeviceLibrary
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
2000
));
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
2000
));
LineStop
();
LineStop
();
ACAxisHomeMove
(
Config
.
InOut_Axis
);
ACAxisHomeMove
(
Config
.
InOut_Axis
);
AgvClient
.
SetStatus
(
Config
.
AgvNodeName
,
""
,
""
,
ClientAction
.
None
,
ClientLevel
.
High
,
true
);
setAgvStatus
(
""
,
""
,
ClientAction
.
None
,
ClientLevel
.
High
,
true
);
}
}
/// <summary>
/// <summary>
...
@@ -460,7 +464,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -460,7 +464,7 @@ namespace OnlineStore.DeviceLibrary
/// </summary>
/// </summary>
public
override
void
StopRun
()
public
override
void
StopRun
()
{
{
AgvClient
.
SetStatus
(
Config
.
AgvNodeName
);
setAgvStatus
(
);
lastPosId
=
""
;
lastPosId
=
""
;
lastPosIdStatus
=
StoreStatus
.
StoreOnline
;
lastPosIdStatus
=
StoreStatus
.
StoreOnline
;
WarnMsg
=
""
;
WarnMsg
=
""
;
...
@@ -698,7 +702,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -698,7 +702,7 @@ namespace OnlineStore.DeviceLibrary
}
}
if
(
IsDebug
)
if
(
IsDebug
)
{
{
AgvClient
.
SetStatus
(
Config
.
AgvNodeName
);
setAgvStatus
(
);
}
}
else
else
{
{
...
@@ -836,7 +840,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -836,7 +840,7 @@ namespace OnlineStore.DeviceLibrary
/// </summary>
/// </summary>
public
override
void
StopMove
()
public
override
void
StopMove
()
{
{
AgvClient
.
SetStatus
(
Config
.
AgvNodeName
);
setAgvStatus
(
);
DoorBean
.
Stop
();
DoorBean
.
Stop
();
IOMove
(
IO_Type
.
Axis_Brake
,
IO_VALUE
.
LOW
);
IOMove
(
IO_Type
.
Axis_Brake
,
IO_VALUE
.
LOW
);
MoveInfo
.
EndMove
();
MoveInfo
.
EndMove
();
...
...
source/DeviceLibrary/PackingStore/AC_BOX_Bean_AGV.cs
0 → 100644
查看文件 @
5229fc7
using
Asa
;
using
OnlineStore.Common
;
using
OnlineStore.LoadCSVLibrary
;
using
System
;
using
System.Collections.Concurrent
;
using
System.Collections.Generic
;
using
System.Diagnostics
;
using
System.Linq
;
using
System.Text
;
using
System.Threading
;
using
System.Threading.Tasks
;
namespace
OnlineStore.DeviceLibrary
{
public
partial
class
AC_BOX_Bean
{
/// <summary>
/// 设置出入口AGV状态
/// </summary>
/// <param name="mark"></param>
/// <param name="shelfId"></param>
/// <param name="action"></param>
/// <param name="level"></param>
/// <param name="isMust"></param>
void
setAgvStatus
(
string
mark
=
"0"
,
string
shelfId
=
""
,
ClientAction
action
=
ClientAction
.
None
,
ClientLevel
level
=
ClientLevel
.
Low
,
bool
isMust
=
false
)
{
AgvClient
.
SetStatus
(
Config
.
AgvNodeName
,
mark
,
shelfId
,
action
,
level
,
isMust
);
}
internal
bool
ProcessAGVAction
(
string
name
,
string
rfid
,
ClientAction
action
)
{
string
logN
=
name
+
"收到调度"
+
name
+
"="
+
action
+
",RFID["
+
rfid
+
"]"
;
//Arrive收到后打开门
if
(!
action
.
Equals
(
ClientAction
.
Arrive
))
{
LogUtil
.
info
(
Name
+
logN
+
" ,未找到相关处理"
);
return
false
;
}
//出库处理中不处理
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_03_WaitEmptyAgv
))
{
if
(!
rfid
.
Equals
(
""
))
{
string
mark
=
GetMarkInfo
();
LogUtil
.
error
(
Name
+
logN
+
" 当前 BS_03_WaitEmptyAgv,RFID["
+
rfid
+
"]不是空车,不处理agv,重发 NeedLeave ["
+
mark
+
"]["
+
CurrShelfID
+
"]"
);
Task
.
Factory
.
StartNew
(
new
Action
(()=>
{
setAgvStatus
(
mark
,
CurrShelfID
,
ClientAction
.
MayNot
,
ClientLevel
.
High
,
true
);
Thread
.
Sleep
(
10000
);
setAgvStatus
(
mark
,
CurrShelfID
,
ClientAction
.
NeedLeave
,
ClientLevel
.
High
,
true
);
}));
return
false
;
}
//等待空车到达
LogUtil
.
info
(
Name
+
logN
+
",当前 BS_03_WaitEmptyAgv,正在等待料架到达"
);
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_04_DoorOpen
);
InOutStoreLog
(
"送出料架等待空车,agv到达,打开入料口移门"
);
DoorBean
.
StartOpen
(
MoveInfo
);
return
true
;
}
else
if
(
MoveInfo
.
MoveType
.
Equals
(
StoreMoveType
.
OutStore
)
&&
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_00_ReadyShelf
))
{
if
(
rfid
.
Equals
(
""
))
{
string
mark
=
GetMarkInfo
();
LogUtil
.
error
(
Name
+
logN
+
" 当前出库中 BI_00_ReadyShelf,RFID无效,不处理agv,重发 NeedEnter ["
+
mark
+
"]["
+
MoveInfo
.
MoveParam
.
rfid
+
"]"
);
Task
.
Factory
.
StartNew
(
new
Action
(()
=>
{
setAgvStatus
(
mark
,
CurrShelfID
,
ClientAction
.
MayNot
,
ClientLevel
.
High
,
true
);
Thread
.
Sleep
(
10000
);
setAgvStatus
(
mark
,
MoveInfo
.
MoveParam
.
rfid
,
ClientAction
.
NeedEnter
,
ClientLevel
.
High
,
true
);
}));
return
false
;
}
//出库等待料架到达
LogUtil
.
info
(
Name
+
logN
+
",当前出库中 BI_00_ReadyShelf,正在等待料架到达"
);
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_01_DoorOpen
);
InOutStoreLog
(
"出库等待料架,agv已到达,打开入料口移门"
);
DoorBean
.
StartOpen
(
MoveInfo
);
return
true
;
}
else
if
(
storeRunStatus
.
Equals
(
StoreRunStatus
.
Runing
)
&&
MoveInfo
.
MoveType
.
Equals
(
StoreMoveType
.
None
)
&&
IOValue
(
IO_Type
.
LineTake_Check
).
Equals
(
IO_VALUE
.
LOW
))
{
//agv到达,开始处理
if
(
rfid
.
Equals
(
""
))
{
LogUtil
.
error
(
Name
+
logN
+
" ,RFID无效,不需要入库处理"
);
return
false
;
}
LogUtil
.
info
(
Name
+
logN
+
" ,检测到料架,开始料架入库"
);
StartShelfInStore
();
return
true
;
}
else
{
LogUtil
.
error
(
Name
+
logN
+
" ,["
+
MoveInfo
.
MoveType
+
"]["
+
MoveInfo
.
MoveStep
+
"]未找到相关处理"
);
}
return
false
;
}
}
}
source/DeviceLibrary/PackingStore/AC_BOX_Bean_InStore.cs
0 → 100644
查看文件 @
5229fc7
using
Asa
;
using
OnlineStore.Common
;
using
OnlineStore.LoadCSVLibrary
;
using
System
;
using
System.Collections.Concurrent
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading
;
using
System.Threading.Tasks
;
namespace
OnlineStore.DeviceLibrary
{
partial
class
AC_BOX_Bean
{
private
DateTime
startInStoreTime
=
DateTime
.
Now
;
/// <summary>
/// 入库NG的料架位置
/// </summary>
List
<
string
>
inNGShelfPos
=
new
List
<
string
>();
void
addNGShelfPos
(
string
shelfPos
)
{
inNGShelfPos
.
Add
(
shelfPos
);
}
/// <summary>
/// 清空料架NG位置信息
/// </summary>
void
clearNGShelfPos
()
{
inNGShelfPos
.
Clear
();
LogInfo
(
"清空料架NG位置信息"
);
}
string
getNGShelfPos
()
{
return
string
.
Join
(
","
,
inNGShelfPos
);
}
/// <summary>
/// 是否是入库NG料架
/// </summary>
/// <returns></returns>
bool
isNGShelf
()
{
return
inNGShelfPos
.
Count
>
0
;
}
/// <summary>
/// 清空最后一盘的信息
/// </summary>
private
void
ClearLastTrayInfo
()
{
LastScanCodes
=
new
List
<
string
>();
ComTargetPosition
=
0
;
LastWidth
=
0
;
LastHeight
=
0
;
}
/// <summary>
/// 开始单盘入库
/// </summary>
public
override
void
StartInStoreMove
(
InOutParam
param
)
{
startInStoreTime
=
DateTime
.
Now
;
string
posId
=
param
!=
null
?
param
.
PosID
:
""
;
if
(
isInSuddenDown
||
isNoAirCheck
||
(!
storeRunStatus
.
Equals
(
StoreRunStatus
.
Runing
))
||
(!
MoveInfo
.
MoveType
.
Equals
(
StoreMoveType
.
None
)))
{
LogUtil
.
error
(
Name
+
" 启动出库出错,忙碌或报警中 ,storeStatus="
+
storeRunStatus
+
",MoveType="
+
MoveInfo
.
MoveType
+
",isInSuddenDown="
+
isInSuddenDown
+
",isNoAirCheck"
+
isNoAirCheck
);
return
;
}
if
(!
StoreManager
.
LoadInoutParam
(
param
,
true
,
this
))
{
LogUtil
.
error
(
Name
+
" 启动入库【"
+
param
.
ToStr
()
+
"】出错,找不到库位信息"
);
return
;
}
InOutStoreLog
(
" 启动入库【"
+
param
.
ToStr
()
+
"】,压紧点P2【"
+
param
.
MoveP
.
ComPress_P2
+
"】压紧前点P3【"
+
param
.
MoveP
.
ComPress_P3
+
"】"
);
setStatus
(
StoreRunStatus
.
Busy
,
StoreStatus
.
InStoreExecute
);
MoveInfo
.
NewMove
(
StoreMoveType
.
InStore
,
param
);
//新的料架库位
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_11_InoutToP1
);
MoveInfo
.
SingleInstore
=
true
;
InOutStoreLog
(
"料架取料: 叉子后退到待机点P1, 重置盘信息"
);
ACAxisMove
(
Config
.
InOut_Axis
,
Config
.
InOutAxis_P1_Position
,
Config
.
InOutAxis_P1_Speed
);
ClearLastTrayInfo
();
//LastRfidID = "";
LastOutParam
=
new
InOutParam
();
}
private
void
GetPosId
()
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_30_SetInstoreParam
);
InOutStoreLog
(
"不扫码 : 获取库位号"
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
10000
));
if
(
MoveInfo
.
IsShelfLocked
)
{
bool
result
=
GetPosIdByCode
();
if
(!
result
)
//获取库位失败
{
MoveInfo
.
MoveParam
.
PosID
=
""
;
StartSendTray
(
"锁定库位:获取入库库位失败"
);
}
else
{
MoveInfo
.
EndStepWait
();
}
}
}
private
void
StartMoveToBag
()
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_51_MoveToBag
);
InOutStoreLog
(
"到库位点,旋转轴至P2( 库位点)轴2(上下) 至P3(库位入库前点)"
);
ACAxisMove
(
Config
.
Middle_Axis
,
MoveInfo
.
MoveParam
.
MoveP
.
Middle_P2
,
Config
.
MiddleAxis_P2_Speed
);
ACAxisMove
(
Config
.
UpDown_Axis
,
MoveInfo
.
MoveParam
.
MoveP
.
UpDown_P3
,
Config
.
UpDownAxis_P3_Speed
);
}
/// <summary>
/// 入库失败料盘处理
/// </summary>
/// <param name="str"></param>
private
void
StartSendTray
(
string
str
=
"扫码失败"
)
{
StartMoveTrayBack
(
str
);
//MoveInfo.NextMoveStep(StoreMoveStep.BI_71_ToNGDoor);
//InOutStoreLog("NG料,升降轴到NG门口高点P12,旋转轴到NG门口P11");
////if(MoveInfo.IsShelfLocked)//锁定料架,扫码失败则清除当前位置
//{
// StoreManager.ClearLockLoc(Name, CurrShelfID, MoveInfo.currShelfIndex);
//}
//ACAxisMove(Config.UpDown_Axis, MoveInfo.MoveParam.MoveP.UpDown_P12, Config.UpDownAxis_P1_Speed);
//ACAxisMove(Config.Middle_Axis, MoveInfo.MoveParam.MoveP.Middle_P11, Config.MiddleAxis_P1_Speed);
}
/// <summary>
/// 将料盘送回原位
/// </summary>
/// <param name="str"></param>
private
void
StartMoveTrayBack
(
string
str
=
"料盘不属于该仓库"
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_10_ToShelfPosition
);
addNGShelfPos
(
MoveInfo
.
MoveParam
.
CurShelfPosID
);
InOutStoreLog
(
$
"送出料盘 :{str} ,走到料架位置,旋转轴至P101,升降轴至P102"
);
ACAxisMove
(
Config
.
UpDown_Axis
,
MoveInfo
.
MoveParam
.
MoveP
.
UpDown_HP102
,
Config
.
UpDownAxis_P102_Speed
);
ACAxisMove
(
Config
.
Middle_Axis
,
MoveInfo
.
MoveParam
.
MoveP
.
Middle_P101
,
Config
.
MiddleAxis_P101_Speed
);
}
protected
override
void
InStoreProcess
()
{
LineMoveP
moveP
=
MoveInfo
.
MoveParam
.
MoveP
;
if
(
MoveInfo
.
IsInWait
)
{
CheckWait
();
}
if
(
MoveInfo
.
IsInWait
)
{
return
;
}
#
region
料架取料盘扫码获取
POSID
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_10_StartGetTray
))
{
if
(
MoveInfo
.
IsShelfLocked
)
{
if
(
MoveInfo
.
NextLockedShelfPos
())
{
//新的料架库位
startInStoreTime
=
DateTime
.
Now
;
MoveInfo
.
SingleInstore
=
false
;
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_11_InoutToP1
);
InOutStoreLog
(
"料架取料,叉子后退到待机点P1, 重置盘信息"
);
ACAxisMove
(
Config
.
InOut_Axis
,
Config
.
InOutAxis_P1_Position
,
Config
.
InOutAxis_P1_Speed
);
ClearLastTrayInfo
();
}
else
{
//所有料盘已取料完成,送出料架
StartShelfOut
();
}
}
else
{
if
(
MoveInfo
.
NextShelfPos
())
{
//新的料架库位
startInStoreTime
=
DateTime
.
Now
;
MoveInfo
.
SingleInstore
=
false
;
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_11_InoutToP1
);
InOutStoreLog
(
"料架取料,叉子后退到待机点P1, 重置盘信息"
);
ACAxisMove
(
Config
.
InOut_Axis
,
Config
.
InOutAxis_P1_Position
,
Config
.
InOutAxis_P1_Speed
);
ClearLastTrayInfo
();
}
else
{
//所有料盘已取料完成,送出料架
StartShelfOut
();
}
}
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_11_InoutToP1
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_12_MoveToShelf
);
InOutStoreLog
(
"料架取料,升降轴到P101低点["
+
moveP
.
UpDown_LP101
+
"],旋转轴到P101点["
+
moveP
.
Middle_P101
+
"],压紧轴到压紧前点p3["
+
Config
.
CompAxis_Max_P3
+
"]"
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_LP101
,
Config
.
UpDownAxis_P102_Speed
);
ACAxisMove
(
Config
.
Middle_Axis
,
moveP
.
Middle_P101
,
Config
.
MiddleAxis_P101_Speed
);
ACAxisMove
(
Config
.
Comp_Axis
,
Config
.
CompAxis_Max_P3
,
Config
.
CompAxis_P3_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_12_MoveToShelf
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_13_InoutToP101
);
InOutStoreLog
(
"料架取料,叉子前进到P101点["
+
moveP
.
InOut_P101
+
"]"
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P101
,
Config
.
InOutAxis_P101_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_13_InoutToP101
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_14_UpdownToP102
);
InOutStoreLog
(
"料架取料,升降轴上升到P102点["
+
moveP
.
UpDown_HP102
+
"]"
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_HP102
,
Config
.
UpDownAxis_P101_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_14_UpdownToP102
))
{
if
(
MoveInfo
.
SingleInstore
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_16_ComDownMove
);
InOutStoreLog
(
"单盘入库,料架取料,压紧轴走到压紧点P2: "
+
MoveInfo
.
MoveParam
.
MoveP
.
ComPress_P2
);
ACAxisMove
(
Config
.
Comp_Axis
,
MoveInfo
.
MoveParam
.
MoveP
.
ComPress_P2
,
Config
.
CompAxis_P2_Speed
);
}
else
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_15_StartCompress
);
InOutStoreLog
(
"料架取料,压紧轴开始缓慢压紧到P4 :"
+
Config
.
CompAxis_P4_Position
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitComAxis
(
Config
.
Comp_Axis
,
Config
.
CompAxis_P4_Position
,
Config
.
CompAxis_P4_Speed
));
Config
.
Comp_Axis
.
TargetPosition
=
Config
.
CompAxis_P4_Position
;
ACServerManager
.
AbsMove
(
Config
.
Comp_Axis
.
DeviceName
,
Config
.
Comp_Axis
.
GetAxisValue
(),
Config
.
CompAxis_P4_Position
,
Config
.
CompAxis_P4_Speed
);
ComAxisStartCheck
();
}
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_15_StartCompress
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_16_ComDownMove
);
int
currPosition
=
ACServerManager
.
GetActualtPosition
(
Config
.
Comp_Axis
);
ComTargetPosition
=
currPosition
;
int
targetP
=
currPosition
+
Config
.
CompAxis_Down_Position
;
LastHeight
=
Config
.
GetComP2PlateH
(
targetP
);
MoveInfo
.
MoveParam
.
MoveP
.
ComPress_P2
=
targetP
;
MoveInfo
.
MoveParam
.
MoveP
.
ComPress_P3
=
targetP
+
Config
.
CompAxis_P3_P2_Value
;
InOutStoreLog
(
"料架取料,检测到Compress_Check,盘高【"
+
LastHeight
+
"】,向下压紧 ["
+
Config
.
CompAxis_Down_Position
+
"] 目标 ["
+
targetP
+
"]记录ComP2["
+
targetP
+
"]ComP3["
+
MoveInfo
.
MoveParam
.
MoveP
.
ComPress_P3
+
"]"
);
ACAxisMove
(
Config
.
Comp_Axis
,
targetP
,
Config
.
CompAxis_P1_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_16_ComDownMove
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_17_InoutBack
);
InOutStoreLog
(
"料架取料,叉子后退到扫码点"
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P1
,
Config
.
CompAxis_P1_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_17_InoutBack
))
{
if
(
MoveInfo
.
SingleInstore
)
{
//单盘入库,不需要扫码
StartMoveToBag
();
}
else
if
(
MoveInfo
.
IsShelfLocked
&&
!
IsScanCodeWithLockedShelf
)
{
//该料架已锁定库位,不需要扫码,直接查询服务器
GetPosId
();
}
else
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_21_ToScanPosition
);
InOutStoreLog
(
"扫码,升降轴到P2,旋转轴到P1"
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_P2
,
Config
.
UpDownAxis_P1_Speed
);
ACAxisMove
(
Config
.
Middle_Axis
,
moveP
.
Middle_P1
,
Config
.
MiddleAxis_P1_Speed
);
}
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_21_ToScanPosition
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_22_InOutToP2
);
InOutStoreLog
(
"扫码,进出轴到P2"
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P2
,
Config
.
InOutAxis_P2_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_22_InOutToP2
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_23_PutTrayDown
);
InOutStoreLog
(
"扫码,升降轴到扫码低点P1,压紧轴到压紧前点P3"
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_P1
,
Config
.
UpDownAxis_P2_Speed
);
ACAxisMove
(
Config
.
Comp_Axis
,
moveP
.
ComPress_P3
,
Config
.
CompAxis_P3_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_23_PutTrayDown
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_24_InOutToP1
);
InOutStoreLog
(
"扫码,进出轴返回待机点P1"
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P1
,
Config
.
CompAxis_P1_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_24_InOutToP1
))
{
IO_VALUE
io1
=
IOValue
(
IO_Type
.
TrayCheck_1
);
IO_VALUE
io2
=
IOValue
(
IO_Type
.
TrayCheck_2
);
IO_VALUE
io3
=
IOValue
(
IO_Type
.
TrayCheck_3
);
IO_VALUE
io4
=
IOValue
(
IO_Type
.
TrayCheck_4
);
if
(
io3
.
Equals
(
IO_VALUE
.
HIGH
)
||
io4
.
Equals
(
IO_VALUE
.
HIGH
))
{
LastWidth
=
15
;
}
else
if
(
io1
.
Equals
(
IO_VALUE
.
HIGH
)
||
io2
.
Equals
(
IO_VALUE
.
HIGH
))
{
LastWidth
=
7
;
}
else
{
LastWidth
=
0
;
LogUtil
.
error
(
"未检测到识别区料盘检测信号, 设置默认宽度=0"
);
}
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_25_ScanCode
);
InOutStoreLog
(
"扫码,料盘识别 ["
+
io1
+
"] ["
+
io2
+
"] ["
+
io3
+
"] ["
+
io4
+
"] ,宽度【"
+
LastWidth
+
"】,开始扫码"
);
MoveInfo
.
OneWaitCanEndStep
=
true
;
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
12000
));
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitCode
());
Task
.
Factory
.
StartNew
(
delegate
{
IOMove
(
IO_Type
.
Camera_Led
,
IO_VALUE
.
HIGH
);
LastScanCodes
=
CodeManager
.
CameraScan
(
Config
.
GetCameraList
(),
Name
);
if
(
LastScanCodes
.
Count
<=
0
)
{
Thread
.
Sleep
(
1
);
LastScanCodes
=
CodeManager
.
CameraScan
(
Config
.
GetCameraList
(),
Name
);
}
IOMove
(
IO_Type
.
Camera_Led
,
IO_VALUE
.
LOW
);
});
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_25_ScanCode
))
{
if
(
LastScanCodes
.
Count
<=
0
&&
LastWidth
.
Equals
(
0
)
&&
LastHeight
.
Equals
(
8
))
{
storeStatus
=
StoreStatus
.
InStoreExecute
;
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_10_StartGetTray
);
InOutStoreLog
(
"扫码,扫码失败,尺寸"
+
LastWidth
+
"*"
+
LastHeight
+
",认为没拿到料盘,继续循环料架取料盘"
);
}
else
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_27_InoutToP2
);
InOutStoreLog
(
"扫码,进出轴到P2"
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P2
,
Config
.
InOutAxis_P2_Speed
);
}
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_27_InoutToP2
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_28_GetScanPTray
);
InOutStoreLog
(
"扫码,升降轴到扫码高P2,压紧轴到压紧点P2"
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_P2
,
Config
.
UpDownAxis_P2_Speed
);
ACAxisMove
(
Config
.
Comp_Axis
,
moveP
.
ComPress_P2
,
Config
.
CompAxis_P2_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_28_GetScanPTray
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_29_InoutBackP1
);
InOutStoreLog
(
"扫码,进出轴返回"
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P1
,
Config
.
InOutAxis_P1_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_29_InoutBackP1
))
{
if
(
LastScanCodes
.
Count
<=
0
)
{
StartSendTray
();
}
else
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_30_SetInstoreParam
);
InOutStoreLog
(
"扫码 ,获取库位号"
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
((
int
)
TimeSpan
.
FromMinutes
(
75
).
TotalMilliseconds
));
bool
result
=
GetPosIdByCode
(
MoveInfo
.
currShelfIndex
,
out
CodeResultType
codeResult
);
if
(!
result
)
//获取库位失败
{
if
(
codeResult
==
CodeResultType
.
NotPosForPutIn
)
//库位不在该料仓,将该料盘放回料架
{
//MoveInfo.MoveParam.PosID = "";
StartMoveTrayBack
(
"此料盘不属于该仓库,放回料架"
);
}
else
//无法获取库位信息
{
MoveInfo
.
MoveParam
.
PosID
=
""
;
StartSendTray
(
"获取入库库位失败"
);
}
}
else
{
MoveInfo
.
EndStepWait
();
}
}
}
#
endregion
#
region
入库逻辑
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_30_SetInstoreParam
))
{
StartMoveToBag
();
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_51_MoveToBag
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_52_DeviceToBag
);
InOutStoreLog
(
"叉子进入库位中,进出轴到库位P3"
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P3
,
Config
.
InOutAxis_P3_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_52_DeviceToBag
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_53_PutWareToBag
);
InOutStoreLog
(
"放下物品,升降轴到库位缓冲点P4,压紧轴到P3"
);
// 5= 入仓位完成(料仓Box把料盘放入对应的库位中,装置还未恢复原始状态)
string
posId
=
MoveInfo
.
MoveParam
!=
null
?
MoveInfo
.
MoveParam
.
PosID
:
""
;
lastPosId
=
posId
;
lastPosIdStatus
=
StoreStatus
.
InStoreEnd
;
storeStatus
=
StoreStatus
.
InStoreEnd
;
//手动发给服务器状态,防止没有手动
//SendLineStatus(StoreID, posId, StoreStatus.InStoreEnd);
ACAxisMove
(
Config
.
Comp_Axis
,
moveP
.
ComPress_P3
,
Config
.
CompAxis_P3_Speed
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_P4
,
Config
.
UpDownAxis_P4_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_53_PutWareToBag
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_54_DeviceBackFromBag
);
InOutStoreLog
(
"叉子从库位中返回,进出轴到P1"
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P1
,
Config
.
InOutAxis_P1_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_54_DeviceBackFromBag
))
{
if
(
MoveInfo
.
SingleInstore
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_55_GoBack
);
InOutStoreLog
(
"返回待机点,轴2/轴1/轴4动作至P1( 待机点))开始"
);
ACAxisMove
(
Config
.
Comp_Axis
,
moveP
.
ComPress_P1
,
Config
.
CompAxis_P1_Speed
);
ACAxisMove
(
Config
.
Middle_Axis
,
moveP
.
Middle_P1
,
Config
.
MiddleAxis_P1_Speed
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_P1
,
Config
.
UpDownAxis_P1_Speed
);
}
else
{
TimeSpan
span
=
DateTime
.
Now
-
startInStoreTime
;
storeStatus
=
StoreStatus
.
InStoreExecute
;
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_10_StartGetTray
);
InOutStoreLog
(
"料架入库,上一盘入库结束, 耗时【"
+
FormUtil
.
GetSpanStr
(
span
)
+
"】,旋转轴返回待机点,继续循环料架取料盘"
);
ACAxisMove
(
Config
.
Middle_Axis
,
moveP
.
Middle_P1
,
Config
.
MiddleAxis_P1_Speed
);
}
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_55_GoBack
))
{
TimeSpan
span
=
DateTime
.
Now
-
startInStoreTime
;
StoreManager
.
ClearLockLoc
(
Name
,
CurrShelfID
,
MoveInfo
.
currShelfIndex
);
if
(
MoveInfo
.
SingleInstore
)
{
string
posId
=
MoveInfo
.
MoveParam
!=
null
?
MoveInfo
.
MoveParam
.
PosID
:
""
;
InOutStoreLog
(
" 【"
+
posId
+
"】单盘入库结束,耗时【"
+
FormUtil
.
GetSpanStr
(
span
)
+
"】!"
);
MoveEndToRuningStatus
();
AutoInout
.
InOutEndProcess
(
this
,
StoreMoveType
.
InStore
);
}
else
{
storeStatus
=
StoreStatus
.
InStoreExecute
;
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_10_StartGetTray
);
InOutStoreLog
(
"料架入库,上一盘入库结束, 耗时【"
+
FormUtil
.
GetSpanStr
(
span
)
+
"】继续循环料架取料盘"
);
}
}
#
endregion
#
region
把料盘送到
NG
口逻辑
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_71_ToNGDoor
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_72_NGDoorUp
);
InOutStoreLog
(
"NG料,NG升降门上升"
);
CylinderMove
(
MoveInfo
,
IO_Type
.
NGDoorCylinder_Down
,
IO_Type
.
NGDoowCylinder_Up
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_72_NGDoorUp
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_73_InoutToNGDoor
);
InOutStoreLog
(
"NG料,进出轴到NG料门口位置P11"
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P11
,
Config
.
InOutAxis_P2_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_73_InoutToNGDoor
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_74_UpdownDown
);
InOutStoreLog
(
"NG料,升降轴到P11,压紧轴到P3,放下料盘"
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_P11
,
Config
.
UpDownAxis_P2_Speed
);
ACAxisMove
(
Config
.
Comp_Axis
,
moveP
.
ComPress_P3
,
Config
.
CompAxis_P3_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_74_UpdownDown
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_75_InoutToP1
);
InOutStoreLog
(
"NG料,叉子后退到P1"
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P1
,
Config
.
InOutAxis_P1_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_75_InoutToP1
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_76_NGDoorDown
);
InOutStoreLog
(
"NG料,关门NG料门,送出料盘结束"
);
CylinderMove
(
MoveInfo
,
IO_Type
.
NGDoowCylinder_Up
,
IO_Type
.
NGDoorCylinder_Down
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_76_NGDoorDown
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_77_NGLineRun
);
InOutStoreLog
(
"料架入库,NG流水线转动30s"
);
IOMove
(
IO_Type
.
NGLine_BackRun
,
IO_VALUE
.
LOW
);
IOMove
(
IO_Type
.
NGLine_Run
,
IO_VALUE
.
HIGH
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
30000
));
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_77_NGLineRun
))
{
IOMove
(
IO_Type
.
NGLine_Run
,
IO_VALUE
.
LOW
);
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_10_StartGetTray
);
InOutStoreLog
(
"料架入库,停止NG线体转动,继续循环料架取料盘"
);
}
#
endregion
#
region
把料盘送回料架逻辑
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_10_ToShelfPosition
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_11_ToShelf
);
InOutStoreLog
(
"送出料盘,叉子进出料口,进出轴至P101"
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P101
,
Config
.
InOutAxis_P101_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_11_ToShelf
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_12_PutReel
);
InOutStoreLog
(
"送出料盘,放下物品,压紧轴到P1,升降轴至P101,清空 taskData=null "
);
ACAxisMove
(
Config
.
Comp_Axis
,
moveP
.
ComPress_P1
,
Config
.
CompAxis_P1_Speed
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_LP101
,
Config
.
UpDownAxis_P101_Speed
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
1000
));
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_12_PutReel
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_13_InoutBack
);
InOutStoreLog
(
"送出料盘,叉子从出料口返回, 进出轴到P1 "
);
InOutBackToP1
(
moveP
.
InOut_P1
);
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_13_InoutBack
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_10_StartGetTray
);
InOutStoreLog
(
"送出料盘结束,升降轴返回,升降轴到P1,顶升下降,继续循环料架取料盘"
);
// ACAxisMove(Config.UpDown_Axis, moveP.UpDown_P1, Config.UpDownAxis_P1_Speed);
}
#
endregion
//料架进入逻辑
else
if
(
MoveInfo
.
MoveStep
<
StoreMoveStep
.
BI_10_StartGetTray
)
{
ShelfEnterProcess
();
}
//料架送出逻辑
else
if
(
MoveInfo
.
MoveStep
>=
StoreMoveStep
.
BS_01_TopDown
)
{
ShelfOutProcess
();
}
else
{
InOutStoreLog
(
"没有对应的处理!"
);
}
}
}
}
source/DeviceLibrary/PackingStore/AC_BOX_Bean_OutStore.cs
0 → 100644
查看文件 @
5229fc7
using
Asa
;
using
log4net.Core
;
using
OnlineStore.Common
;
using
OnlineStore.LoadCSVLibrary
;
using
System
;
using
System.Collections.Concurrent
;
using
System.Collections.Generic
;
using
System.Diagnostics.Eventing.Reader
;
using
System.Linq
;
using
System.Text
;
using
System.Threading
;
using
System.Threading.Tasks
;
namespace
OnlineStore.DeviceLibrary
{
partial
class
AC_BOX_Bean
{
private
DateTime
startOutStoreTime
=
DateTime
.
Now
;
public
bool
IsIgnoreComSig
=
false
;
//忽略料叉压紧信号
private
void
StartExecuctOut
(
InOutParam
param
)
{
bool
result
;
result
=
StartOutStoreMove
(
param
);
if
(!
result
)
{
LogInfo
(
" 执行出库【"
+
param
.
ToStr
()
+
"】失败,加入等待队列"
);
waitOutStoreList
.
Enqueue
(
param
);
}
}
/// <summary>
/// 开始出库运动
/// </summary>
public
override
bool
StartOutStoreMove
(
InOutParam
param
)
{
startOutStoreTime
=
DateTime
.
Now
;
if
(!
canOutStore
(
out
string
msg
))
{
LogError
(
" 启动出库【"
+
param
.
ToStr
()
+
"】失败:"
+
msg
);
return
false
;
}
if
(!
StoreManager
.
LoadInoutParam
(
param
,
false
,
this
))
{
LogError
(
" 启动出库【"
+
param
.
ToStr
()
+
"】出错,找不到库位信息"
);
return
false
;
}
taskData
=
null
;
setStatus
(
StoreRunStatus
.
Busy
,
StoreStatus
.
OutStoreExecute
);
MoveInfo
.
NewMove
(
StoreMoveType
.
OutStore
,
param
);
LogInfo
(
"启动出库【"
+
param
.
ToStr
()
+
"】 "
);
//出库前shelfPosID需要固定,出库时根据rfid判断是否需要出入料架
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_01_InoutBack
);
InOutStoreLog
(
"进出轴到P1 开始"
);
InOutBackToP1
(
MoveInfo
.
MoveParam
.
MoveP
.
InOut_P1
);
return
true
;
}
private
void
SO_03_ToBagPosition
()
{
LineMoveP
movep
=
MoveInfo
.
MoveParam
.
MoveP
;
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_03_ToPosition
);
InOutStoreLog
(
"走到库位,压紧轴至P3["
+
movep
.
ComPress_P3
+
"] ,旋转轴至P2["
+
movep
.
Middle_P2
+
"],升降轴至P5["
+
movep
.
UpDown_P5
+
"] ,顶升上升"
);
ACAxisMove
(
Config
.
Comp_Axis
,
movep
.
ComPress_P3
,
Config
.
CompAxis_P3_Speed
);
ACAxisMove
(
Config
.
Middle_Axis
,
movep
.
Middle_P2
,
Config
.
MiddleAxis_P2_Speed
);
ACAxisMove
(
Config
.
UpDown_Axis
,
movep
.
UpDown_P5
,
Config
.
UpDownAxis_P5_Speed
);
CylinderMove
(
MoveInfo
,
IO_Type
.
TopCylinder_Down
,
IO_Type
.
TopCylinder_Up
);
}
protected
override
void
OutStoreProcess
()
{
LineMoveP
moveP
=
MoveInfo
.
MoveParam
.
MoveP
;
if
(
MoveInfo
.
IsInWait
)
{
CheckWait
();
}
if
(
MoveInfo
.
IsInWait
)
{
return
;
}
#
region
关闭
把紧急料盘送到
NG
料箱逻辑
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_15_ToUrgentDoor
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_16_UrgentDoorUp
);
InOutStoreLog
(
"紧急料 升降门上升"
);
CylinderMove
(
MoveInfo
,
IO_Type
.
NGDoorCylinder_Down
,
IO_Type
.
NGDoowCylinder_Up
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_16_UrgentDoorUp
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_17_InoutToUrgentDoor
);
InOutStoreLog
(
"紧急料 进出轴到升降门口位置P11"
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P11
,
Config
.
InOutAxis_P2_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_17_InoutToUrgentDoor
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_18_UpdownDown
);
InOutStoreLog
(
"紧急料 升降轴到P11,压紧轴到P3,放下料盘"
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_P11
,
Config
.
UpDownAxis_P2_Speed
);
ACAxisMove
(
Config
.
Comp_Axis
,
moveP
.
ComPress_P3
,
Config
.
CompAxis_P3_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_18_UpdownDown
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_19_InoutToP1
);
InOutStoreLog
(
"紧急料 叉子后退到P1"
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P1
,
Config
.
InOutAxis_P1_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_19_InoutToP1
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_20_UrgentDoorDown
);
InOutStoreLog
(
"紧急料 关闭升降门,送出料盘结束"
);
CylinderMove
(
MoveInfo
,
IO_Type
.
NGDoowCylinder_Up
,
IO_Type
.
NGDoorCylinder_Down
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
1000
));
taskData
=
null
;
Task
.
Factory
.
StartNew
(
delegate
{
int
posLoc
=
StoreManager
.
GetShelfPosIndex
(
MoveInfo
.
MoveParam
.
CurShelfPosID
,
ShelfPosList
);
//紧急料发PutFinished
if
(
MoveInfo
.
MoveParam
.
urgentReel
)
{
string
msg
=
StoreManager
.
afterPutCut
(
Name
,
"1000A"
,
MoveInfo
.
MoveParam
.
WareCode
,
CID
,
1
,
out
taskData
);
if
(
String
.
IsNullOrEmpty
(
msg
).
Equals
(
false
))
{
LogUtil
.
error
(
Name
+
"["
+
MoveInfo
.
MoveParam
.
WareCode
+
"] ["
+
"1000A"
+
"_"
+
GetLastRfid
()
+
"] ["
+
1
+
"] afterPutCut 结果:"
+
msg
);
}
}
});
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_20_UrgentDoorDown
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_21_UrgentLineRun
);
InOutStoreLog
(
"紧急料出库 流水线转动30s"
);
IOMove
(
IO_Type
.
NGLine_Run
,
IO_VALUE
.
LOW
);
IOMove
(
IO_Type
.
NGLine_BackRun
,
IO_VALUE
.
HIGH
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
30000
));
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_21_UrgentLineRun
))
{
IOMove
(
IO_Type
.
NGLine_BackRun
,
IO_VALUE
.
LOW
);
InOutStoreLog
(
"紧急料出库 停止紧急料线体转动"
);
bool
isFinish
=
false
;
if
(
MoveInfo
.
MoveParam
.
urgentReel
)
{
if
(
taskData
!=
null
&&
taskData
.
urgentPackageTask
<=
0
)
{
InOutStoreLog
(
"紧急料出库完成,urgentPackageTask="
+
taskData
.
urgentPackageTask
+
""
);
isFinish
=
true
;
}
else
if
(
taskData
==
null
)
{
InOutStoreLog
(
"紧急料出库完成,taskData=null"
);
isFinish
=
true
;
}
}
if
(!
isFinish
)
{
TimeSpan
span
=
DateTime
.
Now
-
startOutStoreTime
;
string
posId
=
MoveInfo
.
MoveParam
!=
null
?
MoveInfo
.
MoveParam
.
PosID
:
""
;
storeStatus
=
StoreStatus
.
StoreOnline
;
InOutStoreLog
(
" 【"
+
posId
+
"】 "
+
" 紧急料出库结束,耗时【"
+
FormUtil
.
GetSpanStr
(
span
)
+
"】!"
);
if
(
StoreManager
.
Store
.
AutoShelfInstore
)
{
InOutStoreLog
(
"紧急料还有出库任务,设置 AutoShelfInstore = false"
);
Setting_Init
.
AutoShelfInstore
=
false
;
StoreManager
.
Store
.
AutoShelfInstore
=
false
;
}
}
else
{
CylinderMove
(
MoveInfo
,
IO_Type
.
TopCylinder_Up
,
IO_Type
.
TopCylinder_Down
);
}
MoveEndToRuningStatus
();
AutoInout
.
InOutEndProcess
(
this
,
StoreMoveType
.
OutStore
);
}
#
endregion
#
region
出库料架检查
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_PreCheck_01_StartGetTray
))
{
if
(
MoveInfo
.
NextShelfPos
())
{
//新的料架库位
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_PreCheck_02_InoutToP1
);
InOutStoreLog
(
"料架取料,叉子后退到待机点P1, 重置盘信息"
);
ACAxisMove
(
Config
.
InOut_Axis
,
Config
.
InOutAxis_P1_Position
,
Config
.
InOutAxis_P1_Speed
);
ClearLastTrayInfo
();
}
else
{
//所有位置已检查完,准备出库
MoveInfo
.
currShelfIndex
=
-
1
;
//恢复当前需要出库的位置
MoveInfo
.
MoveParam
.
RestoreShelfPosId
();
SO_03_ToBagPosition
();
}
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_PreCheck_02_InoutToP1
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_PreCheck_03_MoveToShelf
);
InOutStoreLog
(
"料架取料,升降轴到P101低点["
+
moveP
.
UpDown_LP101
+
"],旋转轴到P101点["
+
moveP
.
Middle_P101
+
"],压紧轴到压紧前点p3["
+
Config
.
CompAxis_Max_P3
+
"]"
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_LP101
,
Config
.
UpDownAxis_P102_Speed
);
ACAxisMove
(
Config
.
Middle_Axis
,
moveP
.
Middle_P101
,
Config
.
MiddleAxis_P101_Speed
);
ACAxisMove
(
Config
.
Comp_Axis
,
Config
.
CompAxis_Max_P3
,
Config
.
CompAxis_P3_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_PreCheck_03_MoveToShelf
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_PreCheck_04_InoutToP101
);
InOutStoreLog
(
"料架取料,叉子前进到P101点["
+
moveP
.
InOut_P101
+
"]"
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P101
,
Config
.
InOutAxis_P101_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_PreCheck_04_InoutToP101
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_PreCheck_05_UpdownToP102
);
InOutStoreLog
(
"料架取料,升降轴上升到P102点["
+
moveP
.
UpDown_HP102
+
"]"
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_HP102
,
Config
.
UpDownAxis_P101_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_PreCheck_05_UpdownToP102
))
{
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_PreCheck_06_StartCompress
);
InOutStoreLog
(
"料架取料,压紧轴开始缓慢压紧到P4 :"
+
Config
.
CompAxis_P4_Position
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitComAxis
(
Config
.
Comp_Axis
,
Config
.
CompAxis_P4_Position
,
Config
.
CompAxis_P4_Speed
));
Config
.
Comp_Axis
.
TargetPosition
=
Config
.
CompAxis_P4_Position
;
ACServerManager
.
AbsMove
(
Config
.
Comp_Axis
.
DeviceName
,
Config
.
Comp_Axis
.
GetAxisValue
(),
Config
.
CompAxis_P4_Position
,
Config
.
CompAxis_P4_Speed
);
//ComAxisStartCheck();
}
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_PreCheck_06_StartCompress
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_PreCheck_07_ComDownMove
);
int
currPosition
=
ACServerManager
.
GetActualtPosition
(
Config
.
Comp_Axis
);
ComTargetPosition
=
currPosition
;
int
targetP
=
currPosition
+
Config
.
CompAxis_Down_Position
;
LastHeight
=
Config
.
GetComP2PlateH
(
targetP
);
MoveInfo
.
MoveParam
.
MoveP
.
ComPress_P2
=
targetP
;
MoveInfo
.
MoveParam
.
MoveP
.
ComPress_P3
=
targetP
+
Config
.
CompAxis_P3_P2_Value
;
InOutStoreLog
(
"料架取料,检测到Compress_Check,盘高【"
+
LastHeight
+
"】,向下压紧 ["
+
Config
.
CompAxis_Down_Position
+
"] 目标 ["
+
targetP
+
"]记录ComP2["
+
targetP
+
"]ComP3["
+
MoveInfo
.
MoveParam
.
MoveP
.
ComPress_P3
+
"]"
);
ACAxisMove
(
Config
.
Comp_Axis
,
targetP
,
Config
.
CompAxis_P1_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_PreCheck_07_ComDownMove
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_PreCheck_08_InoutBack
);
InOutStoreLog
(
"料架取料,叉子后退到扫码点"
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P1
,
Config
.
CompAxis_P1_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_PreCheck_08_InoutBack
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_PreCheck_14_GetCheckResult
);
//{
// MoveInfo.NextMoveStep(StoreMoveStep.SO_PreCheck_09_ToScanPosition);
// InOutStoreLog("检测治具,升降轴到P2,旋转轴到P1");
// ACAxisMove(Config.UpDown_Axis, moveP.UpDown_P2, Config.UpDownAxis_P1_Speed);
// ACAxisMove(Config.Middle_Axis, moveP.Middle_P1, Config.MiddleAxis_P1_Speed);
//}
}
#
region
无需到相机拍照位
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_PreCheck_09_ToScanPosition
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_PreCheck_10_InOutToP2
);
InOutStoreLog
(
"检测治具,进出轴到P2"
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P2
,
Config
.
InOutAxis_P2_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_PreCheck_10_InOutToP2
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_PreCheck_11_PutTrayDown
);
InOutStoreLog
(
"检测治具,升降轴到扫码低点P1,压紧轴到压紧前点P3"
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_P1
,
Config
.
UpDownAxis_P2_Speed
);
ACAxisMove
(
Config
.
Comp_Axis
,
moveP
.
ComPress_P3
,
Config
.
CompAxis_P3_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_PreCheck_11_PutTrayDown
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_PreCheck_12_InOutToP1
);
InOutStoreLog
(
"检测治具,进出轴返回待机点P1"
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P1
,
Config
.
CompAxis_P1_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_PreCheck_12_InOutToP1
))
{
IO_VALUE
io1
=
IOValue
(
IO_Type
.
TrayCheck_1
);
IO_VALUE
io2
=
IOValue
(
IO_Type
.
TrayCheck_2
);
IO_VALUE
io3
=
IOValue
(
IO_Type
.
TrayCheck_3
);
IO_VALUE
io4
=
IOValue
(
IO_Type
.
TrayCheck_4
);
if
(
io3
.
Equals
(
IO_VALUE
.
HIGH
)
||
io4
.
Equals
(
IO_VALUE
.
HIGH
))
{
LastWidth
=
15
;
}
else
if
(
io1
.
Equals
(
IO_VALUE
.
HIGH
)
||
io2
.
Equals
(
IO_VALUE
.
HIGH
))
{
LastWidth
=
7
;
}
else
{
LastWidth
=
0
;
LogUtil
.
error
(
"未检测到识别区料盘检测信号, 设置默认宽度=0"
);
}
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_PreCheck_13_CheckFix
);
InOutStoreLog
(
"检测治具,料盘识别 ["
+
io1
+
"] ["
+
io2
+
"] ["
+
io3
+
"] ["
+
io4
+
"] ,宽度【"
+
LastWidth
+
"】,开始扫码"
);
MoveInfo
.
OneWaitCanEndStep
=
true
;
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
12000
));
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitCode
());
Task
.
Factory
.
StartNew
(
delegate
//治具识别
{
IOMove
(
IO_Type
.
Camera_Led
,
IO_VALUE
.
HIGH
);
LastScanCodes
=
CodeManager
.
CameraScan
(
Config
.
GetCameraList
(),
Name
);
if
(
LastScanCodes
.
Count
<=
0
)
{
Thread
.
Sleep
(
1
);
LastScanCodes
=
CodeManager
.
CameraScan
(
Config
.
GetCameraList
(),
Name
);
}
IOMove
(
IO_Type
.
Camera_Led
,
IO_VALUE
.
LOW
);
});
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_PreCheck_13_CheckFix
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_PreCheck_14_GetCheckResult
);
}
#
endregion
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_PreCheck_14_GetCheckResult
))
{
if
(
IOValue
(
IO_Type
.
Compress_Check
).
Equals
(
IO_VALUE
.
LOW
))
// && LastHeight.Equals(8)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_PreCheck_01_StartGetTray
);
InOutStoreLog
(
"检测治具,未检测到治具,认为OK,继续循环料架取料盘"
);
}
else
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_PreCheck_15_InoutToP2
);
addNGShelfPos
(
MoveInfo
.
MoveParam
.
CurShelfPosID
);
InOutStoreLog
(
"检测治具,检测到治具,认为料架为NG,进出轴到P2"
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P2
,
Config
.
InOutAxis_P2_Speed
);
}
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_PreCheck_15_InoutToP2
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_PreCheck_16_GetScanPTray
);
InOutStoreLog
(
"检测治具,检测到治具,升降轴到扫码高P2,压紧轴到压紧点P2"
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_P2
,
Config
.
UpDownAxis_P2_Speed
);
ACAxisMove
(
Config
.
Comp_Axis
,
moveP
.
ComPress_P2
,
Config
.
CompAxis_P2_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_PreCheck_16_GetScanPTray
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_PreCheck_17_InoutBackP1
);
InOutStoreLog
(
"检测治具,检测到治具,进出轴返回"
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P1
,
Config
.
InOutAxis_P1_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_PreCheck_17_InoutBackP1
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_PreCheck_18_ToShelfPosition
);
InOutStoreLog
(
"检测治具,检测到治具,叉子已到P1,走到料架位置,旋转轴至P101["
+
moveP
.
Middle_P101
+
"],升降轴至P102["
+
moveP
.
UpDown_HP102
+
"] "
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_HP102
,
Config
.
UpDownAxis_P102_Speed
);
ACAxisMove
(
Config
.
Middle_Axis
,
moveP
.
Middle_P101
,
Config
.
MiddleAxis_P101_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_PreCheck_18_ToShelfPosition
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_PreCheck_19_ToShelf
);
InOutStoreLog
(
"检测治具,检测到治具,叉子进出料口,进出轴至P101"
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P101
,
Config
.
InOutAxis_P101_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_PreCheck_19_ToShelf
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_PreCheck_20_PutReel
);
InOutStoreLog
(
"检测治具,检测到治具,放下物品,压紧轴到P1,升降轴至P101"
);
ACAxisMove
(
Config
.
Comp_Axis
,
moveP
.
ComPress_P1
,
Config
.
CompAxis_P1_Speed
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_LP101
,
Config
.
UpDownAxis_P101_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_PreCheck_20_PutReel
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_PreCheck_21_InoutBack
);
InOutStoreLog
(
"检测治具,检测到治具,叉子从出料口返回, 进出轴到P1 "
);
InOutBackToP1
(
moveP
.
InOut_P1
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_PreCheck_21_InoutBack
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_PreCheck_22_GoBack
);
InOutStoreLog
(
"检测治具,检测到治具,升降轴返回,升降轴到P1,顶升下降"
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_P1
,
Config
.
UpDownAxis_P1_Speed
);
//发送消息给流水线
// SendOutStoreEnd(MoveInfo);
CylinderMove
(
MoveInfo
,
IO_Type
.
TopCylinder_Up
,
IO_Type
.
TopCylinder_Down
);
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_PreCheck_22_GoBack
)
{
StartShelfOut
();
}
#
endregion
#
region
出库步骤
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_01_InoutBack
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_02_TopDown
);
InOutStoreLog
(
"顶升下降"
);
CylinderMove
(
MoveInfo
,
IO_Type
.
TopCylinder_Up
,
IO_Type
.
TopCylinder_Down
);
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_02_TopDown
)
{
bool
hasShelf
=
IOValue
(
IO_Type
.
LineTake_Check
).
Equals
(
IO_VALUE
.
HIGH
);
if
(
hasShelf
)
{
string
LastRfidID
=
GetLastRfid
();
// if (IsRightShelfId(CurrShelfID, MoveInfo.MoveParam.realRfid))
if
(
MoveInfo
.
MoveParam
.
rfid
.
Equals
(
LastRfidID
))
{
LogRunStepInfo
(
$
"【LastRfidID={LastRfidID}】【{MoveInfo.MoveParam.rfid}】 同料架,开始取料"
);
SO_03_ToBagPosition
();
return
;
}
else
{
//重新记录
LogRunStepInfo
(
$
"【LastRfidID={LastRfidID}】【{MoveInfo.MoveParam.rfid}】 不同料架,送出当前料架,稍后重新出库"
);
waitOutStoreList
.
Enqueue
(
MoveInfo
.
MoveParam
);
// MoveInfo.MoveParam.rfid = LastRfidID;
MoveInfo
.
NewMove
(
StoreMoveType
.
OutStore
,
LastOutParam
);
//送出料架,并且记录出库信息,等会重新出库
StartShelfOut
();
return
;
}
}
else
if
(!
hasShelf
&&
(!
MoveInfo
.
MoveParam
.
rfid
.
Equals
(
""
)))
{
if
(
CurrShelfID
.
EndsWith
(
"00"
))
{
CurrShelfID
=
""
;
}
string
mark
=
GetMarkInfo
();
// string rfid = MoveInfo.MoveParam.rfid;
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_00_ReadyShelf
);
clearNGShelfPos
();
InOutStoreLog
(
"呼叫agv送空料架,NeedEnter["
+
mark
+
"]["
+
MoveInfo
.
MoveParam
.
rfid
+
"],等待agv_Arrive 或有料架,进出轴到P1"
);
InOutBackToP1
(
MoveInfo
.
MoveParam
.
MoveP
.
InOut_P1
);
//需要先叫agv到达
setAgvStatus
(
mark
,
MoveInfo
.
MoveParam
.
rfid
,
ClientAction
.
NeedEnter
,
ClientLevel
.
High
,
true
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitAgvAction
((
int
)
ClientAction
.
Arrive
));
}
else
{
LogRunStepError
(
$
"未找到处理的步骤,当前:LineTake_Check={hasShelf},{MoveInfo.MoveParam.ToStr()}"
);
}
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_03_ToPosition
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_04_ToPos
);
InOutStoreLog
(
"叉子进入库位中, 进出轴至P3["
+
moveP
.
InOut_P3
+
"] "
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P3
,
Config
.
InOutAxis_P3_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_04_ToPos
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_05_GetReel
);
InOutStoreLog
(
"拿起物品,升降轴至P6["
+
moveP
.
UpDown_P6
+
"],压紧轴到压紧点P2 :"
+
moveP
.
ComPress_P2
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_P6
,
Config
.
UpDownAxis_P6_Speed
);
ACAxisMove
(
Config
.
Comp_Axis
,
moveP
.
ComPress_P2
,
Config
.
CompAxis_P2_Speed
);
//MoveInfo.WaitList.Add(WaitResultInfo.WaitComAxis(Config.Comp_Axis, Config.CompAxis_P4_Position, Config.CompAxis_P4_Speed));
//Config.Comp_Axis.TargetPosition = Config.CompAxis_P4_Position;
//ACServerManager.AbsMove(Config.Comp_Axis.DeviceName, Config.Comp_Axis.GetAxisValue(), Config.CompAxis_P4_Position, Config.CompAxis_P4_Speed);
//ComAxisStartCheck();
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_05_GetReel
)
{
// SO_06_StartCompress();
//}
//else if (MoveInfo.MoveStep.Equals(StoreMoveStep.SO_06_StartCompress))
//{
// MoveInfo.NextMoveStep(StoreMoveStep.SO_07_ComDownMove);
// int currPosition = ACServerManager.GetActualtPosition(Config.Comp_Axis);
// int targetP = currPosition + Config.CompAxis_Down_Position;
// InOutStoreLog("出库 " + MoveInfo.SLog + ": 再向下压紧 [" + Config.CompAxis_Down_Position + "] 目标 [" + targetP + "] ");
// ACAxisMove(Config.Comp_Axis, targetP, Config.CompAxis_P1_Speed);
//}
//else if (MoveInfo.MoveStep == StoreMoveStep.SO_07_ComDownMove)
//{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_08_InoutBack
);
InOutStoreLog
(
"进出轴至待机点P1["
+
moveP
.
InOut_P1
+
"] "
);
InOutBackToP1
(
moveP
.
InOut_P1
);
//把库位的物品放到取到叉子上之后是出仓完成
string
posId
=
MoveInfo
.
MoveParam
!=
null
?
MoveInfo
.
MoveParam
.
PosID
:
""
;
lastPosId
=
posId
;
lastPosIdStatus
=
StoreStatus
.
OutStoreBoxEnd
;
storeStatus
=
StoreStatus
.
OutStoreBoxEnd
;
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_08_InoutBack
)
{
IsIgnoreComSig
=
false
;
CompressSigTimeOut
=
false
;
//LogUtil.info("出库步骤 SO_07_CheckComSig :IsIgnoreComSig = false, CompressSigTimeOut = false");
IO_VALUE
iov
=
IOValue
(
IO_Type
.
Compress_Check
);
//if (MoveInfo.MoveParam.urgentReel)
//{
// MoveInfo.NextMoveStep(StoreMoveStep.SO_15_ToUrgentDoor);
// InOutStoreLog("紧急料 " + MoveInfo.SLog + ",升降轴到升降门口高点P12,旋转轴到升降门口P11");
// ACAxisMove(Config.UpDown_Axis, MoveInfo.MoveParam.MoveP.UpDown_P12, Config.UpDownAxis_P1_Speed);
// ACAxisMove(Config.Middle_Axis, MoveInfo.MoveParam.MoveP.Middle_P11, Config.MiddleAxis_P1_Speed);
//}
//else
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_10_ToShelfPosition
);
InOutStoreLog
(
"叉子已到P1,Compress_Check="
+
iov
+
",走到料架位置,旋转轴至P101["
+
moveP
.
Middle_P101
+
"],升降轴至P102["
+
moveP
.
UpDown_HP102
+
"] "
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_HP102
,
Config
.
UpDownAxis_P102_Speed
);
ACAxisMove
(
Config
.
Middle_Axis
,
moveP
.
Middle_P101
,
Config
.
MiddleAxis_P101_Speed
);
}
//MoveInfo.NextMoveStep(StoreMoveStep.SO_09_CheckComSig);
//InOutStoreLog("出库 " + MoveInfo.SLog + ":等待料叉压紧信号 ");
//MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Compress_Check, IO_VALUE.HIGH));
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_09_CheckComSig
)
{
if
(
IOValue
(
IO_Type
.
Compress_Check
).
Equals
(
IO_VALUE
.
HIGH
)
||
IsIgnoreComSig
)
{
IsIgnoreComSig
=
false
;
CompressSigTimeOut
=
false
;
LogUtil
.
info
(
"出库步骤 SO_07_CheckComSig :IsIgnoreComSig = false, CompressSigTimeOut = false"
);
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_10_ToShelfPosition
);
InOutStoreLog
(
"走到料架位置,旋转轴至P101,升降轴至P102 "
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_HP102
,
Config
.
UpDownAxis_P102_Speed
);
ACAxisMove
(
Config
.
Middle_Axis
,
moveP
.
Middle_P101
,
Config
.
MiddleAxis_P101_Speed
);
}
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_10_ToShelfPosition
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_11_ToShelf
);
InOutStoreLog
(
"叉子进出料口,进出轴至P101"
);
ACAxisMove
(
Config
.
InOut_Axis
,
moveP
.
InOut_P101
,
Config
.
InOutAxis_P101_Speed
);
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_11_ToShelf
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_12_PutReel
);
InOutStoreLog
(
"放下物品,压紧轴到P1,升降轴至P101,清空 taskData=null "
);
ACAxisMove
(
Config
.
Comp_Axis
,
moveP
.
ComPress_P1
,
Config
.
CompAxis_P1_Speed
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_LP101
,
Config
.
UpDownAxis_P101_Speed
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
1000
));
taskData
=
null
;
Task
.
Factory
.
StartNew
(
delegate
{
int
posLoc
=
StoreManager
.
GetShelfPosIndex
(
MoveInfo
.
MoveParam
.
CurShelfPosID
,
ShelfPosList
);
//分盘料和紧急料发PutFinished
if
(
MoveInfo
.
MoveParam
.
cutReel
||
MoveInfo
.
MoveParam
.
urgentReel
)
{
string
msg
=
StoreManager
.
afterPutCut
(
Name
,
CurrShelfID
,
MoveInfo
.
MoveParam
.
WareCode
,
CID
,
posLoc
,
out
taskData
);
if
(
String
.
IsNullOrEmpty
(
msg
).
Equals
(
false
))
{
LogUtil
.
error
(
Name
+
"["
+
MoveInfo
.
MoveParam
.
WareCode
+
"] ["
+
CurrShelfID
+
"_"
+
GetLastRfid
()
+
"] ["
+
posLoc
+
"] afterPutCut 结果:"
+
msg
);
}
}
else
{
int
newTaskCount
=
0
;
string
msg
=
StoreManager
.
UpdateTrayLoc
(
Name
,
MoveInfo
.
MoveParam
.
WareCode
,
CurrShelfID
+
"@"
+
posLoc
.
ToString
(),
out
newTaskCount
);
if
(
String
.
IsNullOrEmpty
(
msg
).
Equals
(
false
))
{
LogUtil
.
error
(
Name
+
"["
+
MoveInfo
.
MoveParam
.
WareCode
+
"] ["
+
CurrShelfID
+
"_"
+
GetLastRfid
()
+
"] ["
+
posLoc
+
"] UpdateTrayLoc 结果:"
+
msg
);
}
if
(
newTaskCount
>
MoveInfo
.
MoveParam
.
taskCount
)
{
InOutStoreLog
(
"UpdateTrayLoc 返回 newTaskCount="
+
newTaskCount
+
",原有 taskCount="
+
MoveInfo
.
MoveParam
.
taskCount
+
",使用新数据"
);
MoveInfo
.
MoveParam
.
taskCount
=
newTaskCount
;
}
}
});
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_12_PutReel
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_13_InoutBack
);
InOutStoreLog
(
"叉子从出料口返回, 进出轴到P1 "
);
InOutBackToP1
(
moveP
.
InOut_P1
);
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_13_InoutBack
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_14_GoBack
);
InOutStoreLog
(
"升降轴返回,升降轴到P1,顶升下降"
);
ACAxisMove
(
Config
.
UpDown_Axis
,
moveP
.
UpDown_P1
,
Config
.
UpDownAxis_P1_Speed
);
//发送消息给流水线
// SendOutStoreEnd(MoveInfo);
CylinderMove
(
MoveInfo
,
IO_Type
.
TopCylinder_Up
,
IO_Type
.
TopCylinder_Down
);
}
else
if
(
MoveInfo
.
MoveStep
==
StoreMoveStep
.
SO_14_GoBack
)
{
//判断是否需要送出料架
bool
isNeedSend
=
false
;
string
logName
=
"【"
+
CurrShelfID
+
"_"
+
GetLastRfid
()
+
"】"
;
//只有rfid不为空才需要送出料架
if
(
String
.
IsNullOrEmpty
(
MoveInfo
.
MoveParam
.
rfid
))
{
InOutStoreLog
(
"出库完成,未设置rfid,不需要送出料架"
);
isNeedSend
=
false
;
}
else
if
(
MoveInfo
.
MoveParam
.
cutReel
)
{
if
(
taskData
!=
null
&&
taskData
.
cutPackageTask
<=
0
)
{
InOutStoreLog
(
logName
+
"分盘料出库完成,cutPackageTask="
+
taskData
.
cutPackageTask
+
",送出料架"
);
isNeedSend
=
true
;
}
else
if
(
taskData
==
null
)
{
InOutStoreLog
(
logName
+
"分盘料出库完成,taskData=null,送出料架"
);
isNeedSend
=
true
;
}
}
else
if
(
MoveInfo
.
MoveParam
.
urgentReel
)
{
if
(
taskData
!=
null
&&
taskData
.
urgentPackageTask
<=
0
)
{
InOutStoreLog
(
logName
+
"紧急料出库完成,urgentPackageTask="
+
taskData
.
urgentPackageTask
+
",送出料架"
);
isNeedSend
=
true
;
}
else
if
(
taskData
==
null
)
{
InOutStoreLog
(
logName
+
"紧急料出库完成,taskData=null,送出料架"
);
isNeedSend
=
true
;
}
}
else
if
(
MoveInfo
.
MoveParam
.
taskCount
<=
0
)
{
InOutStoreLog
(
logName
+
"出库完成,taskCount="
+
MoveInfo
.
MoveParam
.
taskCount
+
" 送出料架"
);
isNeedSend
=
true
;
}
if
(
isNeedSend
)
{
StartShelfOut
();
}
else
{
TimeSpan
span
=
DateTime
.
Now
-
startOutStoreTime
;
string
posId
=
MoveInfo
.
MoveParam
!=
null
?
MoveInfo
.
MoveParam
.
PosID
:
""
;
storeStatus
=
StoreStatus
.
StoreOnline
;
LogInfo
(
" 【"
+
posId
+
"】 "
+
logName
+
" 出库结束,耗时【"
+
FormUtil
.
GetSpanStr
(
span
)
+
"】!"
);
if
(!
String
.
IsNullOrEmpty
(
MoveInfo
.
MoveParam
.
rfid
))
{
if
(
StoreManager
.
Store
.
AutoShelfInstore
)
{
LogInfo
(
" 料架"
+
logName
+
"还有出库任务,设置 AutoShelfInstore = false"
);
Setting_Init
.
AutoShelfInstore
=
false
;
StoreManager
.
Store
.
AutoShelfInstore
=
false
;
}
}
MoveEndToRuningStatus
();
AutoInout
.
InOutEndProcess
(
this
,
StoreMoveType
.
OutStore
);
}
}
#
endregion
else
if
(
MoveInfo
.
MoveStep
<=
StoreMoveStep
.
SO_01_InoutBack
)
{
ShelfEnterProcess
();
}
else
if
(
MoveInfo
.
MoveStep
>=
StoreMoveStep
.
BS_01_TopDown
)
{
ShelfOutProcess
();
}
else
{
LogUtil
.
error
(
Name
+
" 出库处理,moveStatus="
+
MoveInfo
.
MoveStep
+
",没有对应的处理!"
);
}
}
//private void SO_06_StartCompress()
//{
// //如果检测信号亮或者当前位置大于P4,直接走相对位置
// if (IOValue(IO_Type.Compress_Check).Equals(IO_VALUE.HIGH) || (MoveInfo.MoveParam.MoveP.ComPress_P2 >= Config.CompAxis_P4_Position))
// {
// MoveInfo.NextMoveStep(StoreMoveStep.SO_07_ComDownMove);
// int currPosition = ACServerManager.GetActualtPosition(Config.Comp_Axis);
// int targetP = currPosition + Config.CompAxis_Down_Position;
// InOutStoreLog("出库 " + MoveInfo.SLog + ": 再向下压紧 [" + Config.CompAxis_Down_Position + "] 目标 [" + targetP + "] ");
// ACAxisMove(Config.Comp_Axis, targetP, Config.CompAxis_P1_Speed);
// }
// else
// {
// MoveInfo.NextMoveStep(StoreMoveStep.SO_06_StartCompress);
// InOutStoreLog("出库 " + MoveInfo.SLog + ":压紧轴开始缓慢压紧到P4 :" + Config.CompAxis_P4_Position);
// MoveInfo.WaitList.Add(WaitResultInfo.WaitComAxis(Config.Comp_Axis, Config.CompAxis_P4_Position, Config.CompAxis_P4_Speed));
// Config.Comp_Axis.TargetPosition = Config.CompAxis_P4_Position;
// ACServerManager.AbsMove(Config.Comp_Axis.DeviceName, Config.Comp_Axis.GetAxisValue(), Config.CompAxis_P4_Position, Config.CompAxis_P4_Speed);
// ComAxisStartCheck();
// }
//}
}
}
source/DeviceLibrary/PackingStore/AC_BOX_Bean_Partial.cs
0 → 100644
查看文件 @
5229fc7
using
Asa
;
using
OnlineStore.Common
;
using
OnlineStore.LoadCSVLibrary
;
using
System
;
using
System.Collections.Concurrent
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading
;
using
System.Threading.Tasks
;
namespace
OnlineStore.DeviceLibrary
{
partial
class
AC_BOX_Bean
{
/// <summary>
/// 设置设备运行状态
/// </summary>
/// <param name="runStatus"></param>
void
setStoreRunStatus
(
StoreRunStatus
runStatus
)
{
storeRunStatus
=
runStatus
;
LogInfo
(
$
"设置设备运行状态:{storeRunStatus.ToString()}"
);
}
/// <summary>
/// 设置设备状态
/// </summary>
/// <param name="status"></param>
void
setStoreStatus
(
StoreStatus
status
)
{
storeStatus
=
status
;
LogInfo
(
$
"设置设备状态:{storeStatus.ToString()}"
);
}
void
setStatus
(
StoreRunStatus
runStatus
,
StoreStatus
status
)
{
setStoreRunStatus
(
runStatus
);
setStoreStatus
(
status
);
}
/// <summary>
/// 设备是否空闲
/// </summary>
/// <returns></returns>
bool
isIdle
()
{
return
storeRunStatus
.
Equals
(
StoreRunStatus
.
Runing
)
&&
(
MoveInfo
?.
MoveType
.
Equals
(
StoreMoveType
.
None
)
??
false
);
}
/// <summary>
/// 获取料架备注
/// 包含料信息
/// </summary>
/// <param name="defualtMark"></param>
/// <returns></returns>
private
string
GetMarkInfo
(
string
defualtMark
=
"0"
)
{
string
mark
=
defualtMark
;
//如果料架号是空,需要送到VMI线
if
(
MoveInfo
.
MoveType
.
Equals
(
StoreMoveType
.
OutStore
))
{
if
(
CurrShelfID
.
EndsWith
(
"00"
))
{
mark
=
defualtMark
;
}
else
if
(
isNGShelf
())
{
mark
=
MoveInfo
.
MoveParam
.
rfid
+
",ng"
;
}
//包装料会发往分盘区, 紧急料区, 包装线区
// urgentReel 这个为true是紧急料 出到紧急料区
// cutReel 为true是分盘料,AGV会拉到到分盘区
//料串会发到分盘区和紧急料区
//两个都为false 包装料默认拉到包装线体, 料串默认拉到紧急料区
else
if
(
MoveInfo
.
MoveParam
.
urgentReel
)
{
//紧急料,需要到紧急料区
mark
=
MoveInfo
.
MoveParam
.
rfid
+
",urgent"
;
}
else
if
(
MoveInfo
.
MoveParam
.
cutReel
)
{
//cutReel 为true是分盘料,AGV会拉到到分盘区
mark
=
MoveInfo
.
MoveParam
.
rfid
+
",cut"
;
}
else
{
mark
=
MoveInfo
.
MoveParam
.
rfid
+
",pack"
;
}
}
else
if
(
MoveInfo
.
MoveType
.
Equals
(
StoreMoveType
.
InStore
)
&&
isNGShelf
())
{
mark
=
MoveInfo
.
MoveParam
.
rfid
+
",ng"
;
}
return
mark
;
}
/// <summary>
/// 设备是否可以动作
/// </summary>
/// <param name="msg"></param>
/// <returns></returns>
bool
canStartMove
(
out
string
msg
)
{
StringBuilder
sb
=
new
StringBuilder
();
if
(
isInSuddenDown
)
sb
.
Append
(
"急停中;"
);
if
(
isNoAirCheck
)
sb
.
Append
(
"未检测到气压信号;"
);
if
(!
isIdle
())
{
sb
.
Append
(
"忙碌中;"
);
}
msg
=
sb
.
ToString
();
if
(!
string
.
IsNullOrEmpty
(
msg
))
return
false
;
return
true
;
}
bool
canInStore
(
out
string
msg
)
{
msg
=
""
;
return
true
;
}
bool
canOutStore
(
out
string
msg
)
{
if
(
canStartMove
(
out
msg
))
{
if
(
WaitShelfEnter
)
{
msg
+=
"有入库料架在路上"
;
return
false
;
}
}
return
true
;
}
#
region
出入库结果验证
public
bool
CompressSigTimeOut
=
false
;
public
bool
IsScanCodeWithLockedShelf
=
true
;
//锁定的料架是否扫码
private
void
CheckWait
()
{
List
<
WaitResultInfo
>
list
=
MoveInfo
.
WaitList
;
//当等待超过一分钟时,需要打印提示
TimeSpan
span
=
DateTime
.
Now
-
MoveInfo
.
LastSetpTime
;
string
NotOkMsg
=
""
;
if
(
list
.
Count
<=
0
)
{
MoveInfo
.
EndStepWait
();
return
;
}
bool
isOk
=
true
;
if
(
MoveInfo
.
OneWaitCanEndStep
)
{
isOk
=
false
;
}
foreach
(
WaitResultInfo
wait
in
list
)
{
if
(
wait
.
IsEnd
)
{
continue
;
}
NotOkMsg
=
wait
.
ToStr
();
if
(
wait
.
WaitType
.
Equals
(
WaitEnum
.
W001_AxisMove
))
{
string
msg
=
""
;
if
(
wait
.
IsHomeMove
)
{
wait
.
IsEnd
=
ACHomeMoveIsEnd
(
wait
.
AxisInfo
,
out
msg
);
}
else
{
wait
.
IsEnd
=
ACAxisMoveIsEnd
(
wait
.
AxisInfo
,
wait
.
TargetPosition
,
wait
.
TargetSpeed
,
out
msg
);
}
if
(!
msg
.
Equals
(
""
))
{
isOk
=
false
;
WarnMsg
=
msg
;
Alarm
(
StoreAlarmType
.
AxisMoveError
,
GetAlarmCodeByAxis
(
wait
.
AxisInfo
).
ToString
(),
WarnMsg
,
MoveInfo
.
MoveType
);
break
;
}
}
else
if
(
wait
.
WaitType
.
Equals
(
WaitEnum
.
W002_IOValue
))
{
wait
.
IsEnd
=
IOValue
(
wait
.
IoType
).
Equals
(
wait
.
IoValue
);
int
timeOutMs
=
Config
.
IOSingle_TimerOut
;
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_08_WaitLineIn
)
||
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_04_WaitTakeSingle
))
{
timeOutMs
=
30000
;
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_03_LineRun
))
{
timeOutMs
=
40000
;
}
if
((!
wait
.
IsEnd
)
&&
span
.
TotalMilliseconds
>
timeOutMs
&&
NoAlarm
())
{
ConfigIO
io
=
Config
.
getWaitIO
(
wait
.
IoType
);
WarnMsg
=
Name
+
"["
+
MoveInfo
.
MoveType
+
"]["
+
MoveInfo
.
MoveStep
+
"] 等待("
+
io
.
DisplayStr
+
"="
+
wait
.
IoValue
+
") 超时"
;
if
(
WarnMsg
.
Contains
(
IO_Type
.
Compress_Check
)
&&
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_09_CheckComSig
))
{
CompressSigTimeOut
=
true
;
WarnMsg
+=
"出库时料叉未检测到信号!"
;
}
Alarm
(
StoreAlarmType
.
IoSingleTimeOut
,
io
.
ElectricalDefinition
,
WarnMsg
,
MoveInfo
.
MoveType
);
LogUtil
.
error
(
Name
+
"["
+
MoveInfo
.
MoveType
+
"]["
+
MoveInfo
.
MoveStep
+
"] 等待("
+
io
.
DisplayStr
+
"="
+
wait
.
IoValue
+
") 超时"
,
logType
+
14
);
if
(!
MoveInfo
.
OneWaitCanEndStep
)
{
isOk
=
false
;
break
;
}
}
}
else
if
(
wait
.
WaitType
.
Equals
(
WaitEnum
.
W003_Time
))
{
wait
.
IsEnd
=
(
span
.
TotalMilliseconds
>=
wait
.
TimeMSeconds
);
}
else
if
(
wait
.
WaitType
.
Equals
(
WaitEnum
.
W007_ReelHeight
))
{
}
else
if
(
wait
.
WaitType
.
Equals
(
WaitEnum
.
W008_Compress
))
{
//等待信号亮或者走到绝对位置才停止
if
(
IOValue
(
TargetIoType
).
Equals
(
TargetIoValue
))
{
LogUtil
.
info
(
"CheckWait 检测到"
+
TargetIoType
+
"="
+
TargetIoValue
+
",停止压紧轴运行"
);
wait
.
IsEnd
=
true
;
ComAxisStopCheck
();
}
else
{
bool
moveOk
=
ACServerManager
.
GetBusyStatus
(
wait
.
AxisInfo
.
DeviceName
,
wait
.
AxisInfo
.
GetAxisValue
()).
Equals
(
0
);
if
(
moveOk
)
{
//TODO 判断是否达到高度,如果未达到,继续上升
wait
.
IsEnd
=
true
;
ComAxisStopCheck
();
}
}
}
else
if
(
wait
.
WaitType
.
Equals
(
WaitEnum
.
W009_ScanCode
))
{
wait
.
IsEnd
=
(
LastScanCodes
.
Count
>
0
);
}
else
if
(
wait
.
WaitType
.
Equals
(
WaitEnum
.
W010_AgvStatus
))
{
if
(
wait
.
AgvAction
.
Equals
((
int
)
ClientAction
.
Ready
))
{
//Ready时使用状态判断,arrive时需要判断料架号是否正确
ClientAction
agvA
=
AgvClient
.
GetAction
(
Config
.
AgvNodeName
);
wait
.
IsEnd
=
((
int
)
agvA
).
Equals
(
wait
.
AgvAction
);
}
if
(!
wait
.
IsEnd
&&
span
.
TotalSeconds
>
10
)
{
//如果是等待AGV到达,等待有料架信号也算结束
if
(
wait
.
AgvAction
.
Equals
((
int
)
ClientAction
.
Arrive
)
&&
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_00_ReadyShelf
))
{
if
(
IOValue
(
IO_Type
.
LineTake_Check
).
Equals
(
IO_VALUE
.
HIGH
))
{
LogInfo
(
"BI_01_ReadyShelf 等待agv到达Arrive,检测到 LineTake_Check 信号,结束等待"
);
wait
.
IsEnd
=
true
;
}
else
if
(
IOValue
(
IO_Type
.
LineIn_Check
).
Equals
(
IO_VALUE
.
HIGH
))
{
LogInfo
(
"BI_01_ReadyShelf 等待agv到达Arrive,检测到 LineIn_Check 信号,结束等待"
);
wait
.
IsEnd
=
true
;
}
}
else
if
(
wait
.
AgvAction
.
Equals
((
int
)
ClientAction
.
Arrive
)
&&
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_03_WaitEmptyAgv
))
{
if
(
IOValue
(
IO_Type
.
LineTake_Check
).
Equals
(
IO_VALUE
.
LOW
)
&&
IOValue
(
IO_Type
.
LineIn_Check
).
Equals
(
IO_VALUE
.
LOW
))
{
LogInfo
(
"BS_03_WaitArrive 等待agv到达Arrive,检测到 LineTake_Check和LineIn_Check都没有信号,结束等待"
);
wait
.
IsEnd
=
true
;
}
}
}
}
else
if
(
wait
.
WaitType
.
Equals
(
WaitEnum
.
W011_DoorCloseEvent
))
{
if
(
AgvClient
.
closeDoorTimeMap
.
ContainsKey
(
Config
.
AgvNodeName
))
{
DateTime
time
=
AgvClient
.
closeDoorTimeMap
[
Config
.
AgvNodeName
];
if
(
time
>=
MoveInfo
.
LastSetpTime
)
{
wait
.
IsEnd
=
true
;
}
}
}
if
(
wait
.
IsEnd
)
{
if
(
MoveInfo
.
OneWaitCanEndStep
)
{
isOk
=
true
;
break
;
}
}
else
{
if
(!
MoveInfo
.
OneWaitCanEndStep
)
{
isOk
=
false
;
break
;
}
}
}
if
(
isOk
)
{
MoveInfo
.
EndStepWait
();
}
else
if
(
span
.
TotalSeconds
>
MoveInfo
.
TimeOutSeconds
)
{
if
(
NotOkMsg
.
Contains
(
IO_Type
.
Compress_Check
)
&&
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
SO_09_CheckComSig
))
{
CompressSigTimeOut
=
true
;
NotOkMsg
+=
"出库时料叉未检测到信号!"
;
}
WarnMsg
=
Name
+
"["
+
MoveInfo
.
MoveType
+
"]["
+
MoveInfo
.
MoveStep
+
"]等待 "
+
NotOkMsg
+
"超时["
+
FormUtil
.
GetSpanStr
(
span
)
+
"] "
;
int
second
=
10
;
second
=
(
int
)(
MoveInfo
.
TimeOutSeconds
/
span
.
TotalSeconds
)
*
10
;
if
(
second
>
120
)
{
second
=
120
;
}
else
if
(
second
<
10
)
{
second
=
10
;
}
LogUtil
.
error
(
WarnMsg
,
logType
+
100
,
second
);
Alarm
(
StoreAlarmType
.
IoSingleTimeOut
,
""
,
WarnMsg
,
MoveInfo
.
MoveType
);
}
}
private
static
DateTime
lastComRHomeTime
=
DateTime
.
Now
;
private
void
InOutBackToP1
(
int
InOut_P1
)
{
//判断是否在P1,如果是,不需要运行
if
(
ACServerManager
.
isInPosition
(
Config
.
InOut_Axis
,
InOut_P1
))
{
LogUtil
.
debug
(
Name
+
"进出轴当前已经在P1,不需要再回P1"
);
}
else
{
ACAxisMove
(
Config
.
InOut_Axis
,
InOut_P1
,
Config
.
InOutAxis_P1_Speed
);
}
//StoreMove.WaitList.Add(WaitResultInfo.WaitAxisOrg(Config.InOut_Axis,IO_VALUE.HIGH));
}
#
endregion
public
ConcurrentQueue
<
InOutParam
>
waitOutStoreList
=
new
ConcurrentQueue
<
InOutParam
>();
private
List
<
string
>
LastScanCodes
=
new
List
<
string
>();
private
int
ComTargetPosition
=
0
;
private
int
LastWidth
=
0
;
private
int
LastHeight
=
0
;
/// <summary>
/// 最后一次使用的料架号
/// </summary>
// private string LastRfidID = "";//服务器发送的出库rfid
private
InOutParam
LastOutParam
=
new
InOutParam
();
private
string
GetLastRfid
()
{
//出库料架使用,返回上次使用的料架绑定的虚拟料架号
return
LastOutParam
.
rfid
;
}
#
region
压紧轴压紧处理
private
System
.
Timers
.
Timer
axisCheckTimer
=
null
;
private
string
TargetIoType
=
IO_Type
.
Compress_Check
;
private
IO_VALUE
TargetIoValue
=
IO_VALUE
.
HIGH
;
public
bool
ComAxisStartCheck
(
string
targetIo
=
""
,
IO_VALUE
value
=
IO_VALUE
.
HIGH
)
{
if
(
String
.
IsNullOrEmpty
(
targetIo
))
{
targetIo
=
IO_Type
.
Compress_Check
;
}
if
(
axisCheckTimer
==
null
)
{
axisCheckTimer
=
new
System
.
Timers
.
Timer
();
axisCheckTimer
.
AutoReset
=
true
;
axisCheckTimer
.
Interval
+=
50
;
axisCheckTimer
.
Elapsed
+=
CheckTimer_Elapsed
;
axisCheckTimer
.
Enabled
=
false
;
}
TargetIoValue
=
value
;
TargetIoType
=
targetIo
;
axisCheckTimer
.
Start
();
return
true
;
}
private
bool
ComAxisStopCheck
()
{
if
(!(
axisCheckTimer
==
null
))
{
ACServerManager
.
SuddenStop
(
Config
.
Comp_Axis
);
axisCheckTimer
.
Stop
();
}
return
true
;
}
private
bool
IsInProcess
=
false
;
private
void
CheckTimer_Elapsed
(
object
sender
,
System
.
Timers
.
ElapsedEventArgs
e
)
{
if
(
IsInProcess
)
{
return
;
}
IsInProcess
=
true
;
if
(
IOValue
(
TargetIoType
).
Equals
(
TargetIoValue
))
{
LogUtil
.
info
(
Name
+
"压紧轴运动:检测到 "
+
TargetIoType
+
"="
+
TargetIoValue
+
",停止运动"
);
ACServerManager
.
SuddenStop
(
Config
.
Comp_Axis
.
DeviceName
,
Config
.
Comp_Axis
.
GetAxisValue
());
ComAxisStopCheck
();
}
IsInProcess
=
false
;
}
#
endregion
}
}
source/DeviceLibrary/PackingStore/AC_BOX_Bean_ScanCode.cs
0 → 100644
查看文件 @
5229fc7
using
Asa
;
using
OnlineStore.Common
;
using
OnlineStore.LoadCSVLibrary
;
using
System
;
using
System.Collections.Concurrent
;
using
System.Collections.Generic
;
using
System.Diagnostics
;
using
System.Linq
;
using
System.Text
;
using
System.Threading
;
using
System.Threading.Tasks
;
namespace
OnlineStore.DeviceLibrary
{
public
partial
class
AC_BOX_Bean
{
#
region
扫码获取库位
/// <summary>
/// 数据接收
/// </summary>
/// <param name="message"></param>
private
bool
GetPosIdByCode
()
{
try
{
if
(
LastWidth
<=
0
)
{
LastWidth
=
7
;
}
//string message = StoreManager.ProcessCode(LastWidth, LastHeight, LastScanCodes);
string
message
=
MoveInfo
.
shelfLockDatas
[
MoveInfo
.
currShelfIndex
].
barcode
;
if
(
message
.
Equals
(
""
)
||
string
.
IsNullOrEmpty
(
message
))
{
CodeMsg
=
"未扫到二维码"
;
LogInfo
(
"未扫到二维码"
);
return
false
;
}
if
(
storeRunStatus
.
Equals
(
StoreRunStatus
.
Wait
))
{
LogInfo
(
"二维码【 "
+
message
+
"】,设备未启动,不需要发送服务器"
);
return
false
;
}
// CodeMsg = "收到二维码【 " + message + "】,发送给服务器获取入库PosID";
LogUtil
.
info
(
Name
+
"二维码【 "
+
message
+
"】,发送给服务器获取入库PosID"
);
//发送扫码内容到服务器进行入库操作
Operation
operation
=
getLineBoxStatus
();
operation
.
op
=
1
;
operation
.
data
=
new
Dictionary
<
string
,
string
>()
{
{
"code"
,
message
},
{
"boxId"
,
1.
ToString
()
},
{
ParamDefine
.
rfid
,
CurrShelfID
}
};
string
server
=
Setting_Init
.
http_server
;
Operation
resultOperation
=
HttpHelper
.
PostJson
(
StoreManager
.
GetPostApi
(
server
),
operation
,
false
);
if
(
resultOperation
==
null
)
{
CodeMsg
=
"二维码【"
+
message
+
"】没有收到服务器反馈"
;
LogInfo
(
"二维码【 "
+
message
+
"】没有收到服务器反馈!"
);
return
false
;
}
else
if
(!
string
.
IsNullOrEmpty
(
resultOperation
.
msg
))
{
//如果有提示消息,直接显示提示
LogInfo
(
"二维码【 "
+
message
+
"】 :"
+
resultOperation
.
msg
);
return
false
;
}
if
(
resultOperation
.
op
.
Equals
(
1
))
{
Dictionary
<
string
,
string
>
data
=
resultOperation
.
data
;
if
(
data
!=
null
&&
data
.
ContainsKey
(
ParamDefine
.
posId
)
&&
data
.
ContainsKey
(
ParamDefine
.
plateH
)
&&
data
.
ContainsKey
(
ParamDefine
.
plateW
))
{
//服务器返回时有:posId库位编号,plateW:料盘宽度,plateH:料盘高度,
//postId格式BoxId#位置
string
posId
=
data
[
ParamDefine
.
posId
];
int
plateW
=
FormUtil
.
GetIntData
(
data
,
ParamDefine
.
plateW
);
int
plateH
=
FormUtil
.
GetIntData
(
data
,
ParamDefine
.
plateH
);
int
storeId
=
InOutParam
.
GetPosStoreId
(
posId
);
//根据发送的posId获取位置列表
ACBoxPosition
position
=
CSVPositionReader
<
ACBoxPosition
>.
GetPositon
(
posId
);
if
(
position
==
null
)
{
//出入库没有找到服务器发送的库位,需要打印日志方便查询原因
WarnMsg
=
"入库未找到库位:二维码【"
+
message
+
"】库位【"
+
posId
+
"】 "
;
LogUtil
.
error
(
Name
+
"收到服务器入库命令:入库未找到库位:二维码【"
+
message
+
"】库位【"
+
posId
+
"】"
);
return
false
;
}
int
p2
=
Config
.
GetComP2
(
plateH
).
TargetComP2
();
;
int
p3
=
p2
+
Config
.
GetCom_P3_P2
(
plateW
);
LogInfo
(
" 收到服务器入库命令:库位号【"
+
posId
+
"】二维码【"
+
message
+
"】设置入库参数,压紧位置["
+
p2
+
"]["
+
p3
+
"] , 开始入库!"
);
MoveInfo
.
MoveParam
.
UpdatePosId
(
message
,
posId
,
plateW
,
plateH
,
p2
,
p3
);
return
true
;
}
}
else
if
(
resultOperation
.
op
.
Equals
(
2
))
{
ReviceOutStoreProcess
(
resultOperation
);
}
else
if
(
resultOperation
.
op
.
Equals
(
5
))
{
humBean
.
ProcessHumidityCMD
(
resultOperation
);
}
else
{
LogUtil
.
error
(
"收到服务器命令:op="
+
resultOperation
.
op
+
",未找到对应处理"
);
}
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
Name
+
"GetPosIdByCode"
+
ex
.
StackTrace
);
}
return
false
;
}
/// <summary>
/// 扫码枪数据接收
/// </summary>
/// <param name="codeResultType">扫码结果</param>
/// <returns></returns>
public
enum
CodeResultType
{
/// <summary>
/// 未扫到二维码
/// </summary>
NoCode
,
/// <summary>
/// 设备未启动
/// </summary>
DeviceNotOpen
,
/// <summary>
///未收到服务器反馈
/// </summary>
NotResponseFromServer
,
WarnMsg
,
/// <summary>
/// 未找到库位
/// </summary>
NotFoundPos
,
/// <summary>
/// 不属于该仓位
/// </summary>
NotPosForPutIn
,
Error
,
Success
}
private
bool
GetPosIdByCode
(
int
rfidLoc
,
out
CodeResultType
codeResultType
)
{
try
{
if
(
LastWidth
<=
0
)
{
LastWidth
=
7
;
}
string
message
=
StoreManager
.
ProcessCode
(
LastWidth
,
LastHeight
,
LastScanCodes
);
if
(
message
.
Equals
(
""
)
||
string
.
IsNullOrEmpty
(
message
))
{
CodeMsg
=
"未扫到二维码"
;
LogInfo
(
"未扫到二维码"
);
codeResultType
=
CodeResultType
.
NoCode
;
return
false
;
}
if
(
storeRunStatus
.
Equals
(
StoreRunStatus
.
Wait
))
{
LogInfo
(
"二维码【 "
+
message
+
"】,设备未启动,不需要发送服务器"
);
codeResultType
=
CodeResultType
.
DeviceNotOpen
;
return
false
;
}
// CodeMsg = "收到二维码【 " + message + "】,发送给服务器获取入库PosID";
LogUtil
.
debug
(
Name
+
"二维码【 "
+
message
+
"】,发送给服务器获取入库PosID"
);
//查询该料盘所在料仓以及仓位
StoreManager
.
ResultType
resultType
=
StoreManager
.
GetPosForPutIn
(
Name
,
Config
,
message
,
CurrShelfID
,
rfidLoc
,
out
bool
isLockInfoMatch
);
if
(
resultType
==
StoreManager
.
ResultType
.
Error
)
{
codeResultType
=
CodeResultType
.
Error
;
return
false
;
}
else
if
(
resultType
==
StoreManager
.
ResultType
.
NotInThisBox
)
{
codeResultType
=
CodeResultType
.
NotPosForPutIn
;
return
false
;
}
if
(!
isLockInfoMatch
&&
MoveInfo
.
IsShelfLocked
)
//锁定信息不匹配则从第一层开始重新取料,一个料架只重新开始一次
{
MoveInfo
.
IsShelfLocked
=
false
;
MoveInfo
.
currShelfIndex
=
-
1
;
LogUtil
.
info
(
Name
+
"该锁定料架"
+
CurrShelfID
+
"上的料盘信息不匹配,即将从开始位置循环取料"
);
}
//发送扫码内容到服务器进行入库操作
Operation
operation
=
getLineBoxStatus
();
operation
.
op
=
1
;
operation
.
data
=
new
Dictionary
<
string
,
string
>()
{
{
"code"
,
message
},
{
"boxId"
,
1.
ToString
()
},
{
ParamDefine
.
rfid
,
CurrShelfID
}
};
string
server
=
Setting_Init
.
http_server
;
Operation
resultOperation
=
HttpHelper
.
PostJson
(
StoreManager
.
GetPostApi
(
server
),
operation
,
false
);
if
(
resultOperation
==
null
)
{
CodeMsg
=
"二维码【"
+
message
+
"】没有收到服务器反馈"
;
LogInfo
(
"二维码【 "
+
message
+
"】没有收到服务器反馈!"
);
codeResultType
=
CodeResultType
.
NotResponseFromServer
;
return
false
;
}
else
if
(!
string
.
IsNullOrEmpty
(
resultOperation
.
msg
))
{
//如果有提示消息,直接显示提示
LogInfo
(
"二维码【 "
+
message
+
"】 :"
+
resultOperation
.
msg
);
codeResultType
=
CodeResultType
.
WarnMsg
;
return
false
;
}
if
(
resultOperation
.
op
.
Equals
(
1
))
{
Dictionary
<
string
,
string
>
data
=
resultOperation
.
data
;
if
(
data
!=
null
&&
data
.
ContainsKey
(
ParamDefine
.
posId
)
&&
data
.
ContainsKey
(
ParamDefine
.
plateH
)
&&
data
.
ContainsKey
(
ParamDefine
.
plateW
))
{
//服务器返回时有:posId库位编号,plateW:料盘宽度,plateH:料盘高度,
//postId格式BoxId#位置
string
posId
=
data
[
ParamDefine
.
posId
];
int
plateW
=
FormUtil
.
GetIntData
(
data
,
ParamDefine
.
plateW
);
int
plateH
=
FormUtil
.
GetIntData
(
data
,
ParamDefine
.
plateH
);
int
storeId
=
InOutParam
.
GetPosStoreId
(
posId
);
//根据发送的posId获取位置列表
ACBoxPosition
position
=
CSVPositionReader
<
ACBoxPosition
>.
GetPositon
(
posId
);
if
(
position
==
null
)
{
//出入库没有找到服务器发送的库位,需要打印日志方便查询原因
WarnMsg
=
"入库未找到库位:二维码【"
+
message
+
"】库位【"
+
posId
+
"】 "
;
LogUtil
.
error
(
Name
+
"收到服务器入库命令:入库未找到库位:二维码【"
+
message
+
"】库位【"
+
posId
+
"】"
);
codeResultType
=
CodeResultType
.
NotFoundPos
;
return
false
;
}
int
p2
=
Config
.
GetComP2
(
plateH
).
TargetComP2
();
;
int
p3
=
p2
+
Config
.
GetCom_P3_P2
(
plateW
);
LogInfo
(
" 收到服务器入库命令:库位号【"
+
posId
+
"】二维码【"
+
message
+
"】设置入库参数,压紧位置["
+
p2
+
"]["
+
p3
+
"] , 开始入库!"
);
MoveInfo
.
MoveParam
.
UpdatePosId
(
message
,
posId
,
plateW
,
plateH
,
p2
,
p3
);
codeResultType
=
CodeResultType
.
Success
;
return
true
;
}
}
else
if
(
resultOperation
.
op
.
Equals
(
2
))
{
ReviceOutStoreProcess
(
resultOperation
);
}
else
if
(
resultOperation
.
op
.
Equals
(
5
))
{
humBean
.
ProcessHumidityCMD
(
resultOperation
);
}
else
{
LogUtil
.
error
(
"收到服务器命令:op="
+
resultOperation
.
op
+
",未找到对应处理"
);
}
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
Name
+
"GetPosIdByCode"
+
ex
.
StackTrace
);
}
codeResultType
=
CodeResultType
.
Error
;
return
false
;
}
#
endregion
}
}
source/DeviceLibrary/PackingStore/AC_BOX_Bean_Shelf.cs
0 → 100644
查看文件 @
5229fc7
using
Asa
;
using
OnlineStore.Common
;
using
OnlineStore.LoadCSVLibrary
;
using
System
;
using
System.Collections.Concurrent
;
using
System.Collections.Generic
;
using
System.Diagnostics
;
using
System.Linq
;
using
System.Text
;
using
System.Threading
;
using
System.Threading.Tasks
;
namespace
OnlineStore.DeviceLibrary
{
/// <summary>
/// 料架进出料仓处理:出入库模块共用
/// </summary>
public
partial
class
AC_BOX_Bean
{
/// <summary>
/// 开始料架入库
/// </summary>
public
void
StartShelfInStore
()
{
bool
canStart
=
(
storeRunStatus
.
Equals
(
StoreRunStatus
.
Runing
)
&&
MoveInfo
.
MoveType
.
Equals
(
StoreMoveType
.
None
));
if
(!
canStart
||
isInSuddenDown
||
isNoAirCheck
||
(
alarmType
.
Equals
(
StoreAlarmType
.
None
).
Equals
(
false
)))
{
return
;
}
clearNGShelfPos
();
setStatus
(
StoreRunStatus
.
Busy
,
StoreStatus
.
InStoreExecute
);
// EmprtShelfList = new ConcurrentQueue<string>();
if
(
IOValue
(
IO_Type
.
LineIn_Check
).
Equals
(
IO_VALUE
.
HIGH
))
{
MoveInfo
.
NewMove
(
StoreMoveType
.
InStore
,
new
InOutParam
());
MoveInfo
.
MoveParam
.
MoveP
=
new
LineMoveP
(
Config
);
MoveInfo
.
ShelfPositionList
=
new
List
<
string
>(
ShelfPosList
);
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_01_DoorOpen
);
LogInfo
(
" 空闲中,检测到入料口有料架,启动料架入库 "
);
// CylinderMove(MoveInfo, IO_Type.EntranceDoor_Close, IO_Type.EntranceDoor_Open);
// DoorBean.StartOpen(MoveInfo);
}
else
if
(
IOValue
(
IO_Type
.
LineTake_Check
).
Equals
(
IO_VALUE
.
HIGH
))
{
MoveInfo
.
NewMove
(
StoreMoveType
.
InStore
,
new
InOutParam
());
MoveInfo
.
MoveParam
.
MoveP
=
new
LineMoveP
(
Config
);
MoveInfo
.
ShelfPositionList
=
new
List
<
string
>(
ShelfPosList
);
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_06_DoorClose
);
LogInfo
(
" 空闲中,检测到入料口有料架,启动料架入库 "
);
}
else
{
LogInfo
(
" 空闲中,需要料架入库,料架入库 "
+
":入料口移门打开,更新 WaitShelfEnter=false"
);
WaitShelfEnter
=
false
;
MoveInfo
.
NewMove
(
StoreMoveType
.
InStore
,
new
InOutParam
());
MoveInfo
.
MoveParam
.
MoveP
=
new
LineMoveP
(
Config
);
MoveInfo
.
ShelfPositionList
=
new
List
<
string
>(
ShelfPosList
);
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_01_DoorOpen
);
DoorBean
.
StartOpen
(
MoveInfo
);
}
}
private
void
ShelfEnterProcess
()
{
string
mark
=
GetMarkInfo
();
string
moveName
=
"入库料架["
+
CurrShelfID
+
"]"
;
bool
instoreShelf
=
true
;
if
(
MoveInfo
.
MoveType
.
Equals
(
StoreMoveType
.
OutStore
))
{
instoreShelf
=
false
;
moveName
=
"出库料架["
+
CurrShelfID
+
"]["
+
mark
+
"]"
;
}
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_00_ReadyShelf
))
{
if
(
IOValue
(
IO_Type
.
LineIn_Check
).
Equals
(
IO_VALUE
.
HIGH
))
{
BI_04_WaitTakeSingle
(
moveName
);
}
else
if
(
IOValue
(
IO_Type
.
LineTake_Check
).
Equals
(
IO_VALUE
.
HIGH
))
{
BI_04_WaitTakeSingle
(
moveName
);
}
else
{
// MoveInfo.ShelfPositionList = new List<string>(ShelfPosList);
LogRunStepInfo
(
$
"{moveName} AGV已到达,打开入料口移门"
);
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_01_DoorOpen
);
DoorBean
.
StartOpen
(
MoveInfo
);
}
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_01_DoorOpen
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_03_LineRun
);
LogRunStepInfo
(
$
"{moveName}调用AgvClient.MayEnter,线体正转,等待LineIn_Check 或LineTake_Check 信号"
);
setAgvStatus
(
mark
,
""
,
ClientAction
.
MayEnter
,
ClientLevel
.
High
,
true
);
LineRun
();
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
LineIn_Check
,
IO_VALUE
.
HIGH
));
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
LineTake_Check
,
IO_VALUE
.
HIGH
));
MoveInfo
.
OneWaitCanEndStep
=
true
;
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_03_LineRun
))
{
BI_04_WaitTakeSingle
(
moveName
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_04_WaitTakeSingle
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_05_LineStop
);
LogRunStepInfo
(
$
"{moveName}调用Agv Config.AgvNodeName FinishEnter,取料位检测到信号,继续转动"
);
LineRun
();
setAgvStatus
(
mark
,
""
,
ClientAction
.
FinishEnter
,
ClientLevel
.
High
,
true
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_05_LineStop
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_06_DoorClose
);
LogRunStepInfo
(
$
"{moveName}入料口移门关闭 "
);
DoorBean
.
StartClose
(
MoveInfo
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_06_DoorClose
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_07_LineRun
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
7000
));
LogRunStepInfo
(
$
"{moveName}继续转动 7000ms"
);
LineRun
();
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_07_LineRun
))
{
LineStop
();
UpdateShelfId
();
//如果未读到料架号,将料架送出
if
(
CurrShelfID
.
EndsWith
(
"00"
)
&&
MoveInfo
.
MoveType
.
Equals
(
StoreMoveType
.
OutStore
))
{
LogRunStepInfo
(
$
" 执行出库【{MoveInfo.MoveParam.ToStr()}】失败,料架号[{CurrShelfID}]无效,加入等待队列并送出料架,稍后重新出库"
);
waitOutStoreList
.
Enqueue
(
MoveInfo
.
MoveParam
.
NewParam
());
MoveInfo
.
MoveParam
.
rfid
=
CurrShelfID
;
//送出料架,并且记录出库信息,等会重新出库
StartShelfOut
();
return
;
}
//如果该料架为入库料架,此时有出库任务,执行入库任务
if
(
StoreManager
.
CheckShelfInfo
(
CurrShelfID
)
&&
MoveInfo
.
MoveType
.
Equals
(
StoreMoveType
.
OutStore
))
{
LogRunStepInfo
(
$
"出库 {mark}->入库 料架号[{CurrShelfID}]为入库料架,进行入库"
);
MoveInfo
.
NewMove
(
StoreMoveType
.
InStore
,
new
InOutParam
());
MoveInfo
.
MoveParam
.
MoveP
=
new
LineMoveP
(
Config
);
MoveInfo
.
ShelfPositionList
=
new
List
<
string
>(
ShelfPosList
);
mark
=
"0"
;
instoreShelf
=
true
;
}
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_08_LocationUp
);
LogRunStepInfo
(
$
"{moveName}停止线体,读取料架{CurrShelfID},设置{Config.AgvNodeName}=None"
);
setAgvStatus
(
mark
);
// CylinderMove(MoveInfo, IO_Type.LocationCylinder_Down, IO_Type.LocationCylinder_Up);
if
(!
instoreShelf
)
{
if
(
MoveInfo
.
MoveParam
.
CurShelfPosID
.
Equals
(
""
))
{
MoveInfo
.
MoveParam
.
UpdateShelfPosId
(
ShelfPosList
[
0
]);
LogRunStepInfo
(
$
"ShelfPosID未设置,默认ShelfPosID={MoveInfo.MoveParam.CurShelfPosID}"
);
}
// LastRfidID = MoveInfo.MoveParam.rfid;
LastOutParam
=
MoveInfo
.
MoveParam
;
}
else
{
LastOutParam
=
new
InOutParam
();
// LastRfidID = "";
}
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_08_LocationUp
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_09_TopCylinderUp
);
LogRunStepInfo
(
moveName
+
CurrShelfID
+
"顶升上升"
);
CylinderMove
(
MoveInfo
,
IO_Type
.
TopCylinder_Down
,
IO_Type
.
TopCylinder_Up
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BI_09_TopCylinderUp
))
{
if
(
instoreShelf
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_10_StartGetTray
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
((
int
)
TimeSpan
.
FromMinutes
(
75
).
TotalMilliseconds
));
//获取料架的锁定状态
bool
lockState
=
StoreManager
.
GetShelfLockInfo
(
Name
,
CID
,
CurrShelfID
,
out
MoveInfo
.
shelfLockDatas
);
if
(
lockState
&&
MoveInfo
.
shelfLockDatas
!=
null
)
{
MoveInfo
.
IsShelfLocked
=
true
;
if
(
MoveInfo
.
shelfLockDatas
.
Count
.
Equals
(
0
))
LogRunStepInfo
(
moveName
+
"该锁定料架上的料盘不属于该料仓,即将送出锁定料架"
);
else
LogRunStepInfo
(
moveName
+
"开始到料架指定位置取料盘 "
);
}
else
{
MoveInfo
.
IsShelfLocked
=
false
;
LogRunStepInfo
(
moveName
+
"开始循环料架取料盘 "
);
}
MoveInfo
.
EndStepWait
();
}
else
{
if
(
string
.
IsNullOrEmpty
(
StoreManager
.
FindRealRfidByTempRfid
(
MoveInfo
.
MoveParam
.
rfid
)))
{
//新料架,检查料架上是否有治具
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
SO_PreCheck_01_StartGetTray
);
}
else
{
SO_03_ToBagPosition
();
}
}
}
}
private
void
UpdateShelfId
()
{
//读取RFID
RFIDData
data
=
RFIDManager
.
ReadRFID
(
Config
.
RFID_IP
,
true
);
CurrShelfID
=
data
.
NumStr
();
LogRunStepInfo
(
"更新当前料架号CurrShelfID=【"
+
CurrShelfID
+
"】,LastRfidID=【"
+
GetLastRfid
()
+
"】"
);
}
/// <summary>
/// 等待取料位检测到信号
/// </summary>
/// <param name="moveName"></param>
private
void
BI_04_WaitTakeSingle
(
string
moveName
)
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BI_04_WaitTakeSingle
);
LogRunStepInfo
(
$
"{moveName} 线体正转,等待LineIn_Check=Low, 信号LineTake_Check=High"
);
LineRun
();
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
LineIn_Check
,
IO_VALUE
.
LOW
));
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
LineTake_Check
,
IO_VALUE
.
HIGH
));
}
/// <summary>
/// 所有料盘已取料完成,送出料架
/// </summary>
private
void
StartShelfOut
()
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_01_TopDown
);
if
(
MoveInfo
.
MoveType
.
Equals
(
StoreMoveType
.
OutStore
))
{
string
mark
=
GetMarkInfo
();
LogRunStepInfo
(
"送出["
+
CurrShelfID
+
"]["
+
mark
+
"]:顶升下降,调用 NeedLeave["
+
mark
+
"]["
+
CurrShelfID
+
"] "
);
AgvClient
.
NeedLeave
(
Config
.
AgvNodeName
,
mark
,
CurrShelfID
);
}
else
{
LogRunStepInfo
(
"送出空料架["
+
CurrShelfID
+
"]:顶升下降,调用 NeedLeave[0]["
+
CurrShelfID
+
"],clearPutInRfid["
+
CurrShelfID
+
"]"
);
AgvClient
.
NeedLeave
(
Config
.
AgvNodeName
,
"0"
,
CurrShelfID
);
StoreManager
.
clearPutInRfid
(
Name
,
CurrShelfID
);
ACAxisMove
(
Config
.
UpDown_Axis
,
Config
.
UpDownAxis_P1
,
Config
.
UpDownAxis_P1_Speed
);
}
CylinderMove
(
MoveInfo
,
IO_Type
.
TopCylinder_Up
,
IO_Type
.
TopCylinder_Down
);
}
private
void
ShelfOutProcess
()
{
string
mark
=
GetMarkInfo
();
string
moveName
=
"送出入库料架["
+
CurrShelfID
+
"]["
+
mark
+
"]"
;
if
(
MoveInfo
.
MoveType
.
Equals
(
StoreMoveType
.
OutStore
))
{
moveName
=
"送出出库料架["
+
CurrShelfID
+
"]["
+
mark
+
"]"
;
}
// LogCPU();
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_01_TopDown
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_02_LocatinDown
);
LogRunStepInfo
(
moveName
+
"定位气缸下降"
);
// CylinderMove(MoveInfo, IO_Type.LocationCylinder_Up, IO_Type.LocationCylinder_Down);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_02_LocatinDown
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_03_WaitEmptyAgv
);
MoveInfo
.
TimeOutSeconds
=
600
;
//MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(30000));
//等待agv到达
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitAgvAction
((
int
)
ClientAction
.
Arrive
));
LogRunStepInfo
(
moveName
+
"再次调用 NeedLeave["
+
mark
+
"]["
+
CurrShelfID
+
"],等待Agv "
+
Config
.
AgvNodeName
+
" Arrive ,最多等待1200秒"
);
setAgvStatus
(
mark
,
CurrShelfID
,
ClientAction
.
NeedLeave
,
ClientLevel
.
High
,
true
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_03_WaitEmptyAgv
))
{
//agv到达
if
(
AgvClient
.
GetAction
(
Config
.
AgvNodeName
).
Equals
(
ClientAction
.
Arrive
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_04_DoorOpen
);
LogRunStepInfo
(
moveName
+
"agv到达,打开入料口移门"
);
DoorBean
.
StartOpen
(
MoveInfo
);
}
else
{
//如果料架已被拉出,也算结束
if
(
IOValue
(
IO_Type
.
LineIn_Check
).
Equals
(
IO_VALUE
.
LOW
)
&&
IOValue
(
IO_Type
.
LineTake_Check
).
Equals
(
IO_VALUE
.
LOW
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_06_LineBackRun
);
AgvClient
.
SetToNone
(
Config
.
AgvNodeName
);
//如果agv未到达,直接结束
MoveEndToRuningStatus
();
//EmprtShelfList = new ConcurrentQueue<string>();
InOutStoreLog
(
moveName
+
"等待Agv "
+
Config
.
AgvNodeName
+
" Arrive超时,检测不到料架信号,认为料架已离开,出库结束,设置"
+
Config
.
AgvNodeName
+
"=None"
);
}
else
{
TimeSpan
span
=
DateTime
.
Now
-
MoveInfo
.
LastSetpTime
;
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
((
int
)
span
.
TotalMilliseconds
+
30000
));
LogRunStepInfo
(
moveName
+
"等待Agv "
+
Config
.
AgvNodeName
+
" Arrive超时,再等待30秒"
);
}
}
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_04_DoorOpen
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_05_WaitReady
);
MoveInfo
.
TimeOutSeconds
=
120
;
LogRunStepInfo
(
moveName
+
"移门已打开,调用 MayLeave ["
+
mark
+
"]["
+
CurrShelfID
+
"],等待agv "
+
Config
.
AgvNodeName
+
" Ready"
);
setAgvStatus
(
mark
,
CurrShelfID
,
ClientAction
.
MayLeave
,
ClientLevel
.
High
,
true
);
//等待agv到达
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitAgvAction
((
int
)
ClientAction
.
Ready
));
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_05_WaitReady
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_06_LineBackRun
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
500
));
LogRunStepInfo
(
moveName
+
"收到agv "
+
Config
.
AgvNodeName
+
" Ready ,线体开始反转"
);
LineBackRun
();
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_06_LineBackRun
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_07_WaitShelfOut
);
LogRunStepInfo
(
moveName
+
"等待取料工位无信号 "
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
LineTake_Check
,
IO_VALUE
.
LOW
));
// MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.LineIn_Check, IO_VALUE.HIGH));
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_07_WaitShelfOut
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_08_WaitLineIn
);
LogRunStepInfo
(
moveName
+
"等待 入料口有信号,最多等待30秒"
);
// MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.LineTake_Check, IO_VALUE.LOW));
MoveInfo
.
OneWaitCanEndStep
=
true
;
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
30000
));
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
LineIn_Check
,
IO_VALUE
.
HIGH
));
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_08_WaitLineIn
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_09_WaitTime
);
LogRunStepInfo
(
moveName
+
"再转动1000 , 等待入料口无信号,清理RFID"
);
RFIDManager
.
ReadRFID
(
Config
.
RFID_IP
,
true
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
1000
));
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
LineIn_Check
,
IO_VALUE
.
LOW
));
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_09_WaitTime
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_10_WaitAGVLeave
);
MoveInfo
.
TimeOutSeconds
=
180
;
LogRunStepInfo
(
moveName
+
"等待DoorClose事件,最多等待180000 "
);
MoveInfo
.
OneWaitCanEndStep
=
true
;
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
180000
));
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitDoorClose
());
//MoveInfo.WaitList.Add(WaitResultInfo.WaitAgvAction(action.FinishOut));
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_10_WaitAGVLeave
))
{
MoveInfo
.
NextMoveStep
(
StoreMoveStep
.
BS_11_CloseDoor
);
LogRunStepInfo
(
moveName
+
"停止线体转动,关闭仓门 ,发送FinishLeave ,等待最少5000"
);
setAgvStatus
(
mark
,
CurrShelfID
,
ClientAction
.
FinishLeave
,
ClientLevel
.
High
,
true
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
5000
));
LineStop
();
DoorBean
.
StartClose
(
MoveInfo
);
}
else
if
(
MoveInfo
.
MoveStep
.
Equals
(
StoreMoveStep
.
BS_11_CloseDoor
))
{
//结束
MoveEndToRuningStatus
();
setAgvStatus
();
//EmprtShelfList = new ConcurrentQueue<string>();
LogRunStepInfo
(
moveName
+
"料架"
+
CurrShelfID
+
$
"已离开[{getNGShelfPos()}],设置"
+
Config
.
AgvNodeName
+
"=None,清理rfid"
);
clearNGShelfPos
();
RFIDManager
.
ReadRFID
(
Config
.
RFID_IP
,
true
);
CurrShelfID
=
""
;
LastOutParam
=
new
InOutParam
();
//LastRfidID = "";
}
}
}
}
source/DeviceLibrary/PackingStore/AC_BOX_Bean_server_connect.cs
0 → 100644
查看文件 @
5229fc7
using
Asa
;
using
OnlineStore.Common
;
using
OnlineStore.LoadCSVLibrary
;
using
System
;
using
System.Collections.Concurrent
;
using
System.Collections.Generic
;
using
System.Diagnostics
;
using
System.Linq
;
using
System.Text
;
using
System.Threading
;
using
System.Threading.Tasks
;
namespace
OnlineStore.DeviceLibrary
{
/// <summary>
/// 与服务器通信定时器,每1秒向服务器通知一次状态,同时执行出库操作
/// </summary>
public
partial
class
AC_BOX_Bean
{
private
string
CodeMsg
=
""
;
private
bool
isInProcess
=
false
;
private
DateTime
lastConTime
=
DateTime
.
Now
;
public
void
server_connect_timer_Tick
(
object
sender
,
EventArgs
e
)
{
if
(
isInProcess
)
{
TimeSpan
span
=
DateTime
.
Now
-
lastConTime
;
if
(
span
.
TotalSeconds
<
60
)
{
return
;
}
}
isInProcess
=
true
;
lastConTime
=
DateTime
.
Now
;
try
{
////HumitureController.QueryData();
//humBean.HumidityProcess(this);
//if (StoreManager.IsConnectServer)
//{
// SendLineStatus();
//}
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
Name
+
"定时SendLineStatus出错:"
+
ex
.
ToString
());
}
finally
{
isInProcess
=
false
;
}
}
/// <summary>
/// 获取整个料仓的状态
/// </summary>
public
Operation
getLineBoxStatus
()
{
//构建发送给服务器的对象
Operation
lineOperation
=
new
Operation
();
lineOperation
.
msg
=
""
;
lineOperation
.
alarmList
=
new
List
<
AlarmInfo
>();
lineOperation
.
cid
=
CID
;
lineOperation
.
seq
=
ConfigAppSettings
.
nextSeq
();
lineOperation
.
status
=
1
;
if
(
WarnMsg
!=
""
)
{
lineOperation
.
status
=
(
int
)
StoreStatus
.
Warning
;
lineOperation
.
msg
=
WarnMsg
;
}
lineOperation
.
status
=
(
int
)
StoreStatus
.
StoreOnline
;
BoxStatus
boxStatus
=
new
BoxStatus
();
boxStatus
.
boxId
=
1
;
boxStatus
.
msg
=
WarnMsg
;
lineOperation
.
msg
=
WarnMsg
;
if
(
WarnMsg
.
Equals
(
""
))
{
boxStatus
.
msg
=
CodeMsg
;
lineOperation
.
msg
=
CodeMsg
;
}
CodeMsg
=
""
;
//WarnMsg = "";
//状态
boxStatus
.
status
=
(
int
)
storeStatus
;
if
(
IsDebug
)
{
boxStatus
.
status
=
(
int
)
StoreStatus
.
Debugging
;
}
else
if
(
storeStatus
.
Equals
(
StoreStatus
.
OutStoreBoxEnd
)
||
storeStatus
.
Equals
(
StoreStatus
.
InStoreEnd
))
{
boxStatus
.
data
.
Add
(
ParamDefine
.
posId
,
lastPosId
);
}
else
if
(!
lastPosId
.
Equals
(
""
))
{
boxStatus
.
data
.
Add
(
ParamDefine
.
posId
,
lastPosId
);
boxStatus
.
status
=
(
int
)
lastPosIdStatus
;
if
(
lastPosId
!=
""
)
{
LogUtil
.
info
(
"给服务器发送出入库完成消息:"
+
Name
+
",status【"
+
lastPosIdStatus
+
"】posId【"
+
lastPosId
+
"】"
);
}
lastPosId
=
""
;
}
//温湿度
//ASTemperateParam param = HumitureServer.GetTemperateParam(Config.Temperate_Serveraddress);
HumitureParam
param
=
humBean
.
LastData
;
if
(
param
!=
null
)
{
boxStatus
.
humidity
=
param
.
Humidity
.
ToString
();
boxStatus
.
temperature
=
param
.
Temperate
.
ToString
();
}
lineOperation
.
boxStatus
.
Add
(
1
,
boxStatus
);
if
(!
alarmType
.
Equals
(
StoreAlarmType
.
None
))
{
lineOperation
.
alarmList
.
Add
(
alarmInfo
);
}
return
lineOperation
;
}
public
void
SendLineStatus
()
{
DateTime
time
=
DateTime
.
Now
;
//构建发送给服务器的对象
Operation
lineOperation
=
getLineBoxStatus
();
//如果还没湿度范围,先获取
if
(
humBean
.
NeedGetTem
())
{
lineOperation
.
op
=
5
;
LogUtil
.
error
(
Name
+
"没有湿度预警范围,需要从服务器获取,发送OP="
+
lineOperation
.
op
,
DeviceID
+
105
);
}
string
server
=
Setting_Init
.
http_server
;
Operation
resultOperation
=
HttpHelper
.
PostJson
(
StoreManager
.
GetPostApi
(
server
),
lineOperation
,
false
);
//发送状态信息到服务器
if
(
resultOperation
==
null
||
(
resultOperation
.
op
<=
0
))
{
//判断服务端是否返回出库操作
return
;
}
if
(
resultOperation
.
op
.
Equals
(
1
))
{
// ReviceInStoreProcess("", resultOperation);
}
else
if
(
resultOperation
.
op
.
Equals
(
2
))
{
ReviceOutStoreProcess
(
resultOperation
);
}
else
if
(
resultOperation
.
op
.
Equals
(
5
))
{
humBean
.
ProcessHumidityCMD
(
resultOperation
);
}
else
{
LogUtil
.
error
(
"收到服务器命令:op="
+
resultOperation
.
op
+
",未找到对应处理"
);
}
TimeSpan
span
=
DateTime
.
Now
-
time
;
if
(
span
.
TotalMilliseconds
>
10
)
{
LogUtil
.
info
(
Name
+
"执行TimerProcess 共处理了【"
+
span
.
TotalMilliseconds
+
"】毫秒"
);
}
}
private
void
ReviceOutStoreProcess
(
Operation
resultOperation
)
{
DateTime
time
=
DateTime
.
Now
;
Dictionary
<
string
,
string
>
data
=
resultOperation
.
data
;
if
(
data
!=
null
&&
data
.
ContainsKey
(
ParamDefine
.
posId
)
&&
data
.
ContainsKey
(
ParamDefine
.
plateH
)
&&
data
.
ContainsKey
(
ParamDefine
.
plateW
))
{
char
splitChar
=
'|'
;
string
[]
posIdArray
=
data
[
ParamDefine
.
posId
].
Split
(
splitChar
);
string
[]
plateWArray
=
data
[
ParamDefine
.
plateW
].
Split
(
splitChar
);
string
[]
plateHArray
=
data
[
ParamDefine
.
plateH
].
Split
(
splitChar
);
bool
urgentReel
=
FormUtil
.
GetBoolData
(
data
,
ParamDefine
.
urgentReel
);
bool
cutReel
=
FormUtil
.
GetBoolData
(
data
,
ParamDefine
.
cutReel
);
bool
smallReel
=
FormUtil
.
GetBoolData
(
data
,
ParamDefine
.
smallReel
);
string
rfid
=
data
.
ContainsKey
(
ParamDefine
.
rfid
)
?
data
[
ParamDefine
.
rfid
]
:
""
;
int
rfidLoc
=
FormUtil
.
GetIntData
(
data
,
ParamDefine
.
rfidLoc
);
string
barcode
=
data
.
ContainsKey
(
ParamDefine
.
barcode
)
?
data
[
ParamDefine
.
barcode
]
:
""
;
string
realRfid
=
data
.
ContainsKey
(
ParamDefine
.
realRfid
)
?
data
[
ParamDefine
.
realRfid
]
:
""
;
int
taskCount
=
FormUtil
.
GetIntData
(
data
,
ParamDefine
.
taskCount
,
0
);
//urgentReel: true 表示紧急料,需要出到料串上
//cutReel: true 表示分盘料,需要出到料串上
//smallReel: true 小料(7x8),放置到小料架上
//rfid: 分配的料架RFID
//rfidLoc: 料架的架位,值为 - 1时,可以自由分配皮带线, 小料时,架位为1 - 46优先走1 / 2号皮带线,47 - 92优先走3 / 4号皮带线, 70,71,72时只能分配到3 / 4号皮带线; 大料时,架位1 - 6优先走1 / 2号皮带线, 7 - 12优先走3 / 4号皮带线
string
dataStr
=
JsonHelper
.
SerializeObject
(
data
);
LogUtil
.
info
(
"收到服务器出库消息:【"
+
dataStr
+
"】"
);
int
index
=
-
1
;
foreach
(
string
posId
in
posIdArray
)
{
index
++;
int
plateW
=
Convert
.
ToInt32
(
plateWArray
[
index
]);
int
plateH
=
Convert
.
ToInt32
(
plateHArray
[
index
]);
string
shelfPosID
=
StoreManager
.
GetShelfIDByLoc
(
rfidLoc
,
ShelfPosList
);
InOutParam
inoutParam
=
new
InOutParam
(
barcode
,
posId
,
shelfPosID
,
plateW
,
plateH
,
urgentReel
,
cutReel
,
smallReel
,
rfid
,
rfidLoc
,
taskCount
,
realRfid
);
//根据发送的posId获取位置列表
ACBoxPosition
position
=
CSVPositionReader
<
ACBoxPosition
>.
GetPositon
(
posId
);
if
(
position
==
null
)
{
//出入库没有找到服务器发送的库位,需要打印日志方便查询原因
WarnMsg
=
Name
+
"未找到库位:【"
+
inoutParam
.
ToStr
()
+
"】"
;
LogUtil
.
error
(
WarnMsg
);
continue
;
}
try
{
//判断是否接收过此库位的出库信息
if
(
MoveInfo
.
MoveType
.
Equals
(
StoreMoveType
.
OutStore
)
&&
MoveInfo
.
MoveParam
.
PosID
.
Equals
(
posId
))
{
LogUtil
.
error
(
Name
+
" 出库命令【"
+
inoutParam
.
ToStr
()
+
"】重复,正在【"
+
posId
+
"】出库中"
);
continue
;
}
//判断排队列表中是否已存在
List
<
InOutParam
>
reviceList
=
new
List
<
InOutParam
>(
waitOutStoreList
);
reviceList
=
(
from
m
in
reviceList
where
m
.
PosID
.
Equals
(
posId
)
select
m
).
ToList
<
InOutParam
>();
if
(
reviceList
.
Count
>
0
)
{
LogUtil
.
error
(
Name
+
" 出库命令【"
+
inoutParam
.
ToStr
()
+
"】重复,排队列表中已存在【"
+
reviceList
[
0
].
ToStr
()
+
"】"
);
continue
;
}
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
Name
+
"验证出库【"
+
inoutParam
.
ToStr
()
+
"】是否重复出错:"
+
ex
.
ToString
());
}
StartExecuctOut
(
inoutParam
);
}
TimeSpan
span
=
DateTime
.
Now
-
time
;
if
(
span
.
TotalMilliseconds
>
10
)
{
LogInfo
(
Name
+
"执行 ReviceOutStoreProcess 共处理了【"
+
span
.
TotalMilliseconds
+
"】毫秒"
);
}
}
}
}
}
\ No newline at end of file
\ No newline at end of file
source/DeviceLibrary/
AC
PackingStore/EnteryDoorBean.cs
→
source/DeviceLibrary/PackingStore/EnteryDoorBean.cs
查看文件 @
5229fc7
...
@@ -101,9 +101,9 @@ namespace OnlineStore.DeviceLibrary
...
@@ -101,9 +101,9 @@ namespace OnlineStore.DeviceLibrary
}
}
}
}
public
bool
StartOpen
(
Stor
eMoveInfo
moveInfo
)
public
bool
StartOpen
(
Devic
eMoveInfo
moveInfo
)
{
{
bool
UseDoor
=
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
UseDoor
).
Equals
(
1
)
;
bool
UseDoor
=
Setting_Init
.
UseDoor
;
if
(!
UseDoor
)
if
(!
UseDoor
)
{
{
return
false
;
return
false
;
...
@@ -124,9 +124,9 @@ namespace OnlineStore.DeviceLibrary
...
@@ -124,9 +124,9 @@ namespace OnlineStore.DeviceLibrary
return
Start
(
IO_Type
.
EntranceDoor_Open
,
IO_Type
.
EntranceDoor_Open
);
return
Start
(
IO_Type
.
EntranceDoor_Open
,
IO_Type
.
EntranceDoor_Open
);
}
}
public
bool
StartClose
(
Stor
eMoveInfo
moveInfo
)
public
bool
StartClose
(
Devic
eMoveInfo
moveInfo
)
{
{
bool
UseDoor
=
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
UseDoor
).
Equals
(
1
)
;
bool
UseDoor
=
Setting_Init
.
UseDoor
;
if
(!
UseDoor
)
if
(!
UseDoor
)
{
{
return
false
;
return
false
;
...
...
source/DeviceLibrary/
AC
PackingStore/HumitureBean.cs
→
source/DeviceLibrary/PackingStore/HumitureBean.cs
查看文件 @
5229fc7
...
@@ -65,8 +65,8 @@ namespace OnlineStore.DeviceLibrary
...
@@ -65,8 +65,8 @@ namespace OnlineStore.DeviceLibrary
public
bool
TempOrHumidityIsAlarm
=
false
;
public
bool
TempOrHumidityIsAlarm
=
false
;
public
DateTime
TempAlarmTime
=
DateTime
.
Now
;
public
DateTime
TempAlarmTime
=
DateTime
.
Now
;
private
float
StartBlowValue
=
(
float
)
ConfigAppSettings
.
GetNumValue
(
Setting_Init
.
StartBlowValue
)
;
private
float
StartBlowValue
=
(
float
)
Setting_Init
.
StartBlowValue
;
private
float
StopBlowValue
=
(
float
)
ConfigAppSettings
.
GetNumValue
(
Setting_Init
.
StopBlowValue
)
;
private
float
StopBlowValue
=
(
float
)
Setting_Init
.
StopBlowValue
;
public
string
currTempStr
=
""
;
public
string
currTempStr
=
""
;
internal
void
HumidityProcess
(
AC_BOX_Bean
box
)
internal
void
HumidityProcess
(
AC_BOX_Bean
box
)
{
{
...
...
source/DeviceLibrary/
AC
PackingStore/PackingStoreBean.cs
→
source/DeviceLibrary/PackingStore/PackingStoreBean.cs
查看文件 @
5229fc7
...
@@ -29,8 +29,11 @@ namespace OnlineStore.DeviceLibrary
...
@@ -29,8 +29,11 @@ namespace OnlineStore.DeviceLibrary
public
Dictionary
<
int
,
AC_BOX_Bean
>
BoxMap
=
new
Dictionary
<
int
,
AC_BOX_Bean
>();
public
Dictionary
<
int
,
AC_BOX_Bean
>
BoxMap
=
new
Dictionary
<
int
,
AC_BOX_Bean
>();
public
Store_Config
Config
{
get
;
set
;
}
public
Store_Config
Config
{
get
;
set
;
}
public
bool
UseBuzzer
=
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
UseBuzzer
).
Equals
(
1
);
public
bool
UseBuzzer
=
Setting_Init
.
UseBuzzer
;
public
bool
AutoShelfInstore
=
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
AutoShelfInstore
).
Equals
(
1
);
/// <summary>
/// 入口有料架自动入库
/// </summary>
public
bool
AutoShelfInstore
=
Setting_Init
.
AutoShelfInstore
;
List
<
string
>
rfidList
=
new
List
<
string
>();
List
<
string
>
rfidList
=
new
List
<
string
>();
#
region
初始化
#
region
初始化
...
@@ -49,7 +52,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -49,7 +52,7 @@ namespace OnlineStore.DeviceLibrary
this
.
Config
=
lineConfig
;
this
.
Config
=
lineConfig
;
this
.
DeviceID
=
lineConfig
.
DeviceID
;
this
.
DeviceID
=
lineConfig
.
DeviceID
;
MoveInfo
=
new
Stor
eMoveInfo
(
DeviceID
);
MoveInfo
=
new
Devic
eMoveInfo
(
DeviceID
);
Name
=
(
" Store_"
+
Config
.
CID
+
" "
).
ToUpper
();
Name
=
(
" Store_"
+
Config
.
CID
+
" "
).
ToUpper
();
List
<
string
>
ioList
=
new
List
<
string
>();
List
<
string
>
ioList
=
new
List
<
string
>();
...
@@ -324,7 +327,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -324,7 +327,7 @@ namespace OnlineStore.DeviceLibrary
{
{
//取新的Io状态
//取新的Io状态
IO_VALUE
autoSingle
=
IOValue
(
IO_Type
.
Reset_BTN
);
IO_VALUE
autoSingle
=
IOValue
(
IO_Type
.
Reset_BTN
);
if
(
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
App_AutoRun
).
Equals
(
1
)
)
if
(
Setting_Init
.
App_AutoRun
)
{
{
if
(
autoSingle
.
Equals
(
IO_VALUE
.
HIGH
)
&&
lastAutoRun
.
Equals
(
IO_VALUE
.
LOW
))
if
(
autoSingle
.
Equals
(
IO_VALUE
.
HIGH
)
&&
lastAutoRun
.
Equals
(
IO_VALUE
.
LOW
))
{
{
...
...
source/DeviceLibrary/
AC
PackingStore/StoreManager.cs
→
source/DeviceLibrary/PackingStore/StoreManager.cs
查看文件 @
5229fc7
...
@@ -23,7 +23,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -23,7 +23,7 @@ namespace OnlineStore.DeviceLibrary
public
static
Store_Config
Config
=
null
;
public
static
Store_Config
Config
=
null
;
public
static
Dictionary
<
int
,
BaseConfig
>
AllConfigMap
=
null
;
public
static
Dictionary
<
int
,
BaseConfig
>
AllConfigMap
=
null
;
private
static
bool
isInit
=
false
;
private
static
bool
isInit
=
false
;
public
static
bool
IsConnectServer
=
!
ConfigAppSettings
.
GetValue
(
Setting_Init
.
http_server
)
.
Equals
(
""
);
public
static
bool
IsConnectServer
=
!
Setting_Init
.
http_server
.
Equals
(
""
);
public
StoreManager
()
public
StoreManager
()
{
{
}
}
...
@@ -55,7 +55,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -55,7 +55,7 @@ namespace OnlineStore.DeviceLibrary
BaseConfig
.
ProIOIpMap
=
new
Dictionary
<
string
,
string
>();
BaseConfig
.
ProIOIpMap
=
new
Dictionary
<
string
,
string
>();
if
(!
isInit
)
if
(!
isInit
)
{
{
string
server
=
ConfigAppSettings
.
GetValue
(
Setting_Init
.
http_server
)
;
string
server
=
Setting_Init
.
http_server
;
if
(
server
.
Equals
(
""
))
if
(
server
.
Equals
(
""
))
{
{
IsConnectServer
=
false
;
IsConnectServer
=
false
;
...
@@ -69,31 +69,29 @@ namespace OnlineStore.DeviceLibrary
...
@@ -69,31 +69,29 @@ namespace OnlineStore.DeviceLibrary
CheckEnum
(
typeof
(
StoreRunStatus
));
CheckEnum
(
typeof
(
StoreRunStatus
));
isInit
=
true
;
isInit
=
true
;
string
storeType
=
ConfigAppSettings
.
GetValue
(
Setting_Init
.
Store_Type
)
;
string
storeType
=
Setting_Init
.
Store_Type
;
int
count
=
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
store_count
)
;
int
count
=
Setting_Init
.
store_count
;
LogUtil
.
info
(
"配置的料仓 类型="
+
storeType
+
",开始加载料仓配置"
);
LogUtil
.
info
(
"配置的料仓 类型="
+
storeType
+
",开始加载料仓配置"
);
string
appPath
=
Application
.
StartupPath
;
string
appPath
=
Application
.
StartupPath
;
string
CID
=
ConfigAppSettings
.
GetValue
(
Setting_Init
.
Store_CID
);
Dictionary
<
int
,
AC_BOX_Config
>
storeConfig
=
new
Dictionary
<
int
,
AC_BOX_Config
>();
Dictionary
<
int
,
AC_BOX_Config
>
storeConfig
=
new
Dictionary
<
int
,
AC_BOX_Config
>();
if
(
storeType
==
StoreType
.
RC_AC_PA
)
if
(
storeType
==
StoreType
.
RC_AC_PA
)
{
{
string
linefilePath
=
appPath
+
ConfigAppSettings
.
GetValue
(
Setting_Init
.
Store_ConfigPath
)
;
string
linefilePath
=
appPath
+
Setting_Init
.
Store_ConfigPath
;
Config
=
CSVConfigReader
.
LoadLineConfig
(
0
,
CID
,
"Line"
,
linefilePath
);
Config
=
CSVConfigReader
.
LoadLineConfig
(
0
,
Setting_Init
.
Store_
CID
,
"Line"
,
linefilePath
);
AllConfigMap
.
Add
(
0
,
Config
);
AllConfigMap
.
Add
(
0
,
Config
);
string
moveEquipConfig
=
ConfigAppSettings
.
GetValue
(
Setting_Init
.
BOX_ConfigPath
)
;
string
moveEquipConfig
=
Setting_Init
.
BOX_ConfigPath
;
for
(
int
i
=
1
;
i
<=
count
;
i
++)
for
(
int
i
=
1
;
i
<=
count
;
i
++)
{
{
string
nameStr
=
i
.
ToString
().
PadLeft
(
1
,
'0'
);
string
nameStr
=
i
.
ToString
().
PadLeft
(
1
,
'0'
);
string
config
=
appPath
+
moveEquipConfig
.
Replace
(
".csv"
,
"_"
+
nameStr
+
".csv"
);
string
config
=
appPath
+
moveEquipConfig
.
Replace
(
".csv"
,
"_"
+
nameStr
+
".csv"
);
string
storeIdConfig
=
Setting_Init
.
Store_CID
+
"_"
+
i
;
string
boxCid
=
ConfigAppSettings
.
GetValue
(
"Store_CID"
+
"_"
+
i
,
"packing-"
);
string
boxCid
=
ConfigAppSettings
.
GetValue
(
storeIdConfig
);
AC_BOX_Config
moveConfig
=
CSVConfigReader
.
LoadBoxConfig
(
i
,
boxCid
,
"BOX"
,
config
);
AC_BOX_Config
moveConfig
=
CSVConfigReader
.
LoadBoxConfig
(
i
,
boxCid
,
"BOX"
,
config
);
AllConfigMap
.
Add
(
i
,
moveConfig
);
AllConfigMap
.
Add
(
i
,
moveConfig
);
storeConfig
.
Add
(
i
,
moveConfig
);
storeConfig
.
Add
(
i
,
moveConfig
);
}
}
string
positionConfigFile
=
appPath
+
ConfigAppSettings
.
GetValue
(
Setting_Init
.
Store_Position_Config
)
;
string
positionConfigFile
=
appPath
+
Setting_Init
.
Store_Position_Config
;
if
(
count
>
1
||
(!
File
.
Exists
(
positionConfigFile
)))
if
(
count
>
1
||
(!
File
.
Exists
(
positionConfigFile
)))
{
{
for
(
int
i
=
1
;
i
<=
count
;
i
++)
for
(
int
i
=
1
;
i
<=
count
;
i
++)
...
@@ -111,7 +109,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -111,7 +109,7 @@ namespace OnlineStore.DeviceLibrary
}
}
string
shelfConfig
=
appPath
+
ConfigAppSettings
.
GetValue
(
Setting_Init
.
Shelf_Position_Config
)
;
string
shelfConfig
=
appPath
+
Setting_Init
.
Shelf_Position_Config
;
//if (File.Exists(shelfConfig))
//if (File.Exists(shelfConfig))
//{
//{
// CSVPositionReader<ShelfPosition>.AddCSVFile(shelfConfig);
// CSVPositionReader<ShelfPosition>.AddCSVFile(shelfConfig);
...
@@ -150,7 +148,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -150,7 +148,7 @@ namespace OnlineStore.DeviceLibrary
{
{
//位置配置到文件中
//位置配置到文件中
string
appPath
=
Application
.
StartupPath
;
string
appPath
=
Application
.
StartupPath
;
string
configFile
=
appPath
+
ConfigAppSettings
.
GetValue
(
Setting_Init
.
BOX_ConfigPath
)
;
string
configFile
=
appPath
+
Setting_Init
.
BOX_ConfigPath
;
if
(!
Directory
.
Exists
(
configFile
))
if
(!
Directory
.
Exists
(
configFile
))
{
{
...
@@ -191,10 +189,10 @@ namespace OnlineStore.DeviceLibrary
...
@@ -191,10 +189,10 @@ namespace OnlineStore.DeviceLibrary
LogUtil
.
error
(
box
.
Name
+
"GetPositon["
+
param
.
PosID
+
"]=null,没有库位不能执行出入库"
);
LogUtil
.
error
(
box
.
Name
+
"GetPositon["
+
param
.
PosID
+
"]=null,没有库位不能执行出入库"
);
return
false
;
return
false
;
}
}
ShelfPosition
sp
=
CSVPositionReader
<
ShelfPosition
>.
GetPositon
(
param
.
ShelfPosID
);
ShelfPosition
sp
=
CSVPositionReader
<
ShelfPosition
>.
GetPositon
(
param
.
Cur
ShelfPosID
);
if
(
sp
==
null
&&
needCheckShelf
)
if
(
sp
==
null
&&
needCheckShelf
)
{
{
LogUtil
.
error
(
box
.
Name
+
"GetPositon["
+
param
.
ShelfPosID
+
"]=null,没有库位不能执行出入库"
);
LogUtil
.
error
(
box
.
Name
+
"GetPositon["
+
param
.
Cur
ShelfPosID
+
"]=null,没有库位不能执行出入库"
);
return
false
;
return
false
;
}
}
if
(
param
.
PlateH
<=
0
)
if
(
param
.
PlateH
<=
0
)
...
@@ -256,7 +254,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -256,7 +254,7 @@ namespace OnlineStore.DeviceLibrary
{
{
if
(
host
==
""
)
if
(
host
==
""
)
{
{
host
=
ConfigAppSettings
.
GetValue
(
Setting_Init
.
http_server
)
;
host
=
Setting_Init
.
http_server
;
}
}
if
(!
host
.
StartsWith
(
"http://"
))
if
(!
host
.
StartsWith
(
"http://"
))
{
{
...
@@ -270,7 +268,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -270,7 +268,7 @@ namespace OnlineStore.DeviceLibrary
}
}
private
static
string
GetAddr
(
string
addr
,
Dictionary
<
string
,
string
>
paramsMap
)
private
static
string
GetAddr
(
string
addr
,
Dictionary
<
string
,
string
>
paramsMap
)
{
{
string
server
=
ConfigAppSettings
.
GetValue
(
Setting_Init
.
http_server
)
;
string
server
=
Setting_Init
.
http_server
;
if
(
server
.
EndsWith
(
"/"
))
if
(
server
.
EndsWith
(
"/"
))
{
{
server
=
server
.
Substring
(
0
,
server
.
Length
-
1
);
server
=
server
.
Substring
(
0
,
server
.
Length
-
1
);
...
@@ -559,6 +557,54 @@ namespace OnlineStore.DeviceLibrary
...
@@ -559,6 +557,54 @@ namespace OnlineStore.DeviceLibrary
return
msg
;
return
msg
;
}
}
private
static
string
Addr_findRealRfid
=
"/rest/api/qisda/device/findRealRfid"
;
/// <summary>
/// 根据tempRfid查找真实rfid
///
/// </summary>
/// <param name="tempRfid"></param>
/// <returns>"":未找到真实料架,即改任务还未出库</returns>
public
static
string
FindRealRfidByTempRfid
(
string
tempRfid
)
{
string
msg
=
""
;
try
{
Dictionary
<
string
,
string
>
paramMap
=
new
Dictionary
<
string
,
string
>();
paramMap
.
Add
(
"tempRfid"
,
tempRfid
);
string
server
=
GetAddr
(
Addr_findRealRfid
,
paramMap
);
DateTime
startTime
=
DateTime
.
Now
;
string
resultStr
=
HttpHelper
.
Post
(
server
,
""
);
LogUtil
.
info
(
"根据虚拟rfid【"
+
tempRfid
+
"】 查询包装料架绑定情况 "
+
" 【"
+
server
+
"】【"
+
resultStr
+
"】"
);
RfidData
serverResult
=
JsonHelper
.
DeserializeJsonToObject
<
RfidData
>(
resultStr
);
if
(
serverResult
==
null
)
{
msg
=
"虚拟rfid【"
+
tempRfid
+
"】没有收到服务器反馈"
;
LogUtil
.
error
(
msg
);
return
""
;
}
if
(
serverResult
.
data
[
"realRfid"
].
Equals
(
""
))
//虚拟料架未绑定料架
{
msg
=
"虚拟rfid【"
+
tempRfid
+
"】 未绑定真实料架"
;
LogUtil
.
debug
(
msg
);
return
""
;
}
else
//虚拟料架绑定料架
{
LogUtil
.
debug
(
"虚拟rfid【"
+
tempRfid
+
"】 已绑定真实料架"
+
serverResult
.
data
[
"realRfid"
]);
return
serverResult
.
data
[
"realRfid"
];
}
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
ex
.
Message
);
}
return
""
;
}
private
static
string
Addr_getShelfLockInfo
=
"/rest/api/qisda/device/getShelfLockInfo"
;
//包装仓获取料架锁定状态地址
private
static
string
Addr_getShelfLockInfo
=
"/rest/api/qisda/device/getShelfLockInfo"
;
//包装仓获取料架锁定状态地址
public
static
bool
GetShelfLockInfo
(
string
deviceName
,
string
cid
,
string
rfid
,
out
List
<
ShelfLockData
>
shelfLockDatas
)
public
static
bool
GetShelfLockInfo
(
string
deviceName
,
string
cid
,
string
rfid
,
out
List
<
ShelfLockData
>
shelfLockDatas
)
...
@@ -624,10 +670,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -624,10 +670,7 @@ namespace OnlineStore.DeviceLibrary
/// <summary>
/// <summary>
/// 检查是否是入库料架
/// 检查是否是入库料架
/// </summary>
/// </summary>
/// <param name="deviceName"></param>
/// <param name="cid"></param>
/// <param name="rfid"></param>
/// <param name="rfid"></param>
/// <param name="shelfLockDatas"></param>
/// <returns></returns>
/// <returns></returns>
public
static
bool
CheckShelfInfo
(
string
rfid
)
public
static
bool
CheckShelfInfo
(
string
rfid
)
{
{
...
...
source/DeviceLibrary/
AC
PackingStore/_system~.ini
→
source/DeviceLibrary/PackingStore/_system~.ini
查看文件 @
5229fc7
文件被删除
source/DeviceLibrary/agvClient/AgvClient.cs
查看文件 @
5229fc7
using
Asa
;
using
Asa
;
using
log4net
;
using
OnlineStore.Common
;
using
OnlineStore.Common
;
using
System
;
using
System
;
using
System.Collections.Generic
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Reflection
;
using
System.Text
;
using
System.Threading.Tasks
;
namespace
OnlineStore.DeviceLibrary
namespace
OnlineStore.DeviceLibrary
{
{
...
@@ -14,7 +9,6 @@ namespace OnlineStore.DeviceLibrary
...
@@ -14,7 +9,6 @@ namespace OnlineStore.DeviceLibrary
{
{
public
static
bool
CurrCancelState
=
false
;
public
static
bool
CurrCancelState
=
false
;
// public static readonly ILog LOGGER = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
// public static readonly ILog LOGGER = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private
static
string
ServerIp
=
ConfigAppSettings
.
GetValue
(
Setting_Init
.
AgvServerIp
);
private
static
Asa
.
AgvClient
agvClient
;
private
static
Asa
.
AgvClient
agvClient
;
private
static
Dictionary
<
string
,
Asa
.
ClientAction
>
actionMap
=
new
Dictionary
<
string
,
Asa
.
ClientAction
>();
private
static
Dictionary
<
string
,
Asa
.
ClientAction
>
actionMap
=
new
Dictionary
<
string
,
Asa
.
ClientAction
>();
public
static
List
<
string
>
NodeList
=
new
List
<
string
>();
public
static
List
<
string
>
NodeList
=
new
List
<
string
>();
...
@@ -26,7 +20,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -26,7 +20,7 @@ namespace OnlineStore.DeviceLibrary
if
(!
isInit
)
if
(!
isInit
)
{
{
isInit
=
true
;
isInit
=
true
;
agvClient
=
new
Asa
.
AgvClient
(
ServerIp
);
agvClient
=
new
Asa
.
AgvClient
(
Se
tting_Init
.
AgvSe
rverIp
);
agvClient
.
CancelState
=
true
;
agvClient
.
CancelState
=
true
;
agvClient
.
Log
+=
AgvClient_Log
;
agvClient
.
Log
+=
AgvClient_Log
;
agvClient
.
Arrive
+=
AgvClient_Arrive
;
agvClient
.
Arrive
+=
AgvClient_Arrive
;
...
@@ -50,7 +44,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -50,7 +44,7 @@ namespace OnlineStore.DeviceLibrary
}
}
catch
(
Exception
ex
)
catch
(
Exception
ex
)
{
{
LogUtil
.
error
(
"初始化agvClient "
+
ServerIp
+
" 出错:"
+
ex
.
ToString
());
LogUtil
.
error
(
"初始化agvClient "
+
Se
tting_Init
.
AgvSe
rverIp
+
" 出错:"
+
ex
.
ToString
());
}
}
}
}
...
@@ -183,10 +177,9 @@ namespace OnlineStore.DeviceLibrary
...
@@ -183,10 +177,9 @@ namespace OnlineStore.DeviceLibrary
{
{
try
try
{
{
bool
isLog
=
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
Agv_Log_Open
).
Equals
(
1
);
if
(
Setting_Init
.
Log_OpenAgv
)
if
(
isLog
)
{
{
LogUtil
.
debug
(
" AGV "
+
ServerIp
+
" Log : "
+
s
);
LogUtil
.
debug
(
" AGV "
+
Se
tting_Init
.
AgvSe
rverIp
+
" Log : "
+
s
);
}
}
}
}
catch
(
Exception
ex
)
catch
(
Exception
ex
)
...
@@ -225,7 +218,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -225,7 +218,7 @@ namespace OnlineStore.DeviceLibrary
}
}
catch
(
Exception
ex
)
catch
(
Exception
ex
)
{
{
LogUtil
.
error
(
"释放 agvClient "
+
ServerIp
+
" 出错:"
+
ex
.
ToString
());
LogUtil
.
error
(
"释放 agvClient "
+
Se
tting_Init
.
AgvSe
rverIp
+
" 出错:"
+
ex
.
ToString
());
}
}
}
}
}
}
...
...
source/DeviceLibrary/device/IO/AIOBOX/AIOBOXManager.cs
查看文件 @
5229fc7
...
@@ -134,12 +134,12 @@ namespace OnlineStore.DeviceLibrary
...
@@ -134,12 +134,12 @@ namespace OnlineStore.DeviceLibrary
{
{
DOValueMap
.
Remove
(
ioIp
);
DOValueMap
.
Remove
(
ioIp
);
}
}
int
DIMS
=
ConfigAppSettings
.
GetIntValue
(
"DIMS"
);
int
DIMS
=
ConfigAppSettings
.
GetIntValue
(
"DIMS"
,
60
);
if
(
DIMS
<
20
)
if
(
DIMS
<
20
)
{
{
DIMS
=
20
;
DIMS
=
20
;
}
}
int
DOMS
=
ConfigAppSettings
.
GetIntValue
(
"DOMS"
);
int
DOMS
=
ConfigAppSettings
.
GetIntValue
(
"DOMS"
,
300
);
if
(
DOMS
<
200
)
if
(
DOMS
<
200
)
{
{
DOMS
=
200
;
DOMS
=
200
;
...
@@ -220,14 +220,6 @@ namespace OnlineStore.DeviceLibrary
...
@@ -220,14 +220,6 @@ namespace OnlineStore.DeviceLibrary
private
DateTime
lastLogTime
=
DateTime
.
Now
;
private
DateTime
lastLogTime
=
DateTime
.
Now
;
private
void
AioBox_Log_Out_Event
(
AIOBOX
box
,
string
[]
s
)
{
foreach
(
string
str
in
s
)
{
LogUtil
.
AIOLog
.
Debug
(
"["
+
box
.
IP
+
"]"
+
str
);
}
}
private
void
AioBox_DI_Changed_Event
(
AIOBOX
box
,
Box_Sta
[]
sta
)
private
void
AioBox_DI_Changed_Event
(
AIOBOX
box
,
Box_Sta
[]
sta
)
{
{
try
try
...
...
source/DeviceLibrary/device/IO/IOManager.cs
查看文件 @
5229fc7
...
@@ -148,7 +148,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -148,7 +148,7 @@ namespace OnlineStore.DeviceLibrary
#
endregion
#
endregion
public
static
void
Init
()
public
static
void
Init
()
{
{
bool
isAIOBox
=
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
UseAIOBOX
).
Equals
(
1
)
;
bool
isAIOBox
=
Setting_Init
.
UseAIOBOX
;
if
(
isAIOBox
)
if
(
isAIOBox
)
{
{
instance
=
new
AIOBOXManager
();
instance
=
new
AIOBOXManager
();
...
...
source/DeviceLibrary/device/PanasonicServo/ACServerManager.cs
查看文件 @
5229fc7
...
@@ -86,7 +86,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -86,7 +86,7 @@ namespace OnlineStore.DeviceLibrary
{
{
return
true
;
return
true
;
}
}
int
ACBaudRate
=
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
ACBaudRate
)
;
int
ACBaudRate
=
Setting_Init
.
ACBaudRate
;
if
(
ACBaudRate
<=
0
)
if
(
ACBaudRate
<=
0
)
{
{
ACBaudRate
=
9600
;
ACBaudRate
=
9600
;
...
...
source/DeviceLibrary/device/halcon/CodeManager.cs
查看文件 @
5229fc7
...
@@ -25,7 +25,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -25,7 +25,7 @@ namespace OnlineStore.DeviceLibrary
/// </summary>
/// </summary>
public
static
void
LoadConfig
()
public
static
void
LoadConfig
()
{
{
string
codeStr
=
ConfigAppSettings
.
GetValue
(
Setting_Init
.
CodeType
)
;
string
codeStr
=
Setting_Init
.
CodeType
;
codeTypeList
=
new
List
<
string
>();
codeTypeList
=
new
List
<
string
>();
HDLogUtil
.
LogName
=
"RollingLogFileAppender"
;
HDLogUtil
.
LogName
=
"RollingLogFileAppender"
;
try
try
...
@@ -98,7 +98,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -98,7 +98,7 @@ namespace OnlineStore.DeviceLibrary
}
}
private
static
int
ScanCount
=
0
;
private
static
int
ScanCount
=
0
;
private
static
int
codeCount
=
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
CodeCount
)
;
private
static
int
codeCount
=
Setting_Init
.
CodeCount
;
[
HandleProcessCorruptedStateExceptions
]
[
HandleProcessCorruptedStateExceptions
]
public
static
List
<
string
>
CameraScan
(
List
<
string
>
cameraList
,
string
deviceName
,
int
timeOut
=
1500
)
public
static
List
<
string
>
CameraScan
(
List
<
string
>
cameraList
,
string
deviceName
,
int
timeOut
=
1500
)
{
{
...
@@ -272,7 +272,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -272,7 +272,7 @@ namespace OnlineStore.DeviceLibrary
public
static
string
GetCodeParamFilePath
(
string
codePath
)
public
static
string
GetCodeParamFilePath
(
string
codePath
)
{
{
string
appPath
=
Application
.
StartupPath
;
string
appPath
=
Application
.
StartupPath
;
string
path
=
appPath
+
ConfigAppSettings
.
GetValue
(
Setting_Init
.
CodeParamPath
)
;
string
path
=
appPath
+
Setting_Init
.
CodeParamPath
;
string
filePath
=
path
+
codePath
+
".dcm"
;
string
filePath
=
path
+
codePath
+
".dcm"
;
if
(
File
.
Exists
(
filePath
))
if
(
File
.
Exists
(
filePath
))
{
{
...
...
source/DeviceLibrary/store/InOutParam.cs
查看文件 @
5229fc7
...
@@ -17,6 +17,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -17,6 +17,7 @@ namespace OnlineStore.DeviceLibrary
{
{
public
InOutParam
(
string
wareNo
=
""
,
string
posId
=
""
,
string
ShelfPosID
=
""
,
int
platew
=
0
,
int
plateh
=
0
,
bool
urgentReel
=
false
,
bool
cutReel
=
false
,
bool
smallReel
=
false
,
string
rfid
=
""
,
int
rfidLoc
=
0
,
int
taskCount
=
0
,
string
realRfid
=
""
)
public
InOutParam
(
string
wareNo
=
""
,
string
posId
=
""
,
string
ShelfPosID
=
""
,
int
platew
=
0
,
int
plateh
=
0
,
bool
urgentReel
=
false
,
bool
cutReel
=
false
,
bool
smallReel
=
false
,
string
rfid
=
""
,
int
rfidLoc
=
0
,
int
taskCount
=
0
,
string
realRfid
=
""
)
{
{
this
.
CurShelfPosID
=
ShelfPosID
;
this
.
ShelfPosID
=
ShelfPosID
;
this
.
ShelfPosID
=
ShelfPosID
;
WareCode
=
wareNo
;
WareCode
=
wareNo
;
PosID
=
posId
;
PosID
=
posId
;
...
@@ -34,6 +35,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -34,6 +35,7 @@ namespace OnlineStore.DeviceLibrary
public
InOutParam
(
string
wareNo
,
string
posId
,
string
ShelfPosID
,
LineMoveP
linePosition
)
public
InOutParam
(
string
wareNo
,
string
posId
,
string
ShelfPosID
,
LineMoveP
linePosition
)
{
{
WareCode
=
wareNo
;
WareCode
=
wareNo
;
this
.
CurShelfPosID
=
ShelfPosID
;
this
.
ShelfPosID
=
ShelfPosID
;
this
.
ShelfPosID
=
ShelfPosID
;
PosID
=
posId
;
PosID
=
posId
;
MoveP
=
linePosition
;
MoveP
=
linePosition
;
...
@@ -50,7 +52,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -50,7 +52,7 @@ namespace OnlineStore.DeviceLibrary
}
}
public
InOutParam
NewParam
()
public
InOutParam
NewParam
()
{
{
InOutParam
newp
=
new
InOutParam
(
WareCode
,
PosID
,
ShelfPosID
,
PlateW
,
PlateH
,
urgentReel
,
cutReel
,
smallReel
,
rfid
,
rfidLoc
,
taskCount
,
realRfid
);
InOutParam
newp
=
new
InOutParam
(
WareCode
,
PosID
,
Cur
ShelfPosID
,
PlateW
,
PlateH
,
urgentReel
,
cutReel
,
smallReel
,
rfid
,
rfidLoc
,
taskCount
,
realRfid
);
return
newp
;
return
newp
;
}
}
/// <summary>
/// <summary>
...
@@ -62,7 +64,11 @@ namespace OnlineStore.DeviceLibrary
...
@@ -62,7 +64,11 @@ namespace OnlineStore.DeviceLibrary
/// </summary>
/// </summary>
public
string
PosID
{
get
;
set
;
}
public
string
PosID
{
get
;
set
;
}
/// <summary>
/// <summary>
/// 料架对应的库位号
/// 当前料架对应的库位号
/// </summary>
public
string
CurShelfPosID
=
""
;
/// <summary>
/// 需要取放的料架对应的库位号
/// </summary>
/// </summary>
public
string
ShelfPosID
=
""
;
public
string
ShelfPosID
=
""
;
public
LineMoveP
MoveP
{
get
;
set
;
}
public
LineMoveP
MoveP
{
get
;
set
;
}
...
@@ -145,21 +151,21 @@ namespace OnlineStore.DeviceLibrary
...
@@ -145,21 +151,21 @@ namespace OnlineStore.DeviceLibrary
}
}
public
string
ToStr
()
public
string
ToStr
()
{
{
return
" 库位 ["
+
PosID
+
"] ["
+
ShelfPosID
+
"], ["
+
WareCode
+
"], ["
+
PlateW
+
"x"
+
PlateH
+
"] ,"
+
return
" 库位 ["
+
PosID
+
"] ["
+
Cur
ShelfPosID
+
"], ["
+
WareCode
+
"], ["
+
PlateW
+
"x"
+
PlateH
+
"] ,"
+
"urgentReel ["
+
urgentReel
+
"],cutReel ["
+
cutReel
+
"],smallReel ["
+
smallReel
+
"],rfid ["
+
rfid
+
"],rfidLoc ["
+
rfidLoc
+
"],taskCount ["
+
taskCount
+
"]"
;
"urgentReel ["
+
urgentReel
+
"],cutReel ["
+
cutReel
+
"],smallReel ["
+
smallReel
+
"],rfid ["
+
rfid
+
"],rfidLoc ["
+
rfidLoc
+
"],taskCount ["
+
taskCount
+
"]"
;
}
}
public
string
ToShortStr
()
public
string
ToShortStr
()
{
{
return
"["
+
rfid
+
"]["
+
PosID
+
"]["
+
ShelfPosID
+
"]["
+
PlateW
+
"x"
+
PlateH
+
"]["
+
WareCode
+
"]"
;
return
"["
+
rfid
+
"]["
+
PosID
+
"]["
+
Cur
ShelfPosID
+
"]["
+
PlateW
+
"x"
+
PlateH
+
"]["
+
WareCode
+
"]"
;
}
}
internal
void
UpdateShelfPosId
(
string
pId
)
internal
void
UpdateShelfPosId
(
string
pId
)
{
{
this
.
ShelfPosID
=
pId
;
this
.
Cur
ShelfPosID
=
pId
;
ShelfPosition
sp
=
CSVPositionReader
<
ShelfPosition
>.
GetPositon
(
ShelfPosID
);
ShelfPosition
sp
=
CSVPositionReader
<
ShelfPosition
>.
GetPositon
(
Cur
ShelfPosID
);
if
(
sp
==
null
)
if
(
sp
==
null
)
{
{
LogUtil
.
error
(
"GetPositon["
+
ShelfPosID
+
"]=null,没有库位不能执行出入库"
);
LogUtil
.
error
(
"GetPositon["
+
Cur
ShelfPosID
+
"]=null,没有库位不能执行出入库"
);
}
}
MoveP
.
InOut_P101
=
sp
.
InoutAxis_P101
;
MoveP
.
InOut_P101
=
sp
.
InoutAxis_P101
;
...
@@ -168,7 +174,21 @@ namespace OnlineStore.DeviceLibrary
...
@@ -168,7 +174,21 @@ namespace OnlineStore.DeviceLibrary
MoveP
.
Middle_P101
=
sp
.
MiddleAxis_P101
;
MoveP
.
Middle_P101
=
sp
.
MiddleAxis_P101
;
}
}
internal
void
RestoreShelfPosId
()
{
this
.
CurShelfPosID
=
ShelfPosID
;
ShelfPosition
sp
=
CSVPositionReader
<
ShelfPosition
>.
GetPositon
(
CurShelfPosID
);
if
(
sp
==
null
)
{
LogUtil
.
error
(
"GetPositon["
+
CurShelfPosID
+
"]=null,没有库位不能执行出入库"
);
}
MoveP
.
InOut_P101
=
sp
.
InoutAxis_P101
;
MoveP
.
UpDown_LP101
=
sp
.
UpDownAxis_LP101
;
MoveP
.
UpDown_HP102
=
sp
.
UpDownAxis_HP102
;
MoveP
.
Middle_P101
=
sp
.
MiddleAxis_P101
;
}
internal
void
UpdatePosId
(
string
message
,
string
posId
,
int
plateW
,
int
plateH
,
int
comP2
,
int
comP3
)
internal
void
UpdatePosId
(
string
message
,
string
posId
,
int
plateW
,
int
plateH
,
int
comP2
,
int
comP3
)
{
{
this
.
WareCode
=
message
;
this
.
WareCode
=
message
;
...
@@ -196,7 +216,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -196,7 +216,7 @@ namespace OnlineStore.DeviceLibrary
internal
void
UpdatePosIdAndShelfId
(
string
wareNo
,
string
rfid
,
string
posId
,
string
ShelfPosID
)
internal
void
UpdatePosIdAndShelfId
(
string
wareNo
,
string
rfid
,
string
posId
,
string
ShelfPosID
)
{
{
WareCode
=
wareNo
;
WareCode
=
wareNo
;
this
.
ShelfPosID
=
ShelfPosID
;
this
.
Cur
ShelfPosID
=
ShelfPosID
;
this
.
rfid
=
rfid
;
this
.
rfid
=
rfid
;
ShelfPosition
sp
=
CSVPositionReader
<
ShelfPosition
>.
GetPositon
(
ShelfPosID
);
ShelfPosition
sp
=
CSVPositionReader
<
ShelfPosition
>.
GetPositon
(
ShelfPosID
);
if
(
sp
==
null
)
if
(
sp
==
null
)
...
...
source/DeviceLibrary/store/KTK_Store.cs
查看文件 @
5229fc7
...
@@ -7,6 +7,7 @@ using System.Drawing;
...
@@ -7,6 +7,7 @@ using System.Drawing;
using
System.Linq
;
using
System.Linq
;
using
System.Text
;
using
System.Text
;
using
System.Threading
;
using
System.Threading
;
using
System.Web.UI.WebControls
;
namespace
OnlineStore.DeviceLibrary
namespace
OnlineStore.DeviceLibrary
...
@@ -219,7 +220,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -219,7 +220,7 @@ namespace OnlineStore.DeviceLibrary
/// <summary>
/// <summary>
/// 停止所有运动
/// 停止所有运动
/// </summary>
/// </summary>
public
abstract
void
StopMove
(
);
public
abstract
void
StopMove
();
/// <summary>
/// <summary>
/// 重置处理
/// 重置处理
...
@@ -233,7 +234,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -233,7 +234,7 @@ namespace OnlineStore.DeviceLibrary
protected
void
ACAxisHomeMove
(
ConfigMoveAxis
moveAxis
)
protected
void
ACAxisHomeMove
(
ConfigMoveAxis
moveAxis
)
{
{
moveAxis
.
TargetPosition
=
0
;
moveAxis
.
TargetPosition
=
0
;
LogUtil
.
info
(
Name
+
moveAxis
.
DisplayStr
+
"speed["
+
moveAxis
.
TargetSpeed
+
"]开始原点返回"
);
LogUtil
.
info
(
Name
+
moveAxis
.
DisplayStr
+
"speed["
+
moveAxis
.
TargetSpeed
+
"]开始原点返回"
);
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitAxis
(
moveAxis
,
true
));
MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitAxis
(
moveAxis
,
true
));
ACServerManager
.
HomeMove
(
moveAxis
.
DeviceName
,
(
short
)
moveAxis
.
GetAxisValue
(),
moveAxis
.
HomeHighSpeed
);
ACServerManager
.
HomeMove
(
moveAxis
.
DeviceName
,
(
short
)
moveAxis
.
GetAxisValue
(),
moveAxis
.
HomeHighSpeed
);
}
}
...
@@ -269,7 +270,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -269,7 +270,7 @@ namespace OnlineStore.DeviceLibrary
//判断是否需要重新运动
//判断是否需要重新运动
if
(
MoveInfo
.
CanWhileCount
>
0
)
if
(
MoveInfo
.
CanWhileCount
>
0
)
{
{
LogUtil
.
error
(
Name
+
moveAxis
.
DisplayStr
+
"目标位置["
+
targetPosition
+
"]当前位置["
+
outCount
+
LogUtil
.
error
(
Name
+
moveAxis
.
DisplayStr
+
"目标位置["
+
targetPosition
+
"]当前位置["
+
outCount
+
"],误差过大,重新开始运动,剩余["
+
MoveInfo
.
CanWhileCount
+
"]次"
);
"],误差过大,重新开始运动,剩余["
+
MoveInfo
.
CanWhileCount
+
"]次"
);
ACServerManager
.
AbsMove
(
moveAxis
.
DeviceName
,
moveAxis
.
GetAxisValue
(),
targetPosition
,
targetSpeed
);
ACServerManager
.
AbsMove
(
moveAxis
.
DeviceName
,
moveAxis
.
GetAxisValue
(),
targetPosition
,
targetSpeed
);
MoveInfo
.
CanWhileCount
--;
MoveInfo
.
CanWhileCount
--;
...
@@ -278,7 +279,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -278,7 +279,7 @@ namespace OnlineStore.DeviceLibrary
{
{
msg
=
Name
+
" storeMoveStep="
+
MoveInfo
.
MoveStep
+
moveAxis
.
DisplayStr
+
"目标位置["
+
targetPosition
+
"]当前位置["
+
outCount
msg
=
Name
+
" storeMoveStep="
+
MoveInfo
.
MoveStep
+
moveAxis
.
DisplayStr
+
"目标位置["
+
targetPosition
+
"]当前位置["
+
outCount
+
"],误差过大,需要报警"
;
+
"],误差过大,需要报警"
;
LogUtil
.
error
(
Name
+
msg
);
LogUtil
.
error
(
Name
+
msg
);
}
}
}
}
return
false
;
return
false
;
...
@@ -298,7 +299,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -298,7 +299,7 @@ namespace OnlineStore.DeviceLibrary
//判断是否需要重新运动
//判断是否需要重新运动
if
(
MoveInfo
.
CanWhileCount
>
0
)
if
(
MoveInfo
.
CanWhileCount
>
0
)
{
{
LogUtil
.
error
(
Name
+
moveAxis
.
DisplayStr
+
"收到原点完成信号,当前位置["
+
outCount
+
"],重新回原点,剩余["
+
MoveInfo
.
CanWhileCount
+
"]次"
);
LogUtil
.
error
(
Name
+
moveAxis
.
DisplayStr
+
"收到原点完成信号,当前位置["
+
outCount
+
"],重新回原点,剩余["
+
MoveInfo
.
CanWhileCount
+
"]次"
);
//LogUtil.error(LOGGER, StoreName + moveAxis.DisplayStr + "重新回原点");
//LogUtil.error(LOGGER, StoreName + moveAxis.DisplayStr + "重新回原点");
ACServerManager
.
HomeMove
(
moveAxis
.
DeviceName
,
moveAxis
.
GetAxisValue
(),
moveAxis
.
HomeHighSpeed
);
ACServerManager
.
HomeMove
(
moveAxis
.
DeviceName
,
moveAxis
.
GetAxisValue
(),
moveAxis
.
HomeHighSpeed
);
MoveInfo
.
CanWhileCount
--;
MoveInfo
.
CanWhileCount
--;
...
@@ -306,7 +307,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -306,7 +307,7 @@ namespace OnlineStore.DeviceLibrary
else
else
{
{
msg
=
Name
+
" storeMoveStep="
+
MoveInfo
.
MoveStep
+
moveAxis
.
DisplayStr
+
"收到原点完成信号,当前位置["
+
outCount
+
"],误差过大,需要报警"
;
msg
=
Name
+
" storeMoveStep="
+
MoveInfo
.
MoveStep
+
moveAxis
.
DisplayStr
+
"收到原点完成信号,当前位置["
+
outCount
+
"],误差过大,需要报警"
;
LogUtil
.
error
(
Name
+
msg
);
LogUtil
.
error
(
Name
+
msg
);
}
}
}
}
return
false
;
return
false
;
...
@@ -324,7 +325,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -324,7 +325,7 @@ namespace OnlineStore.DeviceLibrary
{
{
if
(!
isInit
)
if
(!
isInit
)
{
{
MoveInfo
=
new
Stor
eMoveInfo
(
DeviceID
);
MoveInfo
=
new
Devic
eMoveInfo
(
DeviceID
);
mainTimer
=
new
System
.
Timers
.
Timer
();
mainTimer
=
new
System
.
Timers
.
Timer
();
mainTimer
.
Enabled
=
false
;
mainTimer
.
Enabled
=
false
;
...
@@ -350,7 +351,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -350,7 +351,7 @@ namespace OnlineStore.DeviceLibrary
/// <summary>
/// <summary>
/// 移动信息
/// 移动信息
/// </summary>
/// </summary>
public
Stor
eMoveInfo
MoveInfo
=
null
;
public
Devic
eMoveInfo
MoveInfo
=
null
;
/// <summary>
/// <summary>
/// 定时处理,监听信号,监听IO
/// 定时处理,监听信号,监听IO
...
@@ -449,7 +450,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -449,7 +450,7 @@ namespace OnlineStore.DeviceLibrary
return
sta
;
return
sta
;
}
}
}
}
public
void
CylinderMove
(
Stor
eMoveInfo
moveInfo
,
string
IoLowType
,
string
IoHighType
)
public
void
CylinderMove
(
Devic
eMoveInfo
moveInfo
,
string
IoLowType
,
string
IoHighType
)
{
{
IOMove
(
IoLowType
,
IO_VALUE
.
LOW
);
IOMove
(
IoLowType
,
IO_VALUE
.
LOW
);
IOMove
(
IoHighType
,
IO_VALUE
.
HIGH
);
IOMove
(
IoHighType
,
IO_VALUE
.
HIGH
);
...
@@ -472,27 +473,35 @@ namespace OnlineStore.DeviceLibrary
...
@@ -472,27 +473,35 @@ namespace OnlineStore.DeviceLibrary
/// </summary>c
/// </summary>c
protected
bool
WaitIo
(
string
ioType
,
IO_VALUE
value
,
int
timeOut
,
string
errName
=
""
)
protected
bool
WaitIo
(
string
ioType
,
IO_VALUE
value
,
int
timeOut
,
string
errName
=
""
)
{
{
return
WaitUtil
.
Wait
(
timeOut
,
delegate
()
{
return
WaitUtil
.
Wait
(
timeOut
,
delegate
()
{
return
value
.
Equals
(
IOValue
(
ioType
));
return
value
.
Equals
(
IOValue
(
ioType
));
},
errName
);
},
errName
);
}
}
public
void
Log
Info
(
string
logInfo
)
public
void
Log
Error
(
string
msg
)
{
{
LogUtil
.
info
(
Name
+
logInfo
);
LogUtil
.
info
(
$
"{Name}{MoveInfo?.MoveType}{msg}"
);
}
}
p
rotected
void
InOutStoreLog
(
string
msg
,
bool
isDebug
=
false
)
p
ublic
void
LogInfo
(
string
msg
)
{
{
string
posId
=
MoveInfo
.
MoveParam
!=
null
?
"["
+
MoveInfo
.
MoveParam
.
PosID
+
"]"
:
""
;
LogUtil
.
info
(
$
"{Name}{MoveInfo?.MoveType}{msg}"
)
;
string
shelfId
=
MoveInfo
.
MoveParam
!=
null
?
"["
+
MoveInfo
.
MoveParam
.
ShelfPosID
+
"]"
:
""
;
}
if
(
isDebu
g
)
public
void
LogRunStepInfo
(
string
ms
g
)
{
{
LogUtil
.
debug
(
Name
+
" "
+
posId
+
""
+
shelfId
+
" :"
+
msg
);
LogInfo
(
$
"{MoveInfo?.SLog}{msg}"
);
}
}
else
public
void
LogRunStepError
(
string
msg
)
{
{
LogInfo
(
" "
+
posId
+
""
+
shelfId
+
" :"
+
msg
);
LogError
(
$
"{MoveInfo?.SLog}{msg}"
);
}
}
protected
void
InOutStoreLog
(
string
msg
)
{
string
posId
=
MoveInfo
.
MoveParam
!=
null
?
"["
+
MoveInfo
.
MoveParam
.
PosID
+
"]"
:
""
;
string
shelfId
=
MoveInfo
.
MoveParam
!=
null
?
"["
+
MoveInfo
.
MoveParam
.
CurShelfPosID
+
"]"
:
""
;
LogRunStepInfo
(
$
"posId={posId} shelfId={shelfId}: {msg}"
);
}
}
protected
int
GetAlarmCodeByAxis
(
ConfigMoveAxis
axis
)
protected
int
GetAlarmCodeByAxis
(
ConfigMoveAxis
axis
)
{
{
int
alarmCode
=
LineAlarm
.
InOutAxisAlarm
;
int
alarmCode
=
LineAlarm
.
InOutAxisAlarm
;
...
...
source/DeviceLibrary/store/StoreStep.cs
查看文件 @
5229fc7
...
@@ -206,6 +206,102 @@ namespace OnlineStore.DeviceLibrary
...
@@ -206,6 +206,102 @@ namespace OnlineStore.DeviceLibrary
#
endregion
#
endregion
#
region
检查出库料架上是否有治具
/// <summary>
/// 出库料架检查:开始循环从第一个空位逐个取料盘
/// </summary>
SO_PreCheck_01_StartGetTray
,
/// <summary>
/// 出库料架检查:叉子后退到待机点P1
/// </summary>
SO_PreCheck_02_InoutToP1
,
/// <summary>
/// 出库料架检查:升降轴移动到P101低点,旋转轴移动到P101点,压紧轴到压紧前点
/// </summary>
SO_PreCheck_03_MoveToShelf
,
/// <summary>
/// 出库料架检查:叉子前进到P101点
/// </summary>
SO_PreCheck_04_InoutToP101
,
/// <summary>
/// 出库料架检查:升降轴上升到P102点
/// </summary>
SO_PreCheck_05_UpdownToP102
,
/// <summary>
/// 出库料架检查:压紧轴开始缓慢压紧
/// </summary>
SO_PreCheck_06_StartCompress
,
/// <summary>
/// 出库料架检查:检测到料叉压紧确认信号,再次向下压紧指定的值
/// </summary>
SO_PreCheck_07_ComDownMove
,
/// <summary>
/// 出库料架检查:记录压紧高度,叉子后退到P1
/// </summary>
SO_PreCheck_08_InoutBack
,
/// <summary>
/// 到扫码位置:升降轴移动到P2,旋转轴移动到P1
/// </summary>
SO_PreCheck_09_ToScanPosition
,
/// <summary>
/// 到扫码位置:进出轴到P2
/// </summary>
SO_PreCheck_10_InOutToP2
,
/// <summary>
/// 到扫码位置:升降轴缓慢下降到P1,压紧轴返回压紧前点
/// </summary>
SO_PreCheck_11_PutTrayDown
,
/// <summary>
/// 到扫码位置:进出轴返回待机点
/// </summary>
SO_PreCheck_12_InOutToP1
,
/// <summary>
/// 检查治具:检查是否有治具
/// </summary>
SO_PreCheck_13_CheckFix
,
/// <summary>
/// 检查治具:检查完成,获取结果
/// 有治具,将该治具返回料架位置
/// 无治具,到下一个位置
/// </summary>
SO_PreCheck_14_GetCheckResult
,
/// <summary>
/// 检查治具:有治具
/// </summary>
SO_PreCheck_15_InoutToP2
,
/// <summary>
/// 检查治具:升降轴到P1,压紧轴压紧
/// </summary>
SO_PreCheck_16_GetScanPTray
,
/// <summary>
/// 检查治具:进出轴返回
/// </summary>
SO_PreCheck_17_InoutBackP1
,
/// <summary>
/// 检查治具:有治具,返回料架位置
/// </summary>
SO_PreCheck_18_ToShelfPosition
,
/// <summary>
/// 检查治具:叉子到料架,进出轴至P20
/// /// </summary>
SO_PreCheck_19_ToShelf
,
/// <summary>
/// 检查治具:把物品放下,压紧轴到P1,升降轴至P20
/// </summary>
SO_PreCheck_20_PutReel
,
/// <summary>
/// 检查治具:叉子从出料口返回,,进出轴到P1
/// 不再检查下一个位置,料架直接作为NG返回
/// </summary>
SO_PreCheck_21_InoutBack
,
SO_PreCheck_22_GoBack
,
#
endregion
#
region
出库步骤
2000
开始
#
region
出库步骤
2000
开始
...
...
source/DeviceLibrary/store/model/
Stor
eMoveInfo.cs
→
source/DeviceLibrary/store/model/
Devic
eMoveInfo.cs
查看文件 @
5229fc7
...
@@ -11,15 +11,15 @@ using System.Text;
...
@@ -11,15 +11,15 @@ using System.Text;
namespace
OnlineStore.DeviceLibrary
namespace
OnlineStore.DeviceLibrary
{
{
/// <summary>
/// <summary>
///
料仓
当前运动信息类(出入库状态,步骤记录)
///
设备
当前运动信息类(出入库状态,步骤记录)
/// </summary>
/// </summary>
public
class
Stor
eMoveInfo
public
class
Devic
eMoveInfo
{
{
/// <summary>
/// <summary>
/// 超时时间
/// 超时时间
/// </summary>
/// </summary>
public
int
TimeOutSeconds
=
60
;
public
int
TimeOutSeconds
=
60
;
public
Stor
eMoveInfo
(
int
storeId
)
public
Devic
eMoveInfo
(
int
storeId
)
{
{
moveType
=
StoreMoveType
.
None
;
moveType
=
StoreMoveType
.
None
;
...
@@ -41,7 +41,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -41,7 +41,7 @@ namespace OnlineStore.DeviceLibrary
public
string
SLog
public
string
SLog
{
{
get
{
return
" "
+
MoveStep
+
"
"
;
}
get
{
return
$
" {MoveStep}
"
;
}
}
}
...
@@ -138,9 +138,9 @@ namespace OnlineStore.DeviceLibrary
...
@@ -138,9 +138,9 @@ namespace OnlineStore.DeviceLibrary
WaitList
=
new
List
<
WaitResultInfo
>();
WaitList
=
new
List
<
WaitResultInfo
>();
CanWhileCount
=
0
;
CanWhileCount
=
0
;
}
}
public
Stor
eMoveInfo
clone
()
public
Devic
eMoveInfo
clone
()
{
{
return
(
Stor
eMoveInfo
)
this
.
MemberwiseClone
();
return
(
Devic
eMoveInfo
)
this
.
MemberwiseClone
();
}
}
public
List
<
WaitResultInfo
>
WaitList
=
new
List
<
WaitResultInfo
>();
public
List
<
WaitResultInfo
>
WaitList
=
new
List
<
WaitResultInfo
>();
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论