Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
RC1250-AssemblyLine
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 9738d6f8
由
LN
编写于
2021-06-02 14:44:38 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
分流横移2-进仓5托盘优化
1 个父辈
cf108a75
显示空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
167 行增加
和
35 行删除
source/AssemblyLineClient/FrmIOStatus.Designer.cs
source/AssemblyLineClient/FrmIOStatus.cs
source/DeviceLibrary/LineConfig/MoveEquip/Config_MoveEquip_05.csv
source/DeviceLibrary/assemblyLine/EquipBase.cs
source/DeviceLibrary/assemblyLine/LineBean_Shunt.cs
source/DeviceLibrary/assemblyLine/LineBean_Shunt2.cs
source/DeviceLibrary/assemblyLine/MoveEquip_Partial.cs
source/DeviceLibrary/assemblymanager/TrayManager.cs
source/DeviceLibrary/model/KTK_Store.cs
source/DeviceLibrary/model/StoreStep.cs
source/LoadCVSLibrary/storeConfig/config/DeviceConfig.cs
source/AssemblyLineClient/FrmIOStatus.Designer.cs
查看文件 @
9738d6f
...
@@ -75,6 +75,7 @@
...
@@ -75,6 +75,7 @@
this
.
btnShunt2updown2
=
new
System
.
Windows
.
Forms
.
Button
();
this
.
btnShunt2updown2
=
new
System
.
Windows
.
Forms
.
Button
();
this
.
groupBox6
=
new
System
.
Windows
.
Forms
.
GroupBox
();
this
.
groupBox6
=
new
System
.
Windows
.
Forms
.
GroupBox
();
this
.
tableLayoutPanel4
=
new
System
.
Windows
.
Forms
.
TableLayoutPanel
();
this
.
tableLayoutPanel4
=
new
System
.
Windows
.
Forms
.
TableLayoutPanel
();
this
.
btnMove5StopDown1
=
new
System
.
Windows
.
Forms
.
Button
();
this
.
groupBox1
.
SuspendLayout
();
this
.
groupBox1
.
SuspendLayout
();
this
.
groupBox4
.
SuspendLayout
();
this
.
groupBox4
.
SuspendLayout
();
this
.
groupBox3
.
SuspendLayout
();
this
.
groupBox3
.
SuspendLayout
();
...
@@ -706,6 +707,7 @@
...
@@ -706,6 +707,7 @@
//
//
// tabPage3
// tabPage3
//
//
this
.
tabPage3
.
Controls
.
Add
(
this
.
btnMove5StopDown1
);
this
.
tabPage3
.
Controls
.
Add
(
this
.
btnShunt2Close
);
this
.
tabPage3
.
Controls
.
Add
(
this
.
btnShunt2Close
);
this
.
tabPage3
.
Controls
.
Add
(
this
.
btnShunt2Run1
);
this
.
tabPage3
.
Controls
.
Add
(
this
.
btnShunt2Run1
);
this
.
tabPage3
.
Controls
.
Add
(
this
.
btnShunt2Run2
);
this
.
tabPage3
.
Controls
.
Add
(
this
.
btnShunt2Run2
);
...
@@ -725,7 +727,7 @@
...
@@ -725,7 +727,7 @@
this
.
btnShunt2Close
.
BackColor
=
System
.
Drawing
.
Color
.
White
;
this
.
btnShunt2Close
.
BackColor
=
System
.
Drawing
.
Color
.
White
;
this
.
btnShunt2Close
.
FlatStyle
=
System
.
Windows
.
Forms
.
FlatStyle
.
Flat
;
this
.
btnShunt2Close
.
FlatStyle
=
System
.
Windows
.
Forms
.
FlatStyle
.
Flat
;
this
.
btnShunt2Close
.
Font
=
new
System
.
Drawing
.
Font
(
"微软雅黑"
,
9F
,
System
.
Drawing
.
FontStyle
.
Regular
,
System
.
Drawing
.
GraphicsUnit
.
Point
,
((
byte
)(
134
)));
this
.
btnShunt2Close
.
Font
=
new
System
.
Drawing
.
Font
(
"微软雅黑"
,
9F
,
System
.
Drawing
.
FontStyle
.
Regular
,
System
.
Drawing
.
GraphicsUnit
.
Point
,
((
byte
)(
134
)));
this
.
btnShunt2Close
.
Location
=
new
System
.
Drawing
.
Point
(
181
,
195
);
this
.
btnShunt2Close
.
Location
=
new
System
.
Drawing
.
Point
(
181
,
233
);
this
.
btnShunt2Close
.
Name
=
"btnShunt2Close"
;
this
.
btnShunt2Close
.
Name
=
"btnShunt2Close"
;
this
.
btnShunt2Close
.
Size
=
new
System
.
Drawing
.
Size
(
153
,
37
);
this
.
btnShunt2Close
.
Size
=
new
System
.
Drawing
.
Size
(
153
,
37
);
this
.
btnShunt2Close
.
TabIndex
=
301
;
this
.
btnShunt2Close
.
TabIndex
=
301
;
...
@@ -833,6 +835,18 @@
...
@@ -833,6 +835,18 @@
this
.
tableLayoutPanel4
.
Size
=
new
System
.
Drawing
.
Size
(
214
,
540
);
this
.
tableLayoutPanel4
.
Size
=
new
System
.
Drawing
.
Size
(
214
,
540
);
this
.
tableLayoutPanel4
.
TabIndex
=
103
;
this
.
tableLayoutPanel4
.
TabIndex
=
103
;
//
//
// btmMove5StopDown1
//
this
.
btnMove5StopDown1
.
FlatStyle
=
System
.
Windows
.
Forms
.
FlatStyle
.
Flat
;
this
.
btnMove5StopDown1
.
Font
=
new
System
.
Drawing
.
Font
(
"微软雅黑"
,
9F
,
System
.
Drawing
.
FontStyle
.
Regular
,
System
.
Drawing
.
GraphicsUnit
.
Point
,
((
byte
)(
134
)));
this
.
btnMove5StopDown1
.
Location
=
new
System
.
Drawing
.
Point
(
18
,
184
);
this
.
btnMove5StopDown1
.
Name
=
"btmMove5StopDown1"
;
this
.
btnMove5StopDown1
.
Size
=
new
System
.
Drawing
.
Size
(
153
,
37
);
this
.
btnMove5StopDown1
.
TabIndex
=
302
;
this
.
btnMove5StopDown1
.
Text
=
"分流2-进仓5阻挡1下降"
;
this
.
btnMove5StopDown1
.
UseVisualStyleBackColor
=
true
;
this
.
btnMove5StopDown1
.
Click
+=
new
System
.
EventHandler
(
this
.
btmMove5StopDown1_Click
);
//
// FrmIOStatus
// FrmIOStatus
//
//
this
.
AutoScaleDimensions
=
new
System
.
Drawing
.
SizeF
(
7F
,
17F
);
this
.
AutoScaleDimensions
=
new
System
.
Drawing
.
SizeF
(
7F
,
17F
);
...
@@ -923,6 +937,7 @@
...
@@ -923,6 +937,7 @@
private
System
.
Windows
.
Forms
.
Button
btnShunt2Stop1
;
private
System
.
Windows
.
Forms
.
Button
btnShunt2Stop1
;
private
System
.
Windows
.
Forms
.
Button
btnShunt2updown1
;
private
System
.
Windows
.
Forms
.
Button
btnShunt2updown1
;
private
System
.
Windows
.
Forms
.
Button
btnShunt2updown2
;
private
System
.
Windows
.
Forms
.
Button
btnShunt2updown2
;
private
System
.
Windows
.
Forms
.
Button
btnMove5StopDown1
;
}
}
}
}
source/AssemblyLineClient/FrmIOStatus.cs
查看文件 @
9738d6f
...
@@ -445,5 +445,11 @@ namespace OnlineStore.AssemblyLine
...
@@ -445,5 +445,11 @@ namespace OnlineStore.AssemblyLine
IOManager
.
IOMove
(
IO_Type
.
Shunt2_MotorRun1
,
IO_VALUE
.
LOW
);
IOManager
.
IOMove
(
IO_Type
.
Shunt2_MotorRun1
,
IO_VALUE
.
LOW
);
IOManager
.
IOMove
(
IO_Type
.
Shunt2_MotorRun2
,
IO_VALUE
.
LOW
);
IOManager
.
IOMove
(
IO_Type
.
Shunt2_MotorRun2
,
IO_VALUE
.
LOW
);
}
}
private
void
btmMove5StopDown1_Click
(
object
sender
,
EventArgs
e
)
{
BtnMove
(
btnMove5StopDown1
,
"分流2-进仓5阻挡1下降"
,
"分流2-进仓5阻挡1上升"
,
IO_Type
.
StopCylinder_Down1
);
}
}
}
}
}
source/DeviceLibrary/LineConfig/MoveEquip/Config_MoveEquip_05.csv
查看文件 @
9738d6f
...
@@ -84,3 +84,5 @@ DO,1000,分流2横移机构4皮带运行,Shunt2_MotorRun2,11,PRO_AOI_IP_24,0,分流2横移机构
...
@@ -84,3 +84,5 @@ DO,1000,分流2横移机构4皮带运行,Shunt2_MotorRun2,11,PRO_AOI_IP_24,0,分流2横移机构
,,,,13,PRO_AOI_IP_24,0,,Y816,Y816
,,,,13,PRO_AOI_IP_24,0,,Y816,Y816
,,,,14,PRO_AOI_IP_24,0,,Y817,Y817
,,,,14,PRO_AOI_IP_24,0,,Y817,Y817
,,,,15,PRO_AOI_IP_24,0,,Y818,Y818
,,,,15,PRO_AOI_IP_24,0,,Y818,Y818
DI,1000,进仓05阻挡1托盘检测,StopCylinder_Check1,0,PRO_AOI_IP_23,0,进仓05阻挡1托盘检测,X321,X321
DO,1000,进仓05阻挡1下降SOL,StopCylinder_Down1,0,PRO_AOI_IP_23,0,进仓05阻挡1下降SOL,Y321,Y321
source/DeviceLibrary/assemblyLine/EquipBase.cs
查看文件 @
9738d6f
...
@@ -269,7 +269,11 @@ namespace OnlineStore.DeviceLibrary
...
@@ -269,7 +269,11 @@ namespace OnlineStore.DeviceLibrary
TimeSpan
rwSpan
=
DateTime
.
Now
-
preRWTime
;
TimeSpan
rwSpan
=
DateTime
.
Now
-
preRWTime
;
if
(
baseConfig
.
DType
.
Equals
(
DeviceType
.
MoveEquip
)
||
baseConfig
.
DType
.
Equals
(
DeviceType
.
ProvidingEquip
))
if
(
baseConfig
.
DType
.
Equals
(
DeviceType
.
MoveEquip
)
||
baseConfig
.
DType
.
Equals
(
DeviceType
.
ProvidingEquip
))
{
{
if
(
IOValue
(
IO_Type
.
StopCylinder_Down1
).
Equals
(
IO_VALUE
.
HIGH
)
&&
if
(!
TrayManager
.
HasCheck1
(
DeviceID
)
&&
IOValue
(
IO_Type
.
StopCylinder_Down2
).
Equals
(
IO_VALUE
.
HIGH
))
{
return
true
;
}
else
if
(
IOValue
(
IO_Type
.
StopCylinder_Down1
).
Equals
(
IO_VALUE
.
HIGH
)
&&
IOValue
(
IO_Type
.
StopCylinder_Down2
).
Equals
(
IO_VALUE
.
HIGH
))
IOValue
(
IO_Type
.
StopCylinder_Down2
).
Equals
(
IO_VALUE
.
HIGH
))
{
{
return
true
;
return
true
;
...
@@ -333,8 +337,15 @@ namespace OnlineStore.DeviceLibrary
...
@@ -333,8 +337,15 @@ namespace OnlineStore.DeviceLibrary
trayCount
++;
trayCount
++;
//此处先对托盘号进行验证
//此处先对托盘号进行验证
preTrayNum
=
currTrayNum
;
preTrayNum
=
currTrayNum
;
if
(!
TrayManager
.
HasCheck1
(
DeviceID
))
{
currTrayNum
=
TrayManager
.
Move5TrayNum
;
LogUtil
.
LOGGER
.
Info
(
Name
+
" ["
+
trayCount
+
"] IP ["
+
RFIDManager
.
GetRFIP
(
DeviceID
)
+
"] ["
+
preTrayNum
+
"] 当前托盘 ["
+
currTrayNum
+
"] 使用横移分流2缓存托盘号 Move5TrayNum "
);
}
else
{
currTrayNum
=
RFIDManager
.
GetTrayNum
(
DeviceID
,
true
);
currTrayNum
=
RFIDManager
.
GetTrayNum
(
DeviceID
,
true
);
LogUtil
.
LOGGER
.
Info
(
Name
+
" ["
+
trayCount
+
"] IP ["
+
RFIDManager
.
GetRFIP
(
DeviceID
)
+
"] ["
+
preTrayNum
+
"] 当前托盘 ["
+
currTrayNum
+
"]"
);
LogUtil
.
LOGGER
.
Info
(
Name
+
" ["
+
trayCount
+
"] IP ["
+
RFIDManager
.
GetRFIP
(
DeviceID
)
+
"] ["
+
preTrayNum
+
"] 当前托盘 ["
+
currTrayNum
+
"]"
);
if
(
preTrayNum
.
Equals
(
currTrayNum
)
&&
currTrayNum
>
0
)
if
(
preTrayNum
.
Equals
(
currTrayNum
)
&&
currTrayNum
>
0
)
{
{
TrayManager
.
TrayErrorMsg
=
DateTime
.
Now
.
ToLongTimeString
()
+
" "
+
Name
+
"托盘号出现错乱:上一个托盘["
+
preTrayNum
+
"] 当前托盘 ["
+
currTrayNum
+
"],连续两个托盘号一样"
;
TrayManager
.
TrayErrorMsg
=
DateTime
.
Now
.
ToLongTimeString
()
+
" "
+
Name
+
"托盘号出现错乱:上一个托盘["
+
preTrayNum
+
"] 当前托盘 ["
+
currTrayNum
+
"],连续两个托盘号一样"
;
...
@@ -345,6 +356,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -345,6 +356,7 @@ namespace OnlineStore.DeviceLibrary
TrayManager
.
TrayErrorMsg
=
DateTime
.
Now
.
ToLongTimeString
()
+
" "
+
Name
+
"托盘号出现错乱:上一个托盘["
+
preTrayNum
+
"] 当前托盘 ["
+
currTrayNum
+
"],托盘号不连续"
;
TrayManager
.
TrayErrorMsg
=
DateTime
.
Now
.
ToLongTimeString
()
+
" "
+
Name
+
"托盘号出现错乱:上一个托盘["
+
preTrayNum
+
"] 当前托盘 ["
+
currTrayNum
+
"],托盘号不连续"
;
LogUtil
.
error
(
Name
+
"托盘号错乱:上一个托盘["
+
preTrayNum
+
"] 当前托盘 ["
+
currTrayNum
+
"],托盘号不连续"
);
LogUtil
.
error
(
Name
+
"托盘号错乱:上一个托盘["
+
preTrayNum
+
"] 当前托盘 ["
+
currTrayNum
+
"],托盘号不连续"
);
}
}
}
return
true
;
return
true
;
}
}
internal
void
ClearTrayRFID
()
internal
void
ClearTrayRFID
()
...
...
source/DeviceLibrary/assemblyLine/LineBean_Shunt.cs
查看文件 @
9738d6f
...
@@ -69,7 +69,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -69,7 +69,7 @@ namespace OnlineStore.DeviceLibrary
if
(
IOValue
(
IO_Type
.
Shunt_Check3_Back
).
Equals
(
IO_VALUE
.
LOW
)
&&
IOValue
(
IO_Type
.
Shunt_StopDown2_Back
).
Equals
(
IO_VALUE
.
LOW
))
if
(
IOValue
(
IO_Type
.
Shunt_Check3_Back
).
Equals
(
IO_VALUE
.
LOW
)
&&
IOValue
(
IO_Type
.
Shunt_StopDown2_Back
).
Equals
(
IO_VALUE
.
LOW
))
{
{
if
((
Shunt_MoveInfo
.
MoveType
.
Equals
(
LineMoveType
.
None
)
||
if
((
Shunt_MoveInfo
.
MoveType
.
Equals
(
LineMoveType
.
None
)
||
Shunt_MoveInfo
.
MoveStep
<=
LineMoveStep
.
Shunt0
3
_WaitCheck1Low
))
Shunt_MoveInfo
.
MoveStep
<=
LineMoveStep
.
Shunt0
5
_WaitCheck1Low
))
{
{
if
(
CylinderIsOk
(
IO_Type
.
Shunt_TopCylinder_Up2
,
IO_Type
.
Shunt_TopCylinder_Down2
))
if
(
CylinderIsOk
(
IO_Type
.
Shunt_TopCylinder_Up2
,
IO_Type
.
Shunt_TopCylinder_Down2
))
{
{
...
@@ -170,7 +170,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -170,7 +170,7 @@ namespace OnlineStore.DeviceLibrary
if
(
TrayManager
.
checkWatch
(
ShuntCheck1Watch
,
400
,
true
))
if
(
TrayManager
.
checkWatch
(
ShuntCheck1Watch
,
400
,
true
))
{
{
Shunt_MoveInfo
.
NewMove
(
LineMoveType
.
InStore
);
Shunt_MoveInfo
.
NewMove
(
LineMoveType
.
InStore
);
Shunt_MoveInfo
.
NextMoveStep
(
LineMoveStep
.
Shunt0
1
_WaitTime
);
Shunt_MoveInfo
.
NextMoveStep
(
LineMoveStep
.
Shunt0
2
_WaitTime
);
UpateShuntTrayNum
();
UpateShuntTrayNum
();
ShuntLog
(
"分流横移:等待阻挡1亮,阻挡2亮,阻挡1上升,升降1下降 "
);
ShuntLog
(
"分流横移:等待阻挡1亮,阻挡2亮,阻挡1上升,升降1下降 "
);
CylinderMove
(
Shunt_MoveInfo
,
IO_Type
.
Shunt_TopCylinder_Up1
,
IO_Type
.
Shunt_TopCylinder_Down1
,
true
);
CylinderMove
(
Shunt_MoveInfo
,
IO_Type
.
Shunt_TopCylinder_Up1
,
IO_Type
.
Shunt_TopCylinder_Down1
,
true
);
...
@@ -230,12 +230,12 @@ namespace OnlineStore.DeviceLibrary
...
@@ -230,12 +230,12 @@ namespace OnlineStore.DeviceLibrary
return
;
return
;
}
}
if
(
Shunt_MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
Shunt0
1
_WaitTime
))
if
(
Shunt_MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
Shunt0
2
_WaitTime
))
{
{
string
msg
=
""
;
string
msg
=
""
;
if
(
TrayNeedShunt
(
ShuntTrayNum
,
out
msg
))
if
(
TrayNeedShunt
(
ShuntTrayNum
,
out
msg
))
{
{
Shunt_MoveInfo
.
NextMoveStep
(
LineMoveStep
.
Shunt0
5
_Top1Up
);
Shunt_MoveInfo
.
NextMoveStep
(
LineMoveStep
.
Shunt0
6
_Top1Up
);
LogUtil
.
info
(
Name
+
"["
+
ShuntTrayNum
+
"]"
+
"分流横移:"
+
msg
+
" 需要分流,阻挡1上升,升降1上升 ,等待升降2是否可上升 "
);
LogUtil
.
info
(
Name
+
"["
+
ShuntTrayNum
+
"]"
+
"分流横移:"
+
msg
+
" 需要分流,阻挡1上升,升降1上升 ,等待升降2是否可上升 "
);
CheckAndMove
(
IO_Type
.
Shunt_MotorRun1
,
IO_VALUE
.
LOW
);
CheckAndMove
(
IO_Type
.
Shunt_MotorRun1
,
IO_VALUE
.
LOW
);
CheckAndMove
(
IO_Type
.
Shunt_MotorRun2
,
IO_VALUE
.
LOW
);
CheckAndMove
(
IO_Type
.
Shunt_MotorRun2
,
IO_VALUE
.
LOW
);
...
@@ -248,24 +248,24 @@ namespace OnlineStore.DeviceLibrary
...
@@ -248,24 +248,24 @@ namespace OnlineStore.DeviceLibrary
}
}
else
else
{
{
Shunt_MoveInfo
.
NextMoveStep
(
LineMoveStep
.
Shunt0
2
_Stop1Down
);
Shunt_MoveInfo
.
NextMoveStep
(
LineMoveStep
.
Shunt0
4
_Stop1Down
);
LogUtil
.
info
(
Name
+
"["
+
ShuntTrayNum
+
"]"
+
"分流横移: 不需要分流,直接放行,Shunt_StopDown1_Front 下降1200 "
);
LogUtil
.
info
(
Name
+
"["
+
ShuntTrayNum
+
"]"
+
"分流横移: 不需要分流,直接放行,Shunt_StopDown1_Front 下降1200 "
);
IOMove
(
IO_Type
.
Shunt_StopDown1_Front
,
IO_VALUE
.
HIGH
,
1200
);
IOMove
(
IO_Type
.
Shunt_StopDown1_Front
,
IO_VALUE
.
HIGH
,
1200
);
}
}
}
}
else
if
(
Shunt_MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
Shunt0
2
_Stop1Down
))
else
if
(
Shunt_MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
Shunt0
4
_Stop1Down
))
{
{
Shunt_MoveInfo
.
NextMoveStep
(
LineMoveStep
.
Shunt0
3
_WaitCheck1Low
);
Shunt_MoveInfo
.
NextMoveStep
(
LineMoveStep
.
Shunt0
5
_WaitCheck1Low
);
ShuntLog
(
"分流横移: 不需要分流,等待检测1信号消失 "
);
ShuntLog
(
"分流横移: 不需要分流,等待检测1信号消失 "
);
Shunt_MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
Shunt_Check1_Front
,
IO_VALUE
.
LOW
));
Shunt_MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
Shunt_Check1_Front
,
IO_VALUE
.
LOW
));
}
}
else
if
(
Shunt_MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
Shunt0
3
_WaitCheck1Low
))
else
if
(
Shunt_MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
Shunt0
5
_WaitCheck1Low
))
{
{
Shunt_MoveInfo
.
EndMove
();
Shunt_MoveInfo
.
EndMove
();
ShuntLog
(
"分流横移: 已离开 "
);
ShuntLog
(
"分流横移: 已离开 "
);
}
}
else
if
(
Shunt_MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
Shunt0
5
_Top1Up
))
else
if
(
Shunt_MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
Shunt0
6
_Top1Up
))
{
{
if
(
Shunt_Updown2CanUp
())
if
(
Shunt_Updown2CanUp
())
{
{
...
...
source/DeviceLibrary/assemblyLine/LineBean_Shunt2.cs
查看文件 @
9738d6f
...
@@ -34,6 +34,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -34,6 +34,7 @@ namespace OnlineStore.DeviceLibrary
{
{
return
true
;
return
true
;
}
}
return
true
;
if
(
IOValue
(
IO_Type
.
Shunt2_Check1_Front
).
Equals
(
IO_VALUE
.
LOW
)
&&
if
(
IOValue
(
IO_Type
.
Shunt2_Check1_Front
).
Equals
(
IO_VALUE
.
LOW
)
&&
IOValue
(
IO_Type
.
Shunt2_Check2_Middle
).
Equals
(
IO_VALUE
.
LOW
))
IOValue
(
IO_Type
.
Shunt2_Check2_Middle
).
Equals
(
IO_VALUE
.
LOW
))
{
{
...
@@ -66,7 +67,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -66,7 +67,7 @@ namespace OnlineStore.DeviceLibrary
if
(
IOValue
(
IO_Type
.
Shunt2_Check3_Back
).
Equals
(
IO_VALUE
.
LOW
)
&&
IOValue
(
IO_Type
.
Shunt2_StopDown2_Back
).
Equals
(
IO_VALUE
.
LOW
))
if
(
IOValue
(
IO_Type
.
Shunt2_Check3_Back
).
Equals
(
IO_VALUE
.
LOW
)
&&
IOValue
(
IO_Type
.
Shunt2_StopDown2_Back
).
Equals
(
IO_VALUE
.
LOW
))
{
{
if
((
Shunt2_MoveInfo
.
MoveType
.
Equals
(
LineMoveType
.
None
)
||
if
((
Shunt2_MoveInfo
.
MoveType
.
Equals
(
LineMoveType
.
None
)
||
Shunt2_MoveInfo
.
MoveStep
<=
LineMoveStep
.
Shunt0
3
_WaitCheck1Low
))
Shunt2_MoveInfo
.
MoveStep
<=
LineMoveStep
.
Shunt0
5
_WaitCheck1Low
))
{
{
if
(
CylinderIsOk
(
IO_Type
.
Shunt2_TopCylinder_Up2
,
IO_Type
.
Shunt2_TopCylinder_Down2
))
if
(
CylinderIsOk
(
IO_Type
.
Shunt2_TopCylinder_Up2
,
IO_Type
.
Shunt2_TopCylinder_Down2
))
{
{
...
@@ -157,22 +158,39 @@ namespace OnlineStore.DeviceLibrary
...
@@ -157,22 +158,39 @@ namespace OnlineStore.DeviceLibrary
if
(
Shunt2_MoveInfo
.
MoveType
.
Equals
(
LineMoveType
.
None
))
if
(
Shunt2_MoveInfo
.
MoveType
.
Equals
(
LineMoveType
.
None
))
{
{
if
(
IOValue
(
IO_Type
.
Shunt2_Check1_Front
).
Equals
(
IO_VALUE
.
HIGH
)&&
IOValue
(
IO_Type
.
Shunt2_Check2_Middle
).
Equals
(
IO_VALUE
.
HIGH
))
if
(
IOValue
(
IO_Type
.
Shunt2_Check1_Front
).
Equals
(
IO_VALUE
.
HIGH
)
&&
IOValue
(
IO_Type
.
Shunt2_Check2_Middle
).
Equals
(
IO_VALUE
.
HIGH
))
{
{
if
(
TrayManager
.
checkWatch
(
Shunt2Check1Watch
,
400
,
true
))
if
(
TrayManager
.
checkWatch
(
Shunt2Check1Watch
,
400
,
true
))
{
{
Shunt2_MoveInfo
.
NewMove
(
LineMoveType
.
InStore
);
Shunt2_MoveInfo
.
NewMove
(
LineMoveType
.
InStore
);
Shunt2_MoveInfo
.
NextMoveStep
(
LineMoveStep
.
Shunt0
1
_WaitTime
);
Shunt2_MoveInfo
.
NextMoveStep
(
LineMoveStep
.
Shunt0
2
_WaitTime
);
//读取进仓5处的托盘号
//读取进仓5处的托盘号
Shunt2TrayNum
=
RFIDManager
.
GetTrayNum
(
5
,
false
);
Shunt2TrayNum
=
RFIDManager
.
GetTrayNum
(
5
,
false
);
Shunt2Log
(
"分流横移2:托盘号【"
+
Shunt2TrayNum
+
"】等待阻挡1亮,阻挡2亮,阻挡1上升,升降1下降 "
);
Shunt2Log
(
"分流横移2:托盘号【"
+
Shunt2TrayNum
+
"】等待阻挡1亮,阻挡2亮,阻挡1上升,升降1下降 "
);
CylinderMove
(
Shunt2_MoveInfo
,
IO_Type
.
Shunt2_TopCylinder_Up1
,
IO_Type
.
Shunt2_TopCylinder_Down1
,
true
);
CylinderMove
(
Shunt2_MoveInfo
,
IO_Type
.
Shunt2_TopCylinder_Up1
,
IO_Type
.
Shunt2_TopCylinder_Down1
,
true
);
CheckAndMove
(
IO_Type
.
Shunt2_StopDown1_Front
,
IO_VALUE
.
LOW
);
CheckAndMove
(
IO_Type
.
Shunt2_StopDown1_Front
,
IO_VALUE
.
LOW
);
Shunt2_MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
Shunt2_Check1_Front
,
IO_VALUE
.
HIGH
));
Shunt2_MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
Shunt2_Check1_Front
,
IO_VALUE
.
HIGH
));
Shunt2_MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
Shunt2_Check2_Middle
,
IO_VALUE
.
HIGH
));
Shunt2_MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
Shunt2_Check2_Middle
,
IO_VALUE
.
HIGH
));
}
}
}
}
else
if
(
IOValue
(
IO_Type
.
Shunt2_Check1_Front
).
Equals
(
IO_VALUE
.
LOW
)
&&
IOValue
(
IO_Type
.
Shunt2_Check2_Middle
).
Equals
(
IO_VALUE
.
LOW
))
{
//如果前阻挡有托盘,下降
if
(
IOValue
(
IO_Type
.
StopCylinder_Check1
).
Equals
(
IO_VALUE
.
HIGH
))
{
Shunt2_MoveInfo
.
NewMove
(
LineMoveType
.
InStore
);
Shunt2_MoveInfo
.
NextMoveStep
(
LineMoveStep
.
Shunt01_StopDown1
);
Shunt2Log
(
"分流横移2:前阻挡有托盘,前阻挡下降,等待托盘到达 "
);
CylinderMove
(
Shunt2_MoveInfo
,
IO_Type
.
Shunt2_TopCylinder_Up1
,
IO_Type
.
Shunt2_TopCylinder_Down1
,
true
);
IOMove
(
IO_Type
.
StopCylinder_Down1
,
IO_VALUE
.
HIGH
,
1200
);
CheckAndMove
(
IO_Type
.
Shunt2_StopDown1_Front
,
IO_VALUE
.
LOW
);
Shunt2_MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
Shunt2_Check1_Front
,
IO_VALUE
.
HIGH
));
Shunt2_MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
Shunt2_Check2_Middle
,
IO_VALUE
.
HIGH
));
}
}
else
else
{
{
Shunt2Check1Watch
.
Stop
();
Shunt2Check1Watch
.
Stop
();
...
@@ -222,13 +240,25 @@ namespace OnlineStore.DeviceLibrary
...
@@ -222,13 +240,25 @@ namespace OnlineStore.DeviceLibrary
{
{
return
;
return
;
}
}
if
(
Shunt2_MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
Shunt01_StopDown1
))
{
Shunt2_MoveInfo
.
NewMove
(
LineMoveType
.
InStore
);
Shunt2_MoveInfo
.
NextMoveStep
(
LineMoveStep
.
Shunt02_WaitTime
);
if
(
Shunt2_MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
Shunt01_WaitTime
))
//读取进仓5处的托盘号
Shunt2TrayNum
=
RFIDManager
.
GetTrayNum
(
5
,
false
);
Shunt2Log
(
"分流横移2:托盘号【"
+
Shunt2TrayNum
+
"】等待阻挡1亮,阻挡2亮,阻挡1上升,升降1下降 "
);
CylinderMove
(
Shunt2_MoveInfo
,
IO_Type
.
Shunt2_TopCylinder_Up1
,
IO_Type
.
Shunt2_TopCylinder_Down1
,
true
);
CheckAndMove
(
IO_Type
.
Shunt2_StopDown1_Front
,
IO_VALUE
.
LOW
);
Shunt2_MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
Shunt2_Check1_Front
,
IO_VALUE
.
HIGH
));
Shunt2_MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
Shunt2_Check2_Middle
,
IO_VALUE
.
HIGH
));
}
else
if
(
Shunt2_MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
Shunt02_WaitTime
))
{
{
string
msg
=
""
;
string
msg
=
""
;
if
(
TrayNeedShunt2
(
Shunt2TrayNum
,
out
msg
))
if
(
TrayNeedShunt2
(
Shunt2TrayNum
,
out
msg
))
{
{
Shunt2_MoveInfo
.
NextMoveStep
(
LineMoveStep
.
Shunt0
5
_Top1Up
);
Shunt2_MoveInfo
.
NextMoveStep
(
LineMoveStep
.
Shunt0
6
_Top1Up
);
LogUtil
.
info
(
Name
+
"["
+
Shunt2TrayNum
+
"]"
+
"分流横移2:"
+
msg
+
" 需要分流,阻挡1上升,升降1上升 ,等待升降2是否可上升 ,进仓5结束托盘处理,清理托盘号"
);
LogUtil
.
info
(
Name
+
"["
+
Shunt2TrayNum
+
"]"
+
"分流横移2:"
+
msg
+
" 需要分流,阻挡1上升,升降1上升 ,等待升降2是否可上升 ,进仓5结束托盘处理,清理托盘号"
);
CheckAndMove
(
IO_Type
.
Shunt2_MotorRun1
,
IO_VALUE
.
LOW
);
CheckAndMove
(
IO_Type
.
Shunt2_MotorRun1
,
IO_VALUE
.
LOW
);
CheckAndMove
(
IO_Type
.
Shunt2_MotorRun2
,
IO_VALUE
.
LOW
);
CheckAndMove
(
IO_Type
.
Shunt2_MotorRun2
,
IO_VALUE
.
LOW
);
...
@@ -243,24 +273,51 @@ namespace OnlineStore.DeviceLibrary
...
@@ -243,24 +273,51 @@ namespace OnlineStore.DeviceLibrary
}
}
else
else
{
{
Shunt2_MoveInfo
.
NextMoveStep
(
LineMoveStep
.
Shunt02_Stop1Down
);
MoveEquip
moveEquip
=
LineManager
.
Line
.
GetMoveByDId
(
5
);
if
(
moveEquip
.
IOValue
(
IO_Type
.
StopCylinder_Check2
).
Equals
(
IO_VALUE
.
LOW
))
{
Shunt2_MoveInfo
.
NextMoveStep
(
LineMoveStep
.
Shunt04_Stop1Down
);
LogUtil
.
info
(
Name
+
"["
+
Shunt2TrayNum
+
"]"
+
"分流横移2: 不需要分流,直接放行,Shunt2_StopDown1_Front 下降1200 "
);
LogUtil
.
info
(
Name
+
"["
+
Shunt2TrayNum
+
"]"
+
"分流横移2: 不需要分流,直接放行,Shunt2_StopDown1_Front 下降1200 "
);
IOMove
(
IO_Type
.
Shunt2_StopDown1_Front
,
IO_VALUE
.
HIGH
,
1200
);
IOMove
(
IO_Type
.
Shunt2_StopDown1_Front
,
IO_VALUE
.
HIGH
,
1200
);
}
}
else
{
Shunt2_MoveInfo
.
NextMoveStep
(
LineMoveStep
.
Shunt03_WaitStop1Down
);
LogUtil
.
info
(
Name
+
"["
+
Shunt2TrayNum
+
"]"
+
"分流横移2: 不需要分流,等待进仓5处无托盘后放行托盘 "
);
IOMove
(
IO_Type
.
Shunt2_StopDown1_Front
,
IO_VALUE
.
HIGH
,
500
);
}
}
}
else
if
(
Shunt2_MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
Shunt03_WaitStop1Down
))
{
MoveEquip
moveEquip
=
LineManager
.
Line
.
GetMoveByDId
(
5
);
if
(
moveEquip
.
IOValue
(
IO_Type
.
StopCylinder_Check2
).
Equals
(
IO_VALUE
.
LOW
))
{
Shunt2_MoveInfo
.
NextMoveStep
(
LineMoveStep
.
Shunt04_Stop1Down
);
LogUtil
.
info
(
Name
+
"["
+
Shunt2TrayNum
+
"]"
+
"分流横移2: 不需要分流,放行托盘,Shunt2_StopDown1_Front 下降1200 "
);
IOMove
(
IO_Type
.
Shunt2_StopDown1_Front
,
IO_VALUE
.
HIGH
,
1200
);
}
else
{
Shunt2_MoveInfo
.
NextMoveStep
(
LineMoveStep
.
Shunt03_WaitStop1Down
);
LogUtil
.
info
(
Name
+
"["
+
Shunt2TrayNum
+
"]"
+
"分流横移2: 不需要分流,等待进仓5处无托盘后放行托盘 "
);
IOMove
(
IO_Type
.
Shunt2_StopDown1_Front
,
IO_VALUE
.
HIGH
,
500
);
}
}
else
if
(
Shunt2_MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
Shunt02_Stop1Down
))
}
else
if
(
Shunt2_MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
Shunt04_Stop1Down
))
{
{
Shunt2_MoveInfo
.
NextMoveStep
(
LineMoveStep
.
Shunt0
3
_WaitCheck1Low
);
Shunt2_MoveInfo
.
NextMoveStep
(
LineMoveStep
.
Shunt0
5
_WaitCheck1Low
);
Shunt2Log
(
"分流横移2: 不需要分流,等待检测1信号消失 "
);
Shunt2Log
(
"分流横移2: 不需要分流,等待检测1信号消失 "
);
Shunt2_MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
Shunt2_Check1_Front
,
IO_VALUE
.
LOW
));
Shunt2_MoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
Shunt2_Check1_Front
,
IO_VALUE
.
LOW
));
}
}
else
if
(
Shunt2_MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
Shunt0
3
_WaitCheck1Low
))
else
if
(
Shunt2_MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
Shunt0
5
_WaitCheck1Low
))
{
{
Shunt2_MoveInfo
.
EndMove
();
Shunt2_MoveInfo
.
EndMove
();
Shunt2Log
(
"分流横移2: 已离开 "
);
Shunt2Log
(
"分流横移2: 已离开 ,更新 Move5TrayNum= "
+
Shunt2TrayNum
);
TrayManager
.
Move5TrayNum
=
Shunt2TrayNum
;
}
}
else
if
(
Shunt2_MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
Shunt0
5
_Top1Up
))
else
if
(
Shunt2_MoveInfo
.
MoveStep
.
Equals
(
LineMoveStep
.
Shunt0
6
_Top1Up
))
{
{
if
(
Shunt2_Updown2CanUp
())
if
(
Shunt2_Updown2CanUp
())
{
{
...
...
source/DeviceLibrary/assemblyLine/MoveEquip_Partial.cs
查看文件 @
9738d6f
...
@@ -816,16 +816,19 @@ namespace OnlineStore.DeviceLibrary
...
@@ -816,16 +816,19 @@ namespace OnlineStore.DeviceLibrary
{
{
SecondMoveInfo
.
NewMove
(
LineMoveType
.
CheckFixture
);
SecondMoveInfo
.
NewMove
(
LineMoveType
.
CheckFixture
);
SecondMoveInfo
.
NextMoveStep
(
LineMoveStep
.
MIO_03_Stop2Down
);
SecondMoveInfo
.
NextMoveStep
(
LineMoveStep
.
MIO_03_Stop2Down
);
CheckLog
(
"托盘阻挡"
+
SecondMoveInfo
.
SLog
+
" 阻挡气缸1-1上升)"
);
CheckLog
(
"托盘阻挡"
+
SecondMoveInfo
.
SLog
+
" 阻挡气缸1-1上升)"
);
if
(
TrayManager
.
HasCheck1
(
DeviceID
))
{
IOMove
(
IO_Type
.
StopCylinder_Down1
,
IO_VALUE
.
LOW
);
IOMove
(
IO_Type
.
StopCylinder_Down1
,
IO_VALUE
.
LOW
);
SecondMoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
StopCylinder_Down1
,
IO_VALUE
.
LOW
));
SecondMoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitIO
(
IO_Type
.
StopCylinder_Down1
,
IO_VALUE
.
LOW
));
}
}
}
}
}
else
else
{
{
bool
check2IsOk
=
TrayManager
.
checkWatch
(
trayCheck2LowWait
,
TrayManager
.
SwTrayWaitTime
,
false
);
bool
check2IsOk
=
TrayManager
.
checkWatch
(
trayCheck2LowWait
,
TrayManager
.
SwTrayWaitTime
,
false
);
if
(
IOValue
(
IO_Type
.
StopCylinder_Check1
).
Equals
(
IO_VALUE
.
HIGH
))
if
(
IOValue
(
IO_Type
.
StopCylinder_Check1
).
Equals
(
IO_VALUE
.
HIGH
)
&&
TrayManager
.
HasCheck1
(
DeviceID
)
)
{
{
if
(
TrayManager
.
checkWatch
(
trayCheckWait
,
TrayManager
.
SwTrayWaitTime
,
false
)
&&
check2IsOk
&&
canpro
)
if
(
TrayManager
.
checkWatch
(
trayCheckWait
,
TrayManager
.
SwTrayWaitTime
,
false
)
&&
check2IsOk
&&
canpro
)
{
{
...
...
source/DeviceLibrary/assemblymanager/TrayManager.cs
查看文件 @
9738d6f
...
@@ -13,6 +13,18 @@ namespace OnlineStore.DeviceLibrary
...
@@ -13,6 +13,18 @@ namespace OnlineStore.DeviceLibrary
{
{
public
class
TrayManager
public
class
TrayManager
{
{
/// <summary>
/// 进仓5RFID缓存
/// </summary>
public
static
int
Move5TrayNum
=
0
;
public
static
bool
HasCheck1
(
int
deviceId
)
{
bool
move5pro
=
(!
deviceId
.
Equals
(
5
))
||
(
LineManager
.
Line
.
DisableShunt2
);
return
move5pro
;
}
public
static
int
StopDTime
=
2000
;
public
static
int
StopDTime
=
2000
;
public
static
int
mTimeOut
=
20
;
public
static
int
mTimeOut
=
20
;
public
static
int
SwTrayWaitTime
=
500
;
public
static
int
SwTrayWaitTime
=
500
;
...
...
source/DeviceLibrary/model/KTK_Store.cs
查看文件 @
9738d6f
...
@@ -535,6 +535,13 @@ namespace OnlineStore.DeviceLibrary
...
@@ -535,6 +535,13 @@ namespace OnlineStore.DeviceLibrary
}
}
public
void
IOMove
(
string
IoType
,
IO_VALUE
value
,
int
msTime
=
0
)
public
void
IOMove
(
string
IoType
,
IO_VALUE
value
,
int
msTime
=
0
)
{
{
if
(!
TrayManager
.
HasCheck1
(
baseConfig
.
Id
))
{
if
(
IoType
.
Equals
(
IO_Type
.
StopCylinder_Down1
))
{
return
;
}
}
if
(
msTime
<=
0
)
if
(
msTime
<=
0
)
{
{
IOManager
.
IOMove
(
IoType
,
value
,
baseConfig
.
Id
);
IOManager
.
IOMove
(
IoType
,
value
,
baseConfig
.
Id
);
...
@@ -559,6 +566,13 @@ namespace OnlineStore.DeviceLibrary
...
@@ -559,6 +566,13 @@ namespace OnlineStore.DeviceLibrary
}
}
public
IO_VALUE
IOValue
(
string
IoType
)
public
IO_VALUE
IOValue
(
string
IoType
)
{
{
//if (!TrayManager.HasCheck1(baseConfig.Id))
//{
// if (IoType.Equals(IO_Type.StopCylinder_Down1)||IoType.Equals(IO_Type.StopCylinder_Check1))
// {
// return IO_VALUE.LOW;
// }
//}
return
IOManager
.
IOValue
(
IoType
,
baseConfig
.
Id
);
return
IOManager
.
IOValue
(
IoType
,
baseConfig
.
Id
);
}
}
public
void
DebugInfo
(
string
logInfo
)
public
void
DebugInfo
(
string
logInfo
)
...
...
source/DeviceLibrary/model/StoreStep.cs
查看文件 @
9738d6f
...
@@ -497,27 +497,34 @@ namespace OnlineStore.DeviceLibrary
...
@@ -497,27 +497,34 @@ namespace OnlineStore.DeviceLibrary
#
region
分流横移处理
6000
开始
#
region
分流横移处理
6000
开始
/// <summary>
/// 分流横移:前阻挡下降
/// </summary>
Shunt01_StopDown1
=
6001
,
/// <summary>
/// <summary>
/// 分流横移:等待Shunt_Check1_Front亮
/// 分流横移:等待Shunt_Check1_Front亮
/// </summary>
/// </summary>
Shunt01_WaitTime
=
6001
,
Shunt02_WaitTime
,
/// <summary>
/// 分流横移:等待阻挡可下降
/// </summary>
Shunt03_WaitStop1Down
,
/// <summary>
/// <summary>
/// 分流横移:托盘不需要横移,阻挡1下降1200,
/// 分流横移:托盘不需要横移,阻挡1下降1200,
/// </summary>
/// </summary>
Shunt0
2
_Stop1Down
,
Shunt0
4
_Stop1Down
,
/// <summary>
/// <summary>
/// 分流横移:等待检测1信号消失
/// 分流横移:等待检测1信号消失
/// </summary>
/// </summary>
Shunt0
3
_WaitCheck1Low
,
Shunt0
5
_WaitCheck1Low
,
/// <summary>
/// <summary>
/// 分流横移:阻挡1上升,升降1上升,等待升降2是否可上升
/// 分流横移:阻挡1上升,升降1上升,等待升降2是否可上升
/// </summary>
/// </summary>
Shunt05_Top1Up
,
Shunt06_Top1Up
,
///// <summary>
///// 分流横移:等待升降2是否可上升
///// </summary>
//Shunt06_WaitUpdown2CanUp,
/// <summary>
/// <summary>
/// 分流横移:升降2开始上升
/// 分流横移:升降2开始上升
/// </summary>
/// </summary>
...
...
source/LoadCVSLibrary/storeConfig/config/DeviceConfig.cs
查看文件 @
9738d6f
...
@@ -314,6 +314,10 @@ namespace OnlineStore.LoadCSVLibrary
...
@@ -314,6 +314,10 @@ namespace OnlineStore.LoadCSVLibrary
}
}
foreach
(
string
key
in
doList
.
Keys
)
foreach
(
string
key
in
doList
.
Keys
)
{
{
if
(
DOList
.
ContainsKey
(
key
))
{
DOList
.
Remove
(
key
);
}
DOList
.
Add
(
key
,
doList
[
key
]);
DOList
.
Add
(
key
,
doList
[
key
]);
if
(!
IOIPList
.
Contains
(
doList
[
key
].
IO_IP
))
if
(!
IOIPList
.
Contains
(
doList
[
key
].
IO_IP
))
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论