IOManager.cs 6.2 KB
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace OnlineStore.DeviceLibrary
{
    public abstract class IOManager
    {
        public static IOManager instance = null;

        public abstract void ConnectionIOList(List<string> dIODeviceNameList);


        #region KNDIO
        /// <summary>
        /// 写指定IO
        /// </summary>
        /// <param name="ioType">IO类型</param>
        /// <param name="ioValue">IO值</param>
        /// <param name="subType">=0表示流水线IO,>=1表示移栽IO</param>
        public static void IOMove(string ioType, IO_VALUE ioValue,int subType = 0)
        {
            ConfigIO configIo = GetDO(ioType, subType);
            if (configIo!=null)
            {  
                instance.WriteSingleDO(configIo.DeviceName, configIo.SlaveID, configIo.GetIOAddr(), ioValue);
                
                Thread.Sleep(60);
            }
            else
            {
                LogUtil.error("未找到DO,[" + ioType+"]["+subType+"]");
            }
        }

        public static IO_VALUE IOValue(string ioType,int subType  )
        {
            IO_VALUE ioValue = IO_VALUE.LOW;
            ConfigIO configIo = GetDI(ioType,subType    );
            if (configIo == null)
            {
                configIo = GetDO(ioType, subType);
            }
          
            if (configIo != null)
            {
                if (configIo.ProType.Equals(ConfigItemType.DI))
                {

                    ioValue = instance.GetDIValue(configIo.DeviceName, configIo.SlaveID, configIo.GetIOAddr());
                }
                else
                {
                    ioValue = instance.GetDOValue(configIo.DeviceName, configIo.SlaveID, configIo.GetIOAddr());
                }
            }
            else
            {
                LogUtil.error("未找到IO[" + ioType + "][" + subType + "]");
            }
            return ioValue;
        }
        public static IO_VALUE DOValue(string ioType, int subType = 0)
        {
            IO_VALUE ioValue = IO_VALUE.LOW;
            ConfigIO configIo = GetDO(ioType, subType);
           
            if (configIo != null)
            { 
                ioValue = instance.GetDOValue(configIo.DeviceName, configIo.SlaveID, configIo.GetIOAddr());
            }
            else
            {
                LogUtil.error("没有DO=" + ioType);
            }
            return ioValue;
        }
        private static ConfigIO GetDI(string ioType, int subType)
        {
            ConfigIO configIo = null;
            if (subType <= 0)
            {
                if (LineManager.Config.DIList.ContainsKey(ioType))
                {
                    return LineManager.Config.DIList[ioType];
                }
            }
            else
            {
                if (LineManager.moveECMap.ContainsKey(subType))
                {
                    if (LineManager.moveECMap[subType].DIList.ContainsKey(ioType))
                    {
                        return LineManager.moveECMap[subType].DIList[ioType];
                    }
                }
                if (LineManager.feedingECMap.ContainsKey(subType))
                {
                    if (LineManager.feedingECMap[subType].DIList.ContainsKey(ioType))
                    {
                        return LineManager.feedingECMap[subType].DIList[ioType];
                    }
                }
                if (LineManager.providingECMap.ContainsKey(subType))
                {
                    if (LineManager.providingECMap[subType].DIList.ContainsKey(ioType))
                    {
                        return LineManager.providingECMap[subType].DIList[ioType];
                    }
                }
            }
            return configIo;
        }
        private static ConfigIO GetDO(string ioType, int subType  )
        {
            ConfigIO configIo = null;
            if (subType <= 0)
            {
                if (LineManager.Config.DOList.ContainsKey(ioType))
                {
                    return  LineManager.Config.DOList[ioType];
                }
            }
            else
            {
                if (LineManager.moveECMap.ContainsKey(subType))
                {
                    if (LineManager.moveECMap[subType].DOList.ContainsKey(ioType))
                    {
                        return LineManager.moveECMap[subType].DOList[ioType];
                    }
                }
                if (LineManager.feedingECMap.ContainsKey(subType))
                {
                    if (LineManager.feedingECMap[subType].DOList.ContainsKey(ioType))
                    {
                        return LineManager.feedingECMap[subType].DOList[ioType];
                    }
                }
                if (LineManager.providingECMap.ContainsKey(subType))
                {
                    if (LineManager.providingECMap[subType].DOList.ContainsKey(ioType))
                    {
                        return LineManager.providingECMap[subType].DOList[ioType];
                    }
                }
            }
            return configIo;
        }
        #endregion
        public static void Init()
        {
            bool isAIOBox = ConfigAppSettings.GetIntValue(Setting_Init.UseAIOBOX).Equals(1);
            if (isAIOBox)
            {
                instance = new AIOBOXManager();
            }
            else
            {
                instance = new KNDManager();
            }
        }
        public abstract void ReadAllDI(string deviceName, byte slaveId);

        public abstract void ReadAllDO(string deviceName, byte slaveId);

        public abstract void WriteSingleDO(string deviceName, byte slaveId, ushort index, IO_VALUE value, int time);

        public abstract void WriteSingleDO(string deviceName, byte slaveId, ushort index, IO_VALUE value);

        public abstract IO_VALUE GetDIValue(string deviceName, byte slaveID, ushort v);

        public abstract IO_VALUE GetDOValue(string deviceName, byte slaveID, ushort v);

        public abstract IO_VALUE GetIOValue(ConfigIO configIO);

        public abstract void CloseAllDO();

        public abstract void CloseAllConnection();

    }
}