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 !='-'"); DataSet ds = dbo.ExceSQL("select * from T_ITEMTASKTYPE where FCODE !=0"); 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) {//20230815richard.liu int number = 0; if (MessageBox.Show("您确认要增加自动任务吗?", "操作提示:", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) !=DialogResult.OK) { return; } if (tbFPALLETBARCODE.Text.Trim().Length < 8) { MessageBox.Show("条码不是8位字符!", "误操作提示", 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; } //调用服务 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; } int modelType = 0; int dadai = 0; if (this.comboBox1.Text.Trim() == "") { modelType = 0; } else { modelType = Convert.ToInt32(this.comboBox1.Text); } if (this.comboBox2.Text.Trim() == "") { dadai = 0; } else { dadai = Convert.ToInt32(this.comboBox1.Text); } if (this.cbtasktype.SelectedValue.ToString() == "2" && tbstartsite.Enabled == true && startcell.Length > 0) {////20230815richard.liu判断双深巷道货位,是否为发送的1,4排货位 string[] zxy = startcell.Split('-');//获得任务坐标 if (zxy.Length > 2) { int FSTARTDEVICE = Convert.ToInt32(cbstartposition.SelectedValue); StringBuilder sql = new StringBuilder(); sql.Append("select F_SENDZ from T_BASE_SENDROW WHERE F_WMSZ=").Append(zxy[0]).Append(" and F_LANENO= ").Append(FSTARTDEVICE); object SENDZ = dbo.GetSingle(sql.ToString()); if (SENDZ != null) { int getZ = Convert.ToInt32(SENDZ); int newZ; int tempZ = getZ; if (tempZ > 4) { tempZ = getZ % 4; } if (tempZ == 1 || tempZ == 4 || tempZ == 0)//里位取货时,要判读是否有外位的取货任务//扬州晶澳添加tempZ == 0 {//获取外位坐标 if (tempZ == 1) { newZ = getZ + 1; } else { newZ = getZ - 1; } string neighborzxy = string.Format("{0:D2}-{1:D2}-{2:D2}", newZ, zxy[1], zxy[2]);//获得外位坐标 string sqlstr = string.Format("SELECT FID FROM T_Manage_Task WHERE (FSTATUS = 0) AND (FIntoStepOK = 0) AND (FSTARTDEVICE = {0}) AND (FSTARTCELL = '{1}') ", FSTARTDEVICE, neighborzxy); DataView dvmp = dbo.ExceSQL(sqlstr).Tables[0].DefaultView; if (dvmp.Count == 0) { sqlstr = string.Format("select FID from ST_CELL where length(fpalletbarcode)>1 and flaneway={0} and fcellcode='{1}'", FSTARTDEVICE, neighborzxy); dvmp = dbo.ExceSQL(sqlstr).Tables[0].DefaultView; if (dvmp.Count > 0) { MessageBox.Show(string.Format("近端货位{0}有货,请先下达近端货位{0}出库任务!", neighborzxy), "误操作提示", 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)); 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, number, modelType, dadai); 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, string.Empty); cellPanel.TaskType = "100"; cellPanel.GoodsName = ""; cellPanel.Dock = DockStyle.Fill; cellPanel.AllowWareHouseChanged = false; plCell.Controls.Add(cellPanel); } cellPanel.Visible = true; } private void cbtasktype_SelectedIndexChanged(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 + " order by F_StartDevice").Tables[0].DefaultView; if (dvs.Count > 0) { //cbstartposition cbstartposition.ValueMember = "F_StartDevice"; cbstartposition.DisplayMember = "F_DeviceName"; cbstartposition.DataSource = dvs; } else { cbstartposition.ValueMember = "F_StartDevice"; cbstartposition.DisplayMember = "F_DeviceName"; cbstartposition.DataSource = null; } 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 + " order by F_EndDevice").Tables[0].DefaultView; //cbendposition if (dvs1.Count > 0) { cbendposition.ValueMember = "F_EndDevice"; cbendposition.DisplayMember = "F_DeviceName"; cbendposition.DataSource = dvs1; } else { cbendposition.ValueMember = "F_EndDevice"; cbendposition.DisplayMember = "F_DeviceName"; cbendposition.DataSource = null; } } private void cbstartposition_SelectedIndexChanged(object sender, EventArgs e) { tbstartsite.DataSource = null; tbstartsite.Text = ""; int IOtype = Convert.ToInt32(this.cbtasktype.SelectedValue.ToString()); if (cbstartposition.SelectedValue == null) return; 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 + " and f_startdevice=" + Convert.ToInt32(cbstartposition.SelectedValue) + " order by F_EndDevice").Tables[0].DefaultView; if (dvs1.Count > 0) { //cbendposition cbendposition.ValueMember = "F_EndDevice"; cbendposition.DisplayMember = "F_DeviceName"; cbendposition.DataSource = dvs1; } //如果是巷道设备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) { tbstartsite.Enabled = true; plCell.Enabled = true; if (cellPanel == null) { cellPanel = new CommonClassLib.UCellPanel(this, tbstartsite, null, string.Empty); cellPanel.TaskType = "100"; cellPanel.GoodsName = ""; cellPanel.Dock = DockStyle.Fill; cellPanel.AllowWareHouseChanged = false ; plCell.Controls.Add(cellPanel); } cellPanel.ControlCellCode = tbstartsite; cellPanel.Laneway = this.cbstartposition.SelectedValue.ToString(); cellPanel.WareHouse = GetWarehouse(Convert.ToInt32(this.cbstartposition.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) { if (cbendposition.SelectedValue == null) return; 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) { tbendsite.Enabled = true; plCell.Enabled = true; if (cellPanel == null) { cellPanel = new CommonClassLib.UCellPanel(this, tbendsite, null, string.Empty); cellPanel.TaskType = "100"; cellPanel.GoodsName = ""; cellPanel.Dock = DockStyle.Fill; cellPanel.AllowWareHouseChanged = false; plCell.Controls.Add(cellPanel); } cellPanel.ControlCellCode = tbendsite; cellPanel.Laneway = this.cbendposition.SelectedValue.ToString(); cellPanel.WareHouse = GetWarehouse(Convert.ToInt32(this.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"; } } private void tbstartsite_TextChanged(object sender, EventArgs e) { DataView dv = dbo.ExceSQL(string.Format("SELECT FPALLETBARCODE FROM ST_CELL WHERE FPALLETBARCODE !='-' and (FCELLCODE = '{0}')", tbstartsite.Text)).Tables[0].DefaultView; if (dv.Count > 0) { tbFPALLETBARCODE.Text = dv[0][0].ToString(); } } } }