RobotManager.cs 6.9 KB
using DeviceLib;
using log4net;
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace OnlineStore.DeviceLibrary
{
    public class RobotManager
    {
        public static bool UseBuzzer = ConfigAppSettings.GetIntValue(Setting_Init.UseBuzzer).Equals(1);
        private static bool isInit = false;
        //public static bool IsConnectServer = !ConfigAppSettings.GetValue(Setting_Init.http_server).Equals("");

        public static RobotBean robot = null;
        public static Robot_Config Config = null; 
        public static Dictionary<int, DeviceConfig> allConfigMap = null;
        public RobotManager()
        {
        }
        public static void CheckEnum(Type type)
        {
            if (type.IsEnum)
            { 
                List<int> valueList = new List<int>();
                Array array = Enum.GetValues(type);
                foreach (int item in array)
                {
                    if (valueList.Contains(item))
                    {
                        LogUtil.error(  type.Name + "枚举值:" + item + "重复存在,请检查代码!程序退出。");
                        Application.Exit();
                        break;
                    }
                    valueList.Add(item);
                }
            }
        }
        public static bool Init()
        {
            try
            {
                if (!isInit)
                { 
                    DeviceConfig.SubDIList = new Dictionary<int, Dictionary<string, ConfigIO>>();
                    DeviceConfig.SubDOList = new Dictionary<int, Dictionary<string, ConfigIO>>();
                    DeviceConfig.ProIOIpMap = new Dictionary<string, string>(); 

                    allConfigMap = new Dictionary<int, DeviceConfig>();
                    string server = ConfigAppSettings.GetValue(Setting_Init.http_server);
                   
                    CheckEnum(typeof(RobotMoveInfo));
                //    CheckEnum(typeof(LineStatus));
                    CheckEnum(typeof(RobotRunStatus));

                    isInit = true;
                   

                    string appPath = Application.StartupPath; 
                    string linefilePath = appPath + ConfigAppSettings.GetValue(Setting_Init.ConfigPath_Robot);

                    Config = CSVConfigReader.LoadRobotConfig(0,  DeviceType.Line, linefilePath);
                    Config.SetAxisParam();
                    allConfigMap.Add(0, Config);
                     
                    int subType = 1;
                    string inconfig = appPath + ConfigAppSettings.GetValue(Setting_Init.ConfigPath_InputEquip);
                    InputEquip_Config inputConfig = CSVConfigReader.LoadInputConfig(subType, DeviceType.InputDevice, inconfig);
                    inputConfig.SetIO(subType);
                    allConfigMap.Add(subType, inputConfig);

                    subType = 2;
                    string xconfig = appPath + ConfigAppSettings.GetValue(Setting_Init.ConfigPath_XRay);
                    XRay_Config XrayConfig = CSVConfigReader.LoadXRayConfig(subType, DeviceType.XRay, xconfig);
                    XrayConfig.SetIO(subType);
                    allConfigMap.Add(subType, XrayConfig);

                    subType = 3;
                    string ouotconfig = appPath + ConfigAppSettings.GetValue(Setting_Init.ConfigPath_OutputEquip);
                    OutputEquip_Config outconfig = CSVConfigReader.LoadOutputConfig(subType, DeviceType.OutputDevice, ouotconfig);
                    outconfig.SetIO(subType);
                    allConfigMap.Add(subType, outconfig);
                    ACServerManager.LogEvent += ACServerManager_LogEvent;
                   robot = new RobotBean(Config, inputConfig, XrayConfig, outconfig);
                    LogUtil.info("加载 完成!");
                    return true;

                }
                else if (robot != null)
                {
                    return true;
                }
            }
            catch (Exception ex)
            {
                LogUtil.error("出错:", ex);
                MessageBox.Show(ex.ToString(), "加载配置错误(请检查配置)");
                Application.Exit();
            }
            return false;
        }

        private static void ACServerManager_LogEvent(InfoType type, string msg)
        {
            if (type.Equals(InfoType.Error))
            {
                LogUtil.error(msg);
            }
            else if (type.Equals(InfoType.Info))
            {
                LogUtil.info(msg);
            }
            else
            {
                LogUtil.debug(msg);
            }
        }

        public static void SaveXRayConfig(XRay_Config config)
        {
            try
            {  
                string configpath = Application.StartupPath + ConfigAppSettings.GetValue(Setting_Init.ConfigPath_XRay);
                allConfigMap[config.Id] = config;
                bool result = CSVConfigReader.SaveConfig(configpath, config,typeof(XRay_Config));
                if (!result)
                {
                    LogUtil.error("保存配置文件失败:" + configpath);
                }
            }
            catch (Exception ex)
            {
                LogUtil.error("出错:",ex);
            }
        }
        public static void SaveInputConfig(InputEquip_Config config)
        {
            try
            { 
                string configpath = Application.StartupPath+ConfigAppSettings.GetValue(Setting_Init.ConfigPath_InputEquip);
                  
                allConfigMap[config.Id] = config;
                bool result = CSVConfigReader.SaveConfig(configpath, config,typeof(InputEquip_Config));
                if (!result)
                {
                    LogUtil.error("保存配置文件失败:" + configpath);
                }
            }
            catch (Exception ex)
            {
                LogUtil.error("出错:",ex);
            }
        }
        public static void SaveOutputConfig(OutputEquip_Config config)
        {
            try
            {  
                string configpath = Application.StartupPath + ConfigAppSettings.GetValue(Setting_Init.ConfigPath_OutputEquip);
                allConfigMap[config.Id] = config;
                bool result = CSVConfigReader.SaveConfig(configpath, config,typeof(OutputEquip_Config));
                if (!result)
                {
                    LogUtil.error("保存配置文件失败:" + configpath);
                }
            }
            catch (Exception ex)
            {
                LogUtil.error("出错:",ex);
            }
        }

    

        private static List<int> trayHeightList = new List<int>() { 8, 12, 16, 24, 32, 44, 56 };
        public static List<int> GetTrayList()
        {
            return trayHeightList;
        }
    }
}