Bläddra i källkod

DB与队列微调,PLC注释

yc_t 6 år sedan
förälder
incheckning
3e187fc7c8

+ 5 - 2
parkMonitor/Database2/AbstractCommand.cs

@@ -79,6 +79,7 @@ namespace parkMonitor.Database2
             {
                 Console.WriteLine(ex.Message);
                 Console.WriteLine("ExecuteReader执行异常");
+                throw ex;
             }
             return result;
         }
@@ -101,6 +102,7 @@ namespace parkMonitor.Database2
             {
                 Console.WriteLine(ex.Message);
                 Console.WriteLine("ExecuteNonQuery执行异常");
+                throw ex;
             }
             return result;
         }
@@ -126,8 +128,8 @@ namespace parkMonitor.Database2
                 {
                     conn.Dispose();
                     ConnectionPoolManager.AddConnToPooling(1, ConnectionPoolManager.remoteConf);
-
                 }
+                throw ex;
             }
             return result;
         }
@@ -200,10 +202,11 @@ namespace parkMonitor.Database2
                     if (myTrans.Connection != null)
                     {
                         Console.WriteLine(ex.Message + "事务回滚失败");
-                    }
+                    }   
                 }
                 flag = false;
                 Console.WriteLine(e.Message + "事务操作失败");
+                throw e;
             }
             finally
             {

+ 7 - 8
parkMonitor/Database2/ConnectionPoolManager.cs

@@ -66,7 +66,7 @@ namespace parkMonitor.Database2
         public static Connection GetConnection(BlockingQueue bq)
         {
             Connection connection = (Connection)bq.Dequeue();
-            if (!CheckConnection(connection, bq))
+            if (!CheckConnection(connection))
             {
                 connection.mySqlConnFlag = false;
                 while (!connection.mySqlConnFlag)
@@ -88,7 +88,7 @@ namespace parkMonitor.Database2
             connection = (Connection)conn;
             Console.WriteLine("连接出队检测");
             Console.WriteLine("输入参数连接池个数:" + bq.Count());
-            if (!CheckConnection(connection, bq))
+            if (!CheckConnection(connection))
             {
                 CheckConnPooling(2, 10, remoteConf, bq);
                 bq.Dequeue(out conn, millisecondsTimeout);
@@ -147,7 +147,7 @@ namespace parkMonitor.Database2
                 for (int i = 0; i < total; i++)
                 {
                     conn = GetConnection(bq,1000);
-                    CheckConnection(conn, bq);
+                    CheckConnection(conn);
                 }
             }
             if (bq.Count() < min)
@@ -177,9 +177,9 @@ namespace parkMonitor.Database2
             //}
             bq.Enqueue(conn);
         }
-        public static bool CheckConnection(Connection conn, BlockingQueue bq)
+        public static bool CheckConnection(Connection conn)
         {
-            bool isUseful = true;
+            bool isUseful = false;
             try
             {
                 string sql = "select count(*) from garage";
@@ -190,9 +190,8 @@ namespace parkMonitor.Database2
                     int r = Convert.ToInt32(result);
                     isUseful = true;
                     Console.WriteLine("连接测试正常");
-                }
-                ReleaseConnection(conn, bq);
-                Console.WriteLine("连接检测成功,重新入队");
+                    Console.WriteLine("连接检测成功,重新入队");
+                } 
             }
             catch (Exception ex)
             {

+ 10 - 2
parkMonitor/Database2/DBAccess.cs

@@ -49,7 +49,11 @@ namespace parkMonitor.Database2
             AbstractCommand abscommand = SimpleCommandFactory.CreateCommandAndExcute(commType);
             abscommand.sql = sql;
             abscommand.conn = conn;
-            result = abscommand.ExecuteSqlCommand();
+            try
+            {
+                result = abscommand.ExecuteSqlCommand();
+            }
+            catch (Exception e) { throw e; }
             return result;
         }
 
@@ -60,7 +64,11 @@ namespace parkMonitor.Database2
             abscommand.strs = strs;
             abscommand.conn = conn;
             abscommand.sql = sql;
-            result = (TransactionResult)abscommand.ExecuteSqlCommand();
+            try
+            {
+                result = (TransactionResult)abscommand.ExecuteSqlCommand();
+            }
+            catch (Exception e) { throw e; }
             return result;
         }
     }

+ 37 - 25
parkMonitor/Database2/DBOperation.cs

@@ -63,7 +63,7 @@ namespace parkMonitor.Database2
                     {
                         reader.Close();
                         reader.Dispose();
-                    }                    
+                    }
                 }
             }
             return garageFreeSpace; ;
@@ -120,7 +120,7 @@ namespace parkMonitor.Database2
                     {
                         reader.Close();
                         reader.Dispose();
-                    }                   
+                    }
                 }
             }
             return null;
@@ -160,7 +160,7 @@ namespace parkMonitor.Database2
                             v.parkingSpaceID = parkingSpaceID;
                             v.garageID = garageID;
                             v.frontwheelbase = frontwheelbase;
-                            v.rearwheelbase = rearwheelbase;                           
+                            v.rearwheelbase = rearwheelbase;
                         }
                     }
                     ConnectionPoolManager.ReleaseConnection(conn, bq);
@@ -178,7 +178,7 @@ namespace parkMonitor.Database2
                     {
                         reader.Close();
                         reader.Dispose();
-                    }                   
+                    }
                 }
             }
             return null;
@@ -213,7 +213,7 @@ namespace parkMonitor.Database2
                             ps.parkingSpaceID = parkingSpaceID;
                             ps.parkingSpaceX = reader.GetInt32("parkingSpaceX");
                             ps.parkingSpaceY = reader.GetInt32("parkingSpaceY");
-                            ps.parkingSpaceZ = reader.GetInt32("parkingSpaceZ");                            
+                            ps.parkingSpaceZ = reader.GetInt32("parkingSpaceZ");
                         }
                     }
                     ConnectionPoolManager.ReleaseConnection(conn, bq);
@@ -231,7 +231,7 @@ namespace parkMonitor.Database2
                     {
                         reader.Close();
                         reader.Dispose();
-                    }                    
+                    }
                 }
             }
             return null;
@@ -325,7 +325,7 @@ namespace parkMonitor.Database2
                     {
                         reader.Close();
                         reader.Dispose();
-                    }                   
+                    }
                 }
             }
             return parkingRecordsID;
@@ -438,7 +438,7 @@ namespace parkMonitor.Database2
                 }
                 catch (Exception ex)
                 {
-                    Console.WriteLine(ex.Message+"更新车辆状态失败");
+                    Console.WriteLine(ex.Message + "更新车辆状态失败");
                     conn.Dispose();
                     ConnectionPoolManager.AddConnToPooling(1, ConnectionPoolManager.remoteConf);
                 }
@@ -468,7 +468,7 @@ namespace parkMonitor.Database2
                 }
                 catch (Exception ex)
                 {
-                    Console.WriteLine(ex.Message+"更新车位状态失败");
+                    Console.WriteLine(ex.Message + "更新车位状态失败");
                     conn.Dispose();
                     ConnectionPoolManager.AddConnToPooling(1, ConnectionPoolManager.remoteConf);
                 }
@@ -490,10 +490,10 @@ namespace parkMonitor.Database2
             }
             else
             {
-                DBAccess access = new DBAccess(null, conn, CommandTypes.TRANSACTIONCOMMAND);
-                TransactionResult transactionResult = access.DealTransaction(strs);
                 try
                 {
+                    DBAccess access = new DBAccess(null, conn, CommandTypes.TRANSACTIONCOMMAND);
+                    TransactionResult transactionResult = access.DealTransaction(strs);
                     parkingRecordsID = transactionResult.result;
                     ConnectionPoolManager.ReleaseConnection(conn, bq);
                 }
@@ -538,7 +538,7 @@ namespace parkMonitor.Database2
                 }
                 catch (Exception ex)
                 {
-                    Console.WriteLine(ex.Message+"更新事务失败");
+                    Console.WriteLine(ex.Message + "更新事务失败");
                     conn.Dispose();
                     ConnectionPoolManager.AddConnToPooling(1, ConnectionPoolManager.remoteConf);
                 }
@@ -689,23 +689,35 @@ namespace parkMonitor.Database2
             dba.commType = CommandTypes.QUERYCOMMAND;
             if (dba.conn != null)
             {
-                result = dba.GetResult();
+                try
+                {
+                    result = dba.GetResult();
 
+
+                    MySqlDataReader rdr = (MySqlDataReader)result;
+                    while (rdr.Read())
+                    {
+                        killidlist.Add((string)rdr[0]);
+                    }
+                    rdr.Close();
+                    foreach (string str in killidlist)
+                    {
+                        //Console.WriteLine(str);
+                        dba.sql = str;
+                        dba.commType = CommandTypes.NOQUERYCOMMAND;
+                        dba.GetResult();
+                    }
+                    dba.conn.Dispose();
+                }
+                catch (Exception)
+                {
+                    Console.WriteLine("连接为空,无法kill");
+                }
             }
-            MySqlDataReader rdr = (MySqlDataReader)result;
-            while (rdr.Read())
-            {
-                killidlist.Add((string)rdr[0]);
-            }
-            rdr.Close();
-            foreach (string str in killidlist)
+            else
             {
-                //Console.WriteLine(str);
-                dba.sql = str;
-                dba.commType = CommandTypes.NOQUERYCOMMAND;
-                dba.GetResult();
+                Console.WriteLine("连接为空,无法kill");
             }
-            dba.conn.Dispose();
         }
 
     }

+ 6 - 1
parkMonitor/server/CoreThread/QueuingThread.cs

@@ -176,6 +176,7 @@ namespace parkMonitor.server.CoreThread
         private void Run()
         {
             NumberMachineNode temp = null;
+            NumberMachineMessage numMsg = null;
             while (!isClosing)
             {
                 lock (LicenseQueue)
@@ -183,7 +184,11 @@ namespace parkMonitor.server.CoreThread
                     //本地号牌已使用,则接收新的号牌消息
                     if (numMachineHandle != null && !NumMachineNodeValidation(license))
                     {
-                        license = ((NumberMachineMessage)numMachineHandle.GetMessage()).aNode;
+                        while (numMsg == null)
+                        {
+                            numMsg = (NumberMachineMessage)numMachineHandle.GetMessage();
+                        }
+                        license = numMsg.aNode;
                         //无重复则匹配指令,匹配失败则入号牌队列,并将号牌机线程获得的Node中ip标记为已使用
                         if (NumMachineNodeValidation(license))
                         {

+ 4 - 4
parkMonitor/server/NumMachine/ParkingSimul.cs

@@ -17,12 +17,12 @@ namespace parkMonitor.server.NumMachine
     class ParkingSimul
     {
         public static ParkingSimul ins;
-        private const string hostname = "192.168.10.100";
+        private const string hostname = "192.168.0.197";
         private const int port = 9000;
         private const string userId = "18202736439";
         private const string garageId = "1";
         private const string header = "鄂A";
-        private const int licInterval = 5000;//30秒
+        private const int licInterval = 30000;//30秒
         private Random rnd;
         private Dictionary<int, CarStatusStru> numStatusMap = new Dictionary<int, CarStatusStru>();
         MessageUTF8 msgToWeb = new MessageUTF8();
@@ -116,7 +116,8 @@ namespace parkMonitor.server.NumMachine
 
         public void Run()
         {
-            while (true)
+            int cycleCount = 2;
+            while (cycleCount-->0)
             {
                 rnd = new Random(DateTime.Now.Millisecond);
                 if (numStatusMap.Count > 0)
@@ -137,7 +138,6 @@ namespace parkMonitor.server.NumMachine
                         Fetch(numStatusMap[index].licNum);
                         numStatusMap[index].status = 3;
                     }
-
                 }
                 Thread.Sleep(licInterval);
             }

+ 142 - 39
parkMonitor/server/PLCLinker/PLCLinker.cs

@@ -27,22 +27,49 @@ namespace parkMonitor.server
     /// </summary>
     public class PLCLinker : IEquipments
     {
+        /// <summary>
+        /// PLC 连接状态flag
+        /// </summary>
         private Boolean isConnection = false;
-        private bool isRecorded = false, exceptionBreak = false, isClosing = false;
+        /// <summary>
+        /// 激光数据记录状态flag
+        /// </summary>
+        private bool isRecorded = false;
+        /// <summary>
+        /// 读写异常状态flag
+        /// </summary>
+        private bool exceptionBreak = false;
+        /// <summary>
+        /// 系统关闭flag
+        /// </summary>
+        private bool isClosing = false;
         /// <summary>
         /// 从PLC读到的字符串
         /// </summary>
-        private static string json = "";//读到的数据
+        private static string json = "";
         /// <summary>
         /// 将写入PLC的字符串
         /// </summary>
-        private string json2 = "";//写入的数据
+        private string json2 = "";
+        /// <summary>
+        /// 从plc获得结构化数据
+        /// </summary>
         private PLCMessage plcMsg;
+        /// <summary>
+        /// 定时器
+        /// </summary>
         System.Timers.Timer timer;
-        //parameteres for plc read function
+        /// <summary>
+        /// 读PLC初始地址
+        /// </summary>
         private int startAddr = 0;
+        /// <summary>
+        /// 读PLC地址长度
+        /// </summary>
         private int addrLength = 110;
-        /// <summary> plc重连标记位 </summary>
+        /// <summary> 
+        /// plc重连标记位
+        /// </summary>
         private int linkCount = 0;
         /// <summary>
         /// 无法获取配置文件时使用的PLC刷新频率
@@ -76,16 +103,45 @@ namespace parkMonitor.server
         /// 停车激光数据入口
         /// </summary>
         private int parkingLaserCenterX_address;
-        //parameters(addresses) for Laser monitoring
+        /// <summary>
+        /// 启动激光地址
+        /// </summary>
         private int laser_start_address;
+        /// <summary>
+        /// 取车完成地址
+        /// </summary>
         private int fetch_completed_address;
+        /// <summary>
+        /// 取车完成已获得标志地址
+        /// </summary>
         private int fetch_completed_acknowledge_address;
+        /// <summary>
+        /// 取至缓冲区地址
+        /// </summary>
         private int fetch_to_address;
+        /// <summary>
+        /// 前轮距转存地址
+        /// </summary>
         private int frontWheelbase_address;
+        /// <summary>
+        /// 后轮距转存地址
+        /// </summary>
         private int rearWheelbase_address;
+        /// <summary>
+        /// 停车完成地址
+        /// </summary>
         private int park_completed_address;
+        /// <summary>
+        /// 停车完成已获得地址
+        /// </summary>
         private int park_completed_acknowledge_address;
+        /// <summary>
+        /// 激光重测总数
+        /// </summary>
         private int LASER_RESCAN_COUNT;
+        /// <summary>
+        /// 激光心跳检测窗口阈值
+        /// </summary>
         private int LASER_HEARTBEAT_PERIOD;
         /// <summary>
         /// PLC刷新频率,来自于配置文件
@@ -163,7 +219,7 @@ namespace parkMonitor.server
                 {
                     decompressIndex.Add((48 + i).ToString());
                 }
-                //70-76
+                //70-82
                 for (int i = 0; i < 13; i++)
                 {
                     decompressIndex.Add((70 + i).ToString());
@@ -176,12 +232,18 @@ namespace parkMonitor.server
         }
 
         //**************************************** PLC读写相关方法 **************************************
+        /// <summary>
+        /// PLC连接对象
+        /// </summary>
         private ModBusTcpClient busTcpClient
         {
             get;
             set;
         }
-
+        /// <summary>
+        /// 写入字符串到json2
+        /// </summary>
+        /// <param name="message">将写入的字符串</param>
         private void WriteMessage(string message)
         {
             isRecorded = true;
@@ -189,7 +251,10 @@ namespace parkMonitor.server
             json2 = message;
         }
 
-        ///<summary>采集数据显示转json</summary>
+        /// <summary>
+        /// 采集数据显示转json
+        /// </summary>
+        /// <param name="str">将被转为json字符串的字符串</param>
         private static void DisplayString_ToJson(string str)
         {
             List<PLCNode> return_Value = new List<PLCNode>();
@@ -214,7 +279,12 @@ namespace parkMonitor.server
             //Console.WriteLine(json);
         }
 
-        ///<summary>截取</summary>
+        /// <summary>
+        /// 截取字符串到字符串数组
+        /// </summary>
+        /// <param name="txtString">输入字符串</param>
+        /// <param name="charNumber">最大字符个数</param>
+        /// <returns></returns>
         private static ArrayList GetSeparateSubString(string txtString, int charNumber)
         {
             ArrayList arrList = new ArrayList();
@@ -252,7 +322,11 @@ namespace parkMonitor.server
             timer.Elapsed += new ElapsedEventHandler(TimerUp);
         }
 
-        ///<summary>实时采集</summary>
+        /// <summary>
+        /// 实时采集
+        /// </summary>
+        /// <param name="sender">发送者对象,系统提供</param>
+        /// <param name="e">定时数据</param>
         private void TimerUp(object sender, System.Timers.ElapsedEventArgs e)
         {
             try
@@ -300,7 +374,11 @@ namespace parkMonitor.server
             }
         }
 
-        ///<summary>读取</summary>
+        /// <summary>
+        /// 从PLC读取数据
+        /// </summary>
+        /// <param name="address">地址</param>
+        /// <param name="length">值</param>
         private void PLC_Read(ushort address, ushort length)
         {
             try
@@ -327,7 +405,10 @@ namespace parkMonitor.server
             }
         }
 
-        ///<summary>写入</summary>
+        /// <summary>
+        /// 写入Json字符串到PLC
+        /// </summary>
+        /// <param name="json">json格式字符串</param>
         private void WriteJson(string json)
         {
             try
@@ -349,8 +430,11 @@ namespace parkMonitor.server
             }
         }
 
-        ///<summary>写入判断</summary>
-        private static void WriteResultRender(OperateResult result, string address)
+        /// <summary>
+        /// 判断写入是否成功
+        /// </summary>
+        /// <param name="result">判断结果</param>
+        private static void WriteResultRender(OperateResult result)
         {
             if (result.IsSuccess)
             {
@@ -362,7 +446,11 @@ namespace parkMonitor.server
             }
         }
 
-        ///<summary>地址-值写入plc</summary>
+        /// <summary>
+        /// 地址-值写入plc
+        /// </summary>
+        /// <param name="addr">地址</param>
+        /// <param name="value">值</param>
         private void SendtoPLC(string addr, string value)
         {
             PLCNode wrv = new PLCNode();
@@ -413,7 +501,12 @@ namespace parkMonitor.server
             InitTimer();//启动计时器
         }
 
-        /// <summary>将plc地址块完全解压</summary>
+        /// <summary>
+        /// 将plc地址块完全解压
+        /// </summary>
+        /// <param name="plcList">原始PLC数据列表</param>
+        /// <param name="decompressIndex">压缩数据段</param>
+        /// <returns>解压后的数据列表</returns>
         private List<PLCNode> ListDecompression(List<PLCNode> plcList, List<string> decompressIndex)
         {
             List<string> temp = new List<string>();
@@ -521,7 +614,7 @@ namespace parkMonitor.server
         /// <summary>
         /// 等待激光空闲状态/心跳状态
         /// </summary>
-        /// <param name="lpuTemp"></param>
+        /// <param name="lpuTemp">激光处理单元</param>
         private void WaitForLaserReady(LaserProcessUnit lpuTemp)
         {
             bool jumpOut = false;
@@ -951,6 +1044,9 @@ namespace parkMonitor.server
         private int LASER_RESCAN_COUNT, LASER_HEARTBEAT_PERIOD, laser_rescan_countdown, laser_heartbeat_countdown;
         private bool laser_record, laser_heartbeat_test, enable_status_check = true, disordered = false;
         private HashSet<int> laser_heartbeat = new HashSet<int>();
+        /// <summary>
+        /// plc类句柄
+        /// </summary>
         private IEquipments plc = null;
         /// <summary>
         /// 激光消息,用于保存激光数据、状态等信息
@@ -960,11 +1056,11 @@ namespace parkMonitor.server
         /// <summary>
         /// 激光处理单元构造函数,初始化各属性值
         /// </summary>
-        /// <param name="id"></param>
-        /// <param name="park_command_address"></param>
-        /// <param name="laser_status_address"></param>
-        /// <param name="laser_rescan_count"></param>
-        /// <param name="laser_heartbeat_period"></param>
+        /// <param name="id">编号</param>
+        /// <param name="park_command_address">停车指令地址</param>
+        /// <param name="laser_status_address">激光状态地址</param>
+        /// <param name="laser_rescan_count">激光重测次数</param>
+        /// <param name="laser_heartbeat_period">激光心跳时间窗口</param>
         public LaserProcessUnit(int id, int park_command_address, int laser_status_address, int laser_rescan_count, int laser_heartbeat_period)
         {
             try
@@ -990,8 +1086,8 @@ namespace parkMonitor.server
         /// <summary>
         /// 更新激光状态
         /// </summary>
-        /// <param name="addr"></param>
-        /// <param name="value"></param>
+        /// <param name="addr">地址</param>
+        /// <param name="value"></param>
         public void UpdateLaserStatus(int addr, int value)
         {
             int status_addr = laser_status_address;
@@ -1007,7 +1103,11 @@ namespace parkMonitor.server
             }
         }
 
-        ///<summary>激光状态监测</summary>
+        /// <summary>
+        /// 激光状态监测
+        /// </summary>
+        /// <param name="addr">地址</param>
+        /// <param name="value">值</param>
         public void LaserStatusChecking(int addr, int value)
         {
             if (enable_status_check)
@@ -1182,7 +1282,10 @@ namespace parkMonitor.server
             else { return; }
         }
 
-        /// <summary>激光数据记录</summary>
+        /// <summary>
+        /// 激光数据记录
+        /// </summary>
+        /// <param name="plist">plc数据列表</param>
         public void LaserRecord(List<PLCNode> plist)
         {
             lock (laserMsg)
@@ -1274,18 +1377,18 @@ namespace parkMonitor.server
         /// <summary>
         /// 构造函数,初始化各属性值
         /// </summary>
-        /// <param name="id"></param>
-        /// <param name="parking_startRobot_address"></param>
-        /// <param name="parking_laserCenterX_address"></param>
-        /// <param name="parkingSpaceID_address"></param>
-        /// <param name="park_completed_address"></param>
-        /// <param name="park_completed_acknowledge_address"></param>
-        /// <param name="fetching_startRobot_address"></param>
-        /// <param name="fetch_to_address"></param>
-        /// <param name="fetch_completed_address"></param>
-        /// <param name="fetch_completed_acknowledge_address"></param>
-        /// <param name="frontWheelbase"></param>
-        /// <param name="rearWheelbase"></param>
+        /// <param name="id">编号</param>
+        /// <param name="parking_startRobot_address">停车启动机械手地址</param>
+        /// <param name="parking_laserCenterX_address">停车激光中心X坐标</param>
+        /// <param name="parkingSpaceID_address">车位ID地址</param>
+        /// <param name="park_completed_address">停车完成地址</param>
+        /// <param name="park_completed_acknowledge_address">停车完成获取标志地址</param>
+        /// <param name="fetching_startRobot_address">取车启动机械手地址</param>
+        /// <param name="fetch_to_address">取至缓冲区地址</param>
+        /// <param name="fetch_completed_address">取车完成地址</param>
+        /// <param name="fetch_completed_acknowledge_address">取车完成获得标志地址</param>
+        /// <param name="frontWheelbase">前轮距转存</param>
+        /// <param name="rearWheelbase">后轮距转存</param>
         public RobotProcessUnit(int id, int parking_startRobot_address, int parking_laserCenterX_address, int parkingSpaceID_address, int park_completed_address, int park_completed_acknowledge_address, int fetching_startRobot_address, int fetch_to_address, int fetch_completed_address, int fetch_completed_acknowledge_address, int frontWheelbase, int rearWheelbase)
         {
             this.id = id;