using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Aucma.Core.PLc
{
    public interface IPlc
    {
        /// <summary>
        /// 是否连接
        /// </summary>
        bool IsConnected { get; set; }

        /// <summary>
        /// 建立连接
        /// </summary>
        /// <param name="IP"></param>
        /// <param name="port"></param>
        /// <returns></returns>
        bool Connect(string IP, int port);

        /// <summary>
        /// 断开连接
        /// </summary>
        /// <returns></returns>
        bool DisConnect();
        /// <summary>
        /// 读取byte数据
        /// </summary>
        /// <param name="address"></param>
        /// <returns></returns>
        byte[] ReadBytes(string address);
        /// <summary>
        /// 读取
        /// </summary>
        /// <param name="address"></param>
        /// <returns></returns>
        byte[] Read(string address, ushort len);
        /// <summary>
        /// 读取bool
        /// </summary>
        /// <param name="address"></param>
        /// <returns></returns>
        bool ReadBool(string address);
        /// <summary>
        /// 读取int16
        /// </summary>
        /// <param name="address"></param>
        /// <returns></returns>
        int ReadInt16(string address);
        /// <summary>
        /// 读取int32
        /// </summary>
        /// <param name="address"></param>
        /// <returns></returns>
        int ReadInt32(string address);
        /// <summary>
        /// 读取string
        /// </summary>
        /// <param name="address"></param>
        /// <returns></returns>
        string ReadString(string address);
        /// <summary>
        /// 单精度浮点型数据
        /// </summary>
        /// <param name="address"></param>
        /// <returns></returns>
        float ReadFloat(string address);
        /// <summary>
        /// 双精度浮点型数据
        /// </summary>
        /// <param name="address"></param>
        /// <returns></returns>
        double ReadDouble(string address);
        /// <summary>
        /// 写入int16
        /// </summary>
        /// <param name="address"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        bool WriteInt16(string address, string value);
        /// <summary>
        /// 写入int32
        /// </summary>
        /// <param name="address"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        bool WriteInt32(string address, int value);
        /// <summary>
        /// 写入string
        /// </summary>
        /// <param name="address"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        bool WriteString(string address, string value);
        /// <summary>
        /// 写入byte
        /// </summary>
        /// <param name="address"></param>
        /// <param name="bytes"></param>
        /// <returns></returns>
        bool WriteByte(string address, byte[] bytes);
        /// <summary>
        /// 写入byte
        /// </summary>
        /// <param name="address"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        bool WriteFloat(string address, float value);
        /// <summary>
        /// 心跳使用——喂狗
        /// </summary>
        /// <param name="address"></param>
        /// <returns></returns>
        Task<bool> Read(string address);
    }
}