Ejemplo n.º 1
0
 private void mondata_adminpb_l(ref CMonData mondata) //大车管理员信号屏蔽
 {
     for (int i = 0; i < mondata.xinhaocount; i++)
     {
         mondata.gan[i]  = (sbyte)(mondata.gan[i] | ((settings.BigCar.AdminPBGan >> i) & 1));//与取反位或可以直接赋值1
         mondata.xian[i] = (sbyte)(mondata.xian[i] | ((settings.BigCar.AdminPBXian >> i) & 1));
     }
 }
Ejemplo n.º 2
0
 private void mondata_qf_l(ref CMonData mondata)//大车信号取反
 {
     for (int i = 0; i < mondata.xinhaocount; i++)
     {
         mondata.gan[i]  = (sbyte)(mondata.gan[i] ^ ((settings.BigCar.AdminQFGan >> i) & 1));   //与取反位异或可以直接取反
         mondata.xian[i] = (sbyte)(mondata.xian[i] ^ ((settings.BigCar.AdminQFXian >> i) & 1)); //与取反位异或可以直接取反
     }
 }
Ejemplo n.º 3
0
        public CMonitor()
        {
            settings = (SignalSettings)Util.ModuleConfig.GetSettings(settings.GetType(), "signal.config");
            jifennum = settings.Jifennum;
            if (jifennum < 3 || jifennum > 100)
            {
                jifennum = 3;
            }
            mondata_s     = new CMonData();
            mondata_l     = new CMonData();
            mondata_s_cur = new CMonData();
            mondata_l_cur = new CMonData();
            mondata_s_old = new CMonData();
            mondata_l_old = new CMonData();
            jifenQueue_s  = new List <CMonData>(jifennum);
            jifenQueue_l  = new List <CMonData>(jifennum);
            mrevent       = new ManualResetEvent(false);
            mythread      = new Thread(Monitor);
            delaytime     = settings.Delaytime;
            lvbodelaytime = settings.Lvbodelaytime;
            regobj        = new ArrayList();
            lbgan         = new ulong[9];
            adminpb       = new CMonData();
            adminqf       = new CMonData();
            for (int i = 0; i < 9; i++)
            {
                lbgan[i] = 0;
            }
            Che_Type = CheType.SmallCar; //注意此处为public变量,赋值时会做一系列同步操作
            gan_l    = settings.BigCar.Gan;
            gan_s    = settings.SmallCar.Gan;
            xian_l   = settings.BigCar.Xian;
            xian_s   = settings.SmallCar.Xian;
            switch (Che_Type)
            {
            case CheType.SmallCar:
                che = settings.SmallCar.Che;
                break;

            case CheType.BigCar:
                che = settings.BigCar.Che;
                break;

            case CheType.Other:
                che = settings.SmallCar.Che;
                break;
            }
            che        = settings.SmallCar.Che;
            modarray_s = new CMonData[jifennum];
            modarray_l = new CMonData[jifennum];
            for (int i = 0; i < jifennum; i++)
            {
                modarray_s[i] = new CMonData();
                modarray_l[i] = new CMonData();
            }
        }
Ejemplo n.º 4
0
        public void Copy(IMonData isrc)
        {
            CMonData src = (CMonData)isrc;

            for (int i = 0; i < xinhaocount; i++)
            {
                this.gan[i]  = src.gan[i];
                this.xian[i] = src.xian[i];
                if (i < 4)
                {
                    this.che[i] = src.che[i];
                }
            }
        }
Ejemplo n.º 5
0
        //单库:小车4杆作为7线,小车6杆作为8线,大车4杆作为9线。
        // 套库:小车4杆作为小车7线,小车6杆作为小车8线,大车4杆作为9线。大车7线与小车公用,大车6杆作为大车8线。
        public void ReadIO(params IMonData[] data)
        {
            CMonData mod_s     = mondata_s;
            CMonData mod_l     = mondata_l;
            sbyte    tmpreturn = 0;

            for (int i = 0; i < 6; i++)
            {
                iorw.write(0x378, (byte)i);
                Thread.Sleep(lvbodelaytime);
                tmpreturn     = (sbyte)iorw.read(0x379);
                mod_s.gan[i]  = readbit(tmpreturn, (sbyte)gan_s);
                mod_s.xian[i] = readbit(tmpreturn, (sbyte)xian_s);
                mod_l.gan[i]  = readbit(tmpreturn, (sbyte)gan_l);
                mod_l.xian[i] = readbit(tmpreturn, (sbyte)xian_l);
                if (i < 4)
                {
                    mod_s.che[i] = readbit(tmpreturn, (sbyte)che);
                    mod_l.che[i] = readbit(tmpreturn, (sbyte)che);
                }
            }

            if (che_type == CheType.SmallCar)
            {
                //小车信号处理
                mod_s.xian[6] = mod_s.gan[3]; //小车4杆作为7线
                mod_s.gan[3]  = 1;
                mod_s.xian[7] = mod_s.gan[5]; //小车6杆作为8线
                mod_s.gan[5]  = 1;
                mod_s.xian[8] = mod_l.gan[3]; //大车4杆作为9线
                mod_l.gan[3]  = 1;
                mondata_qf_s(ref mod_s);      //取反
                mondata_adminpb_s(ref mod_s); //管理员信号屏蔽
                mondata_pb_s(ref mod_s);      //信号屏蔽
            }
            else
            {
                //大车信号处理
                mod_l.xian[6] = mod_s.gan[3]; //小车4杆作为7线
                mod_s.gan[3]  = 1;
                mod_l.xian[7] = mod_l.gan[5]; //大车6杆作为8线
                mod_l.gan[5]  = 1;
                mod_l.xian[8] = mod_l.gan[3]; //大车4杆作为9线
                mod_l.gan[3]  = 1;
                mondata_qf_l(ref mod_l);      //取反
                mondata_adminpb_l(ref mod_s); //管理员信号屏蔽
                mondata_pb_l(ref mod_s);      //信号屏蔽
            }
        }
Ejemplo n.º 6
0
        public bool Equals(IMonData isrc)
        {
            CMonData src = (CMonData)isrc;

            for (int i = 0; i < xinhaocount; i++)
            {
                if (this.xian[i] != src.xian[i] || this.gan[i] != src.gan[i])
                {
                    return(false);
                }
                if (i < 4)
                {
                    if (this.che[i] != src.che[i])
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }
Ejemplo n.º 7
0
 private void mondata_pb_l(ref CMonData mondata) //大车信号屏蔽
 {
     for (int i = 0; i < mondata.xinhaocount; i++)
     {
         if (((settings.BigCar.PBGan >> i) & 1) == 1)
         {
             mondata.gan[i] = -1;
         }
         if (((settings.BigCar.PBXian >> i) & 1) == 1)
         {
             mondata.xian[i] = -1;
         }
     }
     for (int i = 0; i < 4; i++)
     {
         if (((settings.BigCar.PBChe >> i) & 1) == 1)
         {
             mondata.che[i] = 0;
         }
     }
 }
Ejemplo n.º 8
0
        public void Notify(IMonData idata)
        {
            CMonData data = (CMonData)idata;

            //Log.WriteCMonData(data);

            for (int i = 0; i < data.che.Length; i++)
            {
                if (data.che[i] == 1)
                {
                    picBoxChe[i].BackColor = Color.Green;
                }
                else
                {
                    picBoxChe[i].BackColor = Color.Red;
                }
            }
            for (int i = 0; i < data.gan.Length; i++)
            {
                if (data.gan[i] == 1)
                {
                    picBoxGan[i].BackColor = Color.Green;
                }
                else
                {
                    picBoxGan[i].BackColor = Color.Red;
                }
            }
            for (int i = 0; i < data.xian.Length; i++)
            {
                if (data.xian[i] == 1)
                {
                    picBoxXian[i].BackColor = Color.Green;
                }
                else
                {
                    picBoxXian[i].BackColor = Color.Red;
                }
            }
        }
Ejemplo n.º 9
0
 private bool isequal(CMonData a, CMonData b) //判斷是否相等
 {
     if (a == null && b == null)
     {
         return(true);
     }
     if (a == null || b == null)
     {
         return(false);
     }
     for (int i = 0; i < 9; i++)
     {
         if (i < 6)
         {
             if ((a.gan[i] != b.gan[i]) || (a.xian[i] != b.xian[i]))
             {
                 return(false);
             }
             else
             {
                 if (i < 4)
                 {
                     if (a.che[i] != b.che[i])
                     {
                         return(false);
                     }
                 }
             }
         }
         else
         {
             if (a.xian[i] != b.xian[i])
             {
                 return(false);
             }
         }
     }
     return(true);
 }
Ejemplo n.º 10
0
        public void UpdateMonData()
        {
            mondata_s_old.Copy(mondata_s);
            mondata_l_old.Copy(mondata_l);
            for (int j = 0; j < mondata_s.xinhaocount; j++)
            {
                mondata_s.xian[j] = 0;
                mondata_l.xian[j] = 0;
                if (j < 6)
                {
                    mondata_s.gan[j] = 0;
                    mondata_l.gan[j] = 0;
                }
            }


            ReadIO();

            if (jifenQueue_s.Count >= jifennum)
            {
                jifenQueue_s.RemoveAt(0);
            }
            jifenQueue_s.Add(mondata_s);

            if (jifenQueue_l.Count >= jifennum)
            {
                jifenQueue_l.RemoveAt(0);
            }
            jifenQueue_l.Add(mondata_l);

            mondata_s = JiFen(jifenQueue_s.ToArray(), jifennum);
            mondata_l = JiFen(jifenQueue_l.ToArray(), jifennum);


            //for (int i = 0; i < jifennum; i++)
            //{
            //    readio(ref modarray_s[i], ref modarray_l[i]);
            //    for (int j = 0; j < mondata_s.xinhaocount; j++)
            //    {
            //        mondata_s.xian[j] = (sbyte)(mondata_s.xian[j] | modarray_s[i].xian[j]);
            //        mondata_l.xian[j] = (sbyte)(mondata_l.xian[j] | modarray_l[i].xian[j]);
            //        //if (j < 6)
            //        //{
            //        //    mondata_s.gan[j] = (sbyte)(mondata_s.gan[j] | modarray_s[i].gan[j]);
            //        //    mondata_l.gan[j] = (sbyte)(mondata_l.gan[j] | modarray_l[i].gan[j]);
            //        //}
            //    }
            //}

            //for (int i = 0; i < 6; i++)
            //{
            //    mondata_s.gan[i] = (sbyte)(modarray_s[jifennum - 1].gan[i] | modarray_s[jifennum - 2].gan[i] | modarray_s[jifennum - 3].gan[i]);
            //    mondata_l.gan[i] = (sbyte)(modarray_l[jifennum - 1].gan[i] | modarray_l[jifennum - 2].gan[i] | modarray_l[jifennum - 3].gan[i]);
            //}

            //for (int i = 0; i < 4; i++)
            //{
            //    mondata_s.che[i] = (sbyte)(modarray_s[jifennum - 1].che[i] & modarray_s[jifennum - 2].che[i] & modarray_s[jifennum - 3].che[i]);
            //}

            mondata_s_cur.Copy(mondata_s);
            mondata_l_cur.Copy(mondata_l);
            //Log.WriteCMonData(mondata_s_cur);
        }