Pārlūkot izejas kodu

解决plc相关大部分报错,遗留Socket报错;解决FileNotFound报错;缓冲位自动初始化;手动初始化完善;界面调整;预约功能

yc_t 6 gadi atpakaļ
vecāks
revīzija
b1fba64bf0

+ 1 - 1
parkMonitor/Database2/ConnectionPoolManager.cs

@@ -127,7 +127,7 @@ namespace parkMonitor.Database2
                         if (result != null)
                         {
                             int r = Convert.ToInt32(result);
-                            Console.WriteLine("连接测试正常");
+                            //Console.WriteLine("连接测试正常");
                         }
                         ReleaseConnection(conn, bq);
                     }

+ 8 - 4
parkMonitor/LOG/LogManager.cs

@@ -141,16 +141,20 @@ namespace parkMonitor.LOG
         /// </summary>
         /// <param name="sqlStatus"></param>
         /// <param name="sqlMsg"></param>
-        public void ReadLog(out string sqlStatus, out string sqlMsg,out int count)
+        public void ReadLog(out string sqlStatus, out string sqlMsg, out int count)
         {
             sqlStatus = null;
             sqlMsg = null;
             count = 0;
             string date = System.DateTime.Now.ToString("yyyy-MM-dd");
-            string filePath = logAddress + "\\" + date + "\\" + "DATABASE.log";
+            string filePath = logAddress + "\\\\" + date + "\\\\" + "DATABASE.log";
             try
             {
-                List<string> logLines = new List<string>(File.ReadAllLines(filePath));
+                List<string> logLines = null;
+                if (File.Exists(filePath))
+                {
+                    logLines = new List<string>(File.ReadAllLines(filePath));
+                }
                 if (logLines != null)
                 {
                     count = logLines.Count;
@@ -161,7 +165,7 @@ namespace parkMonitor.LOG
                     File.WriteAllLines(filePath, logLines.ToArray());
                 }
             }
-            catch { }
+            catch (Exception e) { Console.WriteLine(e.Message); }
         }
 
 

+ 3 - 17
parkMonitor/controlPanel/ControlPanel.Designer.cs

@@ -28,7 +28,6 @@
         /// </summary>
         private void InitializeComponent()
         {
-            this.btn_buffer_confirm = new System.Windows.Forms.Button();
             this.btn_refresh = new System.Windows.Forms.Button();
             this.lb_confirmed = new System.Windows.Forms.Label();
             this.flp_buffer = new System.Windows.Forms.FlowLayoutPanel();
@@ -37,21 +36,10 @@
             this.btn_reInit = new System.Windows.Forms.Button();
             this.SuspendLayout();
             // 
-            // btn_buffer_confirm
-            // 
-            this.btn_buffer_confirm.Font = new System.Drawing.Font("宋体", 10F);
-            this.btn_buffer_confirm.Location = new System.Drawing.Point(74, 187);
-            this.btn_buffer_confirm.Name = "btn_buffer_confirm";
-            this.btn_buffer_confirm.Size = new System.Drawing.Size(57, 31);
-            this.btn_buffer_confirm.TabIndex = 1;
-            this.btn_buffer_confirm.Text = "确认";
-            this.btn_buffer_confirm.UseVisualStyleBackColor = true;
-            this.btn_buffer_confirm.Click += new System.EventHandler(this.btn_buffer_confirm_Click);
-            // 
             // btn_refresh
             // 
             this.btn_refresh.Font = new System.Drawing.Font("宋体", 10F);
-            this.btn_refresh.Location = new System.Drawing.Point(17, 187);
+            this.btn_refresh.Location = new System.Drawing.Point(43, 182);
             this.btn_refresh.Name = "btn_refresh";
             this.btn_refresh.Size = new System.Drawing.Size(57, 30);
             this.btn_refresh.TabIndex = 2;
@@ -64,9 +52,9 @@
             this.lb_confirmed.AutoSize = true;
             this.lb_confirmed.Location = new System.Drawing.Point(15, 9);
             this.lb_confirmed.Name = "lb_confirmed";
-            this.lb_confirmed.Size = new System.Drawing.Size(65, 12);
+            this.lb_confirmed.Size = new System.Drawing.Size(89, 12);
             this.lb_confirmed.TabIndex = 4;
-            this.lb_confirmed.Text = "缓冲位确认";
+            this.lb_confirmed.Text = "缓冲位状态显示";
             // 
             // flp_buffer
             // 
@@ -116,7 +104,6 @@
             this.Controls.Add(this.flp_buffer);
             this.Controls.Add(this.lb_confirmed);
             this.Controls.Add(this.btn_refresh);
-            this.Controls.Add(this.btn_buffer_confirm);
             this.Name = "ControlPanel";
             this.Text = "ControlPanel";
             this.ResumeLayout(false);
@@ -125,7 +112,6 @@
         }
 
         #endregion
-        private System.Windows.Forms.Button btn_buffer_confirm;
         private System.Windows.Forms.Button btn_refresh;
         private System.Windows.Forms.Label lb_confirmed;
         private System.Windows.Forms.FlowLayoutPanel flp_buffer;

+ 15 - 36
parkMonitor/controlPanel/ControlPanel.cs

@@ -17,7 +17,7 @@ namespace parkMonitor.controlPanel
     public partial class ControlPanel : Form
     {
         public static ControlPanel ins = null;
-
+        public IEquipments plc = null;
         Dictionary<int, CheckBox> IndexCbMap = null;
 
         public ControlPanel()
@@ -26,24 +26,26 @@ namespace parkMonitor.controlPanel
             IndexCbMap = new Dictionary<int, CheckBox>();
             //BufferList.Controls.Add(flp_buffer);
             DisplayBufferStatus();
-            UpdateConfirmState();
         }
 
-        public void UpdateConfirmState()
-        {
-            if (ParkingBufferManager.ins != null)
+        /*            if (IndexCbMap == null) { IndexCbMap = new Dictionary<int, CheckBox>(); }
+            if (ParkingBufferManager.ins != null && IndexCbMap.Count == ParkingBufferManager.ins.bufferCount)
             {
-                if (ParkingBufferManager.ins.checkedManually)
-                {
-                    lb_confirmed.Text = "缓冲位已确认";
-                }
-                else
+                for (int i = 0; i < ParkingBufferManager.ins.bufferCount; i++)
                 {
-                    lb_confirmed.Text = "缓冲位未确认";
+                    ParkingBufferManager.ins.bufferList[i].occupied = IndexCbMap[i].Checked;
                 }
             }
-        }
-
+            UpdateConfirmState();
+            if (!ParkingBufferManager.ins.checkedManually)
+            {
+                lb_confirmed.Text = "缓冲位已确认";
+            }
+            else
+            {
+                lb_confirmed.Text = "缓冲位已修改";
+            }
+            ParkingBufferManager.ins.checkedManually = true;*/
         public void DisplayBufferStatus()
         {
             if (IndexCbMap == null) { IndexCbMap = new Dictionary<int, CheckBox>(); }
@@ -75,29 +77,6 @@ namespace parkMonitor.controlPanel
         private void btn_refresh_Click(object sender, EventArgs e)
         {
             DisplayBufferStatus();
-            UpdateConfirmState();
-        }
-
-        private void btn_buffer_confirm_Click(object sender, EventArgs e)
-        {
-            if (IndexCbMap == null) { IndexCbMap = new Dictionary<int, CheckBox>(); }
-            if (ParkingBufferManager.ins != null && IndexCbMap.Count == ParkingBufferManager.ins.bufferCount)
-            {
-                for (int i = 0; i < ParkingBufferManager.ins.bufferCount; i++)
-                {
-                    ParkingBufferManager.ins.bufferList[i].occupied = IndexCbMap[i].Checked;
-                }
-            }
-            UpdateConfirmState();
-            if (!ParkingBufferManager.ins.checkedManually)
-            {
-                lb_confirmed.Text = "缓冲位已确认";
-            }
-            else
-            {
-                lb_confirmed.Text = "缓冲位已修改";
-            }
-            ParkingBufferManager.ins.checkedManually = true;
         }
 
         private void btn_remoteDB_Click(object sender, EventArgs e)

+ 17 - 8
parkMonitor/controlPanel/InitWin.cs

@@ -20,17 +20,26 @@ namespace parkMonitor.controlPanel
 
         private void btn_confirm_Click(object sender, EventArgs e)
         {
-            if (rbtn_1.Enabled)
+            DialogResult dr = MessageBox.Show("确定要初始化系统吗?", "初始化确认", MessageBoxButtons.YesNoCancel);
+            if (dr == DialogResult.Yes)
             {
-                EntityForCore.ins.globalStatus = EntityForCore.ins.ReInit(0);
+                if (rbtn_1.Enabled)
+                {
+                    EntityForCore.ins.globalStatus = EntityForCore.ins.ReInit(0);
+                }
+                else if (rbtn_2.Enabled)
+                {
+                    EntityForCore.ins.globalStatus = EntityForCore.ins.ReInit(1);
+                }
+                else if (rbtn_3.Enabled)
+                {
+                    EntityForCore.ins.globalStatus = EntityForCore.ins.ReInit(2);
+                }
+                this.Close();
             }
-            else if (rbtn_2.Enabled)
+            else if(dr == DialogResult.No)
             {
-                EntityForCore.ins.globalStatus = EntityForCore.ins.ReInit(1);
-            }
-            else if (rbtn_3.Enabled)
-            {
-                EntityForCore.ins.globalStatus = EntityForCore.ins.ReInit(2);
+                this.Close();
             }
         }
     }

+ 11 - 3
parkMonitor/entity/EntityForCore.cs

@@ -79,6 +79,7 @@ namespace parkMonitor.entity
             Log.WriteLog(LogType.NOT_DATABASE, LogFile.LOG, "初始化缓冲位");
             ParkingBufferManager.ins = new ParkingBufferManager();
             initState = initState && ParkingBufferManager.ins.InitParkingBuffers();
+            UILogServer.ins.info("系统初始化完成");
             return initState;
         }
 
@@ -89,7 +90,7 @@ namespace parkMonitor.entity
         /// <returns></returns>
         public bool ReInit(int DBmode)
         {
-            Log.WriteLog(LogType.NOT_DATABASE, LogFile.LOG, "******************************************* 系统重新初始化 *******************************************");
+            Log.WriteLog(LogType.NOT_DATABASE, LogFile.LOG, "------------------------------- 重新初始化系统 ---------------------------------");
             UILogServer.ins.info("系统初始化中......");
             bool initState = true;
             //数据库连接参数初始化及连接测试
@@ -106,12 +107,19 @@ namespace parkMonitor.entity
             }
             //车位管理初始化
             Log.WriteLog(LogType.NOT_DATABASE, LogFile.LOG, "初始化车位");
-            ParkingSpaceManager.ins = new ParkingSpaceManager();
+            if (ParkingSpaceManager.ins == null)
+            {
+                ParkingSpaceManager.ins = new ParkingSpaceManager();
+            }
             initState = initState && ParkingSpaceManager.ins.InitParkingSpace();
             //缓冲位初始化
             Log.WriteLog(LogType.NOT_DATABASE, LogFile.LOG, "初始化缓冲位");
-            ParkingBufferManager.ins = new ParkingBufferManager();
+            if (ParkingSpaceManager.ins == null)
+            {
+                ParkingBufferManager.ins = new ParkingBufferManager();
+            }
             initState = initState && ParkingBufferManager.ins.InitParkingBuffers();
+            UILogServer.ins.info("系统初始化完成");
             return initState;
         }
     }

BIN
parkMonitor/resource/inlineRes/plcAddr.csv


+ 15 - 5
parkMonitor/server/CoreThread/AbstractCmd.cs

@@ -132,7 +132,10 @@ namespace parkMonitor.server.CoreThread
             {
                 while (!isClosing)
                 {
-                    PLCMsg = (PLCMessage)PLC.GetMessage();
+                    if (PLC != null)
+                    {
+                        PLCMsg = (PLCMessage)PLC.GetMessage();
+                    }
                     bool occupied = true;
                     if (PLCMsg != null)
                     {
@@ -390,7 +393,10 @@ namespace parkMonitor.server.CoreThread
             mt.StartTiming();
             while (!isClosing)
             {
-                PLCMsg = (PLCMessage)PLC.GetMessage();
+                if (PLC != null)
+                {
+                    PLCMsg = (PLCMessage)PLC.GetMessage();
+                }
                 if (PLCMsg != null)
                 {
                     foreach (LaserMessage lm in PLCMsg.laserMsgList)
@@ -477,8 +483,12 @@ namespace parkMonitor.server.CoreThread
             while (!isClosing)
             {
                 Thread.Sleep(1000);
-                PLCMsg = (PLCMessage)PLC.GetMessage();
-                int storeStatus = Convert.ToInt32(PLCMsg.originalPlcList[park_completed_address].Value);
+                int storeStatus = 0;
+                if (PLC != null)
+                {
+                    PLCMsg = (PLCMessage)PLC.GetMessage();
+                    storeStatus = Convert.ToInt32(PLCMsg.originalPlcList[park_completed_address].Value);
+                }
                 //停车完成信号
                 if (storeStatus == status)
                 {
@@ -1110,7 +1120,7 @@ namespace parkMonitor.server.CoreThread
                         try
                         {
                             List<string> strs = new List<string>();
-                            updateParkingSpaceStateSql = "update parkingspace set parkingSpaceState = 1 where parkingSpaceID = '" + ps.parkingSpaceID + "'";
+                            updateParkingSpaceStateSql = "update parkingspace set parkingSpaceState = 0 where parkingSpaceID = '" + ps.parkingSpaceID + "'";
                             updateFreeSpaceSql = "update garage set garageFreeSpace = '" + freeSpaceCount + "' where garageID = '" + garageID + "'";
                             updateVehicleStateSql = "update vehicle set vehiclepParkState = 0 where numberPlate = '" + queueCmd.LicenseNum + "'";
                             updateParkingRecordsSql = "update parkingrecords set parkingRecordsState = 6,realGetTime = '" + queueCmd.TimeRecord + "'where parkingRecordsID = '" + queueCmd.parkingRecordsID + "'";

+ 1 - 1
parkMonitor/server/CoreThread/CoreThreadTest2.cs

@@ -216,7 +216,7 @@ namespace parkMonitor.server.CoreThread
                     normalStatus = Convert.ToInt32(PLCMsg.originalPlcList[equipmentStatus_address].Value);
                 }
                 //设备总控状态
-                if (normalStatus == 1 && EntityForCore.ins.globalStatus && ParkingBufferManager.ins.checkedManually)
+                if (normalStatus == 1 && EntityForCore.ins.globalStatus && ParkingBufferManager.ins.checkedAuto)
                 {
                     UILogServer.ins.log("设备总状态正常");
                     Log.WriteLog(LogType.NOT_DATABASE, LogFile.LOG, "设备总状态正常");

+ 13 - 7
parkMonitor/server/CoreThread/QueuingThread.cs

@@ -100,10 +100,14 @@ namespace parkMonitor.server.CoreThread
                     cmd.userID = webMsg.sender;
                     cmd.garageID = webMsg.garageID;
                     cmd.parkingRecordsID = webMsg.parkingRecordsID;
-                    if (cmd.commandType == 'p' && webMsg.bookTime != null)
+                    if (cmd.commandType == 'p')
                     {
                         DateTime dt = new DateTime();
-                        if (webMsg.bookTime == "" || DateTime.TryParse(webMsg.bookTime, out dt))
+                        if(webMsg.bookTime == null)
+                        {
+                            cmd.TimeRecord = "";
+                        }
+                        else if (DateTime.TryParse(webMsg.bookTime, out dt))
                         {
                             cmd.TimeRecord = webMsg.bookTime;
                         }
@@ -245,9 +249,11 @@ namespace parkMonitor.server.CoreThread
                 if (cmd != null)
                 {
                     TimeSpan ts = DateTime.Now - DateTime.Parse(cmd.TimeRecord);
-                    if (ts.Minutes >= bookTime)
+                    if (ts.TotalMinutes>= bookTime)
                     {
                         //超时则释放车位,丢出指令
+                        UILogServer.ins.warn("预约指令 " + cmd.LicenseNum + " 已存在超过" + bookTime + "分钟 ,强制出队");
+                        Log.WriteLog(LogType.NOT_DATABASE, LogFile.ERROR, "预约指令 " + cmd.LicenseNum + " 已存在超过" + bookTime + "分钟 ,强制出队");
                         ParkingSpaceManager.ins.CancleBooking(cmd.LicenseNum);
                     }
                     else
@@ -273,8 +279,8 @@ namespace parkMonitor.server.CoreThread
                 //Console.WriteLine("指令已扫描时间:" + userTimeSpan.TotalSeconds);
                 if (userTimeSpan.TotalMinutes >= userTime)
                 {
-                    UILogServer.ins.error("异常:用户指令 " + cmd.LicenseNum + " 已存在超过" + String.Format("{0:F1}", userTimeSpan.TotalMinutes) + "分钟 ,强制出队");
-                    Log.WriteLog(LogType.NOT_DATABASE, LogFile.ERROR, "异常:用户指令 " + cmd.LicenseNum + " 已存在超过" + String.Format("{0:F1}", userTimeSpan.TotalMinutes) + "分钟 ,强制出队");
+                    UILogServer.ins.warn("用户指令 " + cmd.LicenseNum + " 已存在超过" + String.Format("{0:F1}", userTimeSpan.TotalMinutes) + "分钟 ,强制出队");
+                    Log.WriteLog(LogType.NOT_DATABASE, LogFile.ERROR, "用户指令 " + cmd.LicenseNum + " 已存在超过" + String.Format("{0:F1}", userTimeSpan.TotalMinutes) + "分钟 ,强制出队");
                     //cmd.LicenseNum = "";
                     cmd.commandType = 'e';
                     lock (ValidStoreCmdQueue)
@@ -309,8 +315,8 @@ namespace parkMonitor.server.CoreThread
                     if (licTimeSpan.TotalMinutes >= licenseTime)
                     {
                         //异常号牌不再入队,而是界面提示管理员,并让号牌机线程
-                        UILogServer.ins.error("异常:号牌 " + node.LicenseNum + " 已扫描超过" + String.Format("{0:F1}", licTimeSpan.TotalMinutes) + "分钟 ,强制出队");
-                        Log.WriteLog(LogType.NOT_DATABASE, LogFile.ERROR, "异常:号牌 " + node.LicenseNum + " 已扫描超过" + String.Format("{0:F1}", licTimeSpan.TotalMinutes) + "分钟 ,强制出队");
+                        UILogServer.ins.warn("号牌 " + node.LicenseNum + " 已扫描超过" + String.Format("{0:F1}", licTimeSpan.TotalMinutes) + "分钟 ,强制出队");
+                        Log.WriteLog(LogType.NOT_DATABASE, LogFile.ERROR, "号牌 " + node.LicenseNum + " 已扫描超过" + String.Format("{0:F1}", licTimeSpan.TotalMinutes) + "分钟 ,强制出队");
                         //停车完成,将相应车牌复位
                         NumberMachineMessage numberMachineMessage = new NumberMachineMessage();
                         numberMachineMessage.aNode = new NumberMachineNode();

+ 64 - 25
parkMonitor/server/CoreThread/SpaceManager.cs

@@ -10,6 +10,7 @@ using parkMonitor.entity;
 using parkMonitor.LOG;
 using parkMonitor.server.uiLogServer;
 using parkMonitor.controlPanel;
+using parkMonitor.model;
 
 namespace parkMonitor.server.CoreThread
 {
@@ -99,13 +100,16 @@ namespace parkMonitor.server.CoreThread
                     Parking_Space temp = null;
                     while (enumer.MoveNext())
                     {
-                        if (enumer.Current.Value.parkingSpaceState == 0)
+                        if (enumer.Current.Value != null)
                         {
-                            lps.Add(enumer.Current.Key, enumer.Current.Value);
-                        }
-                        else if (enumer.Current.Value.parkingSpaceState == 2 && enumer.Current.Value.licence == queueCmd.LicenseNum)
-                        {
-                            temp = (Parking_Space)(enumer.Current.Value.Clone());
+                            if (enumer.Current.Value.parkingSpaceState == 0)
+                            {
+                                lps.Add(enumer.Current.Key, enumer.Current.Value);
+                            }
+                            else if (enumer.Current.Value.parkingSpaceState == 2 && enumer.Current.Value.licence == queueCmd.LicenseNum)
+                            {
+                                temp = (Parking_Space)(enumer.Current.Value.Clone());
+                            }
                         }
                     }
                     if (temp != null && !booking)
@@ -125,14 +129,17 @@ namespace parkMonitor.server.CoreThread
                     Dictionary<int, Parking_Space>.Enumerator enumer2 = lps.GetEnumerator();
                     while (enumer2.MoveNext())
                     {
-                        float deltaX = (enumer2.Current.Value.parkingSpaceX - pt_Ent.parkingEntX) * (float)xWeight;
-                        float deltaY = (enumer2.Current.Value.parkingSpaceY - pt_Ent.parkingEntY) * (float)yWeight;
-                        float deltaZ = (enumer2.Current.Value.parkingSpaceZ - pt_Ent.parkingEntZ) * (float)zWeight;
-                        float dist_sq = deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ;
-                        if (dist_sq < min_dis_sq)
+                        if (enumer2.Current.Value != null)
                         {
-                            min_dis_sq = dist_sq;
-                            rps = enumer2.Current.Value;
+                            float deltaX = (enumer2.Current.Value.parkingSpaceX - pt_Ent.parkingEntX) * (float)xWeight;
+                            float deltaY = (enumer2.Current.Value.parkingSpaceY - pt_Ent.parkingEntY) * (float)yWeight;
+                            float deltaZ = (enumer2.Current.Value.parkingSpaceZ - pt_Ent.parkingEntZ) * (float)zWeight;
+                            float dist_sq = deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ;
+                            if (dist_sq < min_dis_sq)
+                            {
+                                min_dis_sq = dist_sq;
+                                rps = enumer2.Current.Value;
+                            }
                         }
                     }
                     count = lps.Count - 1;
@@ -205,7 +212,7 @@ namespace parkMonitor.server.CoreThread
                 Dictionary<int, Parking_Space>.Enumerator enumer = parkingSpaceStatusMap.GetEnumerator();
                 while (enumer.MoveNext())
                 {
-                    if (enumer.Current.Value.parkingSpaceState == 0) { count += 1; }
+                    if (enumer.Current.Value!=null && enumer.Current.Value.parkingSpaceState == 0) { count += 1; }
                 }
             }
             return count;
@@ -221,7 +228,7 @@ namespace parkMonitor.server.CoreThread
             Parking_Space temp = null;
             while (enumer.MoveNext())
             {
-                if (enumer.Current.Value.parkingSpaceState == 2 && enumer.Current.Value.licence == license)
+                if (enumer.Current.Value!=null && enumer.Current.Value.parkingSpaceState == 2 && enumer.Current.Value.licence == license)
                 {
                     temp = (Parking_Space)(enumer.Current.Value.Clone());
                 }
@@ -247,7 +254,7 @@ namespace parkMonitor.server.CoreThread
             parkingEntY = entY;
             parkingEntZ = entZ;
         }
-        public CEntrance() : this(0,0,0)
+        public CEntrance() : this(0, 0, 0)
         {
 
         }
@@ -291,28 +298,60 @@ namespace parkMonitor.server.CoreThread
     {
         public static ParkingBufferManager ins { get; set; }
         public int bufferCount { get; set; }
-        public bool checkedManually { get; set; }
-        public List<ParkingBuffer> bufferList = new List<ParkingBuffer>();
+        private int bufferAddress = 0, completeStatusAddress = 0;
+        public bool checkedAuto { get; set; }
+        public List<ParkingBuffer> bufferList = null;
         public bool InitParkingBuffers()
         {
-            checkedManually = false;
+            checkedAuto = false;
+            bufferList = new List<ParkingBuffer>();
             try
             {
                 bufferCount = Int32.Parse(ConfigurationManager.AppSettings["bufferCount"]);
-                for (int i = 1; i <= bufferCount; i++)
+                bufferAddress = Int32.Parse(ConfigurationManager.AppSettings["bufferAddress"]);
+                completeStatusAddress = Int32.Parse(ConfigurationManager.AppSettings["completeStatusAddress"]);
+                IEquipments plc = null;
+                List<PLCNode> pList = null;
+                while (plc == null)
+                {
+                    plc = EquipmentSimpleFactory.ins.FindEquipment(EquipmentName.PLC);
+                }
+                pList = ((PLCMessage)plc.GetMessage()).originalPlcList;
+                //根据plc中数据初始化缓冲位
+                for (int i = 0; i < bufferCount; i++)
                 {
-                    //初始完全占用
-                    bufferList.Add(new ParkingBuffer(i));
+                    for (int j = 0; j < pList.Count; j++)
+                    {
+                        if (pList[j].Address == (bufferAddress + i).ToString())
+                        {
+                            if (pList[j].Value == "1")
+                            {
+                                bufferList.Add(new ParkingBuffer(i + 1, true));
+                                break;
+                            }
+                            else if (pList[j].Value == "0")
+                            {
+                                bufferList.Add(new ParkingBuffer(i + 1, false));
+                                break;
+                            }
+                            else
+                            {
+                                UILogServer.ins.error("缓冲位数据异常,请检查plc相关数据");
+                                return false;
+                            }
+                        }
+                    }
                 }
-                UILogServer.ins.warn("请手动确认缓冲位状态");
+                //UILogServer.ins.warn("请手动确认缓冲位状态");
                 Log.WriteLog(LogType.NOT_DATABASE, LogFile.LOG, "初始化缓冲位成功");
+                checkedAuto = true;
                 return true;
             }
-            catch { return false; }
+            catch { Log.WriteLog(LogType.NOT_DATABASE, LogFile.LOG, "初始化缓冲位失败"); return false; }
         }
         public ParkingBuffer MallocParkingBuffer(int numMachineID)
         {
-            if (!checkedManually)
+            if (!checkedAuto)
                 return null;
             int min_dis_sq = 2500; //初始默认缓冲位距号牌ID 50 个单位
             ParkingBuffer allocatedPB = null;

+ 27 - 13
parkMonitor/server/PLCLinker/PLCLinker.cs

@@ -18,6 +18,7 @@ using System.Diagnostics;
 using System.Configuration;
 using parkMonitor.server.uiLogServer;
 using parkMonitor.LOG;
+using System.Net.Sockets;
 
 namespace parkMonitor.server
 {
@@ -386,20 +387,24 @@ namespace parkMonitor.server
             busTcpClient = new ModBusTcpClient(ipString, port, station);
             try
             {
-                OperateResult connect = busTcpClient.ConnectServer();
-                if (connect.IsSuccess)
+                if(busTcpClient != null)
                 {
-                    AsyncCmdServer.ins.send(AsyncCmdType.PLCOnline);
-                    UILogServer.ins.info("PLC连接成功");
-                    isConnection = true;
-                    linkCount = 0;
-                }
-                else
-                {
-                    AsyncCmdServer.ins.send(AsyncCmdType.PLCOffline);
-                    //UILogServer.ins.error("PLC连接失败,重试");
-                    isConnection = false;
+                    OperateResult connect = busTcpClient.ConnectServer();
+                    if (connect.IsSuccess)
+                    {
+                        AsyncCmdServer.ins.send(AsyncCmdType.PLCOnline);
+                        UILogServer.ins.info("PLC连接成功");
+                        isConnection = true;
+                        linkCount = 0;
+                    }
+                    else
+                    {
+                        AsyncCmdServer.ins.send(AsyncCmdType.PLCOffline);
+                        //UILogServer.ins.error("PLC连接失败,重试");
+                        isConnection = false;
+                    }
                 }
+              
             }
             catch (Exception ex)
             {
@@ -574,11 +579,15 @@ namespace parkMonitor.server
         {
             try
             {
-                plcMsg.originalPlcList = JsonHelper.DeserializeJsonToList<PLCNode>(json);
+                if (json != "")
+                {
+                    plcMsg.originalPlcList = JsonHelper.DeserializeJsonToList<PLCNode>(json);
+                }
                 if (decompressIndex != null && decompressIndex.Count != 0)
                 {
                     plcMsg.extendedPlcList = ListDecompression(plcMsg.originalPlcList, decompressIndex);
                 }
+
                 return (PLCMessage)plcMsg.Clone();
             }
             catch (Exception)
@@ -727,6 +736,11 @@ namespace parkMonitor.server
                 addrLength = Int32.Parse(ConfigurationManager.AppSettings.Get("PLC_address_length"));
             }
             catch (Exception) { UILogServer.ins.error("PLC配置文件异常"); Log.WriteLog(LogType.NOT_DATABASE, LogFile.ERROR, "PLC配置文件异常"); }
+            for (int i = startAddr; i < startAddr + addrLength; i++)
+            {
+                plcMsg.originalPlcList.Add(new PLCNode(i.ToString(), "0"));
+            }
+
             LinkStart();
 
             Task.Factory.StartNew(() =>