#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* 版权所有 (c) 2024 WenJY 保留所有权利。
* CLR版本：4.0.30319.42000
* 机器名称：LAPTOP-E0N2L34V
* 命名空间：SlnMesnac.Plc
* 唯一标识：496f8d2b-70e3-4a05-ae18-a9b0fcd06b82
*
* 创建者：WenJY
* 电子邮箱：wenjy@mesnac.com
* 创建时间：2024-03-27 21:58:35
* 版本：V1.0.0
* 描述：
*
*--------------------------------------------------------------------
* 修改人：
* 时间：
* 修改说明：
*
* 版本：V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
namespace SlnMesnac.Plc
{
    public abstract class PlcAbsractFactory
    {

        public string ConfigKey { get; set; }

        /// <summary>
        /// 是否连接
        /// </summary>
        public abstract bool IsConnected { get; set; }
        
        /// <summary>
        /// 建立连接
        /// </summary>
        /// <param name="ip"></param>
        /// <param name="port"></param>
        /// <returns></returns>
        public abstract bool Connect(string ip, int port);

        /// <summary>
        /// 通过PLC地址读取心跳结果
        /// </summary>
        /// <param name="address"></param>
        /// <returns></returns>
        public abstract bool readHeartByAddress(string address);


        /// <summary>
        /// 断开连接
        /// </summary>
        /// <returns></returns>
        public abstract bool DisConnect();
        
        /// <summary>
        /// 根据地址读取指定长度数据
        /// </summary>
        /// <param name="address"></param>
        /// <param name="len"></param>
        /// <returns></returns>
        public abstract byte[] readValueByAddress(string address,int len);
        
        /// <summary>
        /// 通过PLC地址读取int16类型数据
        /// </summary>
        /// <param name="address"></param>
        /// <returns></returns>
        public abstract int readInt16ByAddress(string address);
        
        /// <summary>
        /// 通过PLC地址写入int16类型数据
        /// </summary>
        /// <param name="address"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public abstract bool writeInt16ByAddress(string address,int value);
        
        /// <summary>
        /// 通过PLC地址读取string类型数据
        /// </summary>
        /// <param name="address"></param>
        /// <returns></returns>
        public abstract string readStringByAddress(string address, ushort length);

        /// <summary>
        /// 通过PLC地址写入String类型数据
        /// </summary>
        /// <param name="address"></param>
        /// <param name="SFC"></param>
        /// <returns></returns>
        public abstract bool writeStringByAddress(string address, string value);


        /// <summary>
        /// 通过PLC地址写入String类型数据
        /// </summary>
        /// <param name="address"></param>
        /// <param name="SFC"></param>
        /// <returns></returns>
        public abstract bool writeStringByAddress(string address, string value, int length);


        /// <summary>
        /// 通过PLC地址读取Bool类型数据
        /// </summary>
        /// <param name="address"></param>
        /// <returns></returns>
        public abstract bool readBoolByAddress(string address);

        /// <summary>
        /// 通过PLC地址读取Byte类型数据
        /// </summary>
        /// <param name="address"></param>
        /// <returns></returns>
        public abstract int readByteByAddress(string address);
        /// <summary>
        /// 通过PLC地址读取Float类型数据
        /// </summary>
        /// <param name="address"></param>
        /// <returns></returns>
        public abstract float readFloatByAddress(string address);

        /// <summary>
        /// 通过PLC地址写入Bool类型数据
        /// </summary>
        /// <param name="address"></param>
        /// <returns></returns>
        public abstract bool writeBoolByAddress(string address, bool value);

        /// <summary>
        /// 通过PLC地址写入Double类型数据
        /// </summary>
        /// <param name="address"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public abstract bool writeDoubleByAddress(string address, int value);

        /// <summary>
        /// 通过PLC地址写入float类型数据
        /// </summary>
        /// <param name="address"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public abstract bool writeFloatByAddress(string address, int value);

        /// <summary>
        /// 通过PLC地址写入Byte类型数据
        /// </summary>
        /// <param name="address"></param>
        /// <returns></returns>
        /// <exception cref="InvalidOperationException"></exception>
        public abstract bool writeByteByAddress(string address, int value);
    }
}