using System;
using System.Text;
using HslCommunication;
using HslCommunication.Profinet.Siemens;

namespace DataBlockHelper.DbWrite
{



    public class PlcWriteUtil
    {
        private static SiemensS7Net _siemensS7Net => PlcConnect.Instance;

        public PlcWriteUtil()
        {

        }


        public OperateResult Write(PlcDbEnum dbEnum, string address, PlcDbType dbType, object value)
        {
            OperateResult operateResult = new OperateResult();
            
            string plcAddress = $"{dbEnum.ToString()}.{address}";
            
            switch (dbType)
            {
                case PlcDbType.PlcInt:
                    operateResult=_siemensS7Net.Write(plcAddress, Convert.ToInt32(value));
                    break;

                case PlcDbType.PlcUint:
                    operateResult=_siemensS7Net.Write(plcAddress, Convert.ToInt16(value));
                    break;

                case PlcDbType.PlcBoolean:
                    operateResult= _siemensS7Net.Write(plcAddress, Convert.ToBoolean(value));
                    break;

                case PlcDbType.PlcFloat:
                    float number = Convert.ToSingle(value);
                    operateResult=_siemensS7Net.Write(plcAddress,number);
                    break;
            }

            return operateResult;


        }

        /// <summary>
        /// 可能要读取M块
        /// </summary>
        /// <param name="plcAddress"></param>
        /// <param name="dbType"></param>
        /// <param name="value"></param>

        public void Write(string plcAddress, PlcDbType dbType, object value)
        {

            OperateResult operateResult = new OperateResult();
            
            switch (dbType)
            {
                case PlcDbType.PlcInt:
                    _siemensS7Net.Write(plcAddress, Convert.ToInt32(value));
                    break;

                case PlcDbType.PlcUint:
                    _siemensS7Net.Write(plcAddress, Convert.ToInt16(value));
                    break;

                case PlcDbType.PlcBoolean:
                    _siemensS7Net.Write(plcAddress, Convert.ToBoolean(value));
                    break;

                case PlcDbType.PlcFloat:
                    _siemensS7Net.Write(plcAddress, Convert.ToSingle(value));
                    break;
            }


        }


    }

    public enum PlcDbEnum
    {

        Db2102 = 2102,
        Db2103 = 2103,
        Db2104 = 2104,
        Db2105 = 2105,
        Db2106 = 2106,
        Db2107 = 2107,

    }

    public enum PlcDbType
    {
        PlcUint,
        PlcInt,
        PlcFloat,
        PlcBoolean
    }
}