Example #1
0
        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);
        }
Example #2
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);
        }
Example #3
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);
        }