ACStoreManager.cs 5.8 KB
using log4net;
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Ports;
using System.Linq;
using System.Text; 
using System.Windows.Forms;

namespace OnlineStore.DeviceLibrary
{
    public class ACStoreManager
    { 
        public static readonly ILog LOGGER = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        public static AC_SA_BoxBean store = null;
        private static bool isInit = false;
        public static bool IsConnectServer=!ConfigAppSettings.GetValue(Setting_Init.http_server).Equals("");
        public ACStoreManager()
        {
        }
        public static bool OpenShuoKe(AC_SA_BoxBean box)
        {
            //打开硕科步进驱动器端口
            Parity parity = (Parity)box.Config.CompressAxis_PortParity;
            StopBits bit = (StopBits)box.Config.CompressAxis_StopBits;
            bool result = ShuoKeControls.InitPort(box.Config.CompressAxis_PortName, box.Config.CompressAxis_PortBaudrate,
                box.Config.CompressAxis_PortParity, 8, bit);
            if (result)
            {
                LogUtil.info(box.StoreName + "打开硕科步进控制器【" + box.Config.CompressAxis_PortName + "】成功");
                return true;
            }
            else
            {
                LogUtil.error(LOGGER, box.StoreName + "打开硕科步进控制器【" + box.Config.CompressAxis_PortName + "】失败,启动失败!");
                return false;
            }
        }
        public static void CheckEnum(Type type)
        {
            if (type.IsEnum)
            {
                List<int> valueList = new List<int>();
                foreach (int item in Enum.GetValues(type))
                {
                    if (valueList.Contains(item))
                    {
                        LogUtil.error(LOGGER, type.Name + "枚举值:" + item + "重复存在,请检查代码!");
                        Application.Exit();
                        break;
                    }
                    valueList.Add(item);
                }
            }
        }
        public static AC_SA_BoxBean InitStore()
        {
            try
            {
                if (!isInit)
                {
                    string server = ConfigAppSettings.GetValue(Setting_Init.http_server);
                    if (server.Equals(""))
                    {
                        IsConnectServer = false;
                    }
                    else
                    {
                        //IsConnectServer = true;
                    }
                    CheckEnum(typeof(StoreMoveStep));
                    CheckEnum(typeof(StoreStatus));
                    CheckEnum(typeof(StoreRunStatus));

                    isInit = true;
                    string storeType = ConfigAppSettings.GetValue(Setting_Init.Store_Type);
                    LogUtil.info(LOGGER, "配置的料仓 类型=" + storeType + ",开始加载料仓配置");
                    if (storeType == StoreType.RC_AC_SA)
                    {
                        string appPath = Application.StartupPath; 
                        string CID = ConfigAppSettings.GetValue(Setting_Init.Store_CID);
                        string linefilePath = appPath + ConfigAppSettings.GetValue(Setting_Init.Store_ConfigPath);

                        StoreConfig storeConfig = CSVConfigReader.LoadConfig(1, CID, StoreType.RC_AC_SA, linefilePath);
                        string positionConfigFile = appPath + ConfigAppSettings.GetValue(Setting_Init.Store_Position_Config);

                        if (File.Exists(positionConfigFile))
                        {
                            LogUtil.info(LOGGER, "加载位置文件:" + positionConfigFile);
                            CSVPositionReader<ACStorePosition>.ReloadCSVFile(positionConfigFile);
                        }
                        AC_SA_BoxBean storeBean = new AC_SA_BoxBean((AC_SA_Config)storeConfig);
                        storeBean.CID = CID;
                        LogUtil.info(LOGGER, "加载料仓完成!");
                        //add by renym 2018-11-26 进料轴标志设置
                        if (storeBean.Config.Charging_Axis != null)
                            storeBean.IsHasCharging_Axis = false;
                        else
                            storeBean.IsHasCharging_Axis = true;                        
                        store = storeBean;
                        return store;
                    }
                }
            }
            catch (Exception ex)
            {
                LOGGER.Error("出错:", ex);
                MessageBox.Show(ex.ToString(), "加载配置错误(请检查配置)");
                Application.Exit();
            }
            return store;
        }
        /// <summary>
        /// 修改了料仓配置,更新缓存,更新配置文件(只能更新PRO的配置)
        /// </summary>
        /// <param name="kTK_LA_Store_Config"></param>
        public static void UpdateBoxConfig(AC_SA_Config storeConfig)
        {
            try
            {
                //位置配置到文件中
                string appPath = Application.StartupPath;

                string configFile = appPath + ConfigAppSettings.GetValue(Setting_Init.Store_ConfigPath);
                bool result = CSVConfigReader.SaveBoxPosition(configFile, storeConfig);
                if (!result)
                {
                    LOGGER.Error("保存配置文件失败:" + configFile);
                }
                store.Config = storeConfig;
                store.MoveAxisConfig();
            }
            catch (Exception ex)
            {
                LOGGER.Error("出错:", ex);
            }
        }
       
    }
}