Exemplo n.º 1
0
 public override void OnStateChange(Cn.Youdundianzi.Core.Signal.IMonData mondata)
 {
     base.OnStateChange(mondata);
     CSignals sig = mondata.GetSignals(SignalType.XIAN);
     if (sig[5] == 0)
         OnFailure(new ExamResultMsg(ResultType.Xian, 5));
 }
Exemplo n.º 2
0
        virtual public void UpdateMonData()
        {
            mondata_old.Copy(mondata);
            mondata = CreateMonDate(signLen);

            ReadIO();

            if (g_jifenQueue.Count >= g_jifennum)
            {
                g_jifenQueue.RemoveAt(0);
            }
            g_jifenQueue.Add(mondata.GetSignals(SignalType.GAN));

            if (x_jifenQueue.Count >= max_x_jifennum)
            {
                x_jifenQueue.RemoveAt(0);
            }
            x_jifenQueue.Add(mondata.GetSignals(SignalType.XIAN));
            CSignals gsign = JiFen(g_jifenQueue.ToArray(), g_jifennum, SignalType.GAN, ganlen);
            CSignals xsign = XJiFen(x_jifenQueue.ToArray(), SignalType.XIAN, xianlen);

            mondata.SetSignals(SignalType.GAN, gsign);
            mondata.SetSignals(SignalType.XIAN, xsign);

            mondata_cur.Copy(mondata);
        }
Exemplo n.º 3
0
        public virtual void Notify(IMonData data)
        {
            CSignals g = data.GetSignals(SignalType.GAN);

            for (int i = 0; i < g.Length; i++)
            {
                try
                {
                    gan[i].Stat = g[i];
                }
                catch (NullReferenceException nilRefe)
                {
                }
            }

            CSignals x = data.GetSignals(SignalType.XIAN);

            for (int i = 0; i < x.Length; i++)
            {
                try
                {
                    xian[i].Stat = x[i];
                }
                catch (NullReferenceException nilRefe)
                {
                }
            }
        }
Exemplo n.º 4
0
        public virtual void Notify(IMonData data)
        {
            //杆信号
            CSignals g           = data.GetSignals(SignalType.GAN);
            string   strGanState = "杆:";

            for (int i = 0; i < g.Length; i++)
            {
                if (g[i] != -1)
                {
                    strGanState = strGanState + " " + g[i];
                }
                else
                {
                    strGanState = strGanState + " " + g[i];
                }
            }
            SetText(gan_label, strGanState);

            //线信号
            CSignals x            = data.GetSignals(SignalType.XIAN);
            string   strXianState = "线:";

            for (int i = 0; i < x.Length; i++)
            {
                if (x[i] != -1)
                {
                    strXianState = strXianState + " " + x[i];
                }
                else
                {
                    strXianState = strXianState + " " + x[i];
                }
            }
            SetText(xian_label, strXianState);

            //车信号
            CSignals c = data.GetSignals(SignalType.CHE);

            if (c[0] == 1)
            {
                SetText(che_label, "车:  前进");
            }
            if (c[1] == 1)
            {
                SetText(che_label, "车:  后退");
            }
            if (c[2] == 1)
            {
                SetText(che_label, "车:  停车");
            }
            if (c[3] == 1)
            {
                SetText(che_label, "车:  熄火");
            }
        }
Exemplo n.º 5
0
        public CJKYMonData(SignLength signLen)
        {
            GAN_LENGTH  = signLen.GAN_LENGTH;
            XIAN_LENGTH = signLen.XIAN_LENGTH;
            CHE_LENGTH  = signLen.CHE_LENGTH;

            Gan  = new CSignals(SignalType.GAN, GAN_LENGTH);
            Xian = new CSignals(SignalType.XIAN, XIAN_LENGTH);
            Che  = new CSignals(SignalType.CHE, CHE_LENGTH);
        }
Exemplo n.º 6
0
        protected CSignals JiFen(CSignals[] datas, int jfNum, SignalType type, uint signLen)
        {
            CSignals data = new CSignals(type, signLen);

            for (int i = 0; i < Math.Min(jfNum, datas.Length); i++)
            {
                for (int j = 0; j < data.Length; j++)
                {
                    data[j] = (sbyte)(data[j] | datas[i][j]);
                }
            }
            return(data);
        }
Exemplo n.º 7
0
        public void Notify(CMonData data)
        {
            CSignals g = data.GetSignals(SignalType.GAN);

            for (int i = 0; i < 5; i++)
            {
                gan[i].Stat = g[i];
            }

            CSignals x = data.GetSignals(SignalType.XIAN);

            for (int i = 0; i < 5; i++)
            {
                xian[i].Stat = x[i];
            }
        }
Exemplo n.º 8
0
        protected override void ReadIO()
        {
            IMonData mod       = mondata;
            sbyte    tmpreturn = 0;
            CSignals gs        = mod.GetSignals(SignalType.GAN);
            CSignals xs        = mod.GetSignals(SignalType.XIAN);
            CSignals cs        = mod.GetSignals(SignalType.CHE);

            for (int i = 0; i < readIOLoopTime; i++)
            {
                iorw.write(iowport, (byte)i);
                Thread.Sleep(lvbodelaytime);
                tmpreturn = (sbyte)iorw.read(iorport);
                if (i < ganlen)
                {
                    gs[i] = readbit(tmpreturn, (sbyte)ganpos);
                }
                if (i < xianlen)
                {
                    xs[i] = readbit(tmpreturn, (sbyte)xianpos);
                }
                if (i < chelen)
                {
                    cs[i] = readbit(tmpreturn, (sbyte)chepos);
                }
            }
            //信号处理
            sbyte[] garr = mod.GetSignals(SignalType.GAN).SignalArray;
            sbyte[] xarr = mod.GetSignals(SignalType.XIAN).SignalArray;
            sbyte[] carr = mod.GetSignals(SignalType.CHE).SignalArray;
            xarr[6] = garr[3];
            xarr[7] = garr[5];
            //取反
            mondata_qf(ref garr, adminQFGan);
            mondata_qf(ref xarr, adminQFXian);
            //管理员屏蔽
            mondata_adminpb(ref garr, adminPBGan);
            mondata_adminpb(ref xarr, adminPBXian);
            //屏蔽
            mondata_pb(ref carr, SignalType.CHE, PBChe);
            mondata_pb(ref garr, SignalType.GAN, PBGan);
            mondata_pb(ref xarr, SignalType.XIAN, PBXian);
        }
Exemplo n.º 9
0
        public void SetSignals(SignalType type, CSignals src)
        {
            switch (type)
            {
            case SignalType.GAN:
                Gan = src;
                break;

            case SignalType.XIAN:
                Xian = src;
                break;

            case SignalType.CHE:
                Che = src;
                break;

            default:
                break;
            }
        }
Exemplo n.º 10
0
        protected CSignals XJiFen(CSignals[] datas, SignalType type, uint signLen)
        {
            CSignals data = new CSignals(type, signLen);

            for (int i = 0; i < signLen; i++)
            {
                data[i] = datas[datas.Length - 1][i];
            }

            for (int j = 0; j < signLen; j++)
            {
                if (data[j] == 0)
                {
                    int sindex = datas.Length - x_jifennum;
                    if (sindex < 0)
                    {
                        sindex = 0;
                    }
                    for (int i = sindex; i < datas.Length; i++)
                    {
                        data[j] = (sbyte)(data[j] | datas[i][j]);
                    }
                }
                else if (data[j] == 1)
                {
                    int sindex = datas.Length - lx_jifennum;
                    if (sindex < 0)
                    {
                        sindex = 0;
                    }
                    for (int i = sindex; i < datas.Length; i++)
                    {
                        data[j] = (sbyte)(data[j] & datas[i][j]);
                    }
                }
            }
            return(data);
        }
Exemplo n.º 11
0
        private bool checkSignals()
        {
            IMonData   tempData = monitor.CurrData;
            SignLength sigLen   = monitor.SignalLength;
            CSignals   ganSig   = tempData.GetSignals(SignalType.GAN);

            for (int i = 0; i < sigLen.GAN_LENGTH; i++)
            {
                if (ganSig[i] == 0)
                {
                    return(false);
                }
            }
            CSignals xianSig = tempData.GetSignals(SignalType.XIAN);

            for (int i = 0; i < sigLen.XIAN_LENGTH; i++)
            {
                if (xianSig[i] == 0)
                {
                    return(false);
                }
            }
            return(true);
        }
Exemplo n.º 12
0
        public void Notify(Exam.Exam exam)
        {
            if (!exam.Passed)
            {
                //若要改变出错时模型车位置,请调整此处代码。
                //可再为每种ResultType添加switch(exam.Message.Index),
                //以细化针对不同杆线错误时,模型车的位置
                switch (exam.Message.TypeOfResult)
                {
                case ResultType.Gan:
                    che.SetWeizhi(gan[exam.Message.Index].X, gan[exam.Message.Index].Y);
                    break;

                case ResultType.Xian:
                    switch (exam.Message.Index)
                    {
                    case 0:
                    case 2:
                        che.SetWeizhi(xian[exam.Message.Index].X1, che.Y);
                        break;

                    case 1:
                    case 3:
                    case 4:
                        che.SetWeizhi(che.X, xian[exam.Message.Index].Y1);
                        break;
                    }
                    break;

                case ResultType.ZT:
                    che.SetWeizhi(che.X, che.Y);
                    break;

                case ResultType.XH:
                    che.SetWeizhi(che.X, che.Y);
                    break;

                case ResultType.LXC:
                    che.SetWeizhi(che.X, che.Y);
                    break;

                case ResultType.TimeOut:
                    che.SetWeizhi(che.X, che.Y);
                    break;

                default:
                    break;
                }
            }
            CMonData data = monitor.CurrData;
            CSignals g    = data.GetSignals(SignalType.GAN);

            for (int i = 0; i < 5; i++)
            {
                gan[i].Stat = g[i];
            }

            CSignals x = data.GetSignals(SignalType.XIAN);

            for (int i = 0; i < 5; i++)
            {
                xian[i].Stat = x[i];
            }

            if (this.picBoxModelBackGround.InvokeRequired)
            {
                NotifyDelegate doNotify = new NotifyDelegate(DoNotify);
                this.picBoxModelBackGround.Invoke(doNotify);
            }
            else
            {
                DoNotify();
            }
        }
Exemplo n.º 13
0
        public override void Notify(CMonData data)
        {
            if (monitor.Ready)
            {
                CSignals oldx = oldData.GetSignals(SignalType.XIAN);
                for (int i = 0; i < monitor.SignalLength.XIAN_LENGTH; i++)
                {
                    CSignals sig = data.GetSignals(SignalType.XIAN);
                    if (sig[i] != oldx[i])
                    {
                        SignalEvent handler;
                        if (sig[i] == 1)
                        {
                            handler = LeaveXianEvent;
                        }
                        else
                        {
                            handler = BlockXianEvent;
                        }
                        handler(this, new SignalEventArgs(SignalType.XIAN, i));
                    }
                }
                CSignals oldg = oldData.GetSignals(SignalType.GAN);
                for (int i = 0; i < monitor.SignalLength.GAN_LENGTH; i++)
                {
                    CSignals sig = data.GetSignals(SignalType.GAN);
                    if (sig[i] != oldg[i])
                    {
                        SignalEvent handler;
                        if (sig[i] == 0)
                        {
                            handler = HitGanEvent;
                        }
                        else
                        {
                            handler = ResetGanEvent;
                        }
                        handler(this, new SignalEventArgs(SignalType.GAN, i));
                    }
                }
                CSignals oldc = oldData.GetSignals(SignalType.CHE);
                for (int i = 0; i < monitor.SignalLength.CHE_LENGTH; i++)
                {
                    CSignals sig = data.GetSignals(SignalType.CHE);
                    if (sig[i] != sig[i])
                    {
                        if (sig[i] == 1)
                        {
                            EventHandler handler = CarStopEvent;
                            switch (i)
                            {
                            case 0:
                                handler = CarMoveForwardEvent;
                                break;

                            case 1:
                                handler = CarMoveBackEvent;
                                break;

                            case 2:
                                handler = CarStopEvent;
                                break;

                            case 3:
                                handler = CarFlameoutEvent;
                                break;
                            }
                            handler(this, new EventArgs());
                        }
                    }
                }
            }
            else
            {
                monitor.Ready = true;
            }
            oldData.Copy(data);
        }
Exemplo n.º 14
0
 public void Copy(IMonData src)
 {
     Gan  = src.GetSignals(SignalType.GAN);
     Xian = src.GetSignals(SignalType.XIAN);
     Che  = src.GetSignals(SignalType.CHE);
 }