| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487 |
- using System;
- using System.Collections;
- using System.Windows.Forms;
- using Core.StlMes.Client.LgClassModel;
- using CoreFS.CA06;
- namespace Core.StlMes.Client.LgCommon
- {
- /// <summary>
- /// 命令发送公用
- /// </summary>
- public class ClsCommandPack
- {
- private OpeBase _ob;
- private COM_STL_COMMAND _csc; //
- private string _HeatProcessNo = ""; //加热处理号
- private string _OBJECTPOS = ""; //设备位置 如:LFS01_FRONT
- private string _DEVICE_POSITION = ""; //设备编码 如:LFS01
- private string[] _HeatProcessBuffer = new string[] { "", "", "", "" }; //各设备位置加热处理号:[0]:IDLE [1]:FRONT [2]DEVICE [3]BACK
- private WORKBIT _WorkBit = WORKBIT.NONE; //FRONT:1#小车 BACK:2#小车 DEVICE:精炼位 0不变化
- public string strObjectID = "12100000"; //转炉加载默从PPC_STEEL_HEATNO取对应工序最小炉号,脱硫由作业界面生成脱硫号
- /// <summary>
- /// 切换岗位信息(FRONT:1#小车 BACK:2#小车 DEVICE:精炼位 NONE:不变化)
- /// </summary>
- public WORKBIT WorkBit
- {
- get { return _WorkBit; }
- }
- public ClsCommandPack(OpeBase ob)
- {
- this._ob = ob;
- }
- /// <summary>
- /// 发送命令
- /// </summary>
- /// <param name="realDataCommand"></param>
- /// <param name="strMsg"></param>
- /// <returns></returns>
- private bool SendCommand(RealDataCommand realDataCommand, out string strMsg)
- {
- strMsg = "";
- if (realDataCommand == null)
- {
- strMsg = "指令不能为空!";
- return false;
- }
- ArrayList Args = new ArrayList();
- Args.Add(realDataCommand.COMMANDTYPE);
- Args.Add(realDataCommand.OBJECTPOS);
- Args.Add(realDataCommand.OBJECTID);
- Args.Add(realDataCommand.STR_VALUE);
- Args.Add(realDataCommand.FLT_VALUE.ToString());
- Args.Add(realDataCommand.OBJECTIP);
- Args.Add(realDataCommand.SENDTYPE);
- CoreClientParam ccp = new CoreClientParam();
- try
- {
- ccp.IfShowErrMsg = false;
- ccp.ServerName = "Core.LgMes.Server.LgJobMgt.SchedulingCommandMgt";
- ccp.MethodName = "AddNewCommand";
- ccp.ServerParams = new object[] { Args };
- ccp = _ob.ExecuteNonQuery(ccp, CoreInvokeType.Internal);
- strMsg = ccp.ReturnInfo;
- }
- catch (Exception ex)
- {
- string strErr = (ccp == null ? "" : ccp.ReturnInfo);
- if (string.IsNullOrEmpty(strErr)) strMsg = ex.Message;
- else strMsg = strErr;
- }
- if (string.IsNullOrEmpty(strMsg)) return true;
- else return false;
- }
- /// <summary>
- /// 加载炉次计划命令(不能指定炉号,系统自动查找最小排产炉号)
- /// </summary>
- /// <param name="srcPos">BOF0?_DEVICE、HMP0?_DEVICE</param>
- /// <returns></returns>
- public bool CommandCharge(string srcPos)
- {
- bool bSuccess = false;
- try
- {
- RealDataCommand realDataCommand = new RealDataCommand();
- realDataCommand.COMMANDTYPE = "SCHEDULE_CHARGE";
- realDataCommand.OBJECTID = strObjectID;
- realDataCommand.OBJECTPOS = srcPos;
- realDataCommand.STR_VALUE = srcPos;
- realDataCommand.OBJECTIP = ClsBusinessPack.GetLocalMachineIP();
- realDataCommand.SENDTYPE = "0";
- string strMsg = "";
- bSuccess = SendCommand(realDataCommand, out strMsg);
- if (!bSuccess)
- MessageBox.Show("命令发送失败!\n" + strMsg, "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
- }
- catch { }
- return bSuccess;
- }
- /// <summary>
- /// 发送钢水到目标位置
- /// </summary>
- /// <param name="HeatProcessNo">原始位置加热处理号</param>
- /// <param name="currPos">原始位置 如:BOF01_DEVICE</param>
- /// <param name="nextPos">目标位置 如:BOF01_BACK</param>
- /// <returns></returns>
- public bool CommandMove(string HeatProcessNo, string srcPos, string destPos)
- {
- bool bSuccess = false;
- try
- {
- RealDataCommand realDataCommand = new RealDataCommand();
- realDataCommand.COMMANDTYPE = "SCHEDULE_MOVE";
- realDataCommand.OBJECTID = HeatProcessNo;
- realDataCommand.OBJECTPOS = srcPos;
- realDataCommand.STR_VALUE = destPos;
- realDataCommand.OBJECTIP = ClsBusinessPack.GetLocalMachineIP();
- realDataCommand.SENDTYPE = "0";
- string strMsg = "";
- bSuccess = SendCommand(realDataCommand, out strMsg);
- if (!bSuccess)
- MessageBox.Show("命令发送失败!\n" + strMsg, "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
- }
- catch { }
- return bSuccess;
- }
- /// <summary>
- /// 钢包位置交换
- /// </summary>
- /// <param name="HeatProcessNo">原始位置加热处理号</param>
- /// <param name="srcPos">原始位置 如:LFS01_FRONT</param>
- /// <param name="HeatProcessBuffer">[0]:IDLE [1]:FRONT [2]DEVICE [3]BACK</param>
- public bool CommandTrans(string HeatProcessNo, string srcPos, string[] HeatProcessBuffer)
- {
- bool bSuccess = false;
- if (string.IsNullOrEmpty(srcPos) || srcPos.Length < 5) return false;
- if (HeatProcessBuffer == null || HeatProcessBuffer.Length < 4) return false;
- string strIdleID = HeatProcessBuffer[0];
- string strFrontID = HeatProcessBuffer[1];
- string strDeviceID = HeatProcessBuffer[2];
- string strBackID = HeatProcessBuffer[3];
- string desPos = "";
- if (srcPos.IndexOf("_FRONT") > -1)
- {
- if (!string.IsNullOrEmpty(strDeviceID))
- desPos = srcPos.Substring(0, 5) + "_DEVICE"; //FRONT -> DEVICE
- if (!string.IsNullOrEmpty(strBackID))
- desPos = srcPos.Substring(0, 5) + "_BACK"; //FRONT -> BACK
- }
- else if (srcPos.IndexOf("_DEVICE") > -1)
- {
- if (!string.IsNullOrEmpty(strBackID))
- desPos = srcPos.Substring(0, 5) + "_BACK"; //DEVICE -> BACK
- if (!string.IsNullOrEmpty(strFrontID))
- desPos = srcPos.Substring(0, 5) + "_FRONT"; //DEVICE -> FRONT
- }
- else if (srcPos.IndexOf("_BACK") > -1)
- {
- if (!string.IsNullOrEmpty(strDeviceID))
- desPos = srcPos.Substring(0, 5) + "_DEVICE"; //BACK -> DEVICE
- if (!string.IsNullOrEmpty(strFrontID))
- desPos = srcPos.Substring(0, 5) + "_FRONT"; //BACK -> FRONT
- }
- if (string.IsNullOrEmpty(desPos))
- {
- MessageBox.Show("无可置换位置的钢水!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
- return false;
- }
- try
- {
- RealDataCommand realDataCommand = new RealDataCommand();
- realDataCommand.COMMANDTYPE = "SCHEDULE_TRANS";
- realDataCommand.OBJECTID = HeatProcessNo;
- realDataCommand.OBJECTPOS = srcPos;
- realDataCommand.STR_VALUE = desPos;
- realDataCommand.OBJECTIP = ClsBusinessPack.GetLocalMachineIP();
- realDataCommand.SENDTYPE = "0";
- string strMsg = "";
- bSuccess = SendCommand(realDataCommand, out strMsg);
- if (!bSuccess)
- MessageBox.Show("命令发送失败!\n" + strMsg, "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
- }
- catch { }
- return bSuccess;
- }
- /// <summary>
- /// 手动执行操作
- /// </summary>
- /// <param name="ObjectPos">设备位置 如:LFS01_FRONT</param>
- /// <param name="HeatProcessBuffer">各设备位置加热处理号:[0]:IDLE [1]:FRONT [2]DEVICE [3]BACK</param>
- /// <param name="CC">当前岗位手动操作配置集合</param>
- public void BeginManualOperate(string ObjectPos, string[] HeatProcessBuffer, CommandCollection CC)
- {
- ObjectPos = ObjectPos.Trim().ToUpper();
- if (string.IsNullOrEmpty(ObjectPos) || ObjectPos.Length <= 6) return;
- if (HeatProcessBuffer == null || HeatProcessBuffer.Length < 4) return;
- string strPos = ObjectPos.Substring(5);
- if (strPos.Equals("_IDLE")) this._HeatProcessNo = HeatProcessBuffer[0];
- else if (strPos.Equals("_FRONT")) this._HeatProcessNo = HeatProcessBuffer[1];
- else if (strPos.Equals("_DEVICE")) this._HeatProcessNo = HeatProcessBuffer[2];
- else if (strPos.Equals("_BACK")) this._HeatProcessNo = HeatProcessBuffer[3];
- else
- {
- this._HeatProcessNo = "";
- MessageBox.Show("设备位置:" + ObjectPos + " 无法识别!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
- return;
- }
- if (ObjectPos.Substring(0, 3).Equals("HMP"))
- {
- if (ClsBusinessPack.HudwProcessNoValid(_HeatProcessNo)) _HeatProcessNo = _HeatProcessNo.Substring(0, (int)OBJLEN.nHudwProcessNo);
- else _HeatProcessNo = "";
- }
- else
- {
- if (ClsBusinessPack.HeatProccessNoValid(_HeatProcessNo)) _HeatProcessNo = _HeatProcessNo.Substring(0, (int)OBJLEN.nHeatProcessNo);
- else _HeatProcessNo = "";
- }
- if (string.IsNullOrEmpty(_HeatProcessNo))
- {
- MessageBox.Show("当前岗位无生产任务,无法操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
- return;
- }
- this._WorkBit = WORKBIT.NONE; //默认不切换工位显示
- this._OBJECTPOS = ObjectPos; //设备位置
- this._DEVICE_POSITION = ObjectPos.Substring(0, 5); //设备编码
- this._HeatProcessBuffer = HeatProcessBuffer; //各工位加热处理号
- frmManualOperate frm = new frmManualOperate(_DEVICE_POSITION, _OBJECTPOS, CC);
- frm.Location = ClsControlPack.GetChildWindowLocation(frm.Size);
- if (frm.ShowDialog() == DialogResult.OK)
- {
- this._csc = frm.CSC;
- this.AnaliseCommand();
- }
- }
- /// <summary>
- /// 解析操作
- /// </summary>
- private void AnaliseCommand()
- {
- if (_csc == null) return;
- try
- {
- string strMsg = "";
- string destPos = "";
- string destID = "";
- bool Successfull = false;
- string ConfirmMsg = AnaliseDevide(_DEVICE_POSITION) + GetHeatNo(_DEVICE_POSITION) + " ";
- if (_csc.OPTCOMMANDTYPE == COM_STL_COMMAND_CMDTYPE.ARRIVE ||
- _csc.OPTCOMMANDTYPE == COM_STL_COMMAND_CMDTYPE.ASSIGNEDPOS ||
- _csc.OPTCOMMANDTYPE == COM_STL_COMMAND_CMDTYPE.TAPPING ||
- _csc.OPTCOMMANDTYPE == COM_STL_COMMAND_CMDTYPE.MELTDOWN ||
- _csc.OPTCOMMANDTYPE == COM_STL_COMMAND_CMDTYPE.OVER) //进站、上台、指定位置、出钢、回炉、强制结束
- {
- ConfirmMsg += _csc.OPTCAPTION + "\n是否确认?";
- if (!ClsBusinessPack.QuestionConfirm(ConfirmMsg)) return;
- destPos = (_csc.OBJECTPOS.IndexOf("%") > -1 ? _csc.OBJECTPOS.Replace("%", _DEVICE_POSITION) : _csc.OBJECTPOS);
- if (_csc.OPTCOMMANDTYPE != COM_STL_COMMAND_CMDTYPE.MELTDOWN && _csc.OPTCOMMANDTYPE != COM_STL_COMMAND_CMDTYPE.OVER && !AssignedPosValid(destPos)) return;
- Successfull = CommandMove(_HeatProcessNo, _OBJECTPOS, destPos);
- }
- else if (_csc.OPTCOMMANDTYPE == COM_STL_COMMAND_CMDTYPE.LEAVE ||
- _csc.OPTCOMMANDTYPE == COM_STL_COMMAND_CMDTYPE.GONEXT) //出站、去下道工序
- {
- Successfull = ClsBusinessPack.GetNextPos(_HeatProcessNo, out destPos, out destID, out strMsg, _ob);
- if (!Successfull) return;
- strMsg = AnaliseObjectPos(destPos);
- if (!string.IsNullOrEmpty(destID))
- {
- strMsg = AnaliseObjectPos(destPos);
- MessageBox.Show(strMsg + "有任务生产,请稍后再试!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
- return;
- }
- if (_csc.OPTCOMMANDTYPE == COM_STL_COMMAND_CMDTYPE.LEAVE) ConfirmMsg += _csc.OPTCAPTION + "\n是否确认?";
- else ConfirmMsg += "去 " + strMsg + "\n是否确认?";
- if (!ClsBusinessPack.QuestionConfirm(ConfirmMsg)) return;
- Successfull = CommandMove(_HeatProcessNo, _OBJECTPOS, destPos);
- }
- else if (_csc.OPTCOMMANDTYPE == COM_STL_COMMAND_CMDTYPE.TRANS) //钢包位置对换
- {
- ConfirmMsg += _csc.OPTCAPTION + "\n是否确认?";
- if (!ClsBusinessPack.QuestionConfirm(ConfirmMsg)) return;
- Successfull = CommandTrans(_HeatProcessNo, _OBJECTPOS, _HeatProcessBuffer);
- }
- else if (_csc.OPTCOMMANDTYPE == COM_STL_COMMAND_CMDTYPE.OPENCAST ||
- _csc.OPTCOMMANDTYPE == COM_STL_COMMAND_CMDTYPE.STOPCAST) //开浇、停浇
- {
- Successfull = true;//无钢水调动操作、只需要更新相关字段
- }
- else if (_csc.OPTCOMMANDTYPE == COM_STL_COMMAND_CMDTYPE.SWITCH) //显示工位切换
- {
- if (_csc.OBJECTPOS.Contains("FRONT")) _WorkBit = WORKBIT.FRONT;
- else if (_csc.OBJECTPOS.Contains("DEVICE")) _WorkBit = WORKBIT.DEVICE;
- else if (_csc.OBJECTPOS.Contains("BACK")) _WorkBit = WORKBIT.BACK;
- else _WorkBit = WORKBIT.NONE;
- }
- //设置关键时间
- if (Successfull) ClsBusinessPack.UpdateTimeNode(_csc, _HeatProcessNo, _ob);
- }
- catch { }
- }
- /// <summary>
- /// 验证指定设备位置是否空闲
- /// </summary>
- /// <param name="destPos"></param>
- /// <returns></returns>
- private bool AssignedPosValid(string ObjectPos)
- {
- if (string.IsNullOrEmpty(ObjectPos))
- {
- MessageBox.Show("目标位置未指定!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
- return false;
- }
- string strMsg = "";
- bool bSuccess = false;
- string ObjectID = ClsBusinessPack.GetDesignatedObjectID(ObjectPos, out bSuccess, out strMsg, this._ob);
- string str = AnaliseObjectPos(ObjectPos);
- if (!bSuccess)
- {
- MessageBox.Show(str + "生产信息获取失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
- return false;
- }
- if (!string.IsNullOrEmpty(ObjectID))
- {
- MessageBox.Show(str + "有任务生产,请稍后再试!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
- return false;
- }
- return true;
- }
- /// <summary>
- /// 根据设备位置获取炉号类别
- /// </summary>
- /// <param name="DEVICE_POSITION"></param>
- /// <returns></returns>
- private string AnaliseDevide(string DEVICE_POSITION)
- {
- return (DEVICE_POSITION.Substring(0, 3) == "HMP" ? "脱硫号" : "炉号") + ":";
- }
- /// <summary>
- /// 获取脱硫号或者炉号
- /// </summary>
- /// <param name="DEVICE_POSITION"></param>
- /// <returns></returns>
- private string GetHeatNo(string DEVICE_POSITION)
- {
- if (DEVICE_POSITION.Substring(0, 3) == "HMP") return ClsBusinessPack.getHudwIdID(this._HeatProcessNo);
- else return ClsBusinessPack.getSmeltingID(this._HeatProcessNo);
- }
- /// <summary>
- /// 证设备位置为中文名称
- /// </summary>
- /// <param name="ObjectPos"></param>
- /// <returns></returns>
- private string AnaliseObjectPos(string ObjectPos)
- {
- try
- {
- ObjectPos = ObjectPos.Trim().ToUpper();
- if (string.IsNullOrEmpty(ObjectPos)) return "";
- if (!ObjectPos.Contains("_")) return "";
- string[] str = ObjectPos.Split(new string[] { "_" }, StringSplitOptions.None);
- str[0] = ClsBusinessPack.GetDeviceChineseName(str[0]);
- str[1] = ClsBusinessPack.analysPosName(ObjectPos);
- return str[0] + str[1] + "";
- }
- catch { }
- return "";
- }
- }
- /// <summary>
- /// 工位显示(主要为LF、RH、VD设备提供)
- /// </summary>
- public enum WORKBIT : int
- {
- /// <summary>
- /// 不变化
- /// </summary>
- NONE = 0,
- /// <summary>
- /// 切换到FRONT(1#小车位)
- /// </summary>
- FRONT = 1,
- /// <summary>
- /// 切换到BACK(2#小车位)
- /// </summary>
- BACK = 2,
- /// <summary>
- /// 切换到DEVICE(处理位)
- /// </summary>
- DEVICE = 3,
- /// <summary>
- /// 切换到IDLE(缓冲位)
- /// </summary>
- IDLE = 4
- }
- public enum DeviceCode : int
- {
- MIS = 20,
- MIS01 = 1,
- MIS02 = 2,
- HMP = 21,
- HMP01 = 1,
- HMP02 = 2,
- HMP03 = 3,
- BOF = 22,
- BOF01 = 1,
- BOF02 = 2,
- BOF03 = 3,
- BOF04 = 4,
- BOF05 = 5,
- CAS = 23,
- CAS01 = 1,
- CAS02 = 2,
- CAS03 = 3,
- CAS04 = 4,
- CAS05 = 5,
- LFS = 24,
- LFS01 = 1,
- LFS02 = 2,
- LFS03 = 3,
- RHS = 25,
- RHS01 = 1,
- RHS02 = 2,
- RHS03 = 3,
- CCM = 26,
- CCM01 = 1,
- CCM02 = 2,
- CCM03 = 3,
- CCM04 = 4,
- CCM05 = 5
- }
- }
|