コード例 #1
0
        private void loadMainLineOutDevice(TC.DevcieManager devMgr)
        {
            lines.Clear();

               foreach (DeviceBaseWrapper dev in devMgr.getOutputDeviceEnum())
               {

                   if (!lines.Contains(dev.lineid + "-" + dev.direction))
                   {
                       lines.Add(dev.lineid + "-" + dev.direction, ArrayList.Synchronized(new System.Collections.ArrayList()));
                      // lineJamRanges.Add(dev.lineid + "-" + dev.direction, ArrayList.Synchronized(new System.Collections.ArrayList()));
                   }

                   //if (dev.location == "F" || dev.location == "H" || dev.location == "T")
                   //{
                       ((ArrayList)lines[dev.lineid + "-" + dev.direction]).Add(dev);
                   //}

               }
               System.Collections.Hashtable hsInters = new Hashtable();
               System.Data.Odbc.OdbcConnection cn = new System.Data.Odbc.OdbcConnection(Global.Db2ConnectionString);
               System.Data.Odbc.OdbcCommand cmd = new System.Data.Odbc.OdbcCommand("Select divisiontype,lineid1,direction1,mileage1,lineid2,direction2,mileage2 from vwcloverleaf");
               cmd.Connection = cn;
               try
               {
               cn.Open();
               System.Data.Odbc.OdbcDataReader rd = cmd.ExecuteReader();
               while (rd.Read())
               {
                   try
                   {
                       string divisionType, lineid1, direction1, lineid2, direction2;
                       int mileage1, mileage2;
                       divisionType = rd[0].ToString();
                       lineid1 = rd[1].ToString();
                       direction1 = rd[2].ToString();
                       mileage1 = System.Convert.ToInt32(rd[3]);
                       if (divisionType == "C") //系統交流道
                       {
                           lineid2 = rd[4].ToString();
                           direction2 = rd[5].ToString();
                           mileage2 = System.Convert.ToInt32(rd[6]);
                       }
                       else  //匝道
                       {
                           lineid2 = lineid1;
                           direction2 = direction1;
                           mileage2 = mileage1;

                       }
                       InterSection intersec = new InterSection(divisionType, lineid1, direction1, mileage1, lineid2, direction2, mileage2);

                       if (!hsInters.Contains(intersec.getDevName()))
                       {
                           hsInters.Add(intersec.getDevName(), intersec);
                           try
                           {
                               ((ArrayList)lines[intersec.getLineID() + "-" + intersec.getDirection()]).Add(intersec);
                           }
                           catch (Exception ex2)
                           {
                               ConsoleServer.WriteLine(ex2.Message + "," + ex2.StackTrace);
                           }

                       }
                       else if (intersec.getDevType() == "C")
                       {
                           ((InterSection)hsInters[intersec.getDevName()]).BranchName2 = intersec.BranchName1;
                       }

                       //if (lines.Contains(lineid1 + "-" + direction1))
                       //{

                       //}

                   }
                   catch (Exception ex1)
                   {
                       ConsoleServer.WriteLine(ex1.Message + "," + ex1.StackTrace);
                   }

               }
               }
               catch (Exception ex)
               {
               ConsoleServer.WriteLine(ex.Message + "," + ex.StackTrace);
               }
               finally
               {

               cn.Close();
               }

               IDictionaryEnumerator iesec = hsInters.GetEnumerator();

               while (iesec.MoveNext())
               {
               try
               {
                   InterSection sec = (InterSection)iesec.Value;
                   if (sec.type == "C")
                   {
                       sec.branch1 = (InterSection)hsInters[sec.BranchName1];
                       sec.branch2 = (InterSection)hsInters[sec.BranchName2];
                   }
               }
               catch (Exception ex)
               {
                   ConsoleServer.WriteLine(ex.Message + "," + ex.StackTrace);
               }
               }

               IDictionaryEnumerator ie = lines.GetEnumerator();  //取得所有的路線
               while (ie.MoveNext())
               {
               ((ArrayList)ie.Value).Sort();   //排序所有的車輛偵測器

               ArrayList list = (ArrayList)ie.Value;
               //if (list.Count == 1)
               //    (vdlist[0] as DeviceBaseWrapper).AryInx = 0;

               // 填上前後車輛偵測器鏈結
              // if (list.Count > 1)
                   for (int i = 0; i < list.Count; i++)
                   {
                      // ((DeviceBaseWrapper)vdlist[i]).AryInx = i;

                       if (i == 0)
                           ((I_Positionable)list[i]).setNextDev( list[i + 1] as I_Positionable);
                       else if (i == list.Count - 1)
                           ((I_Positionable)list[i]).setPreDev( list[i - 1] as I_Positionable);
                       else
                       {
                           ((I_Positionable)list[i]).setPreDev( list[i - 1] as I_Positionable);
                           ((I_Positionable)list[i]).setNextDev( list[i + 1] as I_Positionable);
                       }

                   }

               }

               // oneMinTmr.Elapsed += new System.Timers.ElapsedEventHandler(oneMinTmr_Elapsed);
               // oneMinTmr.Start();
               //oneMinTmr = new System.Threading.Timer(new System.Threading.TimerCallback(oneMinTmr_Elapsed));
               //oneMinTmr.Change(0, 60 * 1000);

               ConsoleServer.WriteLine("設備收尋管理啟動完成!");
        }