Commit 0968b141 LN

1

1 个父辈 8b174bb9
......@@ -10,8 +10,7 @@ namespace OnlineStore.Common
/// 记录配置的key
/// </summary>
public class Setting_Init
{
public static string Agv_Log_Open = "Agv_Log_Open";
{
public static string Server_Log_Open = "Server_Log_Open";
/// <summary>
/// 系统启动时自动启动料仓,=1时自动启动,并隐藏窗口,=0时不需要
......@@ -20,9 +19,7 @@ namespace OnlineStore.Common
/// <summary>
/// 系统主界面标题
/// </summary>
public static string App_Title = "App_Title";
public static string App_Title = "App_Title";
public static string http_server = "http.server";
public static string Store_CID = "Store_CID";
......@@ -76,8 +73,7 @@ namespace OnlineStore.Common
/// 温控器类型,0=壁挂王字壳温湿度变送器,1=妙昕温湿度记录仪
/// </summary>
public static string HumitureControllerType = "HumitureControllerType";
public static string UseAIOBOX = "UseAIOBOX";
public static string LineServerIp = "LineServerIp";
public static string LineServerPort = "LineServerPort";
......@@ -87,8 +83,7 @@ namespace OnlineStore.Common
public static string Store_ConfigPath = "Store_ConfigPath";
public static string UseBuzzer = "UseBuzzer";
public static string Shelf_Position_Config = "Shelf_Position_Config";
public static string UseBuzzer = "UseBuzzer";
public static string Tool_P3_Offset = "Tool_P3_Offset";
......@@ -98,12 +93,8 @@ namespace OnlineStore.Common
public static string Tool_TargetSpeed = "Tool_TargetSpeed";
public static string Tool_TargetPosition = "Tool_TargetPosition";
public static string AgvServerIp = "AgvServerIp";
public static string CodeCount = "CodeCount";
public static string AutoShelfInstore = "AutoShelfInstore";
public static string UseDoor = "UseDoor";
public static string InoutDefaultPosition = "InoutDefaultPosition";
public static string CodeCount = "CodeCount";
}
}
......@@ -12,12 +12,11 @@
<!-- 停止吹气的判断值(配置值=服务器发送的湿度值-停止吹气值)-->
<add key="StopBlowValue" value="4" />
<!--Server address-->
<add key="http.server" value="http://10.85.160.25/myproject/" />
<!--<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" />
<!--start one store config-->
<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" />
......@@ -25,8 +24,7 @@
<add key="Store_CID_1" value="duo-1" />
<add key="Store_CID_2" value="duo-2" />
<!--end one store config-->
<add key="ACBaudRate" value="115200" />
<add key="InOutDefaultPosition" value="52000" />
<add key="ACBaudRate" value="115200" />
<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" />
......@@ -38,17 +36,12 @@
<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="DOMS" value="300" />
<!--是否调试状态-->
<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="AIOAutoUpload" value="0" />
<add key="CodeCount" value="3" />
<add key="Tool_P3_Offset" value="7000" />
<add key="Tool_P4_Offset" value="-2000" />
......@@ -61,7 +54,7 @@
<add key="Agv_Log_Open" value="1" />
<add key="AutoShelfInstore" value="1" />
<!--进出轴位置-->
<add key ="InoutDefaultPosition" value ="3000"/>
<add key ="InOutDefaultPosition" value ="3000"/>
</appSettings>
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
......@@ -89,7 +82,7 @@
<appender-ref ref="RollingLogFileAppender" />
</logger>
<logger name="AIOBOX">
<level value="Debug" />
<level value="Info" />
<appender-ref ref="AIOBOX" />
</logger>
<root>
......
......@@ -117,7 +117,7 @@ namespace OnlineStore.DUOStore
}
// lblTemp.Text = BoxBean.humBean.currTempStr;
lblWarnMsg.Text = BoxBean.GetWarnMsg();
lblWarnMsg.Text = BoxBean.WarnMsg;
lblMoveInfo.Text = BoxBean.GetMoveStr();
if (BoxBean.MoveInfo.MoveType.Equals(MoveType.InStore))
{
......@@ -545,21 +545,21 @@ namespace OnlineStore.DUOStore
}
else
{
//DialogResult res = MessageBox.Show("确定开始自动出入库?", "提示", MessageBoxButtons.YesNo);
//if (res.Equals(DialogResult.Yes) && cmbPosition.SelectedIndex >= 0)
//{
// int jiange = FormUtil.GetIntValue(txtJiange);
// int currIndex = cmbPosition.SelectedIndex;
// BoxBean.AutoInout.StartAuto(jiange, currIndex, cmbShelfPosition.Text);
// string poText = cmbPosition.Text;
// BoxBean.AutoInout.autoMsg = "自动出库:" + poText;
// LogUtil.info(BoxBean.Name + "开启自动出入库模式,开始位置【" + poText + "】(索引=" + currIndex + "),间隔=" + jiange + ",入库开始!");
// //BoxBean.StartOutStoreMove(new InOutStoreParam("", poText));
// BoxBean.StartInStoreMove(new InOutParam("", poText, cmbShelfPosition.Text));
// btnStartAuTo.Text = "停止自动出入库";
//}
DialogResult res = MessageBox.Show("确定开始自动出入库?", "提示", MessageBoxButtons.YesNo);
if (res.Equals(DialogResult.Yes) && cmbPosition.SelectedIndex >= 0)
{
int jiange = FormUtil.GetIntValue(txtJiange);
int currIndex = cmbPosition.SelectedIndex;
BoxBean.AutoInout.StartAuto(jiange, currIndex);
string poText = cmbPosition.Text;
BoxBean.AutoInout.autoMsg = "自动出库:" + poText;
LogUtil.info(BoxBean.Name + "开启自动出入库模式,开始位置【" + poText + "】(索引=" + currIndex + "),间隔=" + jiange + ",入库开始!");
//BoxBean.StartOutStoreMove(new InOutStoreParam("", poText));
BoxBean.StartInStoreMove(new InOutParam("", poText));
btnStartAuTo.Text = "停止自动出入库";
}
}
}
else
......
......@@ -20,10 +20,6 @@
this.button1 = new System.Windows.Forms.Button();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.btnCloseAll = new System.Windows.Forms.Button();
this.btnRDoorDown = new System.Windows.Forms.Button();
this.btnRDoorUp = new System.Windows.Forms.Button();
this.btnLDoorDown = new System.Windows.Forms.Button();
this.btnLDoorUp = new System.Windows.Forms.Button();
this.btnRelax = new System.Windows.Forms.Button();
this.btnClamp = new System.Windows.Forms.Button();
this.btnLineStop = new System.Windows.Forms.Button();
......@@ -74,10 +70,6 @@
this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)));
this.groupBox1.Controls.Add(this.btnCloseAll);
this.groupBox1.Controls.Add(this.btnRDoorDown);
this.groupBox1.Controls.Add(this.btnRDoorUp);
this.groupBox1.Controls.Add(this.btnLDoorDown);
this.groupBox1.Controls.Add(this.btnLDoorUp);
this.groupBox1.Controls.Add(this.btnRelax);
this.groupBox1.Controls.Add(this.btnClamp);
this.groupBox1.Controls.Add(this.btnLineStop);
......@@ -109,7 +101,7 @@
//
this.btnCloseAll.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnCloseAll.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnCloseAll.Location = new System.Drawing.Point(168, 448);
this.btnCloseAll.Location = new System.Drawing.Point(168, 358);
this.btnCloseAll.Name = "btnCloseAll";
this.btnCloseAll.Size = new System.Drawing.Size(125, 34);
this.btnCloseAll.TabIndex = 302;
......@@ -117,54 +109,6 @@
this.btnCloseAll.UseVisualStyleBackColor = false;
this.btnCloseAll.Click += new System.EventHandler(this.btnCloseCyDo_Click);
//
// btnRDoorDown
//
this.btnRDoorDown.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnRDoorDown.Location = new System.Drawing.Point(168, 394);
this.btnRDoorDown.Name = "btnRDoorDown";
this.btnRDoorDown.Size = new System.Drawing.Size(125, 34);
this.btnRDoorDown.TabIndex = 301;
this.btnRDoorDown.Text = "右侧出料口门下降";
this.btnRDoorDown.UseVisualStyleBackColor = true;
this.btnRDoorDown.Visible = false;
this.btnRDoorDown.Click += new System.EventHandler(this.btnRDoorDown_Click);
//
// btnRDoorUp
//
this.btnRDoorUp.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnRDoorUp.Location = new System.Drawing.Point(168, 354);
this.btnRDoorUp.Name = "btnRDoorUp";
this.btnRDoorUp.Size = new System.Drawing.Size(125, 34);
this.btnRDoorUp.TabIndex = 300;
this.btnRDoorUp.Text = "右侧出料口门上升";
this.btnRDoorUp.UseVisualStyleBackColor = true;
this.btnRDoorUp.Visible = false;
this.btnRDoorUp.Click += new System.EventHandler(this.btnRDoorUp_Click);
//
// btnLDoorDown
//
this.btnLDoorDown.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnLDoorDown.Location = new System.Drawing.Point(14, 394);
this.btnLDoorDown.Name = "btnLDoorDown";
this.btnLDoorDown.Size = new System.Drawing.Size(125, 34);
this.btnLDoorDown.TabIndex = 299;
this.btnLDoorDown.Text = "左侧出料口门下降";
this.btnLDoorDown.UseVisualStyleBackColor = true;
this.btnLDoorDown.Visible = false;
this.btnLDoorDown.Click += new System.EventHandler(this.btnLDoorDown_Click);
//
// btnLDoorUp
//
this.btnLDoorUp.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnLDoorUp.Location = new System.Drawing.Point(14, 354);
this.btnLDoorUp.Name = "btnLDoorUp";
this.btnLDoorUp.Size = new System.Drawing.Size(125, 34);
this.btnLDoorUp.TabIndex = 298;
this.btnLDoorUp.Text = "左侧出料口门上升";
this.btnLDoorUp.UseVisualStyleBackColor = true;
this.btnLDoorUp.Visible = false;
this.btnLDoorUp.Click += new System.EventHandler(this.btnLDoorUp_Click);
//
// btnRelax
//
this.btnRelax.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
......@@ -217,7 +161,7 @@
//
this.btnDeviceLed.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnDeviceLed.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnDeviceLed.Location = new System.Drawing.Point(14, 488);
this.btnDeviceLed.Location = new System.Drawing.Point(14, 398);
this.btnDeviceLed.Name = "btnDeviceLed";
this.btnDeviceLed.Size = new System.Drawing.Size(125, 34);
this.btnDeviceLed.TabIndex = 293;
......@@ -229,7 +173,7 @@
//
this.btnCamerLed.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnCamerLed.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnCamerLed.Location = new System.Drawing.Point(14, 448);
this.btnCamerLed.Location = new System.Drawing.Point(14, 358);
this.btnCamerLed.Name = "btnCamerLed";
this.btnCamerLed.Size = new System.Drawing.Size(125, 34);
this.btnCamerLed.TabIndex = 290;
......@@ -351,7 +295,6 @@
this.btnBack.TabIndex = 251;
this.btnBack.Text = "提升机构后退";
this.btnBack.UseVisualStyleBackColor = false;
this.btnBack.Visible = false;
this.btnBack.Click += new System.EventHandler(this.btnLocationDown_Click);
//
// label5
......@@ -376,7 +319,6 @@
this.btnFoward.TabIndex = 250;
this.btnFoward.Text = "提升机构前进";
this.btnFoward.UseVisualStyleBackColor = false;
this.btnFoward.Visible = false;
this.btnFoward.Click += new System.EventHandler(this.btnLocationUp_Click);
//
// cmbWriteIO
......@@ -502,10 +444,6 @@
private System.Windows.Forms.Button btnLineRun;
private System.Windows.Forms.Button btnRelax;
private System.Windows.Forms.Button btnClamp;
private System.Windows.Forms.Button btnRDoorDown;
private System.Windows.Forms.Button btnRDoorUp;
private System.Windows.Forms.Button btnLDoorDown;
private System.Windows.Forms.Button btnLDoorUp;
private System.Windows.Forms.Button btnCloseAll;
}
}
......
......@@ -33,7 +33,6 @@
this.tabControl1 = new System.Windows.Forms.TabControl();
this.tabPage1 = new System.Windows.Forms.TabPage();
this.lblServerMsg = new System.Windows.Forms.Label();
this.chbDoorCanMove = new System.Windows.Forms.CheckBox();
this.chbUseBuzzer = new System.Windows.Forms.CheckBox();
this.chkDebug = new System.Windows.Forms.CheckBox();
this.chbAutoRun = new System.Windows.Forms.CheckBox();
......@@ -93,7 +92,6 @@
// tabPage1
//
this.tabPage1.Controls.Add(this.lblServerMsg);
this.tabPage1.Controls.Add(this.chbDoorCanMove);
this.tabPage1.Controls.Add(this.chbUseBuzzer);
this.tabPage1.Controls.Add(this.chkDebug);
this.tabPage1.Controls.Add(this.chbAutoRun);
......@@ -116,25 +114,12 @@
this.lblServerMsg.Size = new System.Drawing.Size(0, 17);
this.lblServerMsg.TabIndex = 201;
//
// chbDoorCanMove
//
this.chbDoorCanMove.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.chbDoorCanMove.AutoSize = true;
this.chbDoorCanMove.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.chbDoorCanMove.Location = new System.Drawing.Point(1132, 101);
this.chbDoorCanMove.Name = "chbDoorCanMove";
this.chbDoorCanMove.Size = new System.Drawing.Size(126, 24);
this.chbDoorCanMove.TabIndex = 197;
this.chbDoorCanMove.Text = "启用入料口移门";
this.chbDoorCanMove.UseVisualStyleBackColor = true;
this.chbDoorCanMove.CheckedChanged += new System.EventHandler(this.chbDoorCanMove_CheckedChanged);
//
// chbUseBuzzer
//
this.chbUseBuzzer.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.chbUseBuzzer.AutoSize = true;
this.chbUseBuzzer.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.chbUseBuzzer.Location = new System.Drawing.Point(1132, 54);
this.chbUseBuzzer.Location = new System.Drawing.Point(1132, 55);
this.chbUseBuzzer.Name = "chbUseBuzzer";
this.chbUseBuzzer.Size = new System.Drawing.Size(98, 24);
this.chbUseBuzzer.TabIndex = 195;
......@@ -147,7 +132,7 @@
this.chkDebug.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.chkDebug.AutoSize = true;
this.chkDebug.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.chkDebug.Location = new System.Drawing.Point(1132, 151);
this.chkDebug.Location = new System.Drawing.Point(1132, 97);
this.chkDebug.Name = "chkDebug";
this.chkDebug.Size = new System.Drawing.Size(132, 24);
this.chkDebug.TabIndex = 194;
......@@ -173,7 +158,7 @@
this.btnCopyLog.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnCopyLog.BackColor = System.Drawing.Color.White;
this.btnCopyLog.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnCopyLog.Location = new System.Drawing.Point(1132, 202);
this.btnCopyLog.Location = new System.Drawing.Point(1132, 139);
this.btnCopyLog.Name = "btnCopyLog";
this.btnCopyLog.Size = new System.Drawing.Size(105, 35);
this.btnCopyLog.TabIndex = 191;
......@@ -186,7 +171,7 @@
this.btnClearLog.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnClearLog.BackColor = System.Drawing.Color.White;
this.btnClearLog.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnClearLog.Location = new System.Drawing.Point(1132, 243);
this.btnClearLog.Location = new System.Drawing.Point(1132, 192);
this.btnClearLog.Name = "btnClearLog";
this.btnClearLog.Size = new System.Drawing.Size(105, 35);
this.btnClearLog.TabIndex = 190;
......@@ -320,38 +305,38 @@
// toolStripMenuItem2
//
this.toolStripMenuItem2.Name = "toolStripMenuItem2";
this.toolStripMenuItem2.Size = new System.Drawing.Size(180, 26);
this.toolStripMenuItem2.Size = new System.Drawing.Size(160, 26);
this.toolStripMenuItem2.Text = "启用调试";
this.toolStripMenuItem2.Click += new System.EventHandler(this.toolStripMenuItem2_Click);
//
// toolStripSeparator6
//
this.toolStripSeparator6.Name = "toolStripSeparator6";
this.toolStripSeparator6.Size = new System.Drawing.Size(177, 6);
this.toolStripSeparator6.Size = new System.Drawing.Size(157, 6);
//
// 二维码学习ToolStripMenuItem
//
this.二维码学习ToolStripMenuItem.Name = "二维码学习ToolStripMenuItem";
this.二维码学习ToolStripMenuItem.Size = new System.Drawing.Size(180, 26);
this.二维码学习ToolStripMenuItem.Size = new System.Drawing.Size(160, 26);
this.二维码学习ToolStripMenuItem.Text = "二维码学习";
this.二维码学习ToolStripMenuItem.Click += new System.EventHandler(this.二维码学习ToolStripMenuItem_Click);
//
// toolStripSeparator7
//
this.toolStripSeparator7.Name = "toolStripSeparator7";
this.toolStripSeparator7.Size = new System.Drawing.Size(177, 6);
this.toolStripSeparator7.Size = new System.Drawing.Size(157, 6);
//
// 扫码测试ToolStripMenuItem
//
this.扫码测试ToolStripMenuItem.Name = "扫码测试ToolStripMenuItem";
this.扫码测试ToolStripMenuItem.Size = new System.Drawing.Size(180, 26);
this.扫码测试ToolStripMenuItem.Size = new System.Drawing.Size(160, 26);
this.扫码测试ToolStripMenuItem.Text = "扫码测试";
this.扫码测试ToolStripMenuItem.Click += new System.EventHandler(this.扫码测试ToolStripMenuItem_Click);
//
// toolStripSeparator9
//
this.toolStripSeparator9.Name = "toolStripSeparator9";
this.toolStripSeparator9.Size = new System.Drawing.Size(177, 6);
this.toolStripSeparator9.Size = new System.Drawing.Size(157, 6);
//
// 帮助ToolStripMenuItem
//
......@@ -475,7 +460,6 @@
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem2;
private System.Windows.Forms.CheckBox chbUseBuzzer;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator8;
private System.Windows.Forms.CheckBox chbDoorCanMove;
private System.Windows.Forms.Label lblServerMsg;
private System.Windows.Forms.ToolStripMenuItem 扫码测试ToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator9;
......
......@@ -57,8 +57,7 @@ namespace OnlineStore.DUOStore
chbAutoRun.Checked = store.UseBuzzer;
this.Text = ConfigAppSettings.GetValue(Setting_Init.App_Title);
chbAutoRun.Checked = (ConfigAppSettings.GetIntValue(Setting_Init.App_AutoRun).Equals(1));
chbDoorCanMove.Checked = (ConfigAppSettings.GetIntValue(Setting_Init.UseDoor).Equals(1));
chbAutoRun.Checked = (ConfigAppSettings.GetIntValue(Setting_Init.App_AutoRun).Equals(1));
// LogUtil.logBox = this.logBox;
// HideForm();
LoadOk = true;
......@@ -344,7 +343,7 @@ namespace OnlineStore.DUOStore
string msg = "";
foreach(BoxBean box in StoreManager.Store.BoxMap.Values)
{
string s = box.GetWarnMsg();
string s = box.WarnMsg;
if (!s.Equals(""))
{
msg += box.Name+":"+s+ "\r" ;
......@@ -522,29 +521,7 @@ namespace OnlineStore.DUOStore
LogUtil.UpdateLogbox();
}
}
}
private void chbDoorCanMove_CheckedChanged(object sender, EventArgs e)
{
if (!LoadOk)
{
return;
}
if (chbDoorCanMove.Checked)
{
// store.AutoShelfInstore = true;
ConfigAppSettings.SaveValue(Setting_Init.UseDoor, 1);
LogUtil.info("勾选:启用入料口移门");
}
else
{
// store.AutoShelfInstore = false;
ConfigAppSettings.SaveValue(Setting_Init.UseDoor, 0);
LogUtil.info("去掉:启用入料口移门");
}
}
}
private void 扫码测试ToolStripMenuItem_Click(object sender, EventArgs e)
{
store.IOMove(IO_Type.Camera_Led, IO_VALUE.HIGH);
......
......@@ -59,7 +59,7 @@ namespace OnlineStore.DUOStore
if (boxBean.Config.UpDown_Axis.IsSameAxis(PortName, SlvAddr)
|| (boxBean.Config.Middle_Axis.IsSameAxis(PortName, SlvAddr)))
{
int InOutDefaultPosition = ConfigAppSettings.GetIntValue(Setting_Init.InoutDefaultPosition);
int InOutDefaultPosition = ConfigAppSettings.GetIntValue(Setting_Init.InOutDefaultPosition);
int currValue = boxBean.InoutAxis.GetAclPosition();
if (currValue <= InOutDefaultPosition)
{
......
......@@ -4,11 +4,11 @@ AXIS,,T2_取料机构旋转轴,T2_Middle_Axis,2,COM3,,1000,1000,1000,200,500,500,10,100
AXIS,,T3_取料机构上下轴,T3_Updown_Axis,3,COM3,,800,1000,1000,200,500,500,10,1000,0,0
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
PRO,,IO模块对应的DI数量,IO_DILength,192.168.201.21#16;192.168.201.22#16;192.168.201.23#8,,,,,,,,,,,,
PRO,,IO模块对应的DO数量,IO_DOLength,192.168.201.21#16;192.168.201.22#16;192.168.201.23#8,,,,,,,,,,,,
PRO,,第一块IO模块IP,PRO_AIO_IP_1,192.168.201.21,,,,,,,,,,,,
PRO,,第二块IO模块IP,PRO_AIO_IP_2,192.168.201.22,,,,,,,,,,,,
PRO,,第三块IO模块IP,PRO_AIO_IP_3,192.168.201.23,,,,,,,,,,,,
PRO,,IO模块对应的DI数量,IO_DILength,192.168.201.21#16;192.168.201.22#16;192.168.200.23#8,,,,,,,,,,,,
PRO,,IO模块对应的DO数量,IO_DOLength,192.168.201.21#16;192.168.201.22#16;192.168.200.23#8,,,,,,,,,,,,
PRO,,第一块IO模块IP,PRO_AIO_IP_1,192.168.200.21,,,,,,,,,,,,
PRO,,第二块IO模块IP,PRO_AIO_IP_2,192.168.200.22,,,,,,,,,,,,
PRO,,第三块IO模块IP,PRO_AIO_IP_3,192.168.200.23,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
DI,0,急停,SuddenStop_BTN,0,PRO_AIO_IP_1,X01,,,,,,,,,,
......
......@@ -176,29 +176,11 @@ namespace OnlineStore.DeviceLibrary
}
}
public string GetWarnMsg()
{
string msg = WarnMsg;
if (alarmType.Equals(AlarmType.None).Equals(false))
{
msg= LastAlarmTime.ToLongTimeString() + " " + WarnMsg + " ";
}
//if (IOValue(IO_Type.DoorLimit).Equals(IO_VALUE.LOW))
//{
// msg = msg + " 无门禁信号";
//}
if (humBean.TempOrHumidityIsAlarm)
{
msg = msg + " 温湿度报警[" + humBean.TempAlarmTime.ToLongTimeString() + "]";
}
return msg;
}
#region 原点返回和复位处理
private void ReturnHome()
{
CurrShelfID = "";
{
lastPosId = "";
lastPosIdStatus = StoreStatus.ResetMove;
AutoInout.ClearCount();
......@@ -206,14 +188,6 @@ namespace OnlineStore.DeviceLibrary
MoveInfo.NewMove(MoveType.ReturnHome);
InoutStartReset();
}
public void MoveToP1()
{
//压紧轴回原点,叉子回到P1,关闭门旋转轴和升降轴回到P1
MoveInfo.NewMove(MoveType.StoreReset);
MoveInfo.NextMoveStep(StoreMoveStep.BOX_H54_InOutToP1);
LogInfo("到待机状态,进出轴到P1,判断叉子没有料盘");
InoutAxis.AbsMove(MoveInfo, Config.InOutAxis_P1, Config.InOutAxis_P1_Speed);
}
public override void Reset(bool isNeedClearAuto = true)
{
......@@ -251,9 +225,7 @@ namespace OnlineStore.DeviceLibrary
LineStop();
InoutAxis.HomeMove(MoveInfo);
}
/// <summary>
/// 复位处理
/// </summary>
protected override void ResetProcess()
{
if (MoveInfo.IsInWait)
......@@ -266,77 +238,48 @@ namespace OnlineStore.DeviceLibrary
}
switch (MoveInfo.MoveStep)
{
case StoreMoveStep.BOX_H01_InOutBack:
Thread.Sleep(200);
MoveInfo.NextMoveStep(StoreMoveStep.BOX_H02_TopDown);
case StoreMoveStep.BOX_H01_InOutBack:
MoveInfo.NextMoveStep(StoreMoveStep.BOX_H02_InoutToP1);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
LogInfo(MoveInfo.MoveType + ": ,进出轴到待机点P1,关闭仓们");
InoutAxis.AbsMove(MoveInfo, Config.InOutAxis_P1, Config.InOutAxis_P1_Speed);
CylinderMove(MoveInfo, IO_Type.OutDoor_Up, IO_Type.OutDoor_Down);
break;
//case StoreMoveStep.BOX_H02_TopDown:
// MoveInfo.NextMoveStep(StoreMoveStep.BOX_H03_LineRun);
// if (IOValue(IO_Type.LineTake_Check).Equals(IO_VALUE.HIGH))
// {
// LogInfo(MoveInfo.MoveType + ":取料工位有料架,线体停止 ");
// LineStop();
// }
// else
// {
// LogInfo(MoveInfo.MoveType + ":取料工位无料架, 线体先正转3000或等待取料工位有料架");
// LineRun();
// MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(3000));
// MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.LineTake_Check, IO_VALUE.HIGH));
// MoveInfo.OneWaitCanEndStep = true;
// }
// break;
//case StoreMoveStep.BOX_H03_LineRun:
// LineStop();
// //如果此时轴三还在报警,需要提示错误并等待
// if (ACServerManager.GetAlarmStatus(Config.InOut_Axis.DeviceName, Config.InOut_Axis.GetAxisValue()) > 0)
// {
// LogUtil.error(Name + MoveInfo.MoveType + "复位失败: " + Config.InOut_Axis.Explain + "报警");
// WarnMsg = Name + "复位失败: " + Config.InOut_Axis.Explain + "报警";
// Alarm(StoreAlarmType.AxisAlarm, GetAlarmCodeByAxis(Config.InOut_Axis).ToString(), WarnMsg, StoreMoveType.None);
// return;
// }
// //复位和回原点要等轴3进出轴ORG亮了以后才能返回其他轴
// LogInfo(MoveInfo.MoveType + ": 停止线体, 压紧轴,旋转轴,上下轴开始 原点返回");
// MoveInfo.NextMoveStep(StoreMoveStep.BOX_H05_OtherAxisBack);
// ACAxisHomeMove(Config.Comp_Axis);
// ACAxisHomeMove(Config.Middle_Axis);
// ACAxisHomeMove(Config.UpDown_Axis);
// break;
//case StoreMoveStep.BOX_H05_OtherAxisBack:
// MoveInfo.NextMoveStep(StoreMoveStep.BOX_H06_MiddleAxisToP1);
// LogInfo(MoveInfo.MoveType + ": 旋转轴运动到P1,上下轴走到P1,压紧轴到P1 ");
// MiddleAxis.AbsMove(MoveInfo, Config.MiddleAxis_P1, Config.MiddleAxis_P1_Speed);
// UpdownAxis.AbsMove(MoveInfo, Config.UpDownAxis_P1, Config.UpDownAxis_P1_Speed);
// ComAxis.AbsMove(MoveInfo, Config.CompAxis_P1_Position, Config.CompAxis_P1_Speed);
// break;
//case StoreMoveStep.BOX_H06_MiddleAxisToP1:
// LogInfo(MoveInfo.MoveType + ": 完成");
// MoveEndToRuningStatus();
// break;
//case StoreMoveStep.BOX_H54_InOutToP1:
// MoveInfo.NextMoveStep(StoreMoveStep.BOX_H55_CompHome);
// LogInfo("到待机状态,压紧轴回原点,关闭舱门");
// ACAxisHomeMove(Config.Comp_Axis);
// break;
//case StoreMoveStep.BOX_H55_CompHome:
// MoveInfo.NextMoveStep(StoreMoveStep.BOX_H56_OtherAxisToP1);
// LogInfo(MoveInfo.MoveType + ": 旋转轴运动到P1,上下轴走到P1,压紧轴到P1 ");
// MiddleAxis.AbsMove(MoveInfo, Config.MiddleAxis_P1, Config.MiddleAxis_P1_Speed);
// UpdownAxis.AbsMove(MoveInfo, Config.UpDownAxis_P1, Config.UpDownAxis_P1_Speed);
// ComAxis.AbsMove(MoveInfo, Config.CompAxis_P1_Position, Config.CompAxis_P1_Speed);
// break;
//case StoreMoveStep.BOX_H56_OtherAxisToP1:
// LogInfo("到待机状态完成");
// MoveEndToRuningStatus();
// break;
//default: break;
case StoreMoveStep.BOX_H02_InoutToP1:
LineStop();
//如果此时轴三还在报警,需要提示错误并等待
if (ACServerManager.GetAlarmStatus(Config.InOut_Axis.DeviceName, Config.InOut_Axis.GetAxisValue()) > 0)
{
LogUtil.error(Name + MoveInfo.MoveType + "复位失败: " + Config.InOut_Axis.Explain + "报警");
WarnMsg = Name + "复位失败: " + Config.InOut_Axis.Explain + "报警";
Alarm(AlarmType.AxisAlarm );
return;
}
//复位和回原点要等轴3进出轴ORG亮了以后才能返回其他轴
LogInfo(MoveInfo.MoveType + ": , 压紧轴,旋转轴,上下轴开始 原点返回");
MoveInfo.NextMoveStep(StoreMoveStep.BOX_H03_OtherAxisHome);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(2000));
ComAxis.HomeMove(MoveInfo);
MiddleAxis.HomeMove(MoveInfo);
UpdownAxis.HomeMove(MoveInfo);
break;
case StoreMoveStep.BOX_H03_OtherAxisHome:
MoveInfo.NextMoveStep(StoreMoveStep.BOX_H04_OtherAxisBack);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(2000));
LogInfo(MoveInfo.MoveType + ": 旋转轴运动到P1,上下轴走到P1,压紧轴到P1 ");
MiddleAxis.AbsMove(MoveInfo, Config.MiddleAxis_P1, Config.MiddleAxis_P1_Speed);
UpdownAxis.AbsMove(MoveInfo, Config.UpDownAxis_P1, Config.UpDownAxis_P1_Speed);
ComAxis.AbsMove(MoveInfo, Config.CompAxis_P1, Config.CompAxis_P1_Speed);
break;
case StoreMoveStep.BOX_H04_OtherAxisBack:
LogInfo(MoveInfo.MoveType + ": 完成");
MoveEndToRuningStatus();
break;
default: break;
}
}
......@@ -546,8 +489,7 @@ namespace OnlineStore.DeviceLibrary
{
if (MoveInfo.MoveType.Equals(MoveType.None))
{
LogUtil.info(Name + "收到复位信号,当前无报警,且空闲中,只回到待机点");
MoveToP1();
LogUtil.info(Name + "收到复位信号,当前无报警,且空闲中,暂不处理");
}
else
{
......@@ -584,16 +526,7 @@ namespace OnlineStore.DeviceLibrary
ShowTimeLog("AutoResetProcess");
IOTimeOutProcess();
ShowTimeLog("IOTimeOutProcess");
////如果入口有料架需要入库
//if (StoreManager.Store.AutoShelfInstore &&
// MoveInfo.MoveType.Equals(StoreMoveType.None) &&
// (IOValue(IO_Type.LineIn_Check).Equals(IO_VALUE.HIGH) || IOValue(IO_Type.LineTake_Check).Equals(IO_VALUE.HIGH)))
//{
// LogUtil.info(Name + "AutoShelfInstore=true ,检测到料架,开始料架入库");
// StartShelfInStore();
//}
}
}
catch (Exception ex)
......
......@@ -22,8 +22,7 @@ namespace OnlineStore.DeviceLibrary
public Dictionary<int, BoxBean> BoxMap = new Dictionary<int, BoxBean>();
public Store_Config Config { get; set; }
public bool UseBuzzer = ConfigAppSettings.GetIntValue(Setting_Init.UseBuzzer).Equals(1);
public bool AutoShelfInstore = ConfigAppSettings.GetIntValue(Setting_Init.AutoShelfInstore).Equals(1);
public bool UseBuzzer = ConfigAppSettings.GetIntValue(Setting_Init.UseBuzzer).Equals(1);
public HoisterCylinder hoisterCylinder = new HoisterCylinder(0);
public AxisBean T1_BatchAxis = null;
......
......@@ -103,12 +103,7 @@ namespace OnlineStore.DeviceLibrary
public bool StartBack(StoreMoveInfo moveInfo)
{
bool UseDoor = ConfigAppSettings.GetIntValue(Setting_Init.UseDoor).Equals(1);
if (!UseDoor)
{
return false;
}
//如果门已打开直接返回
if (IOManager.IOValue(IO_Type.Hoister_Back, subType).Equals(IO_VALUE.HIGH) &&
IOManager.IOValue(IO_Type.Hoister_Forward, subType).Equals(IO_VALUE.LOW))
......@@ -125,12 +120,7 @@ namespace OnlineStore.DeviceLibrary
}
public bool StartForward(StoreMoveInfo moveInfo)
{
bool UseDoor = ConfigAppSettings.GetIntValue(Setting_Init.UseDoor).Equals(1);
if (!UseDoor)
{
return false;
}
{
//如果门已关闭直接返回
if (IOManager.IOValue(IO_Type.Hoister_Forward, subType).Equals(IO_VALUE.HIGH) &&
......
......@@ -19,8 +19,7 @@ namespace OnlineStore.DeviceLibrary
private int Jiange = 3;
private int positionIndex = 0;
public string autoMsg = "";
private int startIndex = -1;
private string shelfPosId = "";
private int startIndex = -1;
#region 出入库参数
/// <summary>
/// 当前出入库的次数,超过配置的数量时,需要自动重置一下,再进行出入库
......@@ -31,13 +30,12 @@ namespace OnlineStore.DeviceLibrary
public void StartAuto(int jiange, int currIndex, string shelfPosId)
public void StartAuto(int jiange, int currIndex )
{
autoNext = true;
Jiange = jiange;
positionIndex = currIndex;
startIndex = currIndex;
this.shelfPosId = shelfPosId;
startIndex = currIndex;
}
public void StopAuto()
{
......@@ -77,7 +75,7 @@ namespace OnlineStore.DeviceLibrary
positionIndex = newIndex;
string posid = boxBean.PositionNumList[positionIndex];
InOutParam param = new InOutParam("AAAA", posid, shelfPosId);
InOutParam param = new InOutParam("AutoOut", posid);
//param.NeedOutShelf = false;
//param.NeedEnterShelf = false;
//判断是否需要重置
......@@ -116,7 +114,7 @@ namespace OnlineStore.DeviceLibrary
else
{
string posid = boxBean.PositionNumList[newIndex];
InOutParam param = new InOutParam("AAAA", posid, shelfPosId);
InOutParam param = new InOutParam("AutoIn", posid);
// param.NeedOutShelf = false;
//判断是否需要重置
if (CurrInOutACount >= StoreManager.Config.Box_ResetACount)
......
......@@ -115,48 +115,27 @@ namespace OnlineStore.DeviceLibrary
/// 无操作,等待状态
/// </summary>
Wait = 0,
#region 料仓原点返回和重置步骤 0010开始
#region 料仓复位
/// <summary>
/// BOX复位:轴三进出轴先返回原点
/// BOX复位:进出轴回原点
/// </summary>
BOX_H01_InOutBack = 011,
/// <summary>
/// 顶升下降
/// BOX复位:进出轴回原点
/// </summary>
BOX_H02_TopDown = 012,
/// <summary>
/// BOX复位:线体停止, ,流水线先转动3000
/// </summary>
BOX_H03_LineRun = 013,
BOX_H02_InoutToP1 ,
///// <summary>
///// BOX复位:轴三返回P1点,入料门关闭NG门下降
///// </summary>
//BOX_H04_InOutToP1 = 014,
/// <summary>
/// BOX复位:升降轴,旋转轴,压紧轴原点返回
/// </summary>
BOX_H05_OtherAxisBack = 015,
/// <summary>
///BOX复位: 旋转轴返回P1
/// </summary>
BOX_H06_MiddleAxisToP1 = 016,
/// <summary>
/// BOX回待机点:叉子走到P1
/// </summary>
BOX_H54_InOutToP1 = 54,
/// <summary>
/// BOX回待机点:压紧轴回原点
/// BOX复位:其他轴回原点
/// </summary>
BOX_H55_CompHome = 55,
BOX_H03_OtherAxisHome ,
/// <summary>
///BOX回待机点: 关闭门,旋转轴到P1,升降轴到P1
/// BOX复位:升降轴,旋转轴,压紧轴原点返回
/// </summary>
BOX_H56_OtherAxisToP1 = 56,
BOX_H04_OtherAxisBack ,
#endregion
#region 料架进入料仓步骤 1000开始
......@@ -463,7 +442,151 @@ namespace OnlineStore.DeviceLibrary
/// </summary>
BS_11_CloseDoor = 4011,
#endregion
#region 料仓内部出库步骤
/// <summary>
///料仓出库,,定位气缸下降
/// </summary>
SO_01_LocationCylinderDown = 101,
/// <summary>
///料仓出库:叉子先运动到P1
/// </summary>
SO_02_DeviceBack = 102,
/// <summary>
/// 料仓出库,,所有轴运行到库位, 轴4( 压紧) 至P3(压紧前点) ,轴1( 转盘) 至P2( 库位点),轴2(上下) 至P5(库位出库前点)
/// </summary>
SO_03_ToBagPosition = 103,
/// <summary>
/// 料仓出库,,叉子进入库位中, 轴3( 叉子) 至P3(库位取放料点)
/// </summary>
SO_04_DeviceToBag = 104,
/// <summary>
///料仓出库,, 库位的物品放入叉子上,轴2( 上下) 至P6( 库位出料缓冲点),轴4( 压紧) 至P2(压紧点)
/// </summary>
SO_05_BagWareToDevice = 105,
/// <summary>
///料仓出库,,叉子从 库位返回,轴3( 叉子) 至P1( 待机点)
/// </summary>
SO_06_BagDeviceBack = 106,
/// <summary>
/// 料仓出库,等待检测到料盘信号
/// </summary>
SO_07_CheckTray = 107,
/// <summary>
/// 料仓出库,,所有设备运行到门,,轴1( 转盘) 至P1( 待机点)轴2( 上下) 至P2( 进料口出料前点)
/// </summary>
SO_08_ToDoorPosition = 108,
/// <summary>
/// 料仓出库,定位气缸退回(有压紧轴的不需要此步骤),,定位气缸退回(Y104-1/PCI5O1-84) (Y104-2/PCI5O1-91) (Y104-2/PCI5O1-96) 退回到位
/// </summary>
SO_09_LocationCylinder_Down = 109,
/// <summary>
/// 等待门口无料盘
/// </summary>
SO_091_WaitNoTray = 120,
/// <summary>
/// 料仓出库,,叉子进出料口,,轴3( 叉子) 至P2( 进料口取料点)
/// /// </summary>
SO_10_DeviceToDoor = 110,
/// <summary>
/// 料仓出库,,把物品放下,,轴2( 上下) 至P8( 进料口出料缓冲点)轴4( 压紧) 至P1( 待机点)
/// </summary>
SO_11_DevicePutWare = 111,
/// <summary>
/// 料仓出库,,叉子从出料口返回,,轴3( 叉子) 动作至P1( 待机点)
/// </summary>
SO_12_DeviceOutFromDoor = 112,
/// <summary>
/// 料仓出库:等待叉子无料盘
/// </summary>
SO_13_CheckTray = 113,
/// <summary>
/// 料仓出库,,升降轴返回,, 轴2至P1( 待机点)
/// </summary>
SO_14_aGoBack = 114,
/// <summary>
/// 等待拿走物品
/// </summary>
SO_15_WaitTake = 115,
#endregion
#region 料仓内部入库步骤
/// <summary>
/// 入库检测
/// </summary>
SI_00_TrayCheck = 200,
/// <summary>
/// 入库,。定位气缸下降
/// </summary>
SI_01_LocationCylinderDown = 201,
/// <summary>
/// 入库。。进出轴(叉子)先返回P1
/// </summary>
SI_02_InOutAxisHome = 202,
/// <summary>
/// 入库。。所有轴先回到待机点,轴2、轴1 动作到P1,,轴4动作至P3
/// </summary>
SI_03_ReturnHome = 203,
/// <summary>
/// 入库。。压紧物品(有压紧轴的才需要此步骤),轴4( 压紧) 至P3(压紧前点)
/// </summary>
SI_04_CompressWare = 204,
/// <summary>
/// 入库。。叉子进入入料口,轴3( 叉子) 至P2( 进料口取料点)
/// </summary>
SI_05_DeviceToDoor = 205,
/// <summary>
/// 入库。。把物品放入叉子上,轴2( 上下) 至P7( 进料口取料缓冲点),压紧物品(有压紧轴的才需要此步骤),轴4( 压紧) 至P2(压紧点)
/// </summary>
SI_06_DoorWarToDevice = 206,
/// <summary>
/// 入库。。叉子 从入料口抽出,轴3( 叉子) 至P1( 待机点)
/// </summary>
SI_07_DeviceBackFromDoor = 207,
/// <summary>
/// 入库。。,验证是否检测到料盘信号
/// </summary>
SI_08_CheckTray = 208,
/// <summary>
/// 入库。。移动到库位点,轴1( 转盘) 至P2( 库位点)轴2(上下) 至P3(库位入库前点)
/// </summary>
SI_09_MoveToBag = 209,
/// <summary>
/// 入库。。定位气缸退回 (有压紧轴的不需要此步骤)
/// </summary>
SI_10_LocationCylinder_Down = 210,
/// <summary>
/// 入库。。叉子进入库位中,轴3( 叉子) 至P3(库位取放料点)
/// </summary>
SI_11_DeviceToBag = 211,
/// <summary>
/// 入库。。放下物品,轴2( 上下) 至P4( 库位入料缓冲点)轴4( 压紧) 至P3( 压紧前点)
/// </summary>
SI_12_PutWareToBag = 212,
/// <summary>
/// 入库。。叉子从库位中返回,轴3( 叉子) 动作至P1( 待机点)
/// </summary>
SI_13_DeviceBackFromBag = 213,
/// <summary>
/// 入库。。检测叉子是否还有物料
/// </summary>
SI_14_CheckTray = 214,
/// <summary>
/// 入库。。返回待机点,轴2/轴1/轴4动作至P1( 待机点))开始
/// </summary>
SI_15_GoBack = 215,
#endregion
}
public enum AlarmType
......
......@@ -163,17 +163,17 @@ namespace OnlineStore.DeviceLibrary
currShelfPosId = ShelfPositionList[currShelfIndex];
//设置取料位置
// MoveParam.UpdateShelfPosId(currShelfPosId);
// MoveParam.UpdateShelfPosId(currShelfPosId);
return true;
}
/// <summary>
/// 入库时,料架已锁定库位的位置,无需扫码
/// </summary>
public bool IsShelfLocked = false;//料架是否锁定
/// <summary>
/// 料架锁定位置的料
/// </summary>
public List<ShelfLockData> shelfLockDatas =null;
/// <summary>
/// 料架锁定位置的料
/// </summary>
public List<ShelfLockData> shelfLockDatas = null;
public bool NextLockedShelfPos()
{
......@@ -185,11 +185,11 @@ namespace OnlineStore.DeviceLibrary
}
currShelfPosId = ShelfPositionList[shelfLockDatas[currShelfIndex].rfidLoc];
//设置取料位置
MoveParam.UpdatePosIdAndShelfId(shelfLockDatas[currShelfIndex].barcode,
shelfLockDatas[currShelfIndex].rfid,
shelfLockDatas[currShelfIndex].lockPos);
MoveParam.UpdatePosIdAndShelfId(shelfLockDatas[currShelfIndex].barcode,
shelfLockDatas[currShelfIndex].rfid,
shelfLockDatas[currShelfIndex].lockPos);
return true;
}
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!