using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text; using System.Threading.Tasks; using BroadcastModule; using DatabaseDLL; using MySql.Data.MySqlClient; using NumMachine; using parkMonitor.tools; using PLCS7; using S7.Net; using Terminal; using WebServer; namespace Monitor { internal class SystemInitializer { /// /// 初始化各模块 /// /// internal void Init(IntPtr flpHandle) { bool initStatus = false; int retryCount = 0; string remoteDBConnStr, localDBConnStr; int DBtimeout; MyTimer mt = new MyTimer(); mt.StartTiming(); try { retryCount = Convert.ToInt32(ConfigurationManager.AppSettings.Get("retryCount")); //数据库 remoteDBConnStr = ConfigurationManager.AppSettings.Get("remoteDBConnStr"); localDBConnStr = ConfigurationManager.AppSettings.Get("localDBConnStr"); DBtimeout = Convert.ToInt32(ConfigurationManager.AppSettings.Get("DBtimeout")); //plc Monitor.plcIPAddr = ConfigurationManager.AppSettings.Get("plcIpAddress"); Monitor.plcRack = Convert.ToInt32(ConfigurationManager.AppSettings.Get("plcRack")); Monitor.plcSlot = Convert.ToInt32(ConfigurationManager.AppSettings.Get("plcSlot")); Monitor.plcDatablockConfig = ConfigurationManager.AppSettings.Get("plcDatablockId").Split(','); Monitor.plcTerminalCount = Convert.ToInt32(ConfigurationManager.AppSettings.Get("plcTerminalCount")); Monitor.plcParkingSpaceCount = Convert.ToInt32(ConfigurationManager.AppSettings.Get("plcParkingSpaceCount")); Monitor.plcRefreshInterval = Convert.ToInt32(ConfigurationManager.AppSettings.Get("plcRefreshInterval")); //显示屏 Monitor.allInOneMachineIP = ConfigurationManager.AppSettings.Get("allInOneMachineIP"); Monitor.allInOneMachinePort = Convert.ToInt32(ConfigurationManager.AppSettings.Get("allInOneMachinePort")); //webServer端口 Monitor.webPort = Convert.ToInt32(ConfigurationManager.AppSettings.Get("webPort")); Monitor.garageID = Convert.ToInt32(ConfigurationManager.AppSettings.Get("garageID")); //配置文件读取结束,进入状态1 Monitor.initializeState = 1; initStatus = true; } catch (Exception e) { Console.WriteLine("初始化," + e.Message); return; } //initStatus = initStatus && PLCInit(retryCount); //PLC初始化结束,进入状态2 //if (!initStatus) { return; } //else { Monitor.initializeState = 2; } //初始化数据库对象 Monitor.remoteDBOper = new DBOperation(remoteDBConnStr, DBtimeout); Monitor.localDBOper = new DBOperation(localDBConnStr, DBtimeout); initStatus = initStatus && Monitor.remoteDBOper.InitConnPooling(10); initStatus = initStatus && Monitor.localDBOper.InitConnPooling(10); //数据库初始化结束,进入状态3 if (!initStatus) { return; } else { Monitor.initializeState = 3; } //初始化web对象 Monitor.webServer = new CentralForWeb(); initStatus = initStatus && Monitor.webServer.Start(Monitor.webPort); //webServer初始化结束,进入状态4 if (!initStatus) { return; } else { Monitor.initializeState = 4; } ////*******测试数据库操作 string sql = "select vehicleTypeID,numberPlate from vehicle where numberPlate = '鄂A11111';"; MySqlDataReader reader = null; object[] objs = null; try { reader = Monitor.remoteDBOper.Query(sql); if (reader!= null && reader.Read()) { objs = new object[reader.FieldCount]; reader.GetValues(objs); Console.WriteLine("-------------"); for (int i = 0; i < objs.Length; i++) { Console.WriteLine(objs[i] + ","); } } } catch (Exception e) { Console.WriteLine(e.Message); } //初始化计费策略 PaymentScheme.ins = PaymentScheme.GetCurrentPaymentScheme(1); //初始化号牌机对象 Monitor.numMachineLinker = new NumMachineLinker(flpHandle); Monitor.numMachineLinker.Start(); //初始化显示板对象,显示板udp面向无连接 Monitor.allInOneMachine = new BroadcastBoard(Monitor.allInOneMachineIP, Monitor.allInOneMachinePort); Monitor.allInOneMachine.UpdateTime(); Monitor.allInOneMachine.Play(0, BroadcastBoard.PlayMode.download, "欢迎光临"); Monitor.allInOneMachine.Play(1, BroadcastBoard.PlayMode.download, "智象停车"); Monitor.allInOneMachine.Play(2, BroadcastBoard.PlayMode.download, "date"); Monitor.allInOneMachine.Play(3, BroadcastBoard.PlayMode.download, "time"); Monitor.allInOneMachine.Refresh(); //系统初始化结束,进入状态5 if (!initStatus) { return; } else { Monitor.initializeState = 5; } mt.EndTiming(); Console.WriteLine("初始化耗时:" + mt.GetInterval().TotalSeconds); switch (Monitor.initializeState) { case 0: Console.WriteLine("配置文件读写异常"); break; case 1: Console.WriteLine("PLC初始化异常"); break; case 2: Console.WriteLine("数据库初始化异常"); break; case 3: Console.WriteLine("webServer初始化异常"); break; case 4: Console.WriteLine("其他异常"); break; case 5: Console.WriteLine("初始化成功"); break; } } /// /// PLC初始化与连接 /// /// /// internal bool PLCInit(int retryCount) { int temp = retryCount; //初始化PLC对象 while (temp-- > 0) { if (Monitor.PLC == null) { Monitor.PLC = new PLCLinker(CpuType.S71500, Monitor.plcIPAddr, (short)Monitor.plcRack, (short)Monitor.plcSlot, Int32.Parse(Monitor.plcDatablockConfig[0]), Int32.Parse(Monitor.plcDatablockConfig[1]), Int32.Parse(Monitor.plcDatablockConfig[2]), Monitor.plcTerminalCount, Monitor.plcParkingSpaceCount); } else if (Monitor.PLC.isConnected) { return true; } else { Monitor.PLC.PLCConnect(); } } return false; } /// /// 系统关闭 /// internal void Stop() { //关闭号牌机 if (Monitor.numMachineLinker != null) { Monitor.numMachineLinker.Stop(); } //关闭webServer if (Monitor.webServer != null) { Monitor.webServer.Stop(); } //关闭数据库 if (Monitor.remoteDBOper != null) { Monitor.remoteDBOper.DBClose(); } if (Monitor.localDBOper != null) { Monitor.localDBOper.DBClose(); } } } }