using System.IO.Ports;
using DH.Commons.Enums;
using HslCommunication;

namespace DH.Devices.PLC
{
    public class PLCBase
    {
        /// <summary>
        /// 连接状态
        /// </summary>
        public bool connected = false;

        /// <summary>
        /// 类型
        /// </summary>
        public EnumPLCType PLCType=EnumPLCType.信捷XD_网口;

        /// <summary>
        /// 串口号
        /// </summary>
        public string portName="COM1";

        /// <summary>
        /// 波特率
        /// </summary>
        public int baudRate = 9600;

        /// <summary>
        /// 数据位
        /// </summary>
        public int dataBit = 8;

        /// <summary>
        /// 停止位
        /// </summary>
        public StopBits stopBit = (StopBits)Enum.Parse(typeof(StopBits), "One");

        /// <summary>
        /// 奇偶效验位
        /// </summary>
        public Parity parity = (Parity)Enum.Parse(typeof(Parity), "None");

        /// <summary>
        /// IP地址
        /// </summary>
        public string IP = "192.168.6.6";

        /// <summary>
        /// 端口号
        /// </summary>
        public int Port = 502;

        /// <summary>
        /// 初始化
        /// </summary>
        /// <returns></returns>
        public virtual bool PLCConnect() { return false; }

        public virtual bool PLCDisConnect() { return false; }

        public virtual ushort ReadShort(string address) {  return 0; }

        public virtual int ReadInt(string address) { return 0; }


        public virtual float ReadFloat(string address) { return 0; }

        public virtual bool ReadBool(string address) { return false; }

        public virtual bool WriteShort(string address, short value, bool waitForReply = true) { return false; }

        public virtual bool WriteInt(string address, int value, bool waitForReply = true) { return false; }

        public virtual bool WriteDInt(string address, int value, bool waitForReply = true) { return false; }

        public virtual bool WriteFloat(string address, float value, bool waitForReply = true) { return false; }

        public virtual bool WriteBool(string address, bool value, bool waitForReply = true) { return false; }
    }
}