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); //} } foreach (DeviceBaseWrapper dev in devMgr.getAllDeviceEnum()) { if (dev is CCTVDeviceWrapper) { ((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 tblcloverleaf"); 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("設備收尋管理啟動完成!"); }