HCIOManager.cs 3.0 KB
using HuichuanLibrary;
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OnlineStore.DeviceLibrary.IO
{
    public class HCIOManager : IOManager
    {
        public override void CloseAllConnection()
        { 
        }

        public override void CloseAllDO()
        {
            HCBoardManager.CloseAllDO();
        }

        public override void ConnectionIOList(List<string> dIODeviceNameList)
        {
            if (dIODeviceNameList.Count > 0 && dIODeviceNameList.Contains("HC"))
            {
                HCBoardManager.InitConfig();
                if (!HCBoardManager.CardInitOk())
                {
                    HCBoardManager.OpenCard();
                }
            }
        }

        public override IO_VALUE GetDIValue(string deviceName, byte slaveID, ushort index)
        {
            short v = HCBoardManager.GetBitDI((short)index);
            return (IO_VALUE)v;
        }

        public override IO_VALUE GetDOValue(string deviceName, byte slaveID, ushort index)
        {
            short v = HCBoardManager.GetBitDO((short)index);
            return (IO_VALUE)v;
        }

        public override IO_VALUE GetIOValue(ConfigIO configIO)
        {
            short index =(short) configIO.GetIOAddr();
            short v = HCBoardManager.GetBitDO(index);
            return (IO_VALUE)v;
        }

        public override void ReadAllDI(string deviceName, byte slaveId)
        { 
        }

        public override void ReadAllDO(string deviceName, byte slaveId)
        { 
        }

        public override void WriteSingleDO(string deviceName, byte slaveId, ushort index, IO_VALUE value, int time)
        {
            try
            {
                short v = (short)value;
                HCBoardManager.SetBitDO((short)index, v);

                short targetV = 0;
                if (v.Equals((short)0))
                {
                    targetV = 1;
                }

                //写入之后,等待指定间隔后回写
                System.Timers.Timer mytimer = new System.Timers.Timer(time);
                mytimer.Elapsed += (o1, e1) =>
                {
                    try
                    {
                        HCBoardManager.SetBitDO((short)index, targetV);
                    }
                    catch (Exception ex)
                    {
                        LogUtil.error("**********定时回写入 出错:" + ex.StackTrace);
                    }
                };
                mytimer.AutoReset = false;
                mytimer.Enabled = true;
            }
            catch (Exception ex)
            {
                LogUtil.error("AIO WriteSingleDO [" + index + "] 出错:" + ex.ToString());
            }
        }

        public override void WriteSingleDO(string deviceName, byte slaveId, ushort index, IO_VALUE value)
        {
            short v = (short)value;
            HCBoardManager.SetBitDO((short)index, v);

        }
    }
}