using RGD.DataService; using RGD.DBUtility; using RGD.ZhiQianAPI.ZhiQianModel; using RGD.ZhiQianAPI; using System; using System.Data; using System.Windows.Forms; namespace RGD.WCS { public partial class FrmAutoCommand : Form { private Model.MDevice devinfo; private CCommonFunction ccf = new CCommonFunction(); private int AutoManageIdx = 0; #region ====变量定义 private 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() { 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 = DbHelperSQL.Query("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; } buttonStart.Enabled = true; buttonStop.Enabled = false; } private void FrmAutoCommand_Load(object sender, EventArgs e) { if (cellPanel == null) { cellPanel = new 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 FrmAutoCommand_FormClosed(object sender, FormClosedEventArgs e) { if (_formInstance != null) { _formInstance = null; } } /// /// 下达自动任务 /// /// /// private void button1_Click(object sender, EventArgs e) { if (MessageBox.Show("您确认要增加自动任务吗?", "操作提示:", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK) { return; } //if (tbFPALLETBARCODE.Text.Trim().Length < 10) //{ // MessageBox.Show("表箱条码不够十五位字符!", "误操作提示", 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 Sql, _tasktype, _startposition, _startsite = "-", _endposition, _endsite = "-"; DataSet ds; _tasktype = cbtasktype.SelectedValue.ToString(); _startposition = cbstartposition.SelectedValue.ToString(); _endposition = cbendposition.SelectedValue.ToString(); int flaneway = 0; int stackno = 0; int startdevicekind = BaseDeviceService.GetDeviceKindIdx(Convert.ToInt32(_startposition));//20110411 if ((this.tbstartsite.Enabled == true) && (startdevicekind == 10)) { _startsite = tbstartsite.Text; flaneway = Convert.ToInt32(_startposition); if (DbHelperSQL.Exists("SELECT FID FROM ST_CELL where FCELLSTATUS<> '-1' and FLaneWay=" + flaneway + " and FCELLCODE='" + _startsite + "'") == false) { MessageBox.Show("起始位置和起始货位编码在数据库中没有记录!", "误操作提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } } if ((this.tbendsite.Enabled == true) && (BaseDeviceService.GetDeviceKindIdx(Convert.ToInt32(_endposition)) == 10)) { _endsite = tbendsite.Text; flaneway = Convert.ToInt32(_endposition); if (DbHelperSQL.Exists("SELECT FID FROM ST_CELL where FCELLSTATUS<> '-1' and FLaneWay=" + flaneway + " and FCELLCODE='" + _endsite + "'") == false) { MessageBox.Show("终点位置和终点货位编码在数据库中没有记录!", "误操作提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } } #region AGV通道 if ((this.tbstartsite.Enabled == true) && (BaseDeviceService.GetDeviceKindIdx(Convert.ToInt32(_startposition)) == 11)) { _startsite = tbstartsite.SelectedValue.ToString(); if (DbHelperSQL.Exists("SELECT F_AGVGateDeviceIndex FROM T_Base_AGV_Gate WHERE (F_ChannelsIndex = " + _startposition + ") AND (F_AGVGateDeviceIndex = " + _startsite + ")") == false) { MessageBox.Show("AGV站点设备在数据库中没有记录!", "误操作提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } } if ((this.tbendsite.Enabled == true) && (BaseDeviceService.GetDeviceKindIdx(Convert.ToInt32(_endposition)) == 11)) { _endsite = tbendsite.SelectedValue.ToString(); if (DbHelperSQL.Exists("SELECT F_AGVGateDeviceIndex FROM T_Base_AGV_Gate WHERE (F_ChannelsIndex = " + _endposition + ") AND (F_AGVGateDeviceIndex = " + _endsite + ")") == false) { MessageBox.Show("AGV站点设备在数据库中没有记录!", "误操作提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } } #endregion AGV通道 //dbo.TransBegin(); try { //20100304 Sql = "SELECT F_RouteID FROM T_Base_Route WHERE (F_StartDevice = " + _startposition + ") AND (F_EndDevice = " + _endposition + ")"; ds = DbHelperSQL.Query(Sql).Tables[0].DataSet; if (ds.Tables[0].DefaultView.Count <= 0) { MessageBox.Show("起始位置和结束位置不在有效路径的范围内!", "误操作提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } //20100625本地下达的自动不写堆垛机编号任务 //string sss = "SELECT F_StackIndex, F_LaneNo FROM T_Base_StackInfo " + // " where (F_LaneNo='" + flaneway + "') OR (F_LaneNo like '%" + ";" + flaneway + "') OR (F_LaneNo='" + flaneway + ";" + "%') "; //DataView dv = dbo.ExceSQL(sss).Tables[0].DefaultView; //if (dv.Count > 0) //{ // stackno = Convert.ToInt32(dv[0]["F_StackIndex"]); //} string FSTARTCELL = _startsite, FENDCELL = _endsite, UseAwayFork = "-"; int FSTARTDEVICE = Convert.ToInt32(_startposition); int FENDDEVICE = Convert.ToInt32(_endposition); devinfo = BaseDeviceService.GetDeviceInfo(FSTARTDEVICE); if (devinfo != null) { if ((FSTARTDEVICE == 3801) || (FSTARTDEVICE == 2801)) { UseAwayFork = DbHelperSQL.GetSingle("SELECT F_UseAwayFork FROM T_Base_AGV_Gate WHERE ( F_AGVGateDeviceIndex= " + FSTARTCELL + ")").ToString(); } else { if (devinfo.DoubleFork == "1") { UseAwayFork = "0"; } else if (devinfo.DoubleFork == "2") { UseAwayFork = "1"; } //else if (devinfo.DeviceIndex==1101) //{ // UseAwayFork = "1"; //} } } if (UseAwayFork == "-") { devinfo = BaseDeviceService.GetDeviceInfo(FENDDEVICE); if (devinfo != null) { if ((FENDDEVICE == 3801) || (FENDDEVICE == 2801)) { UseAwayFork = DbHelperSQL.GetSingle("SELECT F_UseAwayFork FROM T_Base_AGV_Gate WHERE ( F_AGVGateDeviceIndex= " + FENDCELL + ")").ToString(); } else { if (devinfo.DoubleFork == "1") { UseAwayFork = "0"; } else if (devinfo.DoubleFork == "2") { UseAwayFork = "1"; } //else if (devinfo.DeviceIndex == 1101) //{ // UseAwayFork = "1"; //} } } } stackno = Convert.ToInt32(DbHelperSQL.GetSingle("SELECT F_StackIndex FROM T_Base_LaneInfo WHERE (F_LaneDeviceIndex = " + flaneway + ")"));//20101028 string dtime = DateTime.Now.ToString("u");//20101028 dtime = dtime.Substring(0, dtime.Length - 1);//20101028 AutoManageIdx = ccf.GetTempManageIdx(); //插入临时调度任务T_Manage_Task(监控下的调度任务): int startcol = 0, startlayer = 0;//20110411 if (startdevicekind == 10)//出库或是巷道内移库任务 { startcol = Convert.ToInt32(_startsite.Substring(3, 2)); startlayer = Convert.ToInt32(_startsite.Substring(6, 2)); } Sql = "insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL," + "FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME,BOX_QUANTITY,UNPACK_QUANTITY,FStartCol,FStartLayer) " + "values(" + AutoManageIdx + ",'" + tbFPALLETBARCODE.Text + "','" + _tasktype + "',2,'" + new WarehouseService().GetWarehouseIndex() + "','" + _startposition + "','" + _startsite + "','" + new WarehouseService().GetWarehouseIndex() + "','" + _endposition + "','" + _endsite + "'," + flaneway + "," + stackno + ",'" + UseAwayFork + "','" + dtime + "',1,1," + startcol + "," + startlayer + ")";//20101028 DbHelperSQL.ExecuteSql(Sql); } catch (Exception ex) { //dbo.TransRollback(); throw ex; } } /// /// 任务类型 /// /// /// private void cbtasktype_SelectedIndexChanged(object sender, EventArgs e) { this.tbFPALLETBARCODE.Enabled = true; this.tbFPALLETBARCODE.Text = ""; CCommonFunction ccf = new CCommonFunction(); int IOtype = Convert.ToInt32(new CommonService().GetIOType(this.cbtasktype.SelectedValue.ToString())); DataView dvs = DbHelperSQL.Query("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 cbstartposition.ValueMember = "F_StartDevice"; cbstartposition.DisplayMember = "F_DeviceName"; cbstartposition.DataSource = dvs; DataView dvs1 = DbHelperSQL.Query("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_SelectedIndexChanged(object sender, EventArgs e) { tbstartsite.DataSource = null; tbstartsite.Text = ""; //如果是巷道设备tbstartsite.enable=true DataSet ds = DbHelperSQL.Query("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 UCellPanel(this, tbstartsite, null, tbFPALLETBARCODE, 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.Visible = plCell.Visible; } else { plCell.Enabled = false; tbstartsite.Enabled = false; } DataView dv = DbHelperSQL.Query("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 = DbHelperSQL.Query("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 = DbHelperSQL.Query("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 UCellPanel(this, tbendsite, null, tbFPALLETBARCODE, 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.Visible = plCell.Visible; } else { plCell.Enabled = false; tbendsite.Enabled = false; } DataView dv = DbHelperSQL.Query("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 = DbHelperSQL.Query("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; } } private void button3_Click(object sender, EventArgs e) { CompleteOrder completeOrder = new CompleteOrder(); if(textBox1.Text!=null && textBox1.Text != "") { completeOrder.taskid = int.Parse(textBox1.Text); } else { completeOrder.taskid = FrmMain.taskId; } AppendCompleteCancelResponse completeResponse = SendDataToAgv.SendStopAppendTaskToAgv(completeOrder); } } }