예제 #1
0
파일: CMS.cs 프로젝트: ufjl0683/Center
        /// <summary>
        /// �]�wCMS���
        /// </summary>
        /// <param name="devNames"></param>
        /// <returns></returns>        
        protected override System.Collections.Hashtable setDisplay(RemoteInterface.HC.FetchDeviceData[] devNames, int maxSegId, MegType megType)
        {
            System.Collections.Hashtable displayht = new System.Collections.Hashtable();

            List<object> outputs = new List<object>();
            if (devNames == null || devNames.Length == 0) return displayht;

            foreach (RemoteInterface.HC.FetchDeviceData devName in devNames)
            {
                int distance = getDeviceDistance(devName.SegId, maxSegId);
                DevStartMile = devName.Mileage;
                DevLineID = devName.LineId;
                CMSDevName = devName.DevName;

                outputs = (List<object>)com.select(DBConnect.DataType.CmsCategory, Command.GetSelectCmd.getCMSCategory(Convert.ToInt32(DevRange["RULEID"]), (int)secType, devType.ToString(), distance, devName.DevName, megType.ToString(), ht["INC_LINEID"].ToString().Trim(),devName.Location,devName.LineId));
                foreach (object obj in outputs)
                {
                    List<object> output=new List<object>();
                    output.AddRange(new object[] { getPriority(), obj });
                    if (!displayht.Contains(devName.DevName))
                        displayht.Add(devName.DevName, output);
                    else if (devName.Location == "L")
                    {
                        displayht[devName.DevName] = output;
                    }
                }
            }
            return displayht;
        }
예제 #2
0
파일: CCTV.cs 프로젝트: ufjl0683/Center
 protected override System.Collections.Hashtable setDisplay(RemoteInterface.HC.FetchDeviceData[] devNames, int maxSegId, MegType megType)
 {
     System.Collections.Hashtable displayht = new System.Collections.Hashtable();
     foreach (RemoteInterface.HC.FetchDeviceData dev in devNames)
     {
         if (!displayht.ContainsKey(dev.DevName))
         {
             displayht.Add(dev.DevName, null);
         }
     }
     return displayht;
 }
예제 #3
0
파일: CMS.cs 프로젝트: ufjl0683/Center
        /// <summary>
        /// �]�wCMS���
        /// </summary>
        /// <param name="devNames"></param>
        /// <returns></returns>        
        protected override System.Collections.Hashtable setDisplay(RemoteInterface.HC.FetchDeviceData[] devNames, int maxSegId, MegType megType)
        {
            System.Collections.Hashtable displayht = new System.Collections.Hashtable();

            List<object> outputs = new List<object>();
            if (devNames == null) return displayht;

            foreach (RemoteInterface.HC.FetchDeviceData devName in devNames)
            {
                int distance = getDeviceDistance(devName.SegId, maxSegId);

                outputs = (List<object>)com.select(DBConnect.DataType.CmsCategory, Command.GetSelectCmd.getCMSCategory(Convert.ToInt32(DevRange["RULEID"]), (int)secType, devType.ToString(), distance, devName.DevName, megType.ToString(), ht["INC_LINEID"].ToString().Trim()));
                foreach (object obj in outputs)
                {
                    List<object> output=new List<object>();
                    output.AddRange(new object[] { getPriority(), obj });
                    displayht.Add(devName.DevName, output);
                }
            }
            return displayht;
        }
예제 #4
0
파일: LCS.cs 프로젝트: ufjl0683/Center
        protected override System.Collections.Hashtable setDisplay(RemoteInterface.HC.FetchDeviceData[] devNames, int maxSegId, MegType megType)
        {
            if (tunnel == null) return null;
            com.select(DBConnect.DataType.Tunnel, Command.GetSelectCmd.getTunnelData(tunnel.Id, tunnel.Direction));

            System.Collections.Hashtable displayht = new System.Collections.Hashtable();

            List<object> outputs = new List<object>();
            if (devNames == null) return displayht;
            RemoteInterface.HC.I_HC_FWIS hobj = EasyClient.getHost();

            //����:0, ��:2, ��:1  ��:3 , ��:4
            //int laneCount = Convert.ToInt32(ht["LANE_COUNT"]);
            int laneCount = 2;
            byte[] laneNearMeg = getBlockageMessage(laneCount, ht["INC_BLOCKAGE"].ToString());  //���D�Ƽg����2���D
            byte[] laneMiddleMeg = new byte[laneCount];

            if (laneNearMeg[0] == (byte)LCSLight.down && laneNearMeg[1] == (byte)LCSLight.forbid)
            {
                laneMiddleMeg[0] = laneNearMeg[0];
                laneMiddleMeg[1] = (byte)LCSLight.leftDown;
            }
            else if (laneNearMeg[0] == 2 && laneNearMeg[1] == 1)
            {
                laneMiddleMeg[0] = (byte)LCSLight.rightDown;
                laneMiddleMeg[1] = laneNearMeg[1];
            }
            else
            {
                laneMiddleMeg = laneNearMeg;
            }

            for (int i = 0; i < laneCount; i++)
            {
                if (isReturnFlash)
                    laneMiddleMeg[i] += 4;
                if (isEventFlash)
                    laneNearMeg[i] += 4;
            }

            for(int i=0;i<devNames.Length;i++)
            {
                System.Data.DataSet DS = hobj.getSendDs("LCS", "set_ctl_sign");

                DS.Tables[0].Rows[0]["sign_cnt"] = Convert.ToByte(laneCount);

                byte CommInside = 0;
                byte CommOutside = 0;
                if (i < n_device)
                {
                    CommInside=laneMiddleMeg[0];
                    CommOutside = laneMiddleMeg[1];
                }
                else
                {
                    CommInside = laneNearMeg[0];
                    CommOutside = laneNearMeg[1];
                }
                //�����D
                System.Data.DataRow DShow = DS.Tables[1].NewRow();
                DShow["sign_no"] = Convert.ToByte(0);
                DShow["sign_status"] = CommInside;
                DS.Tables[1].Rows.Add(DShow);
                //�~���D
                DShow = DS.Tables[1].NewRow();
                DShow["sign_no"] = Convert.ToByte(1);
                DShow["sign_status"] = CommOutside;
                DS.Tables[1].Rows.Add(DShow);
                DS.AcceptChanges();

                List<object> output = new List<object>();
                output.AddRange(new object[] { getPriority(), new RemoteInterface.HC.LCSOutputData(DS) });
                displayht.Add(devNames[i].DevName, output);
            }
            return displayht;
        }
예제 #5
0
파일: ADevice.cs 프로젝트: ufjl0683/Center
 /// <summary>
 /// �]�w�ѭԨƥ���ܤ��e
 /// </summary>
 /// <param name="devNames">�n��ܤ��]��</param>
 /// <param name="maxSegId">�̻���q���s�X</param>
 /// <returns>�]�ƹ�I���e</returns>
 protected virtual System.Collections.Hashtable setWEADisplay(RemoteInterface.HC.FetchDeviceData[] devNames, int maxSegId)
 {
     megType = getNongeneralMsgType(degree, Convert.ToInt32(ht["INC_CONGESTION"]));
     //this.serMeg.setServerMeg(string.Format("�ƥ�T�����A:{0}", megType.ToString()));
     return setDisplay(devNames, maxSegId, megType);
 }
예제 #6
0
파일: ADevice.cs 프로젝트: ufjl0683/Center
 /// <summary>
 /// �]�w�@��ƥ���ܤ��e
 /// </summary>
 /// <param name="devNames">�n��ܤ��]��</param>
 /// <param name="maxSegId">�̻���q���s�X</param>
 /// <returns>�]�ƹ�I���e</returns>
 protected virtual System.Collections.Hashtable setGENDisplay(RemoteInterface.HC.FetchDeviceData[] devNames, int maxSegId,string direction)
 {
     int unit_Start = findUnitSection(Convert.ToInt32(ht["FROM_MILEPOST1"]), direction);
     megType = getGeneralMsgType(degree, Convert.ToInt32(ht["INC_CONGESTION"]), unit_Start,direction);
     //this.serMeg.setServerMeg(string.Format("�ƥ�T�����A:{0}", megType.ToString()));
     return setDisplay(devNames, maxSegId, megType);
 }
예제 #7
0
파일: ADevice.cs 프로젝트: ufjl0683/Center
 /// <summary>
 /// �]�w�Ҧ���ܤ��e
 /// </summary>
 /// <param name="devNames">�n��ܤ��]��</param>
 /// <param name="maxSegId">�̻���q���s�X</param>
 /// <param name="megType">���o�@��ƥ�T�����A</param>
 /// <returns>�]�ƹ�I���e</returns>
 protected virtual System.Collections.Hashtable setDisplay(RemoteInterface.HC.FetchDeviceData[] devNames, int maxSegId, MegType megType)
 {
     return null;
 }
예제 #8
0
파일: CSLS.cs 프로젝트: ufjl0683/Center
        protected override System.Collections.Hashtable setDisplay(RemoteInterface.HC.FetchDeviceData[] devNames, int maxSegId, MegType megType)
        {
            System.Collections.Hashtable displayht = new System.Collections.Hashtable();
            //if (devNames.Length == 0||Math.Abs(devNames[0].Mileage - int.Parse(ht["FROM_MILEPOST1"].ToString())) > getValidRangle()) return displayht;
            //List<object> outputs = new List<object>();
            if (devNames == null || devNames.Length == 0) return displayht;
            RemoteInterface.HC.I_HC_FWIS hobj = EasyClient.getHost();
            com.select(DBConnect.DataType.CSLS, Command.GetSelectCmd.getSectionSpeed(ht["ORIGINAL_INC_LOCATION"].ToString()));

            int ColNum;

            if (type == CategoryType.GEN)
            {
                switch (degree)
                {
                    case Degree.L:
                        ColNum = 1;
                        break;
                    case Degree.M:
                        ColNum = 2;
                        break;
                    case Degree.H:
                        ColNum = 3;
                        break;
                    case Degree.S:
                        ColNum = 4;
                        break;
                    default:
                        ColNum = 1;
                        break;
                }
            }
            else
            {
                ColNum = Convert.ToInt32(ht["INC_CONGESTION"]);
            }
            string cmd = string.Format("Select SuggesSpeeD{0} From {1}.{2} csls,{1}.{3} rule where AlarmClass = {4} and csls.RuleID = rule.RuleID and rule.RUNING = 'Y';"
                    , ColNum, RSPGlobal.GlobaSchema, DBConnect.DB2TableName.tblRSPCSLSSpeed, DBConnect.DB2TableName.tblRSPRule, ht["INC_NAME"]);
            System.Data.DataTable DT = com.Select(cmd);
            if (DT != null && DT.Rows.Count > 0)
            {
                maxSpeed = Convert.ToInt32(DT.Rows[0][0]);
                if (maxSpeed == -1)
                {
                    return displayht;
                }
            }
            cmd = string.Format("Select * from {0}.{1} csls,{0}.{2} rule where csls.RuleID = rule.ruleid and rule.runing = 'Y' and SuggesSpeed = {3};"
                , RSPGlobal.GlobaSchema, DBConnect.DB2TableName.tblIIPCSLSParam, DBConnect.DB2TableName.tblRSPRule, maxSpeed);

            DT = com.Select(cmd);
            if (DT.Rows.Count < 1)
            {
                throw new Exception("not Mapping CSLS Speed");
            }
            System.Data.DataRow dr = DT.Rows[0];
            List<int> SpeedList = new List<int>();
            SpeedList.Add(Convert.ToInt32(dr[UPStream1]));
            SpeedList.Add(Convert.ToInt32(dr[UPStream2]));
            SpeedList.Add(Convert.ToInt32(dr[UPStream3]));
            SpeedList.Add(Convert.ToInt32(dr[UPStream4]));
            SpeedList.Add(Convert.ToInt32(dr[UPStream5]));

            range = Convert.ToInt32(dr[RangerLimit]) * 1000;
            int i = 0;
            int SetSpped = 90;

            int SectionMaxSpeed = 90;
            if (devNames.Length > 0)
            {
                cmd = string.Format("Select sec.MaxSpeed From {0}.{1} sec, {0}.{2} cfg where sec.sectionid = cfg.sectionID and cfg.DeviceName = '{3}';"
                            , RSPGlobal.GlobaSchema, DBConnect.DB2TableName.tblGroupSection, DBConnect.DB2TableName.tblDeviceConfig, devNames[0].DevName);
                DT = com.Select(cmd);
                if (DT.Rows.Count > 0)
                {
                    SectionMaxSpeed = (int)DT.Rows[0][0];
                }
            }

            for (int j = 0; j < devNames.Length;j++ )
            {
                if (maxSegId != 99 && (int)ht["INC_NAME"] == 31 && ((devNames[j].Mileage > Convert.ToInt32(ht["FROM_MILEPOST1"])
                    && devNames[j].Mileage < Convert.ToInt32(ht["TO_MILEPOST1"])) ||(devNames[j].Mileage < Convert.ToInt32(ht["FROM_MILEPOST1"])
                    && devNames[j].Mileage > Convert.ToInt32(ht["TO_MILEPOST1"])) ))
                {
                    SetSpped = 255;//����
                }

                else if (devNames[j].Location == "D")//�U��
                {
                    cmd = string.Format("Select sec.MaxSpeed From {0}.{1} sec, {0}.{2} cfg where sec.sectionid = cfg.sectionID and cfg.DeviceName = '{3}';"
                        , RSPGlobal.GlobaSchema, DBConnect.DB2TableName.tblGroupSection, DBConnect.DB2TableName.tblDeviceConfig, devNames[j].DevName);
                    DT = com.Select(cmd);
                    if (DT.Rows.Count > 0)
                    {
                        SetSpped = (int)DT.Rows[0][0];
                    }
                }
                else
                {
                    if (maxSegId != -99
                        && ((j == 0 && (Math.Abs(devNames[j].Mileage - Convert.ToInt32(ht["FROM_MILEPOST1"])) > range
                            && Math.Abs(devNames[j].Mileage - Convert.ToInt32(ht["TO_MILEPOST1"])) > range))
                        || (j > 0 && devNames[j-1].Location != "D" && Math.Abs(devNames[j].Mileage - devNames[j - 1].Mileage) > range)))
                        break;

                    if (maxSegId == -99) //�d�� �̧C�t��
                    {
                        SetSpped = SpeedList[0];
                    }
                    else                //�d��~
                    {
                        if (i >= SpeedList.Count || SpeedList[i].Equals(-1))
                        {
                            break;
                        }
                        else
                        {
                            if (SectionMaxSpeed < SpeedList[i])
                                SetSpped = SectionMaxSpeed;
                            else
                                SetSpped = SpeedList[i];
                        }
                    }
                    i++;
                }

                System.Data.DataSet DS = hobj.getSendDs("CSLS", "set_speed");
                DS.Tables[0].Rows[0]["speed"] = SetSpped;
                DS.AcceptChanges();
                List<object> output = new List<object>();
                output.AddRange(new object[] { SetSpped / 10, new RemoteInterface.HC.CSLSOutputData(DS) });
                if (!displayht.Contains(devNames[j].DevName))
                {
                    displayht.Add(devNames[j].DevName, output);
                }

            }

            #region OLD Function
            //if (maxSegId == -99)
            //{
            //    foreach (RemoteInterface.HC.FetchDeviceData devName in devNames)
            //    {
            //        System.Data.DataSet DS = hobj.getSendDs("CSLS", "set_speed");
            //        if (devName.minSpd > minSpeed)
            //            DS.Tables[0].Rows[0]["speed"] = devName.minSpd;  //�t��
            //        else
            //            DS.Tables[0].Rows[0]["speed"] = minSpeed;  //�t��
            //        DS.AcceptChanges();
            //        List<object> output = new List<object>();
            //        output.AddRange(new object[] { (int)(Convert.ToInt32(DS.Tables[0].Rows[0]["speed"]) / 10), new RemoteInterface.HC.CSLSOutputData(DS) });
            //        displayht.Add(devName.DevName, output);
            //    }
            //}
            //else
            //{
            //    int speed = minSpeed - decrease;
            //    foreach (RemoteInterface.HC.FetchDeviceData devName in devNames)
            //    {
            //        System.Data.DataSet DS = hobj.getSendDs("CSLS", "set_speed");
            //        if (range == -1)
            //        {
            //            if (speed < maxSpeed) speed += decrease;
            //            if (devName.maxSpd >= speed)
            //                DS.Tables[0].Rows[0]["speed"] = speed;  //�t��
            //            else
            //                DS.Tables[0].Rows[0]["speed"] = devName.maxSpd;
            //        }
            //        else
            //        {
            //            if (devName.SegId < range)
            //            {
            //                if (devName.maxSpd >= speed)
            //                {
            //                    if (speed < maxSpeed) speed += decrease;
            //                    DS.Tables[0].Rows[0]["speed"] = speed;  //�t��
            //                }
            //                else
            //                    DS.Tables[0].Rows[0]["speed"] = devName.maxSpd;
            //            }
            //            else
            //            {
            //                if (devName.maxSpd >= speed)
            //                {
            //                    DS.Tables[0].Rows[0]["speed"] = maxSpeed;  //�t��
            //                }
            //                else
            //                    DS.Tables[0].Rows[0]["speed"] = devName.maxSpd;
            //            }
            //        }
            //        DS.AcceptChanges();
            //        List<object> output = new List<object>();
            //        output.AddRange(new object[] { (int)(Convert.ToInt32(DS.Tables[0].Rows[0]["speed"]) / 10), new RemoteInterface.HC.CSLSOutputData(DS) });
            //        displayht.Add(devName.DevName, output);
            //    }
            //}
            #endregion
            return displayht;
        }
예제 #9
0
파일: LCS.cs 프로젝트: ufjl0683/Center
        protected override System.Collections.Hashtable setDisplay(RemoteInterface.HC.FetchDeviceData[] devNames, int maxSegId, MegType megType)
        {
            System.Collections.Hashtable displayht = new System.Collections.Hashtable();
            int mile_s = Convert.ToInt32(ht["FROM_MILEPOST1"]);
            int mile_e = Convert.ToInt32(ht["TO_MILEPOST1"]);
            if (devNames == null)
                return displayht;
            if (tunnel == null && devNames != null && devNames.Length>0)
            {
                tunnel = TunnelData.getBuilder().tunList.Find(new EventObj(devNames[0].LineId, devNames[0].Direction, devNames[0].Mileage));
            }

            if (tunnel == null && mile_s != mile_e)
            {
                for (int i = 1; i < devNames.Length; i++)
                {
                    tunnel = TunnelData.getBuilder().tunList.Find(new EventObj(devNames[i].LineId, devNames[i].Direction, devNames[i].Mileage));
                    if (tunnel != null)
                        break;
                }
            }

            if (tunnel == null) return displayht;

            com.select(DBConnect.DataType.Tunnel, Command.GetSelectCmd.getTunnelData(tunnel.Id, tunnel.Direction));

            List<object> outputs = new List<object>();
            if (devNames == null || devNames.Length == 0) return displayht;
            RemoteInterface.HC.I_HC_FWIS hobj = EasyClient.getHost();

            //string direction = Convert.ToString(ht["INC_DIRECTION"]).Trim();

            //����:0, ��:2, ��:1  ��:3 , ��:4
            //int laneCount = Convert.ToInt32(ht["LANE_COUNT"]);
            int laneCount = 2;
            byte[] laneNearMeg = getBlockageMessage(laneCount, ht["INC_BLOCKAGE"].ToString());  //���D�Ƽg����2���D
            byte[] laneMiddleMeg = new byte[laneCount];

            if (laneNearMeg[0] == (byte)LCSLight.down && laneNearMeg[1] == (byte)LCSLight.forbid)
            {
                laneMiddleMeg[0] = laneNearMeg[0];
                laneMiddleMeg[1] = (byte)LCSLight.leftDown;
            }
            else if (laneNearMeg[0] == 2 && laneNearMeg[1] == 1)
            {
                laneMiddleMeg[0] = (byte)LCSLight.rightDown;
                laneMiddleMeg[1] = laneNearMeg[1];
            }
            else
            {
                laneMiddleMeg = laneNearMeg;
            }

            for (int i = 0; i < laneCount; i++)
            {
                if (isReturnFlash)
                    laneMiddleMeg[i] += 4;
                else if (isEventFlash)
                    laneNearMeg[i] += 4;
            }

            bool UpOne = false;
            int segID =0;
            if (devNames.Length > 0)
                segID = devNames[devNames.Length -1].SegId;
            for (int i = devNames.Length-1; i >= 0; i--)
            {
                if (UpOne)
                    break;
                System.Data.DataSet DS = hobj.getSendDs("LCS", "set_ctl_sign");

                DS.Tables[0].Rows[0]["sign_cnt"] = Convert.ToByte(laneCount);

                byte CommInside = 0;
                byte CommOutside = 0;

                if (type == CategoryType.OBS)
                {
                    if (UpDown(tunnel.StartMileage, devNames[i].Mileage, devNames[i].Direction))
                    {
                        CommInside = laneNearMeg[0];
                        CommOutside = laneNearMeg[1];
                    }
                    else
                    {
                        CommInside = laneMiddleMeg[0];
                        CommOutside = laneMiddleMeg[1];
                        UpOne = true;
                    }
                }
                else
                {
                    if (laneNearMeg[0] % 4 == (byte)LCSLight.forbid && laneNearMeg[1] % 4 == (byte)LCSLight.forbid)
                    {
                        if (devNames[i].SegId != segID)
                            break;
                        if (UpDown(mile_s, devNames[i].Mileage,devNames[i].Direction))
                        {
                            //CommInside = (byte)LCSLight.down;
                            //CommOutside = (byte)LCSLight.down;
                            CommInside = laneNearMeg[0];
                            CommOutside = laneNearMeg[1];
                        }
                        else
                        {
                            CommInside = laneNearMeg[0];
                            CommOutside = laneNearMeg[1];
                        }
                    }
                    else
                    {
                        if (UpDown(mile_s, devNames[i].Mileage, devNames[i].Direction))
                        {
                            //CommInside = (byte)LCSLight.down;
                            //CommOutside = (byte)LCSLight.down;
                            CommInside = laneNearMeg[0];
                            CommOutside = laneNearMeg[1];
                        }
                        else if (UpDown(tunnel.StartMileage, devNames[i].Mileage, devNames[i].Direction))
                        {
                            //if (i == 0 || (tunnel.UpstreamLocation != null && UpDown(devNames[i - 1].Mileage, tunnel.UpstreamLocation.EndMileage, devNames[i -1].Direction)))
                            if (i == 0 || (!UpDown(tunnel.StartMileage,devNames[i-1].Mileage,devNames[i].Direction) && Math.Abs(tunnel.StartMileage - devNames[i -1].Mileage) > 200))
                            {
                                CommInside = laneMiddleMeg[0];
                                CommOutside = laneMiddleMeg[1];
                                UpOne = true;
                            }
                            else
                            {
                                CommInside = laneNearMeg[0];
                                CommOutside = laneNearMeg[1];
                            }
                        }
                        else
                        {
                            if (Math.Abs(tunnel.StartMileage - devNames[i].Mileage) < 200)
                            {
                                CommInside = laneMiddleMeg[0];
                                CommOutside = laneMiddleMeg[1];
                                UpOne = true;
                            }
                            else
                            {
                                break;
                            }
                        }
                    }
                }

                //�����D
                System.Data.DataRow DShow = DS.Tables[1].NewRow();
                DShow["sign_no"] = Convert.ToByte(0);
                DShow["sign_status"] = CommInside;
                DS.Tables[1].Rows.Add(DShow);
                //�~���D
                DShow = DS.Tables[1].NewRow();
                DShow["sign_no"] = Convert.ToByte(1);
                DShow["sign_status"] = CommOutside;
                DS.Tables[1].Rows.Add(DShow);
                DS.AcceptChanges();

                List<object> output = new List<object>();
                output.AddRange(new object[] { getPriority(), new RemoteInterface.HC.LCSOutputData(DS) });
                displayht.Add(devNames[i].DevName, output);
            }
            return displayht;
        }
예제 #10
0
 public static ICommand getPriority(byte alarmclass,MegType type)
 {
     SelectCommand com = new SelectCommand();
     com.FiledNames += string.Format(" * ");
     com.TblNames += string.Format(" {0}.{1} ", schema, DB2TableName.tblRspPriority);
     com.WhereCon += string.Format("     alarmclass={0} and level='{1}' ",alarmclass,type.ToString());
     return com;
 }
예제 #11
0
파일: MAS.cs 프로젝트: ufjl0683/Center
        protected override System.Collections.Hashtable setDisplay(RemoteInterface.HC.FetchDeviceData[] devNames, int maxSegId, MegType megType)
        {
            string cmd = string.Format("Select mas.maslane1,mas.masLane2,mas.MASLANE3,cfg.g_code_id_new from {0}.{1} mas , {0}.{2} rule ,{0}.{4} cfg "
                + " where mas.ALARMCLASS = {3} and mas.RULEID = rule.RULEID and rule.RUNING = 'Y' and cfg.alarmclass = mas.alarmclass;"
                , RSPGlobal.GlobaSchema, DBConnect.DB2TableName.tblRSPDefaultMessMAS, DBConnect.DB2TableName.tblRSPRule, ht["INC_NAME"],DBConnect.DB2TableName.tblSysAlarmConfig);
            System.Data.DataTable DT = com.Select(cmd);
            if (DT == null || DT.Rows.Count == 0)
                return null;
            System.Data.DataRow MASdr = DT.Rows[0];

            int g_code_id = (int)MASdr[3];

            System.Collections.Hashtable displayht = new System.Collections.Hashtable();
            //if (devNames.Length == 0||Math.Abs(devNames[0].Mileage - int.Parse(ht["FROM_MILEPOST1"].ToString())) > getValidRangle()) return displayht;
            //List<object> outputs = new List<object>();
            if (devNames == null || devNames.Length == 0) return displayht;
            RemoteInterface.HC.I_HC_FWIS hobj = EasyClient.getHost();
            com.select(DBConnect.DataType.CSLS, Command.GetSelectCmd.getSectionSpeed(ht["ORIGINAL_INC_LOCATION"].ToString()));

            int ColNum;

            if (type == CategoryType.GEN)
            {
                switch (degree)
                {
                    case Degree.L:
                        ColNum = 1;
                        break;
                    case Degree.M:
                        ColNum = 2;
                        break;
                    case Degree.H:
                        ColNum = 3;
                        break;
                    case Degree.S:
                        ColNum = 4;
                        break;
                    default:
                        ColNum = 1;
                        break;
                }
            }
            else
            {
                ColNum = Convert.ToInt32(ht["INC_CONGESTION"]);
            }
            cmd = string.Format("Select SuggesSpeeD{0} From {1}.{2} csls,{1}.{3} rule where AlarmClass = {4} and csls.RuleID = rule.RuleID and rule.RUNING = 'Y';"
                    , ColNum, RSPGlobal.GlobaSchema, DBConnect.DB2TableName.tblRSPCSLSSpeed, DBConnect.DB2TableName.tblRSPRule, ht["INC_NAME"]);
            DT = com.Select(cmd);
            if (DT != null && DT.Rows.Count > 0)
            {
                maxSpeed = Convert.ToInt32(DT.Rows[0][0]);
            }
            cmd = string.Format("Select * from {0}.{1} csls,{0}.{2} rule where csls.RuleID = rule.ruleid and rule.runing = 'Y' and SuggesSpeed = {3};"
                , RSPGlobal.GlobaSchema, DBConnect.DB2TableName.tblIIPCSLSParam, DBConnect.DB2TableName.tblRSPRule, maxSpeed);

            DT = com.Select(cmd);
            if (DT.Rows.Count < 1)
            {
                throw new Exception("not Mapping CSLS Speed");
            }
            System.Data.DataRow dr = DT.Rows[0];
            List<int> SpeedList = new List<int>();
            SpeedList.Add(Convert.ToInt32(dr[UPStream1]));
            SpeedList.Add(Convert.ToInt32(dr[UPStream2]));
            SpeedList.Add(Convert.ToInt32(dr[UPStream3]));
            SpeedList.Add(Convert.ToInt32(dr[UPStream4]));
            SpeedList.Add(Convert.ToInt32(dr[UPStream5]));

            range = Convert.ToInt32(dr[RangerLimit]) * 1000;
            int i = 0;
            int SetSpped = 90;
            for (int j = 0; j < devNames.Length;j++ )
            {
                if (devNames[j].Location == "D")
                {
                    cmd = string.Format("Select sec.MaxSpeed From {0}.{1} sec, {0}.{2} cfg where sec.sectionid = cfg.sectionID and cfg.DeviceName = '{3}';"
                        , RSPGlobal.GlobaSchema, DBConnect.DB2TableName.tblGroupSection, DBConnect.DB2TableName.tblDeviceConfig, devNames[j].DevName);
                    DT = com.Select(cmd);
                    if (DT.Rows.Count > 0)
                    {
                        SetSpped = (int)DT.Rows[0][0];
                    }
                }
                else
                {
                    if (maxSegId != -99
                        && ((j == 0 && (Math.Abs(devNames[j].Mileage - Convert.ToInt32(ht["FROM_MILEPOST1"])) > range
                            && Math.Abs(devNames[j].Mileage - Convert.ToInt32(ht["TO_MILEPOST1"])) > range))
                        || (j > 0 && devNames[j - 1].Location != "D" && Math.Abs(devNames[j].Mileage - devNames[j - 1].Mileage) > range)))
                        break;

                    if (maxSegId == -99) //範圍內 最低速限
                    {
                        SetSpped = SpeedList[0];
                    }
                    else                //範圍外
                    {
                        if (i >= SpeedList.Count || SpeedList[i].Equals(-1))
                        {
                            break;
                        }
                        else
                        {
                            SetSpped = SpeedList[i];
                        }
                    }
                    i++;
                }

                byte[] landObj = new byte[] { 1, 2, 3 };
                object[] obj = new object[3];

                for (int k = 0; k < 3; k++)
                {
                    if (MASdr[k].Equals("S"))
                    {
                        obj[k] = SetSpped;
                    }
                    else
                    {
                        obj[k] = new RemoteInterface.HC.CMSOutputData(0, g_code_id, 0, string.Empty, new byte[] { });
                    }
                }

                //List<object> output = new List<object>();

                //output.AddRange(new object[] { SetSpped / 10, new RemoteInterface.HC.MASOutputData(landObj,obj) });
                displayht.Add(devNames[j].DevName, new RemoteInterface.HC.MASOutputData(landObj, obj));

            }

            return displayht;
        }
예제 #12
0
파일: CSLS.cs 프로젝트: ufjl0683/Center
        protected override System.Collections.Hashtable setDisplay(RemoteInterface.HC.FetchDeviceData[] devNames, int maxSegId, MegType megType)
        {
            System.Collections.Hashtable displayht = new System.Collections.Hashtable();
            if (devNames.Length == 0||Math.Abs(devNames[0].Mileage - int.Parse(ht["FROM_MILEPOST1"].ToString())) > getValidRangle()) return displayht;
            List<object> outputs = new List<object>();
            if (devNames == null) return displayht;
            RemoteInterface.HC.I_HC_FWIS hobj = EasyClient.getHost();

            com.select(DBConnect.DataType.CSLS, Command.GetSelectCmd.getSectionSpeed(ht["INC_LOCATION"].ToString()));

            if (maxSegId == -99)
            {
                foreach (RemoteInterface.HC.FetchDeviceData devName in devNames)
                {
                    System.Data.DataSet DS = hobj.getSendDs("CSLS", "set_speed");
                    if (devName.minSpd > minSpeed)
                        DS.Tables[0].Rows[0]["speed"] = devName.minSpd;  //�t��
                    else
                        DS.Tables[0].Rows[0]["speed"] = minSpeed;  //�t��
                    DS.AcceptChanges();
                    List<object> output = new List<object>();
                    output.AddRange(new object[] { (int)(Convert.ToInt32(DS.Tables[0].Rows[0]["speed"]) / 10), new RemoteInterface.HC.CSLSOutputData(DS) });
                    displayht.Add(devName.DevName, output);
                }
            }
            else
            {
                int speed = minSpeed - decrease;
                foreach (RemoteInterface.HC.FetchDeviceData devName in devNames)
                {
                    System.Data.DataSet DS = hobj.getSendDs("CSLS", "set_speed");
                    if (range == -1)
                    {
                        if (speed < maxSpeed) speed += decrease;
                        if (devName.maxSpd >= speed)
                            DS.Tables[0].Rows[0]["speed"] = speed;  //�t��
                        else
                            DS.Tables[0].Rows[0]["speed"] = devName.maxSpd;
                    }
                    else
                    {
                        if (devName.SegId < range)
                        {
                            if (devName.maxSpd >= speed)
                            {
                                if (speed < maxSpeed) speed += decrease;
                                DS.Tables[0].Rows[0]["speed"] = speed;  //�t��
                            }
                            else
                                DS.Tables[0].Rows[0]["speed"] = devName.maxSpd;
                        }
                        else
                        {
                            if (devName.maxSpd >= speed)
                            {
                                DS.Tables[0].Rows[0]["speed"] = maxSpeed;  //�t��
                            }
                            else
                                DS.Tables[0].Rows[0]["speed"] = devName.maxSpd;
                        }
                    }
                    DS.AcceptChanges();
                    List<object> output = new List<object>();
                    output.AddRange(new object[] { (int)(Convert.ToInt32(DS.Tables[0].Rows[0]["speed"]) / 10), new RemoteInterface.HC.CSLSOutputData(DS) });
                    displayht.Add(devName.DevName, output);
                }
            }
            return displayht;
        }