Exemple #1
0
        /// <summary>
        /// 当程序崩溃时,保存最后的数据
        /// </summary>
        private void SaveAgingDataWhenAppCrash()
        {
            AgingDock         dock        = null;
            string            fileName    = DateTime.Now.ToString("yyyy-MM-dd HH_mm_ss_fff") + ".xlsx";
            List <Controller> controllers = null;

            for (int i = 0; i < m_DockList.Count; i++)
            {
                dock        = m_DockList[i];
                controllers = dock.Controllers;
                if (controllers == null)
                {
                    continue;
                }
                for (int j = 0; i < controllers.Count; j++)
                {
                    if (controllers[j] != null)
                    {
                        List <AgingPump> pumpList = controllers[j].SortAgingPumpList();
                        if (pumpList == null || pumpList.Count == 0)
                        {
                            continue;
                        }
                        else
                        {
                            dock.ExportExcel(fileName);
                            break;
                        }
                    }
                }
            }
        }
 private void UploadAlarm(BaseCommand e)
 {
     if (e != null && e.RemoteSocket != null)
     {
         Controller controller = ControllerManager.Instance().Get(e.RemoteSocket);
         if (controller != null)
         {
             int       dockNo = controller.DockNo;
             AgingDock dock   = m_DockList.Find((x) => { return((int)x.Tag == dockNo); });//在每个货架内部保存报警信息
             if (dock != null)
             {
                 dock.UpdateAlarmInfo(e as GetAlarm);
             }
             else
             {
                 Logger.Instance().ErrorFormat("UploadAlarm()->货架没找到 DockNo={0}", dockNo);
             }
         }
         else
         {
             IPEndPoint point  = e.RemoteSocket.ConnectSocket.RemoteEndPoint as IPEndPoint;
             byte[]     ipByte = point.Address.GetAddressBytes();
             long       ip     = ControllerManager.Bytes2Long(ipByte);
             Logger.Instance().ErrorFormat("UploadAlarm()->控制器没找到 ip={0}", ip);
         }
     }
     else
     {
         Logger.Instance().Error("UploadAlarm()->传入的参数为空");
     }
 }
        private void LoadDockList()
        {
            m_DockList.Clear();
            if (m_DockCount <= 0)
            {
                Logger.Instance().Info("机架数量小于等于0,请重新设置。");
                return;
            }
            int rowCount = m_DockCount / 5;

            if (m_DockCount % 5 > 0)
            {
                rowCount += 1;
            }

            for (int i = 0; i < rowCount; i++)
            {
                RowDefinition row = new RowDefinition();
                row.Height = GridLength.Auto;
                dockGrid.RowDefinitions.Add(row);
            }
            for (int i = 0; i < 5; i++)
            {
                ColumnDefinition col = new ColumnDefinition();
                col.Width = GridLength.Auto;
                dockGrid.ColumnDefinitions.Add(col);
            }

            for (int i = 0; i < m_DockCount; i++)
            {
                AgingDock dock = new AgingDock();
                dock.OnConfigrationCompleted += OnConfigrationCompleted;
                dock.OnPumpSelected          += OnPumpSelected;
                dock.SetTimeOut(m_TimeOut);//设置信号量的等待时间,和命令超时时间一样

                if (m_DockCount == 1)
                {
                    dock.Name   = "dock" + m_DockNumber.ToString();
                    dock.Tag    = m_DockNumber;
                    dock.DockNo = m_DockNumber;
                    dock.Margin = new Thickness(10, 10, 10, 10);
                    dock.SetTitle(m_DockNumber.ToString() + "号架");
                }
                else
                {
                    dock.Name   = "dock" + (i + 1).ToString();
                    dock.Tag    = i + 1;
                    dock.DockNo = i + 1;
                    dock.Margin = new Thickness(10, 10, 10, 10);
                    dock.SetTitle((i + 1).ToString() + "号架");
                }

                dockGrid.Children.Add(dock);
                m_DockList.Add(dock);
                Grid.SetRow(dock, i / 5);
                dock.dockGrid.Background = new SolidColorBrush(ColorSet[i / 5]);
                dock.DefaultColor        = ColorSet[i / 5];
                Grid.SetColumn(dock, i % 5);
            }
        }
        /// <summary>
        /// 当客户端连入时要发送泵类型信息,
        /// 如果用户尚未配置,则不用发,留到点开始的时候发
        /// </summary>
        /// <param name="e"></param>
        private void SendPumpType2Wifi(SocketConnectArgs e)
        {
            Controller controller = ControllerManager.Instance().Get(e.ConnectedSocket);

            if (controller == null)
            {
                return;
            }
            int       dockNo = controller.DockNo;
            AgingDock dock   = m_DockList.Find((x) => { return(x.DockNo == dockNo); });

            if (dock == null || dock.ChannelHashRowNo == null || !dock.ChannelHashRowNo.ContainsKey(controller.RowNo))
            {
                return;
            }
            AgingParameter para = m_DockParameter[dockNo] as AgingParameter;

            if (para != null)
            {
                if (Enum.IsDefined(typeof(ProductID), para.PumpType))
                {
                    ProductID     pid        = (ProductID)Enum.Parse(typeof(ProductID), para.PumpType);
                    CommandManage cmdManager = new CommandManage();
                    int           iChannel   = (int)dock.ChannelHashRowNo[controller.RowNo];
                    byte          channel    = (byte)(iChannel & 0x000000FF);
                    //一旦收到连接,立即发送泵信息,必须要延迟10秒
                    cmdManager.SendPumpType(pid, (ushort)m_QueryInterval, e.ConnectedSocket, null, channel);
                }
                else
                {
                    Logger.Instance().ErrorFormat("SendPumpType2Wifi()->para.PumpType is not defined! para.PumpType={0}", para.PumpType);
                }
            }
            else
            {
                Logger.Instance().Debug("SendPumpType2Wifi()->DefaultParameter is null");
            }
        }
        private void OnConfigrationCompleted(object sender, ConfigrationArgs e)
        {
            foreach (DictionaryEntry entry in e.DockParameter)
            {
                if (m_DockParameter.ContainsKey(entry.Key))
                {
                    m_DockParameter[entry.Key] = new AgingParameter((AgingParameter)entry.Value);
                }
                else
                {
                    m_DockParameter.Add(entry.Key, new AgingParameter((AgingParameter)entry.Value));
                }
            }
            AgingDock dock = null;

            for (int i = 0; i < m_DockList.Count; i++)
            {
                dock = m_DockList[i];
                if (m_DockParameter.ContainsKey(dock.DockNo))
                {
                    dock.lbPumpType.Content = "泵型号:" + ((AgingParameter)m_DockParameter[dock.DockNo]).PumpType;
                }
            }
        }
Exemple #6
0
        /// <summary>
        /// 当客户端连入时要发送泵类型信息,
        /// 如果用户尚未配置,则不用发,留到点开始的时候发
        /// </summary>
        /// <param name="e"></param>
        private void SendPumpType2Wifi(SocketConnectArgs e)
        {
            Controller controller = ControllerManager.Instance().Get(e.ConnectedSocket);

            if (controller == null)
            {
                return;
            }
            int       dockNo = controller.DockNo;
            AgingDock dock   = m_DockList.Find((x) => { return(x.DockNo == dockNo); });

            if (dock == null || dock.ChannelHashRowNo == null || !dock.ChannelHashRowNo.ContainsKey(controller.RowNo))
            {
                return;
            }
            AgingParameter para = m_DockParameter[dockNo] as AgingParameter;

            if (para != null)
            {
                CustomProductID cid        = ProductIDConvertor.Name2CustomProductID(para.PumpType);
                ProductID       pid        = ProductIDConvertor.Custom2ProductID(cid);
                CommandManage   cmdManager = new CommandManage();
                int             iChannel   = (int)dock.ChannelHashRowNo[controller.RowNo];
                byte            channel    = (byte)(iChannel & 0x000000FF);
                //一旦收到连接,立即发送泵信息,必须要延迟10秒
                if (pid == ProductID.Graseby1200En)//英文版的ID和中文的一样
                {
                    pid = ProductID.Graseby1200;
                }
                cmdManager.SendPumpType(pid, (ushort)m_QueryInterval, e.ConnectedSocket, null, channel);
            }
            else
            {
                Logger.Instance().Debug("SendPumpType2Wifi()->DefaultParameter is null");
            }
        }
        /// <summary>
        /// 当客户端l连入或断开时要更新主界面
        /// </summary>
        /// <param name="e"></param>
        private void SocketConnectOrClose(SocketConnectArgs e)
        {
            Controller controller = ControllerManager.Instance().Get(e.ConnectedSocket);

            if (controller == null)
            {
                return;
            }
            int       dockNo = controller.DockNo;
            AgingDock dock   = null;

            for (int i = 0; i < m_DockList.Count; i++)
            {
                dock = m_DockList[i];
                if (dock.DockNo == dockNo)
                {
                    if (e.Connected == true)
                    {
                        #region
                        //如果已经开始老化了,新的控制器不准连入,但是如果是偶然断开重连的除外
                        if (dock.IsStartAging)
                        {
                            //这里主要是通过连接时间戳判断的
                            if (controller.SocketConnectTimestamp.Year > 2000)
                            {
                                controller.SocketConnectTimestamp = DateTime.Now;
                            }
                            else
                            {
                                if (controller.SocketToken != null && controller.SocketToken.ConnectSocket != null)
                                {
                                    AsyncServer.Instance().CloseClientSocketEx(controller.SocketToken);
                                }
                                //controller.SocketToken.ConnectSocket.Shutdown(SocketShutdown.Both);
                                else
                                {
                                    Logger.Instance().ErrorFormat("SocketConnectOrClose() Error,编号为{0}的控制器SocketToken为null", dockNo);
                                }
                                break;
                            }
                        }
                        else
                        {
                            controller.SocketConnectTimestamp = DateTime.Now;
                        }
                        SolidColorBrush brush = dock.dockGrid.Background as SolidColorBrush;
                        switch (dock.AgingStatus)
                        {
                        case EAgingStatus.Unknown:
                        case EAgingStatus.Waiting:
                            dock.dockGrid.Background = new SolidColorBrush(Colors.Blue);
                            dock.AgingStatus         = EAgingStatus.PowerOn;
                            break;

                        case EAgingStatus.PowerOn:
                            dock.dockGrid.Background = new SolidColorBrush(Colors.Blue);
                            break;

                        case EAgingStatus.Charging:
                        case EAgingStatus.DisCharging:
                        case EAgingStatus.Recharging:
                            dock.dockGrid.Background = new SolidColorBrush(Colors.Yellow);
                            break;

                        case EAgingStatus.AgingComplete:
                            dock.dockGrid.Background = new SolidColorBrush(Colors.Green);
                            break;

                        case EAgingStatus.Alarm:        //出现除低电和耗尽以外的报警时提示红色
                            dock.dockGrid.Background = new SolidColorBrush(Colors.Red);
                            break;

                        default:
                            break;
                        }
                        dock.lbStatus.Content = AgingStatusMetrix.Instance().GetAgingStatus(dock.AgingStatus);
                        List <Controller> controllers = ControllerManager.Instance().Get(dockNo);
                        int clientCount = controllers.Count((x) => { return(x.SocketToken != null && x.SocketToken.ConnectSocket != null && x.SocketToken.ConnectSocket.Connected == true); });
                        dock.lbWifiCount.Content = string.Format("控制器数量:{0}/5", clientCount);
                        #endregion
                    }
                    else
                    {
                        #region
                        List <Controller> controllers = ControllerManager.Instance().Get(dockNo);
                        int clientCount = controllers.Count((x) => { return(x.SocketToken != null && x.SocketToken != e.ConnectedSocket && x.SocketToken.ConnectSocket != null && x.SocketToken.ConnectSocket.Connected == true); });
                        dock.lbWifiCount.Content = string.Format("控制器数量:{0}/5", clientCount);
                        //int index = controllers.FindIndex((x) => { return x.SocketToken != null && x.SocketToken != e.ConnectedSocket;});
                        if (clientCount <= 0)
                        {
                            //dock.AgingStatus = EAgingStatus.Waiting;
                            dock.dockGrid.Background = new SolidColorBrush(dock.DefaultColor);
                            dock.lbStatus.Content    = "等待接入";
                            break;
                        }
                        #endregion
                    }
                    break;
                }
            }
        }