using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using DBFactory; using Microsoft.VisualBasic; using System.ServiceModel; namespace wcfControlMonitorClient { /// /// Creator:Richard.liu /// 模仿管理下达自动任务 /// public partial class FrmAutoCommand : Form { DBOperator dbo = CStaticClass.dbo; int AutoManageIdx = 0; #region ====变量定义 CommonClassLib.UCellPanel cellPanel = null; #endregion private static FrmAutoCommand _formInstance; public static FrmAutoCommand FormInstance { get { if (_formInstance == null) { _formInstance = new FrmAutoCommand(); } return _formInstance; } set { _formInstance = value; } } public FrmAutoCommand() { dbo.Open(); InitializeComponent(); _formInstance = this; ////特殊命令:堆垛机取坐标001,送坐标002;条码比对003;称重回传004; ////搬运木块码盘005(一个主搬运木块任务,拆分成多个单一搬运任务) //this.cbKind.Items.Add(""); //this.cbKind.Items.Add("条码比对"); //this.cbKind.Items.Add("称重回传"); ////this.cbKind.Items.Add("机器人码盘"); //this.cbKind.Text="条码比对"; ////cbtasktype DataSet ds = dbo.ExceSQL("select * from T_ITEMTASKTYPE where FCODE !='-'"); if (ds.Tables[0].DefaultView.Count > 0) { cbtasktype.ValueMember = "FCODE"; cbtasktype.DisplayMember = "FNAME"; cbtasktype.DataSource = ds.Tables[0].DefaultView; } } private void button1_Click(object sender, EventArgs e) { if (MessageBox.Show("您确认要增加自动任务吗,若下达任务时请人工确认好里外货物状态以及其余充电任务或换层任务的注意事项,并确认任务是否可行", "操作提示:", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK) { return; } if (tbFPALLETBARCODE.Text.Trim().Length < 9) { MessageBox.Show("条码不够9位字符!", "误操作提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if ((this.cbtasktype.Text.Trim().Length == 0) || (this.cbstartposition.Text.Trim().Length == 0) || (this.cbendposition.Text.Trim().Length == 0)) { MessageBox.Show("搬运任务类型、起点位置、终点位置都不允许保持空值!", "误操作提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if ((tbstartsite.Enabled == true) && (tbstartsite.Text.Trim().Length == 0)) { MessageBox.Show("起点位置是巷道,所以必须指定货架位置!", "误操作提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if ((tbendsite.Enabled == true) && (tbendsite.Text.Trim().Length == 0)) { MessageBox.Show("终点位置是巷道,所以必须指定货架位置!", "误操作提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if ((cbKind.Text.Trim().Length > 0) && (txtparm.Text.Trim().Length == 0)) { MessageBox.Show("特殊命令如果不是空值,必须指定特殊参数!", "误操作提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if ((cbInWorkBench.Text.Trim().Length > 0) && (cbInWorkBench.Text.Trim().Length == 0)) { MessageBox.Show("是否进工位必须选定!", "误操作提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } //调用服务 string errtext = string.Empty; string startcell = string.Empty, endcell = string.Empty; if (tbstartsite.SelectedValue != null) { startcell = tbstartsite.SelectedValue.ToString(); } else { startcell = tbstartsite.Text; } if (tbendsite.SelectedValue != null) { endcell = tbendsite.SelectedValue.ToString(); } else { endcell = tbendsite.Text; } if (cbtasktype.Text == "移库")//晟碟 { if (startcell.Substring(6, 2) != endcell.Substring(6, 2)) { MessageBox.Show("下达移库任务时层必须相同!", "误操作提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } } if (cbtasktype.Text == "换层任务")//晟碟 { if (startcell.Substring(6, 2) == endcell.Substring(6, 2)) { MessageBox.Show("下达换层任务时层值相同!", "误操作提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } string DeviceIndex = cbstartposition.SelectedValue.ToString(); DataTable dt = dbo.ExceSQL($"select * from SHUTTLE_POSITION where F_DeviceIndex = {DeviceIndex} and F_Postion = {startcell.Substring(6, 2)}").Tables[0]; if (dt.Rows.Count<=0) { MessageBox.Show("下达换层任务时"+ DeviceIndex + "车不在起始层!", "误操作提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } DataTable dt2 = dbo.ExceSQL($" SELECT * FROM SHUTTLE_POSITION where F_DeviceIndex in (select F_DeviceIndex from T_Base_Device where F_DeviceIndex <> {DeviceIndex} and F_Postion = {endcell.Substring(6, 2)} and F_DeviceKindIndex = 1 and F_tunnel = (select F_tunnel from T_Base_Device where F_DeviceIndex = {DeviceIndex}) )").Tables[0]; if (dt2.Rows.Count > 0) { MessageBox.Show("下达换层任务时" + DeviceIndex + "车终到层有车!", "误操作提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } } Model.AutoTask at = new Model.AutoTask(Convert.ToInt32(this.cbtasktype.SelectedValue), tbFPALLETBARCODE.Text, cbstartposition.SelectedValue.ToString(), startcell, cbendposition.SelectedValue.ToString(), endcell, this.tbstartsite.Enabled, this.tbendsite.Enabled, Convert.ToInt32(this.cbInWorkBench.Text)); CStaticClass.WcfControl.BeginBuildAutoTask(at, new AsyncCallback(BuildAutoTaskCallBack), at); //{ // MessageBox.Show(errtext, "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Error); // return; //} } private void button2_Click(object sender, EventArgs e) { string Sql, _kind, _txtparm; DataSet ds; //dbo.TransBegin(); try { //插入IO_CONTROLDETAIL //特殊命令:堆垛机取坐标001,送坐标002;条码比对003;称重回传004; switch (this.cbKind.Text.Trim()) { case "条码比对": _kind = "003"; break; case "称重回传": _kind = "004"; break; //case "机器人码盘": // _kind = "005"; // break; default: _kind = "003"; break; } _txtparm = this.txtparm.Text.Trim(); if (_kind == "005") { } else { int fid = GetIOControlDetailFid(1, AutoManageIdx); Sql = "insert into IO_CONTROLDETAIL(FID,FCONTROLID,F_ManageTaskKindIndex,FKIND,FINDEX,FVALUE) " + "values(" + fid + "," + AutoManageIdx + ",1,'" + _kind + "',0,'" + _txtparm + "')"; ds = dbo.ExceSQL(Sql); } //dbo.TransCommit(); } catch (Exception ex) { //dbo.TransRollback(); throw ex; } } private void FrmAutoCommand_Load(object sender, EventArgs e) { cbInWorkBench.SelectedIndex = 2; if (cellPanel == null) { cellPanel = new CommonClassLib.UCellPanel(this, tbstartsite, null, tbFPALLETBARCODE, string.Empty); cellPanel.TaskType = "100"; cellPanel.GoodsName = ""; cellPanel.Dock = DockStyle.Fill; cellPanel.AllowWareHouseChanged = false; plCell.Controls.Add(cellPanel); } cellPanel.Visible = true; } private void Cbtasktype_SelectionChangeCommitted(object sender, EventArgs e) { this.tbFPALLETBARCODE.Enabled = true; this.tbFPALLETBARCODE.Text = ""; int IOtype = Convert.ToInt32(this.cbtasktype.SelectedValue.ToString()); DataView dvs = dbo.ExceSQL("SELECT DISTINCT F_StartDevice,F_DeviceName FROM T_Base_Route,T_Base_Device where F_StartDevice = F_DeviceIndex and T_Base_Route.F_RouteKind = " + IOtype).Tables[0].DefaultView; cbstartposition.ValueMember = "F_StartDevice"; cbstartposition.DisplayMember = "F_DeviceName"; cbstartposition.DataSource = dvs; DataView dvs1 = dbo.ExceSQL("SELECT DISTINCT F_EndDevice,F_DeviceName FROM T_Base_Route,T_Base_Device where F_EndDevice = F_DeviceIndex and T_Base_Route.F_RouteKind = " + IOtype).Tables[0].DefaultView; //cbendposition cbendposition.ValueMember = "F_EndDevice"; cbendposition.DisplayMember = "F_DeviceName"; cbendposition.DataSource = dvs1; } private void cbtasktype_SelectedIndexChanged(object sender, EventArgs e) { /* yy -2023-0128 this.tbFPALLETBARCODE.Enabled = true; this.tbFPALLETBARCODE.Text = ""; int IOtype = Convert.ToInt32(this.cbtasktype.SelectedValue.ToString()); DataView dvs = dbo.ExceSQL("SELECT DISTINCT F_StartDevice,F_DeviceName FROM T_Base_Route,T_Base_Device where F_StartDevice = F_DeviceIndex and T_Base_Route.F_RouteKind = " + IOtype).Tables[0].DefaultView; cbstartposition.ValueMember = "F_StartDevice"; cbstartposition.DisplayMember = "F_DeviceName"; cbstartposition.DataSource = dvs; DataView dvs1 = dbo.ExceSQL("SELECT DISTINCT F_EndDevice,F_DeviceName FROM T_Base_Route,T_Base_Device where F_EndDevice = F_DeviceIndex and T_Base_Route.F_RouteKind = " + IOtype).Tables[0].DefaultView; //cbendposition cbendposition.ValueMember = "F_EndDevice"; cbendposition.DisplayMember = "F_DeviceName"; cbendposition.DataSource = dvs1; */ } private void Cbstartposition_SelectionChangeCommitted(object sender, EventArgs e) { tbstartsite.DataSource = null; tbstartsite.Text = ""; //如果是巷道设备tbstartsite.enable=true DataSet ds = dbo.ExceSQL("select F_DeviceIndex,F_DeviceKindIndex from T_Base_Device where F_DeviceKindIndex=10 and F_DeviceIndex=" + Convert.ToInt32(cbstartposition.SelectedValue)); if (ds.Tables[0].DefaultView.Count > 0 || cbtasktype.Text == "换层任务") { tbstartsite.Enabled = true; plCell.Enabled = true; if (cellPanel == null) { cellPanel = new CommonClassLib.UCellPanel(this, tbstartsite, null, null, string.Empty); cellPanel.TaskType = "100"; cellPanel.GoodsName = ""; cellPanel.Dock = DockStyle.Fill; cellPanel.AllowWareHouseChanged = false; plCell.Controls.Add(cellPanel); } //TODO 向导 cellPanel.ControlCellCode = tbstartsite; //cellPanel.Laneway = 18001.ToString(); cellPanel.Laneway ="18001,18002,18003,18004".ToString(); //cellPanel.WareHouse = GetWarehouse(Convert.ToInt32(18001)); cellPanel.WareHouse = GetWarehouse(Convert.ToInt32(18003)); //cellPanel.WareHouse = GetWarehouse(Convert.ToInt32(cbendposition.SelectedValue)); cellPanel.Visible = plCell.Visible; } else { plCell.Enabled = false; tbstartsite.Enabled = false; } DataView dv = dbo.ExceSQL("select F_DeviceIndex,F_DeviceKindIndex from T_Base_Device where F_DeviceKindIndex=11 and F_DeviceIndex=" + Convert.ToInt32(cbstartposition.SelectedValue) + "").Tables[0].DefaultView; if (dv.Count > 0) { tbstartsite.Enabled = true; dv = dbo.ExceSQL("SELECT T_Base_Device.F_DeviceName, T_Base_Device.F_DeviceIndex FROM T_Base_AGV_Gate,T_Base_Device WHERE T_Base_AGV_Gate.F_AGVGateDeviceIndex = T_Base_Device.F_DeviceIndex and F_ChannelsIndex=" + cbstartposition.SelectedValue + "").Tables[0].DefaultView; tbstartsite.DisplayMember = "F_DeviceName"; tbstartsite.ValueMember = "F_DeviceIndex"; tbstartsite.DataSource = dv; } } private void cbstartposition_SelectedIndexChanged(object sender, EventArgs e) { /* yy -2023-0128 tbstartsite.DataSource = null; tbstartsite.Text = ""; //如果是巷道设备tbstartsite.enable=true DataSet ds = dbo.ExceSQL("select F_DeviceIndex,F_DeviceKindIndex from T_Base_Device where F_DeviceKindIndex=10 and F_DeviceIndex=" + Convert.ToInt32(cbstartposition.SelectedValue)); if (ds.Tables[0].DefaultView.Count > 0 || cbtasktype.Text == "换层任务") { tbstartsite.Enabled = true; plCell.Enabled = true; if (cellPanel == null) { cellPanel = new CommonClassLib.UCellPanel(this, tbstartsite, null, null, string.Empty); cellPanel.TaskType = "100"; cellPanel.GoodsName = ""; cellPanel.Dock = DockStyle.Fill; cellPanel.AllowWareHouseChanged = false; plCell.Controls.Add(cellPanel); } //TODO 向导 cellPanel.ControlCellCode = tbstartsite; //cellPanel.Laneway = 18001.ToString(); cellPanel.Laneway = "18001,18002,18003,18004".ToString(); //cellPanel.WareHouse = GetWarehouse(Convert.ToInt32(18001)); cellPanel.WareHouse = GetWarehouse(Convert.ToInt32(18003)); //cellPanel.WareHouse = GetWarehouse(Convert.ToInt32(cbendposition.SelectedValue)); cellPanel.Visible = plCell.Visible; } else { plCell.Enabled = false; tbstartsite.Enabled = false; } DataView dv = dbo.ExceSQL("select F_DeviceIndex,F_DeviceKindIndex from T_Base_Device where F_DeviceKindIndex=11 and F_DeviceIndex=" + Convert.ToInt32(cbstartposition.SelectedValue) + "").Tables[0].DefaultView; if (dv.Count > 0) { tbstartsite.Enabled = true; dv = dbo.ExceSQL("SELECT T_Base_Device.F_DeviceName, T_Base_Device.F_DeviceIndex FROM T_Base_AGV_Gate,T_Base_Device WHERE T_Base_AGV_Gate.F_AGVGateDeviceIndex = T_Base_Device.F_DeviceIndex and F_ChannelsIndex=" + cbstartposition.SelectedValue + "").Tables[0].DefaultView; tbstartsite.DisplayMember = "F_DeviceName"; tbstartsite.ValueMember = "F_DeviceIndex"; tbstartsite.DataSource = dv; } */ } private void cbendposition_SelectedIndexChanged(object sender, EventArgs e) { tbendsite.DataSource = null; tbendsite.Text = ""; //如果是巷道设备tbstartsite.enable=true DataSet ds = dbo.ExceSQL("select F_DeviceIndex,F_DeviceKindIndex from T_Base_Device where F_DeviceKindIndex=10 and F_DeviceIndex= " + Convert.ToInt32(cbendposition.SelectedValue) + ""); if (ds.Tables[0].DefaultView.Count > 0 || cbtasktype.Text == "换层任务") { tbendsite.Enabled = true; plCell.Enabled = true; if (cellPanel == null) { cellPanel = new CommonClassLib.UCellPanel(this, tbendsite, null, null, string.Empty); cellPanel.TaskType = "100"; cellPanel.GoodsName = ""; cellPanel.Dock = DockStyle.Fill; cellPanel.AllowWareHouseChanged = false; plCell.Controls.Add(cellPanel); } cellPanel.ControlCellCode = tbendsite; cellPanel.Laneway = "18001,18002,18003,18004".ToString(); //cellPanel.Laneway = cbendposition.SelectedValue.ToString(); cellPanel.WareHouse = GetWarehouse(Convert.ToInt32(18003)); //cellPanel.WareHouse = GetWarehouse(Convert.ToInt32(cbendposition.SelectedValue)); cellPanel.Visible = plCell.Visible; } else { plCell.Enabled = false; tbendsite.Enabled = false; } DataView dv = dbo.ExceSQL("select F_DeviceIndex,F_DeviceKindIndex from T_Base_Device where F_DeviceKindIndex=11 and F_DeviceIndex=" + Convert.ToInt32(cbendposition.SelectedValue) + "").Tables[0].DefaultView; if (dv.Count > 0) { tbendsite.Enabled = true; dv = dbo.ExceSQL("SELECT T_Base_Device.F_DeviceName, T_Base_Device.F_DeviceIndex FROM T_Base_AGV_Gate,T_Base_Device WHERE T_Base_AGV_Gate.F_AGVGateDeviceIndex = T_Base_Device.F_DeviceIndex and F_ChannelsIndex=" + cbendposition.SelectedValue + "").Tables[0].DefaultView; tbendsite.DisplayMember = "F_DeviceName"; tbendsite.ValueMember = "F_DeviceIndex"; tbendsite.DataSource = dv; } } int GetIOControlDetailFid(int ManageTaskKindIndex, int FCONTROLID) { DataSet ds = dbo.ExceSQL("SELECT MAX(FID) AS MaxFID FROM IO_CONTROLDETAIL GROUP BY F_ManageTaskKindIndex, FCONTROLID HAVING (F_ManageTaskKindIndex = " + ManageTaskKindIndex + ") AND (FCONTROLID = " + FCONTROLID + ")"); if (ds.Tables[0].DefaultView.Count > 0) { return (Convert.ToInt32(ds.Tables[0].DefaultView[0]["MaxFID"]) + 1); } else { return 1; } } void BuildAutoTaskCallBack(IAsyncResult ar) { string errtext = string.Empty; if (CStaticClass.WcfControl.EndBuildAutoTask(out errtext, ar) == false) { MessageBox.Show(errtext, "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void FrmAutoCommand_FormClosing(object sender, FormClosingEventArgs e) { _formInstance = null; } string GetWarehouse(int laneway) { DataView dv = dbo.ExceSQL(string.Format("SELECT DISTINCT FWAREHOUSE FROM ST_CELL WHERE (FLaneWay = {0})", laneway)).Tables[0].DefaultView; if (dv.Count > 0) { return dv[0][0].ToString(); } else { return "01"; } } StringBuilder sql = new StringBuilder(); public bool IFExitTempManageIndex(int fid) { //20100108 DataView dv = new DataView(); try { //20101124 sql.Remove(0, sql.Length); sql.Append("SELECT fid FROM T_Manage_Task WHERE (F_ManageTaskKindIndex=2 and fid = ").Append(fid).Append(")"); dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dv.Count > 0) { return true; } else { return false; } } catch (Exception ex) {//20100108 throw ex; } finally {//20100108 dv.Dispose(); } } /// /// 记录调度生成的调度任务的索引的最大值 /// /// 调度生成的调度任务的索引 public void RecordMaxTempManageTaskFID(int fid) {//20100108 DataView dv = new DataView(); try {//20100108 dv = dbo.ExceSQL("select F_ManageTaskIndex from T_Base_Manage_Task_Index_Temp_Task").Tables[0].DefaultView; if (dv.Count > 0) { //if (fid == 19998) //{ // dbo.ExceSQL("UPDATE T_Base_Manage_Task_Index_Temp_Task SET F_ManageTaskIndex =10001"); // return; //} //if (fid > Convert.ToInt32(dv[0]["F_ManageTaskIndex"])) //{ //20101124 sql.Remove(0, sql.Length); sql.Append("UPDATE T_Base_Manage_Task_Index_Temp_Task SET F_ManageTaskIndex =").Append(fid); dbo.ExceSQL(sql.ToString()); return; //} } else { //20101124 sql.Remove(0, sql.Length); sql.Append("INSERT INTO T_Base_Manage_Task_Index_Temp_Task (F_ManageTaskIndex)VALUES (").Append(fid).Append(")"); dbo.ExceSQL(sql.ToString()); return; } } catch (Exception ex) {//20100108 // _DisassembleTaskError = "获得记录调度任务最大任务索引失败," + ex.Message; throw ex; //return 0; } finally {//20100108 dv.Dispose(); } } public int GetTempManageIdx() { //20100108 DataSet ds = new DataSet(); try { int maxIdx = 10001; ds = dbo.ExceSQL("SELECT F_ManageTaskIndex FROM T_Base_Manage_Task_Index_Temp_Task"); if (ds.Tables[0].DefaultView.Count > 0) { if ((Convert.ToInt32(ds.Tables[0].DefaultView[0]["F_ManageTaskIndex"]) + 1) >= 19998) { maxIdx = 10001; } else { maxIdx = (Convert.ToInt32(ds.Tables[0].DefaultView[0]["F_ManageTaskIndex"]) + 1); } } else { maxIdx = 10001; } //判断临时调度任务表是否有重复值 if (IFExitTempManageIndex(maxIdx) == true) { RecordMaxTempManageTaskFID(maxIdx); maxIdx = GetTempManageIdx(); return maxIdx; } RecordMaxTempManageTaskFID(maxIdx); return maxIdx; } catch (Exception ex) {//20100108 throw ex; //return 0; } finally {//20100108 ds.Dispose(); } } private void button3_Click(object sender, EventArgs e) { if (comboBox_Z.SelectedIndex < 0 || comboBox_Y.SelectedIndex < 0) { MessageBox.Show("请选择排或层!"); return; } int Z = comboBox_Z.SelectedIndex + 9; int Y = comboBox_Y.SelectedIndex + 1; DataView dv = new DataView(); try { int enddevice; int startdevice = 18005; string sql = string.Format("select * from ST_CELL where F_Z={0} and F_Y={1} and FCELLSTATUS=1 and FRUNSTATUS=0", Z, Y); dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dv.Count > 0) { int count = dv.Count; for (int i = 0; i < count; i++) { string CellCode = Convert.ToString(dv[i]["FCELLCODE"]); string barcodes = Convert.ToString(dv[i]["FPALLETBARCODE"]);//托盘条码 string dtimes = DateTime.Now.ToString("u");//20101028 dtimes = dtimes.Substring(0, dtimes.Length - 1);//20101028 int Laneindex = 18005; enddevice = 12035; int AutoManageIdx = GetTempManageIdx();//调度任务索引 string stack = "0";//堆垛机FSTACK int controltype = 2;//入库 string sqlstr = string.Format("insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL,FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME,FStartCol,FStartLayer,FLOGIC_AREA) values ({0},'{1}',{2},{3},{4},{5},'{6}',{7},{8},'{9}',{10},{11},'{12}','{13}',{14},{15},{16})", AutoManageIdx, barcodes, controltype, 2, 1, startdevice, CellCode, 1, enddevice, "-", Laneindex, stack, "-", dtimes, 0, 0, enddevice); dbo.ExceSQL(sqlstr); sqlstr = string.Format("update ST_CELL set FRunStatus = 1 where FLaneWay= {0} and fcellcode = '{1}'", Laneindex, CellCode); dbo.ExceSQL(sqlstr); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "自动生成入库任务", startdevice.ToString(), AutoManageIdx.ToString()); } string mes = string.Format("成功生成{0}条出库任务", count); MessageBox.Show(mes); } else { MessageBox.Show("无满足条件的货位!"); } } catch (Exception ex) { throw; } } } }