using System; using System.Collections.Generic; using System.Linq; using System.Text; using CoreFS.CA06; using System.Windows.Forms; using Core.Mes.Client.Common; using System.Collections; using Core.LgMes.Client.lgClassModel; using System.Data; /***文档注释*********************************************** * 作者 : 刘现 * 创建日期 : 2011.02.18 * 描述 : 完成作业管理手动操作,更新功能 * 注意事项 : 所有作业管理手动操作共用 * 遗留BUG : 无 * 修改日期 : * 修改人员 : * 修改内容 : ***********************************************************/ namespace Core.LgMes.Client.LgJobMgt { public class ClassManualOperate { private static CommandClass _commClass; //消息发送类 private static OpeBase obMain = null; //平台服务端URL public static string strPosInfo = "3"; //互岗位信息标志 public static ArrayList arryHeatNo = new ArrayList(); //各工位加热处理号 /// /// 作业管理手动操作入口函数 /// /// 加热处理号 /// 原始位置,例:BOF01_DEVICE /// 平台服务端URL public static void ManualOperateEntrance(string strHeatProcessNo, string strOldPos, OpeBase ob, TrackObjectInfo objTrack) { //操作命令类型(OUTSTEEL:出钢,GONEXT:出下道工序,ASSIGNPOS:指定位置, // INPOS:进站/上台,OUTPOS:出站/下台,POSTRADE:位置对换, // OPNCAST:开浇,STOPCAST:停浇,OVER:强制结束,SWITCH:切换信息显示,ISRS:钢水回炉) string strOptCommandType = ""; string strObjectPos = ""; //目标位置 string strOptcaption = ""; //操作说明 string strStation = ""; //岗位,例:BOF01 string strNormalOpt = ""; //操作类型 if (strHeatProcessNo == "") return; obMain = ob; //平台服务端URL frmManualOperate frm = new frmManualOperate(); frm.Location = CStaticMethod.GetChildWindowLocation(frm.Size); frm.strStationCode = strOldPos.Substring(0, 3); frm.strOldPos = strOldPos.Substring(6, strOldPos.Length - 6); frm.ob = ob; frm.ShowDialog(); _commClass = new CommandClass(); //实例化命令执行类 //操作命令信息 strOptCommandType = frm.strOptcommandType; strObjectPos = frm.strObjectPos; strOptcaption = frm.strOptcaption; strStation = strOldPos.Substring(0, 5); strNormalOpt = frm.strNormalOpt; _commClass.obComm = ob; if (strOptCommandType != "") { switch (strOptCommandType) { case "OUTSTEEL": //出钢 OutSteelOperate(strHeatProcessNo, strOldPos, strStation + strObjectPos, strOptcaption); break; case "GONEXT": //出下道工序 GoNextOperate(strHeatProcessNo, strOldPos); break; case "ASSIGNPOS": //指定具体位置 if (strNormalOpt == "1") AssignPosOperate(strHeatProcessNo, strOldPos, strStation + strObjectPos, strOptcaption); else AssignPosOperate(strHeatProcessNo, strOldPos, strObjectPos, strOptcaption); break; case "INPOS": //进站/上台 InPosOperate(strHeatProcessNo, strOldPos, objTrack); break; case "OUTPOS": //出站/下台 OutPosOperate(strHeatProcessNo, strOldPos); break; case "POSTRADE": //位置对换 PostradeOperate(strHeatProcessNo, strOldPos); break; case "OPNCAST": //开浇 SetManualOperateValue(strHeatProcessNo, "OPNCAST"); break; case "STOPCAST": //停浇 SetManualOperateValue(strHeatProcessNo, "STOPCAST"); break; case "OVER": //强制结束 OverOperate(strHeatProcessNo, strOldPos, strStation + strObjectPos, strOptcaption); break; case "ISRS": //回炉钢水 IsRsOperate(strHeatProcessNo, strOldPos, strStation + strObjectPos, strOptcaption); break; case "SWITCH": //切换岗位信息 switch (strObjectPos) { case "_FRONT": strPosInfo = "1"; break; case "_BACK": strPosInfo = "2"; break; case "_DEVICE": strPosInfo = "3"; break; case "_DEVICE2": strPosInfo = "4"; break; default: break; } break; default: break; } } } /// /// 出钢手动操作 /// /// 加热处理号 /// 原始位置,例:BOF01_DEVICE /// 目标位置,例:BOF01_BACK /// 目标名称 private static void OutSteelOperate(string strHeatProcessNo, string strOldPos, string strObjectPos, string strOptcaption) { string strMsg = ""; //提示信息 string strPosID = strOldPos.Substring(4, 1); string strPosName = CStaticMethod.analysChineseName(strOldPos.Substring(0, 3)); strMsg = "熔炼号: " + CStaticMethod.getSmeltingID(strHeatProcessNo) + " 正常从吹炼位到出钢位 \n 是否确认?"; if (MessageBox.Show(strMsg, "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { _commClass.setHeatID(strHeatProcessNo); _commClass.goNextPosCvtCmmd(strOldPos, strObjectPos); //设置作业管理手动操作时间节点值 SetManualOperateValue(strHeatProcessNo, "OUTSTEEL"); } } /// /// 去下道工序手动操作 /// /// 加热处理号 /// 原始位置,例:BOF01_DEVICE private static void GoNextOperate(string strHeatProcessNo, string strOldPos) { string strMsg = ""; string strNextPos = GetNextPos(strHeatProcessNo); if (strNextPos != "") { strMsg = "熔炼号:" + CStaticMethod.getSmeltingID(strHeatProcessNo) + " 正常从 " + strOldPos.Substring(4, 1) + "#" + CStaticMethod.analysChineseName(strOldPos) + " 去下道工序(" + strNextPos.Substring(4, 1) + "#" + CStaticMethod.analysChineseName(strNextPos) + ") \n 是否确认?"; if (MessageBox.Show(strMsg, "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { _commClass.setHeatID(strHeatProcessNo); _commClass.goNextPosCvtCmmd(strOldPos, strNextPos); //设置作业管理手动操作时间节点值 SetManualOperateValue(strHeatProcessNo, "GONEXT"); } } } /// /// 根据作业路线获取下道工序 /// /// 加热处理号 /// 下道工序LFS01_IDLE private static string GetNextPos(string strHeatProcessNo) { string strErr = ""; ArrayList arry = new ArrayList(); string strNextPos = ""; arry.Add(CStaticMethod.getSmeltingID(strHeatProcessNo));//炉号 arry.Add(strHeatProcessNo.Substring(0, 1)); //岗位号 CommonClientToServer ccs = new CommonClientToServer(); ccs.ob = obMain; //查询作业手动操作配置信息 CoreClientParam ccp = ccs.ExecuteClietnToServer("Core.LgMes.Server.LgJobMgt.ClassManualOperate", "GetNextPos", arry, out strErr); if (strErr != "") MessageBox.Show("获取下道工序失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); if (ccp.ReturnObject != null) { ArrayList arrl = (ArrayList)ccp.ReturnObject; //判断下道工序IDLE是否有炉号 if (arrl[1] == null) strNextPos = arrl[0].ToString(); else MessageBox.Show(arrl[0].ToString().Substring(4, 1) + "#" + CStaticMethod.analysChineseName(arrl[0].ToString()) + "缓冲位有任务生产,请稍候再试!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } return strNextPos; } /// /// 指定具体工序位置操作 /// /// 加热处理号 /// 原始位置,例:BOF01_DEVICE /// 目标位置,例:BOF01_BACK /// 目标名称 private static void AssignPosOperate(string strHeatProcessNo, string strOldPos, string strObjectPos, string strOptcaption) { string strMsg = ""; //提示信息 string strPosID = strOldPos.Substring(4, 1); string strPosName = CStaticMethod.analysChineseName(strOldPos.Substring(0, 3)) + CStaticMethod.analysPosName(strOldPos); if (strOldPos.Contains("HMP")) strMsg = "脱硫号: " + CStaticMethod.getHudwIdID(strHeatProcessNo) + " 异常从 " + strPosID + "#" + strPosName + " 去 " + strOptcaption + " \n 是否确认?"; else strMsg = "熔炼号: " + CStaticMethod.getSmeltingID(strHeatProcessNo) + " 异常从 " + strPosID + "#" + strPosName + " 去 " + strOptcaption + " \n 是否确认?"; if (MessageBox.Show(strMsg, "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { //判断指定工序缓冲位是否有炉号 if (!IsExistNextPosIDLE(strObjectPos)) return; _commClass.setHeatID(strHeatProcessNo); _commClass.goNextPosCvtCmmd(strOldPos, strObjectPos); //设置作业管理手动操作时间节点值 SetManualOperateValue(strHeatProcessNo, "ASSIGNPOS"); } } /// /// 进站手动操作 /// /// 加热处理号 /// 原始位置,例:BOF01_DEVICE /// 目标位置,例:BOF01_BACK /// 目标名称 private static void InPosOperate(string strHeatProcessNo, string strOldPos, TrackObjectInfo objTrack) { string strObjectPos = ""; //目标位置 string strMsg = ""; //提示信息 bool blIdle = false; //处理位 RealDataTrackObjectInfor objTrackDev = (RealDataTrackObjectInfor)objTrack.hList[strOldPos.Substring(0, 5) + "_DEVICE"]; //等待位 RealDataTrackObjectInfor objTrackFrt = (RealDataTrackObjectInfor)objTrack.hList[strOldPos.Substring(0, 5) + "_FRONT"]; //判断处理位是否有炉号,没有炉号直接进站到处理位 if (!string.IsNullOrEmpty(objTrackDev.OBJECTID) && string.IsNullOrEmpty(objTrackFrt.OBJECTID)) { blIdle = true; strObjectPos = strOldPos.Substring(0, 5) + "_FRONT"; } else if (string.IsNullOrEmpty(objTrackDev.OBJECTID)) { strObjectPos = strOldPos.Substring(0, 5) + "_DEVICE"; } else { MessageBox.Show("处理位正在生产不能进站,待出站后再操作进站!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); return; } strMsg = "熔炼号: " + CStaticMethod.getSmeltingID(strHeatProcessNo) + " 正常从 " + CStaticMethod.analysPosName(strOldPos) + " 进站去 " + CStaticMethod.analysPosName(strObjectPos) + " \n 是否确认?"; if (MessageBox.Show(strMsg, "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { //处理处理有炉号,IDLE位加载到等待位的情况 if (blIdle == true) { RealDataTrackObjectInfor objTrackIDLE = (RealDataTrackObjectInfor)objTrack.hList[strOldPos.Substring(0, 5) + "_IDLE"]; _commClass.setHeatID(objTrackIDLE.OBJECTID); } else _commClass.setHeatID(strHeatProcessNo); _commClass.goNextPosCvtCmmd(strOldPos, strObjectPos); //设置作业管理手动操作时间节点值 SetManualOperateValue(strHeatProcessNo, "INPOS"); } } /// /// 出站手动操作 /// /// 加热处理号 /// 原始位置,例:BOF01_DEVICE private static void OutPosOperate(string strHeatProcessNo, string strOldPos) { string strMsg = ""; string strNextPos = GetNextPos(strHeatProcessNo); if (strNextPos != "") { strMsg = "熔炼号:" + CStaticMethod.getSmeltingID(strHeatProcessNo) + " 正常从 " + strOldPos.Substring(4, 1) + "#" + CStaticMethod.analysChineseName(strOldPos) + " 出站去(" + strNextPos.Substring(4, 1) + "#" + CStaticMethod.analysChineseName(strNextPos) + ") \n 是否确认?"; if (MessageBox.Show(strMsg, "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { _commClass.setHeatID(strHeatProcessNo); _commClass.goNextPosCvtCmmd(strOldPos, strNextPos); //设置作业管理手动操作时间节点值 SetManualOperateValue(strHeatProcessNo, "OUTPOS"); } } } /// /// 位置对换手动操作 /// /// 加热处理号 /// 原始位置,例:BOF01_DEVICE private static void PostradeOperate(string strHeatProcessNo, string strOldPos) { string[] bufferArray = { "", "", "", "" }; bufferArray[0] = arryHeatNo[0].ToString(); bufferArray[1] = arryHeatNo[1].ToString(); bufferArray[2] = arryHeatNo[2].ToString(); if (arryHeatNo.Count > 3) bufferArray[3] = arryHeatNo[3].ToString(); if (strHeatProcessNo != "") { _commClass.setHeatID(strHeatProcessNo); _commClass.goReplaceOfLfs(strOldPos, bufferArray); } } /// /// 任务强制结束操作 /// /// 加热处理号 /// 原始位置,例:BOF01_DEVICE /// 目标位置,例:BOF01_BACK /// 目标名称 private static void OverOperate(string strHeatProcessNo, string strOldPos, string strObjectPos, string strOptcaption) { string strMsg = ""; //提示信息 strMsg = "熔炼号: " + CStaticMethod.getSmeltingID(strHeatProcessNo) + " " + strOptcaption + " \n 是否确认?"; if (MessageBox.Show(strMsg, "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { _commClass.setHeatID(strHeatProcessNo); _commClass.goNextPosCvtCmmd(strOldPos, strObjectPos); //设置作业管理手动操作时间节点值 SetManualOperateValue(strHeatProcessNo, "OVER"); } } /// /// 回炉钢水操作 /// /// 加热处理号 /// 原始位置,例:BOF01_DEVICE /// 目标位置,例:BOF01_BACK /// 目标名称 private static void IsRsOperate(string strHeatProcessNo, string strOldPos, string strObjectPos, string strOptcaption) { string strMsg = ""; //提示信息 strMsg = "熔炼号: " + CStaticMethod.getSmeltingID(strHeatProcessNo) + " " + strOptcaption + " \n 是否确认?"; if (MessageBox.Show(strMsg, "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { _commClass.setHeatID(strHeatProcessNo); _commClass.goNextPosCvtCmmd(strOldPos, strObjectPos); //设置作业管理手动操作时间节点值 SetManualOperateValue(strHeatProcessNo, "ISRS"); } } /// /// 设置作业管理手动操作时间节点值 /// /// 加热处理号 /// 命令类型 private static void SetManualOperateValue(string strHeatProcessNo, string strOptCommandType) { string strErr = ""; string strSqlID = "SetManualOperateValue.Seting"; Hashtable htMov = new Hashtable(); htMov.Add("I1", strHeatProcessNo); htMov.Add("I2", strOptCommandType); htMov.Add("I3", ""); CommonClientToServer ccs = new CommonClientToServer(); ccs.ob = obMain; //查询作业手动操作配置信息 string strReturn = ccs.ExecuteProcedureFunctions("Core.LgMes.Server.LgJobMgt.ClassManualOperate", "SetManualOperateValue", strSqlID, htMov, out strErr); if (strErr != "") MessageBox.Show("执行手动操作时间值更新失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); } /// /// 判断下道工序IDLE位是否有炉号 /// /// /// private static bool IsExistNextPosIDLE(string strNextPos) { string strErr = ""; ArrayList arry = new ArrayList(); bool blNextPos =false ; arry.Add("GetNextPosIdleHeatNo.Select"); arry.Add(strNextPos); //岗位号 CommonClientToServer ccs = new CommonClientToServer(); ccs.ob = obMain; //查询下道工序IDLE位是否有炉号 DataSet dsNextPos = ccs.ExecuteQueryFunctions("Core.LgMes.Server.LgJobMgt.ClassManualOperate", "GetNextPosIdleHeatNo", arry, out strErr); if (strErr == "" && dsNextPos!=null) { if (dsNextPos.Tables.Count > 0 && dsNextPos.Tables[0].Rows.Count > 0) { if (string.IsNullOrEmpty(dsNextPos.Tables[0].Rows[0]["OBJECTID"].ToString())) blNextPos = true; else { MessageBox.Show(dsNextPos.Tables[0].Rows[0]["OBJECTPOS"].ToString().Substring(4, 1) + "#" + CStaticMethod.analysChineseName(dsNextPos.Tables[0].Rows[0]["OBJECTPOS"].ToString().ToString()) + "缓冲位有任务生产,请稍候再试!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); return blNextPos; } } } else { MessageBox.Show("判断【" + strNextPos.Substring(4, 1) + "#" + CStaticMethod.analysChineseName(strNextPos.Substring(0, 3)) + "缓冲位】是否有炉号失败,请稍候再试!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); return blNextPos; } return blNextPos; } } }