Browse Source

LED屏幕管理,增加连接检测线程与状态显示。解决计费策略大小写问题。

yct 5 years ago
parent
commit
80fe404328

+ 3 - 2
PLCLinker/centralController/FormCentralController.cs

@@ -338,7 +338,7 @@ namespace centralController
                                 lb.Anchor = (AnchorStyles.Top | AnchorStyles.Left);
                                 lb.AutoSize = true;
                                 lb.Location = new Point(10, 10);
-                                lb.Margin = new Padding(3,10,3,10);
+                                lb.Margin = new Padding(3, 10, 3, 10);
                                 lb.Padding = new Padding(5);
                                 lb.Name = "lb_parkingSpace" + j;
                                 lb.TextAlign = ContentAlignment.MiddleCenter;
@@ -389,7 +389,7 @@ namespace centralController
                                             //Console.WriteLine("index:" + index+", status:"+ idPssMap[index].spaceStatus);
                                             space.BackColor = GetPSColor(idPssMap[index].spaceStatus);
                                         }
-                                        else if(result)
+                                        else if (result)
                                         {
                                             needUpdate = true;
                                             //Console.WriteLine("need update:"+index);
@@ -788,6 +788,7 @@ namespace centralController
 
             lbx_PLCStatus.SymbolColor = (Monitor.Monitor.PLC != null && Monitor.Monitor.PLC.isConnected) ? Color.Green : Color.OrangeRed;
             lbx_webStatus.SymbolColor = (Monitor.Monitor.webServer != null && Monitor.Monitor.webServer.GetConnectStatus()) ? Color.Green : Color.OrangeRed;
+            lbx_led1Status.SymbolColor = (Monitor.Monitor.allInOneMachine != null && Monitor.Monitor.allInOneMachine.boardList.Count > 0 && Monitor.Monitor.allInOneMachine.boardList[0].connected) ? Color.Green : Color.OrangeRed;
         }
         /// <summary>
         /// 刷新停车记录显示

+ 10 - 6
PLCLinker/centralController/Monitor/SystemInitializer.cs

@@ -110,7 +110,6 @@ namespace Monitor
             //webServer初始化结束,进入状态4
             if (!initStatus) { Monitor.SetNotification("Web模块初始化异常", parkMonitor.model.TextColor.Error); return; }
             else { Monitor.initializeState = 4; }
-
             #region 测试数据库操作
             ////*******测试数据库操作
             //string sql = "select * from parkingrecords where userID = 1;";
@@ -141,10 +140,12 @@ namespace Monitor
             //初始化计费策略
             Monitor.SetNotification("读取计费策略...", parkMonitor.model.TextColor.Log);
             PaymentScheme.ins = PaymentScheme.GetCurrentPaymentScheme(1);
+
             //初始化号牌机对象
             Monitor.SetNotification("扫描已接入号牌机...", parkMonitor.model.TextColor.Log);
             Monitor.numMachineLinker = new NumMachineLinker(flpHandle);
             Monitor.numMachineLinker.Start();
+
             //初始化显示板对象,显示板udp面向无连接
             Monitor.SetNotification("初始化屏显...", parkMonitor.model.TextColor.Log);
             Monitor.allInOneMachine = new BroadcastBoardManager();
@@ -168,16 +169,18 @@ namespace Monitor
             //Monitor.allInOneMachine.boardList[0].UpdateArrow(0);
             //Thread.Sleep(2000);
             #endregion 
-
             //BroadcastLinker.Start();
             //Monitor.allInOneMachine = BroadcastLinker.ins;//new BroadcastBoard(Monitor.allInOneMachineIP, Monitor.allInOneMachinePort);
+
             //初始化广告实例
             Monitor.SetNotification("初始化广告...", parkMonitor.model.TextColor.Log);
             Monitor.advertMgr = new AdvertManager();
-            //initStatus = initStatus && AdvertMgrInit(3);
+            initStatus = initStatus && AdvertMgrInit(3);
             //Monitor.AddNotification("test");
+
             Monitor.SetNotification("初始化终端...", parkMonitor.model.TextColor.Log);
             Terminal.Terminal.Start();
+
             //系统初始化结束,进入状态5
             if (!initStatus) { return; }
             else { Monitor.initializeState = 5; }
@@ -209,7 +212,7 @@ namespace Monitor
                 case 5:
                     Console.WriteLine("初始化成功");
                     Monitor.SetNotification("clear");
-                    Monitor.SetNotification("初始化成功,耗时:" + String.Format("{0:N2}秒" ,mt.GetInterval().TotalSeconds), parkMonitor.model.TextColor.Log);
+                    Monitor.SetNotification("初始化成功,耗时:" + String.Format("{0:N2}秒", mt.GetInterval().TotalSeconds), parkMonitor.model.TextColor.Log);
                     Monitor.globalStatus = true;
                     break;
             }
@@ -250,11 +253,12 @@ namespace Monitor
                 if (Monitor.PLC == null)
                 {
                     Monitor.PLC = new PLCLinker(CpuType.S71500, Monitor.plcIPAddr, (short)Monitor.plcRack, (short)Monitor.plcSlot, terminalDB
-                        ,centralDB ,parkingSpaceDB ,errorDB,
+                        , centralDB, parkingSpaceDB, errorDB,
                         Monitor.plcTerminalCount, Monitor.plcParkingSpaceCount);
                 }
                 //启动心跳进程
-                Thread heartbeatThread = new Thread(()=> {
+                Thread heartbeatThread = new Thread(() =>
+                {
                     while (!Monitor.isClosing)
                     {
                         if (Monitor.PLC != null && Monitor.PLC.isConnected)

+ 53 - 5
PLCLinker/centralController/allInOneMachine/broadcastModule.cs

@@ -48,6 +48,18 @@ namespace BroadcastModule
 
             Led5kSDK.InitSdk(2, 2);
             boardList = new List<BroadcastBoard>();
+            //初始化时启动连接检查线程
+            Task.Factory.StartNew(() =>
+            {
+                while (!Monitor.Monitor.isClosing)
+                {
+                    foreach (BroadcastBoard bb in boardList)
+                    {
+                        bb.CheckConnection();
+                    }
+                    Thread.Sleep(5000);
+                }
+            });
         }
 
         /// <summary>
@@ -63,11 +75,15 @@ namespace BroadcastModule
         public bool AddScreen(int id, byte[] led_ip, uint led_port, Led5kSDK.bx_5k_card_type card_type, int tmout_sec, int mode)
         {
             uint hand = Led5kSDK.CreateClient(led_ip, led_port, card_type, tmout_sec, mode, null);
+            BroadcastBoard bb = new BroadcastBoard(id, led_ip, led_port, card_type, hand);
             if (hand == 0)
+            {
+                boardList.Add(bb);
                 return false;
+            }
             else
             {
-                BroadcastBoard bb = new BroadcastBoard(id, led_ip, led_port, card_type, hand);
+                bb.connected = true;
                 bb.InitBoard(hand);
                 boardList.Add(bb);
                 return true;
@@ -122,6 +138,7 @@ namespace BroadcastModule
     public class BroadcastBoard
     {
         public BoardParams boardParams;
+        public bool connected;
         private Dictionary<uint, List<Led5kSDK.bx_5k_area_header>> handleDynamicAreasMap;
         private int volume = 10;
         public Led5kSDK.bx_5k_area_header header_model;
@@ -139,6 +156,37 @@ namespace BroadcastModule
             boardParams = new BoardParams(id, ip, port, card_type, handle);
         }
 
+        /// <summary>
+        /// 检查连接状态
+        /// </summary>
+        /// <returns></returns>
+        public bool CheckConnection()
+        {
+            int count = 3;
+            int result = -1;
+            while (count > 0)
+            {
+                if (boardParams.handle != 0)
+                {
+                    result = Led5kSDK.CON_PING(boardParams.handle);
+                    Console.WriteLine("屏幕ping结果: " + result);
+                    if (result == 0)
+                        break;
+                }
+                else
+                {
+                    boardParams.handle = Led5kSDK.CreateClient(boardParams.ip, boardParams.port, boardParams.card_type, 1, 2, null);
+                }
+                count--;
+                if (count == 0 && result != 0 && boardParams.handle != 0)
+                {
+                    Led5kSDK.Destroy(boardParams.handle);
+                    boardParams.handle = 0;
+                }
+            }
+            connected = (result == 0 ? true : false);
+            return connected;
+        }
         /// <summary>
         /// 初始化控制板
         /// </summary>
@@ -233,7 +281,7 @@ namespace BroadcastModule
         {
             List<string> sentenceContent = new List<string>();
             int i = 0;
-            if (boardParams.handle == 0 || boardParams.areas.Count<2)
+            if (boardParams.handle == 0 || boardParams.areas.Count < 2)
                 return false;
             while (i < sentence.Length)
             {
@@ -259,7 +307,7 @@ namespace BroadcastModule
                 Task.Factory.StartNew(() =>
                 {
                     int count = 0;
-                    UpdateArea(boardParams.handle, boardParams.areas[2].index, Encoding.Default.GetBytes(""),true, Encoding.Default.GetBytes(sentence));
+                    UpdateArea(boardParams.handle, boardParams.areas[2].index, Encoding.Default.GetBytes(""), true, Encoding.Default.GetBytes(sentence));
                     while (count < sentenceContent.Count)
                     {
                         UpdateArea(boardParams.handle, boardParams.areas[0].index, Encoding.Default.GetBytes(sentenceContent[count]));
@@ -341,7 +389,7 @@ namespace BroadcastModule
                 {
                     for (int i = 0; i < list.Count; i++)
                     {
-                        if(list[i].DynamicAreaLoc == index)
+                        if (list[i].DynamicAreaLoc == index)
                         {
                             err = Led5kSDK.SCREEN_DelDynamicArea(handle, list[i].DynamicAreaLoc);
                             return true;
@@ -441,7 +489,7 @@ namespace BroadcastModule
                         {
                             Led5kSDK.bx_5k_area_header temp = list[i];
                             temp.DataLen = areaText.Length;
-                            if(!soundOnly)
+                            if (!soundOnly)
                                 err = Led5kSDK.SCREEN_SendSoundDynamicArea(handle, temp, (ushort)temp.DataLen, areaText, 2, 0, 1, 5, soundText.Length, soundText);
                             else
                                 err = Led5kSDK.SCREEN_SendSoundDynamicArea(handle, temp, 0, Encoding.Default.GetBytes(""), 2, 0, 1, 5, soundText.Length, soundText);

+ 1 - 1
PLCLinker/centralController/model/PaymentScheme.cs

@@ -131,7 +131,7 @@ namespace centralController.model
         }
         public static PaymentScheme GetCurrentPaymentScheme(int index)
         {
-            string currentPaymentSchemeQuerySql = "select * from paymentScheme where paymentSchemeID = " + index + ";";
+            string currentPaymentSchemeQuerySql = "select * from paymentscheme where paymentSchemeID = " + index + ";";
             object[] paramArray = null;
             PaymentScheme scheme = null;