Commit 0b9c064b 刘韬

添加氮气安全检测, 工单判断

1 个父辈 855dbaf4
...@@ -119,5 +119,9 @@ namespace OnlineStore.Common ...@@ -119,5 +119,9 @@ namespace OnlineStore.Common
/// </summary> /// </summary>
public static string DisSecurityAccess = "DisSecurityAccess"; public static string DisSecurityAccess = "DisSecurityAccess";
public static string ReelHeightOffset = "ReelHeightOffset"; public static string ReelHeightOffset = "ReelHeightOffset";
public static string humidityadjust = "humidityadjust";
public static string humiditylimited = "humiditylimited";
} }
} }
...@@ -210,6 +210,9 @@ namespace OnlineStore.Common ...@@ -210,6 +210,9 @@ namespace OnlineStore.Common
/// 库位 ID /// 库位 ID
/// </summary> /// </summary>
public static string posId = "posId"; public static string posId = "posId";
/// <summary>
/// 需求单号
/// </summary>
public static string hSerial = "hSerial"; public static string hSerial = "hSerial";
/// <summary> /// <summary>
/// 料盘宽 /// 料盘宽
......
...@@ -14,6 +14,7 @@ PRO,0,设备是否处于调试状态(1=调试,0=正常),IsDebug,0,,,,,,,,, ...@@ -14,6 +14,7 @@ PRO,0,设备是否处于调试状态(1=调试,0=正常),IsDebug,0,,,,,,,,,
PRO,0,温湿度端口号,Humiture_Port,0,,,,,,,,,,,, PRO,0,温湿度端口号,Humiture_Port,0,,,,,,,,,,,,
PRO,0,两次吹气间隔(分钟),BlowAir_Interval,0,,,,,,,,,,,, PRO,0,两次吹气间隔(分钟),BlowAir_Interval,0,,,,,,,,,,,,
PRO,0,每次吹气的时间(分钟),BlowAir_Time,0,,,,,,,,,,,, PRO,0,每次吹气的时间(分钟),BlowAir_Time,0,,,,,,,,,,,,
PRO,0,氮气安全浓度,Nitrogen_Safe_Maximum,80,,,,,,,,,,,,
PRO,0,设备出入库次数多少次时,会自动重置操作,Box_ResetCount,200,,,,,,,,,,,, PRO,0,设备出入库次数多少次时,会自动重置操作,Box_ResetCount,200,,,,,,,,,,,,
PRO,0,抽屉层数,Drawer_Rows,15,,,,,,,,,,,, PRO,0,抽屉层数,Drawer_Rows,15,,,,,,,,,,,,
PRO,0,抽屉列数,Drawer_Columns,6,,,,,,,,,,,, PRO,0,抽屉列数,Drawer_Columns,6,,,,,,,,,,,,
......
...@@ -120,3 +120,5 @@ DO,2,进料防护门上升,UpperArea_InstoreDoor_Up,24,HC,X24,,,,,,,,,,,, ...@@ -120,3 +120,5 @@ DO,2,进料防护门上升,UpperArea_InstoreDoor_Up,24,HC,X24,,,,,,,,,,,,
DO,2,进料防护门下降,UpperArea_InstoreDoor_Down,25,HC,X25,,,,,,,,,,,, DO,2,进料防护门下降,UpperArea_InstoreDoor_Down,25,HC,X25,,,,,,,,,,,,
DO,2,出料防护门上升,UnderArea_OutstoreDoor_Up,26,HC,X26,,,,,,,,,,,, DO,2,出料防护门上升,UnderArea_OutstoreDoor_Up,26,HC,X26,,,,,,,,,,,,
DO,2,出料防护门下降,UnderArea_OutstoreDoor_Down,27,HC,X27,,,,,,,,,,,, DO,2,出料防护门下降,UnderArea_OutstoreDoor_Down,27,HC,X27,,,,,,,,,,,,
DO,1,安全门关闭,SafeDoor_Close,28,HC,X28,,,,,,,,,,,,
DO,1,空气阀门打开,Air_OpenValve,29,HC,X29,,,,,,,,,,,,
...@@ -744,7 +744,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -744,7 +744,7 @@ namespace OnlineStore.DeviceLibrary
public static ShelfTaskInfo ShelfFinish(string rfid, string barcode = "", string rfidLoc = "0", string robotIndex = "1") public static ShelfTaskInfo ShelfFinish(string rfid, string barcode = "", string rfidLoc = "0", string robotIndex = "1")
{ {
LogUtil.info($"ShelfFinish rifd【{rfid}】barcode【{barcode}】rfidLoc【{rfidLoc}】robotIndex【{robotIndex}】"); LogUtil.info($"ShelfFinish rifd【{rfid}】barcode【{barcode}】rfidLoc【{rfidLoc}】robotIndex【{robotIndex}】");
//SetBoxStatus(DeviceStatus.OutStoreEnd, RunStatus.Busy, MoveInfo.MoveParam.PosInfo.PosId, MoveInfo.MoveParam.PosInfo.barcode);
ShelfTaskInfo task = new ShelfTaskInfo(); ShelfTaskInfo task = new ShelfTaskInfo();
task.rfid = rfid; task.rfid = rfid;
return task; return task;
......
...@@ -94,13 +94,13 @@ namespace OnlineStore.DeviceLibrary ...@@ -94,13 +94,13 @@ namespace OnlineStore.DeviceLibrary
/// </summary> /// </summary>
OutStoreBoxEnd = 10, OutStoreBoxEnd = 10,
/// <summary> /// <summary>
/// 12=移栽出库移栽过程中(移栽完成后变成OnLine) ///11=出库完成
/// </summary> /// </summary>
OutMoveExecute = 12, OutStoreEnd = 11,
/// <summary> /// <summary>
///11=出库失败 /// 12=移栽出库移栽过程中(移栽完成后变成OnLine)
/// </summary> /// </summary>
OutStoreFaild = 11, OutMoveExecute = 12,
/// <summary> /// <summary>
/// 重置中(原点返回和重置都发此状态) /// 重置中(原点返回和重置都发此状态)
/// </summary> /// </summary>
......
...@@ -252,6 +252,18 @@ namespace OnlineStore.DeviceLibrary ...@@ -252,6 +252,18 @@ namespace OnlineStore.DeviceLibrary
CloseAllAxis(); CloseAllAxis();
return false; return false;
} }
if (IOValue(IO_Type.LeftDoor_Limit).Equals(IO_VALUE.HIGH) &&
IOValue(IO_Type.RightDoor_Limit).Equals(IO_VALUE.HIGH) &&
IOValue(IO_Type.BackDoor_Limit).Equals(IO_VALUE.HIGH))
{
IOManager.IOMove(IO_Type.SafeDoor_Close, IO_VALUE.HIGH, 1);
}
else
{
LogInfo("安全门没有关闭,无法启动");
return false;
}
SetAllTimer(false); SetAllTimer(false);
SetConnectServerTimer(false); SetConnectServerTimer(false);
MoveInfo.EndMove(); MoveInfo.EndMove();
...@@ -999,6 +1011,10 @@ namespace OnlineStore.DeviceLibrary ...@@ -999,6 +1011,10 @@ namespace OnlineStore.DeviceLibrary
if (StoreManager.DisBoxSecurityAccess) if (StoreManager.DisBoxSecurityAccess)
{ {
} }
else if (IOManager.IOValue(IO_Type.Air_OpenValve,1).Equals(IO_VALUE.HIGH))
{
SecurityAccessStop("空气阀打开,设备暂停");
}
else if (IOValue(IO_Type.LeftDoor_Limit).Equals(IO_VALUE.LOW)) else if (IOValue(IO_Type.LeftDoor_Limit).Equals(IO_VALUE.LOW))
{ {
SecurityAccessStop("左前门门禁"); SecurityAccessStop("左前门门禁");
...@@ -1018,6 +1034,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -1018,6 +1034,7 @@ namespace OnlineStore.DeviceLibrary
IOValue(IO_Type.RightDoor_Limit).Equals(IO_VALUE.HIGH) && IOValue(IO_Type.RightDoor_Limit).Equals(IO_VALUE.HIGH) &&
IOValue(IO_Type.BackDoor_Limit).Equals(IO_VALUE.HIGH)) IOValue(IO_Type.BackDoor_Limit).Equals(IO_VALUE.HIGH))
{ {
IOManager.IOMove(IO_Type.SafeDoor_Close, IO_VALUE.HIGH,1);
SecurityAccessReset(); SecurityAccessReset();
} }
} }
...@@ -1070,6 +1087,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -1070,6 +1087,7 @@ namespace OnlineStore.DeviceLibrary
{ {
return; return;
} }
CurrSecurityAccess = 0; CurrSecurityAccess = 0;
MoveStop = false; MoveStop = false;
......
...@@ -72,6 +72,19 @@ namespace OnlineStore.DeviceLibrary ...@@ -72,6 +72,19 @@ namespace OnlineStore.DeviceLibrary
isInProcess = false; isInProcess = false;
} }
} }
public void SendStoreState(string posid, DeviceStatus storeStatus)
{
Operation operation = getLineBoxStatus();
if (!string.IsNullOrEmpty(posid))
operation.boxStatus[1].data.Add(ParamDefine.posId, posid);
LogUtil.info($"SendStoreState,posid:{posid}, storeStatus:{storeStatus}");
operation.boxStatus[1].status = (int)storeStatus;
LogUtil.info(JsonHelper.SerializeObject(operation));
Operation resultOperation = HttpHelper.Post(SServerManager.GetPostApi(server), operation, false);
}
/// <summary> /// <summary>
/// 获取整个料仓的状态 /// 获取整个料仓的状态
/// </summary> /// </summary>
......
...@@ -442,7 +442,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -442,7 +442,7 @@ namespace OnlineStore.DeviceLibrary
{ {
if (CurRowInDrawer < EndRowInDrawer)//轴未到目标层 if (CurRowInDrawer < EndRowInDrawer)//轴未到目标层
{ {
if (CurColInDrawer < config.Cols_In_Drawer) if (CurColInDrawer < EndColInDrawer)//config.Cols_In_Drawer)
{ {
PreColInDrawer = CurColInDrawer; PreColInDrawer = CurColInDrawer;
CurColInDrawer++; CurColInDrawer++;
...@@ -466,7 +466,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -466,7 +466,7 @@ namespace OnlineStore.DeviceLibrary
else if (CurColInDrawer == PreColInDrawer && CurRowInDrawer > PreRowInDrawer)//不同层,同一列 else if (CurColInDrawer == PreColInDrawer && CurRowInDrawer > PreRowInDrawer)//不同层,同一列
{ {
PreRowInDrawer = CurRowInDrawer; PreRowInDrawer = CurRowInDrawer;
if (CurColInDrawer == config.Cols_In_Drawer) if (CurColInDrawer == EndColInDrawer)//config.Cols_In_Drawer)
{ {
PreColInDrawer = CurColInDrawer; PreColInDrawer = CurColInDrawer;
CurColInDrawer--; CurColInDrawer--;
...@@ -479,7 +479,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -479,7 +479,7 @@ namespace OnlineStore.DeviceLibrary
} }
else if (CurRowInDrawer == PreRowInDrawer && CurColInDrawer < PreColInDrawer)//同一层,上一个。反向走 else if (CurRowInDrawer == PreRowInDrawer && CurColInDrawer < PreColInDrawer)//同一层,上一个。反向走
{ {
if (CurRowInDrawer < EndRowInDrawer)//轴未到目标层 if (CurRowInDrawer <= EndRowInDrawer)//轴未到目标层
{ {
if (CurColInDrawer > 1) if (CurColInDrawer > 1)
{ {
......
...@@ -12,7 +12,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -12,7 +12,7 @@ namespace OnlineStore.DeviceLibrary
{ {
private string PortName = ""; private string PortName = "";
private string Name = ""; private string Name = "";
public HumitureParam LastData = new HumitureParam(0, 0); public HumitureParam LastData = new HumitureParam(0, 0,0);
internal HumitureBean(string port,string deviceName) internal HumitureBean(string port,string deviceName)
{ {
this.Name = deviceName; this.Name = deviceName;
...@@ -71,6 +71,11 @@ namespace OnlineStore.DeviceLibrary ...@@ -71,6 +71,11 @@ namespace OnlineStore.DeviceLibrary
public string currTempStr = ""; public string currTempStr = "";
internal void HumidityProcess(BoxEquip box) internal void HumidityProcess(BoxEquip box)
{ {
if (IOManager.IOValue(IO_Type.Air_OpenValve, 1).Equals(IO_VALUE.HIGH) || IOManager.IOValue(IO_Type.LeftDoor_Limit, 2).Equals(IO_VALUE.LOW) || IOManager.IOValue(IO_Type.RightDoor_Limit, 2).Equals(IO_VALUE.LOW) || IOManager.IOValue(IO_Type.BackDoor_Limit, 2).Equals(IO_VALUE.LOW))
{
IOManager.IOMove(IO_Type.Nitrogen_OpenValve, IO_VALUE.LOW,1);
return;
}
try try
{ {
if ((DateTime.Now - preLogTime).TotalSeconds > (8+box.DeviceID)) if ((DateTime.Now - preLogTime).TotalSeconds > (8+box.DeviceID))
...@@ -93,7 +98,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -93,7 +98,7 @@ namespace OnlineStore.DeviceLibrary
float startBlowHumidity = Max_Humidity - StartBlowValue; float startBlowHumidity = Max_Humidity - StartBlowValue;
float stopBlowHumidity = Max_Humidity - StopBlowValue; float stopBlowHumidity = Max_Humidity - StopBlowValue;
IsInBlowing= StoreManager.XLRStore.DOValue(IO_Type.Nitrogen_OpenValve).Equals(IO_VALUE.HIGH);
//判断是否需要吹气 //判断是否需要吹气
if (startBlowHumidity > 0 && startBlowHumidity < currMaxHumidity && IsInBlowing.Equals(false)) if (startBlowHumidity > 0 && startBlowHumidity < currMaxHumidity && IsInBlowing.Equals(false))
{ {
...@@ -202,13 +207,14 @@ namespace OnlineStore.DeviceLibrary ...@@ -202,13 +207,14 @@ namespace OnlineStore.DeviceLibrary
this.UpdateTime = updateTime; this.UpdateTime = updateTime;
} }
//获取平均值时使用此 参数,只做显示用 //获取平均值时使用此 参数,只做显示用
public HumitureParam(double wendu, double shidu) public HumitureParam(double wendu, double shidu, double oxygenV)
{ {
this.IpAddress = ""; this.IpAddress = "";
this.DeviceAddress = ""; this.DeviceAddress = "";
this.Password = ""; this.Password = "";
this.Temperate = wendu; this.Temperate = wendu;
this.Humidity = shidu; this.Humidity = shidu;
this.OxygenV = oxygenV;
this.UpdateTime = DateTime.Now; this.UpdateTime = DateTime.Now;
} }
/// <summary> /// <summary>
...@@ -249,5 +255,6 @@ namespace OnlineStore.DeviceLibrary ...@@ -249,5 +255,6 @@ namespace OnlineStore.DeviceLibrary
/// 湿度 /// 湿度
/// </summary> /// </summary>
public double Humidity { get; set; } public double Humidity { get; set; }
public double OxygenV { get; set; }
} }
} }
...@@ -101,11 +101,22 @@ namespace OnlineStore.DeviceLibrary ...@@ -101,11 +101,22 @@ namespace OnlineStore.DeviceLibrary
// public static ASTemperateParam LastData = new ASTemperateParam(0, 0); // public static ASTemperateParam LastData = new ASTemperateParam(0, 0);
public static HumitureParam QueryData(string port) public static HumitureParam QueryData(string port)
{ {
HumitureParam param = new HumitureParam(0, 0); HumitureParam param = new HumitureParam(0, 0,0);
List<double> data = queryData(port ); List<double> data = queryData(port );
if (data.Count.Equals(2)) if (data.Count.Equals(3))
{ {
param = new HumitureParam(data[1], data[0]); double humidityadjust = (double)ConfigAppSettings.GetNumValue(Setting_Init.humidityadjust);
double humiditylimited = (double)ConfigAppSettings.GetNumValue(Setting_Init.humiditylimited);
if (humidityadjust != 0 && humiditylimited != 0)
{
if (data[0] + humidityadjust < humiditylimited)
{
data[0] = humiditylimited;
}
else
data[0] += humidityadjust;
}
param = new HumitureParam(data[1], data[0], data[2]);
} }
return param; return param;
} }
...@@ -138,7 +149,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -138,7 +149,7 @@ namespace OnlineStore.DeviceLibrary
sendData[2] = 0x00; sendData[2] = 0x00;
sendData[3] = 0x00; sendData[3] = 0x00;
sendData[4] = 0x00; sendData[4] = 0x00;
sendData[5] = 0x02; sendData[5] = 0x03;
sendData[6] = 0x00; sendData[6] = 0x00;
sendData[7] = 0x00; sendData[7] = 0x00;
sendData = buildCheckData(sendData, sendData.Length - 2); sendData = buildCheckData(sendData, sendData.Length - 2);
...@@ -319,13 +330,15 @@ namespace OnlineStore.DeviceLibrary ...@@ -319,13 +330,15 @@ namespace OnlineStore.DeviceLibrary
} }
if (dataArray.Length >= 9) if (dataArray.Length >= 9)
{ {
string temp = String.Format("{0:X2}", dataArray[3]) + String.Format("{0:X2}", dataArray[4]);
string temp = String.Format("{0:X2}", dataArray[3])+ String.Format("{0:X2}", dataArray[4]);
string hum = String.Format("{0:X2}", dataArray[5]) + String.Format("{0:X2}", dataArray[6]); string hum = String.Format("{0:X2}", dataArray[5]) + String.Format("{0:X2}", dataArray[6]);
double tempV = (double)Convert.ToInt32(temp, 16)/10; string Oxygen = String.Format("{0:X2}", dataArray[7]) + String.Format("{0:X2}", dataArray[8]);
double humV =(double) Convert.ToInt32(hum, 16)/10; double tempV = (double)Convert.ToInt32(temp, 16) / 10;
double humV = (double)Convert.ToInt32(hum, 16) / 10;
double OxygenV = (double)Convert.ToInt32(Oxygen, 16) / 10;
list.Add(tempV); list.Add(tempV);
list.Add(humV); list.Add(humV);
list.Add(OxygenV);
} }
} }
catch (Exception ex) catch (Exception ex)
......
...@@ -1067,6 +1067,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -1067,6 +1067,7 @@ namespace OnlineStore.DeviceLibrary
{ {
if (shelf.Equals(1)) if (shelf.Equals(1))
{ {
BatchMove_A.ReelPutOk(); BatchMove_A.ReelPutOk();
SServerManager.ShelfFinish(BatchMove_A.CurrShelf.ShelfRfid, MoveInfo.MoveParam.PosInfo.barcode); SServerManager.ShelfFinish(BatchMove_A.CurrShelf.ShelfRfid, MoveInfo.MoveParam.PosInfo.barcode);
} }
...@@ -1075,6 +1076,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -1075,6 +1076,7 @@ namespace OnlineStore.DeviceLibrary
BatchMove_B.ReelPutOk(); BatchMove_B.ReelPutOk();
SServerManager.ShelfFinish(BatchMove_B.CurrShelf.ShelfRfid, MoveInfo.MoveParam.PosInfo.barcode); SServerManager.ShelfFinish(BatchMove_B.CurrShelf.ShelfRfid, MoveInfo.MoveParam.PosInfo.barcode);
} }
StoreManager.XLRStore.boxEquip.SendStoreState(MoveInfo.MoveParam.PosInfo.PosId, DeviceStatus.OutStoreEnd);
MoveInfo.NextMoveStep(StepEnum.IO32_UpdownToP1); MoveInfo.NextMoveStep(StepEnum.IO32_UpdownToP1);
MoveLog($"出库->料串 {MoveInfo.SLog}: 升降轴到P1(待机点){Config.Updown_P1}"); MoveLog($"出库->料串 {MoveInfo.SLog}: 升降轴到P1(待机点){Config.Updown_P1}");
UpdownAxis.AbsMove(MoveInfo, Config.Updown_P1, Config.Updown_P1_Speed); UpdownAxis.AbsMove(MoveInfo, Config.Updown_P1, Config.Updown_P1_Speed);
......
...@@ -572,6 +572,12 @@ namespace OnlineStore.LoadCSVLibrary ...@@ -572,6 +572,12 @@ namespace OnlineStore.LoadCSVLibrary
public int BlowAir_Time { get; set; } public int BlowAir_Time { get; set; }
/// <summary> /// <summary>
/// PRO 氮气安全浓度 BlowAir_Time 10
/// </summary>
[ConfigProAttribute("Nitrogen_Safe_Maximum", false)]
public int Nitrogen_Safe_Maximum { get; set; }
/// <summary>
/// PRO 两次吹气间隔(分钟) BlowAir_Interval 10 /// PRO 两次吹气间隔(分钟) BlowAir_Interval 10
/// </summary> /// </summary>
[ConfigProAttribute("BlowAir_Interval", false)] [ConfigProAttribute("BlowAir_Interval", false)]
......
...@@ -449,6 +449,14 @@ namespace OnlineStore.LoadCSVLibrary ...@@ -449,6 +449,14 @@ namespace OnlineStore.LoadCSVLibrary
/// DO,1,出料防护门下降,UnderArea_OutstoreDoor_Down,27,HC,X27,,,,,,,,,,,, /// DO,1,出料防护门下降,UnderArea_OutstoreDoor_Down,27,HC,X27,,,,,,,,,,,,
/// </summary> /// </summary>
public static string UnderArea_OutstoreDoor_Down = "UnderArea_OutstoreDoor_Down"; public static string UnderArea_OutstoreDoor_Down = "UnderArea_OutstoreDoor_Down";
/// <summary>
/// DO,1,安全门关闭,SafeDoor_Close,28,HC,Y28,,,,,,,,,,,,
/// </summary>
public static string SafeDoor_Close = "SafeDoor_Close";
/// <summary>
/// DO,1,空气阀门打开,Air_OpenValve,29,HC,Y29,,,,,,,,,,,,
/// </summary>
public static string Air_OpenValve = "Air_OpenValve";
......
using OnlineStore.Common;
using OnlineStore.DeviceLibrary;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace OnlineStore.XLRStore
{
public partial class FrmReleaseDoor : Form
{
public FrmReleaseDoor()
{
InitializeComponent();
this.FormClosing += FrmReleaseDoor_FormClosing;
}
private void FrmReleaseDoor_FormClosing(object sender, FormClosingEventArgs e)
{
if (IOManager.IOValue(IO_Type.LeftDoor_Limit, 2).Equals(IO_VALUE.HIGH) && IOManager.IOValue(IO_Type.RightDoor_Limit, 2).Equals(IO_VALUE.HIGH) && IOManager.IOValue(IO_Type.BackDoor_Limit, 2).Equals(IO_VALUE.HIGH))
{
timer1.Stop();
IOManager.IOMove(IO_Type.SafeDoor_Close, IO_VALUE.HIGH, 1);
Thread.Sleep(200);
IOManager.IOMove(IO_Type.SafeDoor_Close, IO_VALUE.HIGH, 1);
IOManager.IOMove(IO_Type.Air_OpenValve, IO_VALUE.LOW, 1);
}
else
{
e.Cancel = true;
MessageBox.Show("请先关闭料仓门");
}
}
private void timer1_Tick(object sender, EventArgs e)
{
IOManager.IOMove(IO_Type.Air_OpenValve, IO_VALUE.HIGH,1);
IOManager.IOMove(IO_Type.Nitrogen_OpenValve, IO_VALUE.LOW,1);
var dd= StoreManager.XLRStore.boxEquip.humBean.QueryData();
var nitrogen = 100- dd.OxygenV-1;
if (nitrogen <= StoreManager.XLRStore.boxEquip.Config.Nitrogen_Safe_Maximum) {
IOManager.IOMove(IO_Type.SafeDoor_Close, IO_VALUE.LOW,1);
}
lbl_airstatus.Text = $"当前氮气含量:{nitrogen:0.0}%, 等待低于{StoreManager.XLRStore.boxEquip.Config.Nitrogen_Safe_Maximum}%后解锁舱门";
var islock = IOManager.IOValue(IO_Type.SafeDoor_Close,1).Equals(IO_VALUE.HIGH);
var isair = IOManager.IOValue(IO_Type.Air_OpenValve,1).Equals(IO_VALUE.HIGH);
lbl_lockstatus.Text = $"当前门锁状态:{(islock ? "已锁门" : "已解锁")}\r\n空气阀状态:{(isair ? "已打开" : "已关闭")}";
}
private void FrmReleaseDoor_Load(object sender, EventArgs e)
{
LogUtil.info("请求打开舱门开始");
IOManager.IOMove(IO_Type.Air_OpenValve, IO_VALUE.HIGH, 1);
Thread.Sleep(1000);
IOManager.IOMove(IO_Type.Nitrogen_OpenValve, IO_VALUE.LOW, 1);
timer1.Start();
}
private void btn_cancel_Click(object sender, EventArgs e)
{
this.Close();
}
}
}

namespace OnlineStore.XLRStore
{
partial class FrmReleaseDoor
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.btn_cancel = new System.Windows.Forms.Button();
this.lbl_lockstatus = new System.Windows.Forms.Label();
this.lbl_airstatus = new System.Windows.Forms.Label();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.SuspendLayout();
//
// btn_cancel
//
this.btn_cancel.Font = new System.Drawing.Font("微软雅黑", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btn_cancel.Location = new System.Drawing.Point(202, 318);
this.btn_cancel.Name = "btn_cancel";
this.btn_cancel.Size = new System.Drawing.Size(234, 49);
this.btn_cancel.TabIndex = 0;
this.btn_cancel.Text = "取消开启或关闭门锁";
this.btn_cancel.UseVisualStyleBackColor = true;
this.btn_cancel.Click += new System.EventHandler(this.btn_cancel_Click);
//
// lbl_lockstatus
//
this.lbl_lockstatus.Font = new System.Drawing.Font("微软雅黑", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lbl_lockstatus.Location = new System.Drawing.Point(99, 24);
this.lbl_lockstatus.Name = "lbl_lockstatus";
this.lbl_lockstatus.Size = new System.Drawing.Size(469, 75);
this.lbl_lockstatus.TabIndex = 1;
this.lbl_lockstatus.Text = "门锁状态:已锁定";
//
// lbl_airstatus
//
this.lbl_airstatus.Font = new System.Drawing.Font("微软雅黑", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lbl_airstatus.Location = new System.Drawing.Point(99, 112);
this.lbl_airstatus.Name = "lbl_airstatus";
this.lbl_airstatus.Size = new System.Drawing.Size(469, 149);
this.lbl_airstatus.TabIndex = 1;
this.lbl_airstatus.Text = "舱内氮气含量:";
//
// timer1
//
this.timer1.Interval = 1500;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// FrmReleaseDoor
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.ClientSize = new System.Drawing.Size(662, 394);
this.Controls.Add(this.lbl_airstatus);
this.Controls.Add(this.lbl_lockstatus);
this.Controls.Add(this.btn_cancel);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "FrmReleaseDoor";
this.ShowIcon = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "解锁门锁";
this.Load += new System.EventHandler(this.FrmReleaseDoor_Load);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Button btn_cancel;
private System.Windows.Forms.Label lbl_lockstatus;
private System.Windows.Forms.Label lbl_airstatus;
private System.Windows.Forms.Timer timer1;
}
}
\ No newline at end of file \ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
\ No newline at end of file \ No newline at end of file
...@@ -783,5 +783,11 @@ namespace OnlineStore.XLRStore ...@@ -783,5 +783,11 @@ namespace OnlineStore.XLRStore
LogUtil.info(Name + " 点击:" + 启用门禁ToolStripMenuItem.Text); LogUtil.info(Name + " 点击:" + 启用门禁ToolStripMenuItem.Text);
} }
private void 解锁舱门ToolStripMenuItem_Click(object sender, EventArgs e)
{
LogUtil.info("用户点击打开舱门");
FrmReleaseDoor frmReleaseDoor = new FrmReleaseDoor();
frmReleaseDoor.ShowDialog();
}
} }
} }
...@@ -135,6 +135,12 @@ ...@@ -135,6 +135,12 @@
<Compile Include="FrmCrispTray.Designer.cs"> <Compile Include="FrmCrispTray.Designer.cs">
<DependentUpon>FrmCrispTray.cs</DependentUpon> <DependentUpon>FrmCrispTray.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="FrmReleaseDoor.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FrmReleaseDoor.designer.cs">
<DependentUpon>FrmReleaseDoor.cs</DependentUpon>
</Compile>
<Compile Include="inputForm\FrmBatchMove.cs"> <Compile Include="inputForm\FrmBatchMove.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
...@@ -228,6 +234,9 @@ ...@@ -228,6 +234,9 @@
<EmbeddedResource Include="FrmCrispTray.resx"> <EmbeddedResource Include="FrmCrispTray.resx">
<DependentUpon>FrmCrispTray.cs</DependentUpon> <DependentUpon>FrmCrispTray.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="FrmReleaseDoor.resx">
<DependentUpon>FrmReleaseDoor.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="inputForm\FrmBatchMove.resx"> <EmbeddedResource Include="inputForm\FrmBatchMove.resx">
<DependentUpon>FrmBatchMove.cs</DependentUpon> <DependentUpon>FrmBatchMove.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!