protected override int InnerExecute() { string action = ""; CGlassDataProperties glassData = null; if (_values.ContainsKey("ACTION")) { action = _values["ACTION"]; switch (action) { case "READ_RECEIVED_GLASSDATA": ushort[] jobDataRaw = null; ushort[] jobDataSubRaw = null; jobDataRaw = _main.MelsecNetMultiWordRead(IW_JOB_DATA_FOR_UPSTREAM_BLOCK1); jobDataSubRaw = _main.MelsecNetMultiWordRead(IW_RECEIVED_JOB_DATA_SUB_BLOCK1); glassData = new CGlassDataProperties(jobDataRaw); break; case "READ_PROCESSING_GLASSDATA": if (_main.ProcessingGlassDatas.ContainsKey(_component.ControlName)) { glassData = _main.ProcessingGlassDatas[_component.ControlName]; } break; case "READ_SENTOUT_GLASSDATA": //jobDataRaw = _main.MelsecNetMultiWordRead(OW_JOB_DATA_FOR_UPSTREAM_BLOCK1, 64); //jobDataSubRaw = _main.MelsecNetMultiWordRead(OW_SENT_OUT_JOB_DATA_SUB_BLOCK1, 64); //glassData = new CGlassDataProperties(jobDataRaw); //break; //20161018 <TODO> 영역 데이타 확인 필요함. jobDataRaw = _main.MelsecNetMultiWordRead(OW_RECEIVED_JOB_DATA_BLOCK1, 64); jobDataSubRaw = _main.MelsecNetMultiWordRead(OW_RECEIVED_JOB_DATA_UPSTREAM_PATH_NO, 1); //<TODO> Int 1Word로 수정해야함. glassData = new CGlassDataProperties(jobDataRaw); break; default: break; } } if (glassData != null) { CSubject subject = CUIManager.Inst.GetData("frmGlassData"); Dictionary <string, string> data = CGlassDataProperties.GetGuiData(glassData); subject.SetValue("Data", data); subject.Notify(); } return(0); }
public override int Execute() { if (_main.ReceivedGlassDatas.ContainsKey(_component.ControlName) == false) { return(-1); } CGlassDataProperties glassData = _main.ReceivedGlassDatas[_component.ControlName]; List <int> receiveJobData = CGlassDataProperties.ConvertPLCData(glassData); List <int> receiveJobDataSub = new List <int>(); receiveJobDataSub.Add(1); //upstream path no receiveJobDataSub.Add(1); //total glass count _main.MelsecNetMultiWordWrite(OW_JOB_DATA_FOR_UPSTREAM_BLOCK1, receiveJobData); _main.MelsecNetMultiWordWrite(OW_RECEIVED_JOB_DATA_SUB_BLOCK1, receiveJobDataSub); CTimeout timeout = CTimeoutManager.GetTimeout(_component.ControlName, 2000); timeout.Begin(OB_RECEIVED_JOB_REPORT_UPSTREAMPATH1, _main.CONTROLATTRIBUTES.GetProperty(IB_RECEIVED_JOB_REPORT_REPLY_UPSTREAM_PATH1.ScanControlName, IB_RECEIVED_JOB_REPORT_REPLY_UPSTREAM_PATH1.ScanAttribute) as ITimeoutResource); _main.MelsecNetBitOnOff(OB_RECEIVED_JOB_REPORT_UPSTREAMPATH1, true); //if (CTimeout.WaitSync(timeout, 10)) //{ //if (returnCode == CIM_MODE_ACCEPT) //{ // _main.MelsecNetBitOnOff(OB_CIM_MODE, cimMode == CIM_MODE_CIM_ON); // CSubject subject = CUIManager.Inst.GetData("ucCimStatus"); // subject.SetValue("CIMMode", cimMode); // subject.Notify(); //} //} //else //{ // //에러:응답이 없다.. //} //딜레이 추가 _main.MelsecNetBitOnOff(OB_RECEIVED_JOB_REPORT_UPSTREAMPATH1, false); if (glassData != null) { CSubject subject = CUIManager.Inst.GetData("GlassInfoDisplay"); Dictionary <string, string> data = CGlassDataProperties.GetGuiData(glassData); subject.SetValue("Data", data); subject.Notify(); } return(0); }
protected override int InnerExecute() { int requestOption = 0; string glassID = ""; string glassCode = ""; if (_values.ContainsKey("REQ_OPTION") == false || _values.ContainsKey("GLS_CODE") == false || _values.ContainsKey("GLS_ID") == false) { return(-1); } int.TryParse(_values["REQ_OPTION"], out requestOption); glassCode = _values["GLS_CODE"]; glassID = _values["GLS_ID"]; List <int> requestID = new List <int>(); List <int> requestCode = new List <int>(); char[] temp = glassID.ToCharArray(); string hex = ""; for (int i = 0; i < temp.Length; i = i + 2) { if (temp.Length > i + 1) { hex += SmartDevice.UTILS.PLCUtils.DecToHex(((int)temp[i + 1]).ToString()).Substring(2, 2); } if (temp.Length > i) { hex += SmartDevice.UTILS.PLCUtils.DecToHex(((int)temp[i]).ToString()).Substring(2, 2); requestID.Add(int.Parse(SmartDevice.UTILS.PLCUtils.HexToDec(hex))); } hex = ""; } string glassCode1 = ""; string glassCode2 = ""; if (string.IsNullOrEmpty(glassCode) || glassCode == "0") { requestCode.Add(0); requestCode.Add(0); } else if (glassCode.Length <= 3) { requestCode.Add(0); requestCode.Add(int.Parse(glassCode)); } else { glassCode1 = glassCode.Substring(0, glassCode.Length - 3); glassCode2 = glassCode.Substring(glassCode.Length - 3, 3); requestCode.Add(int.Parse(glassCode1)); requestCode.Add(int.Parse(glassCode2)); } _main.MelsecNetWordWrite(OW_GLS_DATA_REQ_OPTION, requestOption); _main.MelsecNetMultiWordWrite(OW_GLS_DATA_REQ_GLASS_ID, requestID); _main.MelsecNetMultiWordWrite(OW_GLS_DATA_REQ_GLASS_CODE, requestCode); CTimeout timeout = CTimeoutManager.GetTimeout(_component.ControlName, 2000); timeout.Begin(OB_GLASS_DATA_REQUEST, _main.CONTROLATTRIBUTES.GetProperty(IB_GLASS_DATA_REQUEST_CONFIRM.ScanControlName, IB_GLASS_DATA_REQUEST_CONFIRM.ScanAttribute) as ITimeoutResource); _main.MelsecNetBitOnOff(OB_GLASS_DATA_REQUEST, true); if (CTimeout.WaitSync(timeout, 10)) { ushort[] receviedGlassData = _main.MelsecNetMultiWordRead(IW_GLASS_DATA_SEND); string requestAck = _main.MelsecNetWordRead(IW_GLASS_DATA_REQUEST_ACK); CGlassDataProperties glassData = new CGlassDataProperties(receviedGlassData); CSubject subject = CUIManager.Inst.GetData("GlassInfoDisplay"); subject.SetValue("Data", CGlassDataProperties.GetGuiData(glassData)); subject.Notify(); } else { //에러:응답이 없다.. } _main.MelsecNetBitOnOff(OB_GLASS_DATA_REQUEST, false); return(0); }