IOManager.cs 4.4 KB
using OnlineStore.Common;
using OnlineStore.DeviceLibrary.IO;
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;
      

        #region KNDIO
        
        public static void IOMove(string ioType, IO_VALUE ioValue)
        {
            if (StoreManager.Config.DOList.ContainsKey(ioType))
            {
                ConfigIO configIo = StoreManager.Config.DOList[ioType];
                //DateTime time = DateTime.Now; 
                instance.WriteSingleDO(configIo.DeviceName, configIo.SlaveID, configIo.GetIOAddr(), ioValue);
                //TimeSpan span = DateTime.Now - time;
                //if (span.TotalMilliseconds > 100)
                //{
                //    LogUtil.error("IOMove [" + ioType + "] ["+ioValue+"]耗时" + span.TotalMilliseconds);
                //}
                Thread.Sleep(60);
            }
            else
            {
                LogUtil.error("没有DO=" + ioType);
            }
        }

        public static IO_VALUE IOValue(string ioType)
        {
            IO_VALUE ioValue = IO_VALUE.LOW;
            if (StoreManager.Config.DILIst.ContainsKey(ioType))
            {
                ConfigIO configIo = StoreManager.Config.DILIst[ioType];
                ioValue = instance.GetDIValue(configIo.DeviceName, configIo.SlaveID, configIo.GetIOAddr());
                //UpdateDoValue(ioType, ioValue);
            }
            else if (StoreManager.Config.DOList.ContainsKey(ioType))
            {
                ConfigIO configIo = StoreManager.Config.DOList[ioType];
                ioValue = instance.GetDOValue(configIo.DeviceName, configIo.SlaveID, configIo.GetIOAddr());
            }
            else
            {
                LogUtil.error("没有DO=" + ioType);
            }
            return ioValue;
        }
        public static IO_VALUE DOValue(string ioType)
        {
            IO_VALUE ioValue = IO_VALUE.LOW;
            if (StoreManager.Config.DOList.ContainsKey(ioType))
            {
                ConfigIO configIo = StoreManager.Config.DOList[ioType];
                ioValue = instance.GetDOValue(configIo.DeviceName, configIo.SlaveID, configIo.GetIOAddr());
            }
            else
            {
                LogUtil.error("没有DO=" + ioType);
            }
            return ioValue;
        }
        #endregion
        public static void Init()
        {
            bool UseHCBoard = ConfigAppSettings.GetIntValue(Setting_Init.UseHCBoard).Equals(1);
            if (UseHCBoard)
            {
                instance = new HCIOManager();
            }
            else
            {
                bool isAIOBox = ConfigAppSettings.GetIntValue(Setting_Init.UseAIOBOX).Equals(1); if (isAIOBox)
                {
                    //instance = new AIOBOXManager();
                }
                //else
                //{
                //    instance = new KNDManager();
                //}
            }
        }
        protected static ushort GetDILength(string ioIp)
        {
            try
            {
                return StoreManager.Config.GetDILength(ioIp);
            }
            catch (Exception ex)
            {

            }
            return 16;
        }

        protected static ushort GetDOLength(string ioIp)
        {
            try
            {
                return StoreManager.Config.GetDOLength(ioIp);
            }
            catch (Exception ex)
            {

            }
            return 16;
        }
        public abstract bool ConnectionIOList(List<string> dIODeviceNameList);

        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();

    }
}