SystemInitializer.cs 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Configuration;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using BroadcastModule;
  8. using DatabaseDLL;
  9. using MySql.Data.MySqlClient;
  10. using NumMachine;
  11. using parkMonitor.tools;
  12. using PLCS7;
  13. using S7.Net;
  14. using Terminal;
  15. using WebServer;
  16. namespace Monitor
  17. {
  18. internal class SystemInitializer
  19. {
  20. /// <summary>
  21. /// 初始化各模块
  22. /// </summary>
  23. /// <returns></returns>
  24. internal void Init(IntPtr flpHandle)
  25. {
  26. bool initStatus = false;
  27. int retryCount = 0;
  28. string remoteDBConnStr, localDBConnStr;
  29. int DBtimeout;
  30. MyTimer mt = new MyTimer();
  31. mt.StartTiming();
  32. try
  33. {
  34. retryCount = Convert.ToInt32(ConfigurationManager.AppSettings.Get("retryCount"));
  35. //数据库
  36. remoteDBConnStr = ConfigurationManager.AppSettings.Get("remoteDBConnStr");
  37. localDBConnStr = ConfigurationManager.AppSettings.Get("localDBConnStr");
  38. DBtimeout = Convert.ToInt32(ConfigurationManager.AppSettings.Get("DBtimeout"));
  39. //plc
  40. Monitor.plcIPAddr = ConfigurationManager.AppSettings.Get("plcIpAddress");
  41. Monitor.plcRack = Convert.ToInt32(ConfigurationManager.AppSettings.Get("plcRack"));
  42. Monitor.plcSlot = Convert.ToInt32(ConfigurationManager.AppSettings.Get("plcSlot"));
  43. Monitor.plcDatablockConfig = ConfigurationManager.AppSettings.Get("plcDatablockId").Split(',');
  44. Monitor.plcTerminalCount = Convert.ToInt32(ConfigurationManager.AppSettings.Get("plcTerminalCount"));
  45. Monitor.plcParkingSpaceCount = Convert.ToInt32(ConfigurationManager.AppSettings.Get("plcParkingSpaceCount"));
  46. Monitor.plcRefreshInterval = Convert.ToInt32(ConfigurationManager.AppSettings.Get("plcRefreshInterval"));
  47. //显示屏
  48. Monitor.allInOneMachineIP = ConfigurationManager.AppSettings.Get("allInOneMachineIP");
  49. Monitor.allInOneMachinePort = Convert.ToInt32(ConfigurationManager.AppSettings.Get("allInOneMachinePort"));
  50. //webServer端口
  51. Monitor.webPort = Convert.ToInt32(ConfigurationManager.AppSettings.Get("webPort"));
  52. Monitor.garageID = Convert.ToInt32(ConfigurationManager.AppSettings.Get("garageID"));
  53. //配置文件读取结束,进入状态1
  54. Monitor.initializeState = 1;
  55. initStatus = true;
  56. }
  57. catch (Exception e) { Console.WriteLine("初始化," + e.Message); return; }
  58. //initStatus = initStatus && PLCInit(retryCount);
  59. //PLC初始化结束,进入状态2
  60. //if (!initStatus) { return; }
  61. //else { Monitor.initializeState = 2; }
  62. //初始化数据库对象
  63. Monitor.remoteDBOper = new DBOperation(remoteDBConnStr, DBtimeout);
  64. Monitor.localDBOper = new DBOperation(localDBConnStr, DBtimeout);
  65. initStatus = initStatus && Monitor.remoteDBOper.InitConnPooling(10);
  66. initStatus = initStatus && Monitor.localDBOper.InitConnPooling(10);
  67. //数据库初始化结束,进入状态3
  68. if (!initStatus) { return; }
  69. else { Monitor.initializeState = 3; }
  70. //初始化web对象
  71. Monitor.webServer = new CentralForWeb();
  72. initStatus = initStatus && Monitor.webServer.Start(Monitor.webPort);
  73. //webServer初始化结束,进入状态4
  74. if (!initStatus) { return; }
  75. else { Monitor.initializeState = 4; }
  76. ////*******测试数据库操作
  77. string sql = "select vehicleTypeID,numberPlate from vehicle where numberPlate = '鄂A11111';";
  78. MySqlDataReader reader = null;
  79. object[] objs = null;
  80. try
  81. {
  82. reader = Monitor.remoteDBOper.Query(sql);
  83. if (reader!= null && reader.Read())
  84. {
  85. objs = new object[reader.FieldCount];
  86. reader.GetValues(objs);
  87. Console.WriteLine("-------------");
  88. for (int i = 0; i < objs.Length; i++)
  89. {
  90. Console.WriteLine(objs[i] + ",");
  91. }
  92. }
  93. }
  94. catch (Exception e) { Console.WriteLine(e.Message); }
  95. //初始化计费策略
  96. PaymentScheme.ins = PaymentScheme.GetCurrentPaymentScheme(1);
  97. //初始化号牌机对象
  98. Monitor.numMachineLinker = new NumMachineLinker(flpHandle);
  99. Monitor.numMachineLinker.Start();
  100. //初始化显示板对象,显示板udp面向无连接
  101. Monitor.allInOneMachine = new BroadcastBoard(Monitor.allInOneMachineIP, Monitor.allInOneMachinePort);
  102. Monitor.allInOneMachine.UpdateTime();
  103. Monitor.allInOneMachine.Play(0, BroadcastBoard.PlayMode.download, "欢迎光临");
  104. Monitor.allInOneMachine.Play(1, BroadcastBoard.PlayMode.download, "智象停车");
  105. Monitor.allInOneMachine.Play(2, BroadcastBoard.PlayMode.download, "date");
  106. Monitor.allInOneMachine.Play(3, BroadcastBoard.PlayMode.download, "time");
  107. Monitor.allInOneMachine.Refresh();
  108. //系统初始化结束,进入状态5
  109. if (!initStatus) { return; }
  110. else { Monitor.initializeState = 5; }
  111. mt.EndTiming();
  112. Console.WriteLine("初始化耗时:" + mt.GetInterval().TotalSeconds);
  113. switch (Monitor.initializeState)
  114. {
  115. case 0:
  116. Console.WriteLine("配置文件读写异常");
  117. break;
  118. case 1:
  119. Console.WriteLine("PLC初始化异常");
  120. break;
  121. case 2:
  122. Console.WriteLine("数据库初始化异常");
  123. break;
  124. case 3:
  125. Console.WriteLine("webServer初始化异常");
  126. break;
  127. case 4:
  128. Console.WriteLine("其他异常");
  129. break;
  130. case 5:
  131. Console.WriteLine("初始化成功");
  132. break;
  133. }
  134. }
  135. /// <summary>
  136. /// PLC初始化与连接
  137. /// </summary>
  138. /// <param name="retryCount"></param>
  139. /// <returns></returns>
  140. internal bool PLCInit(int retryCount)
  141. {
  142. int temp = retryCount;
  143. //初始化PLC对象
  144. while (temp-- > 0)
  145. {
  146. if (Monitor.PLC == null)
  147. {
  148. Monitor.PLC = new PLCLinker(CpuType.S71500, Monitor.plcIPAddr, (short)Monitor.plcRack, (short)Monitor.plcSlot,
  149. Int32.Parse(Monitor.plcDatablockConfig[0]), Int32.Parse(Monitor.plcDatablockConfig[1]), Int32.Parse(Monitor.plcDatablockConfig[2]),
  150. Monitor.plcTerminalCount, Monitor.plcParkingSpaceCount);
  151. }
  152. else if (Monitor.PLC.isConnected)
  153. {
  154. return true;
  155. }
  156. else { Monitor.PLC.PLCConnect(); }
  157. }
  158. return false;
  159. }
  160. /// <summary>
  161. /// 系统关闭
  162. /// </summary>
  163. internal void Stop()
  164. {
  165. //关闭号牌机
  166. if (Monitor.numMachineLinker != null) { Monitor.numMachineLinker.Stop(); }
  167. //关闭webServer
  168. if (Monitor.webServer != null) { Monitor.webServer.Stop(); }
  169. //关闭数据库
  170. if (Monitor.remoteDBOper != null) { Monitor.remoteDBOper.DBClose(); }
  171. if (Monitor.localDBOper != null) { Monitor.localDBOper.DBClose(); }
  172. }
  173. }
  174. }