AssemblyLineManager.cs 7.6 KB
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 LineManager
    {
        public static readonly ILog LOGGER = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

        public static int CurrInOutType = 0;
        private static bool isInit = false;
        public static bool IsConnectServer = !ConfigAppSettings.GetValue(Setting_Init.http_server).Equals("");

        public static LineBean Line = null;
        public static Line_Config Config = null;
        public static Dictionary<int, MoveEquip_Config> EquipConfigMap = null;
        public LineManager()
        {
        }
        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 LineBean Init()
        {
            try
            {
                if (!isInit)
                {
                    EquipConfigMap = new Dictionary<int, MoveEquip_Config>();
                    string server = ConfigAppSettings.GetValue(Setting_Init.http_server);
                    if (server.Equals(""))
                    {
                        IsConnectServer = false;
                    }
                    else
                    {
                        IsConnectServer = true;
                    }
                    CheckEnum(typeof(LineMoveStep));
                    CheckEnum(typeof(LineStatus));
                    CheckEnum(typeof(LineRunStatus));

                    isInit = true;
                    string lineType = ConfigAppSettings.GetValue(Setting_Init.Line_Type);
                    LogUtil.info(LOGGER, "  类型=" + lineType + ",开始加载 配置");
                    if (lineType == StoreType.RC_LINE)
                    {
                        string appPath = Application.StartupPath;
                        string CID = ConfigAppSettings.GetValue(Setting_Init.Line_CID);
                        string linefilePath = appPath + ConfigAppSettings.GetValue(Setting_Init.Line_ConfigPath);

                        Config = CSVConfigReader.LoadLineConfig(1, CID, StoreType.RC_LINE, linefilePath);
                        int count = ConfigAppSettings.GetIntValue(Setting_Init.line_count);

                        string moveEquipConfig = ConfigAppSettings.GetValue(Setting_Init.MoveEquip_ConfigPath);
                        for (int i = 1; i <= count; i++)
                        {
                            string config = appPath + moveEquipConfig.Replace(".csv", "_" + i + ".csv");
                            MoveEquip_Config moveConfig = CSVConfigReader.LoadMoveConfig(i, config);
                            //增加DI,DO
                            Dictionary<string, ConfigIO> doList = new Dictionary<string, ConfigIO>();
                            Dictionary<string, ConfigIO> diList = new Dictionary<string, ConfigIO>();

                            if (Config.SubDIList.ContainsKey(i))
                            {
                                diList = Config.SubDIList[i];
                            }
                            if (Config.SubDOList.ContainsKey(i))
                            {
                                doList = Config.SubDOList[i];
                            }
                            foreach (string key in diList.Keys)
                            {
                                moveConfig.DIList.Add(key, diList[key]);
                            }
                            foreach (string key in doList.Keys)
                            {
                                moveConfig.DOList.Add(key, doList[key]);
                            }
                            EquipConfigMap.Add(i, moveConfig);
                        }

                        Line = new LineBean(Config, EquipConfigMap);


                        LogUtil.info(LOGGER, "加载 完成!");
                        return Line;
                    }
                }
            }
            catch (Exception ex)
            {
                LOGGER.Error("出错:", ex);
                MessageBox.Show(ex.ToString(), "加载配置错误(请检查配置)");
                Application.Exit();
            }
            return null;
        }

        //private static string api_communication = "service/store/communication";    //流水线状态通信接口
        //private static string api_nextFeeder = "service/store/nextFeeder";  // 出库站位列表切换接口

        //public static string GetPostApi(string host)
        //{
        //    if (host == "")
        //    {
        //        host = ConfigAppSettings.GetValue(Setting_Init.http_server);
        //    }
        //    if (!host.StartsWith("http://"))
        //    {
        //        host = "http://" + host;
        //    }
        //    if (!host.EndsWith("/"))
        //    {
        //        host = host + "/";
        //    }
        //    return host + api_communication;
        //}
        //public static string GetNextFeederApi(string host)
        //{
        //    if (host == "")
        //    {
        //        host = ConfigAppSettings.GetValue(Setting_Init.http_server);
        //    }
        //    if (!host.StartsWith("http://"))
        //    {
        //        host = "http://" + host;
        //    }
        //    if (!host.EndsWith("/"))
        //    {
        //        host = host + "/";
        //    }
        //    return host + api_nextFeeder;
        //}

        /// <summary>
        /// 获取阻挡气缸检测类型
        /// </summary>
        /// <returns></returns>
        public static string GetStopIoType(int stopCylinderIOType)
        {
            string type = IO_Type.Fixture_Check_1;
            switch (stopCylinderIOType)
            {
                case 1:
                    type = IO_Type.Fixture_Check_1;
                    break;
                case 2:
                    type = IO_Type.Fixture_Check_2;
                    break;
                case 3:
                    type = IO_Type.Fixture_Check_3;
                    break;
                case 4:
                    type = IO_Type.Fixture_Check_4;
                    break;
            }
            return type;
        }

        public static void SaveMoveEquipConfig(MoveEquip_Config config)
        {
            try
            {
                //位置配置到文件中
                string appPath = Application.StartupPath;
                string moveEquipConfig = ConfigAppSettings.GetValue(Setting_Init.MoveEquip_ConfigPath);

                string configStr = appPath + moveEquipConfig.Replace(".csv", "_" + config.Id + ".csv");
                EquipConfigMap[config.Id] = config;
                bool result = CSVConfigReader.SaveMoveEquipConfig(configStr, config);
                if (!result)
                {
                    LOGGER.Error("保存配置文件失败:" + configStr);
                }
            }
            catch (Exception ex)
            {
                LOGGER.Error("出错:", ex);
            }
        }

    }
}