IModbusClient.cs 2.28 KB
Newer Older
潘栩锋's avatar
潘栩锋 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;

namespace FLY.Modbus.WithThread
{
    /// <summary>
    /// 同一时刻只能有一个通信,当同时执行 Do_xx, 这些指令会被hold住
    /// 如果连接断开,或者异常,这些 Do_xx,全部返回 false
    /// </summary>
    public interface IModbusClient
    {
        /// <summary>
        /// 通信超时
        /// </summary>
        TimeSpan Timeout { get; set; }

        /// <summary>
        /// socket 错误信息
        /// </summary>
        string ErrMsg { get; set; }

        /// <summary>
        /// 连接成功
        /// </summary>
        bool IsConnected { get; set; }

        /// <summary>
        /// 远端地址
        /// </summary>
        IPEndPoint RemoteEP { get; set; }

        /// <summary>
        /// 建立连接
        /// </summary>
        bool Connect();

        /// <summary>
        /// 停止
        /// </summary>
        void Close();

        /// <summary>
        /// 读多个 COIL
        /// </summary>
        /// <param name="addr"></param>
        /// <param name="cnt"></param>
        /// <param name="values"></param>
        /// <returns></returns>
        bool Do_01(int addr, int cnt, out IEnumerable<bool> values);


        /// <summary>
        /// 读多个Holding REGs
        /// </summary>
        /// <param name="addr"></param>
        /// <param name="cnt"></param>
        /// <param name="values"></param>
        /// <returns></returns>
        bool Do_03(int addr, int cnt, out IEnumerable<UInt16> values);

        /// <summary>
        /// Write Single Coil
        /// </summary>
        /// <param name="addr"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        bool Do_05(int addr, bool data);


        /// <summary>
        /// 写多个coil
        /// </summary>
        /// <param name="addr"></param>
        /// <param name="datas"></param>
        /// <returns></returns>
        bool Do_0F(int addr, IEnumerable<bool> datas);


        /// <summary>
        /// 写多个REG
        /// </summary>
        /// <param name="addr"></param>
        /// <param name="datas"></param>
        /// <returns></returns>
        bool Do_10(int addr, IEnumerable<UInt16> datas);
    }
}