IModbusBase.cs 3.42 KB
Newer Older
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 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GeneralGommunication
{
    public interface IModbusBase : INotifyPropertyChanged
    {
        /// <summary>
        /// 通讯中
        /// </summary>
        bool IsInComm { get; }

        /// <summary>
        /// 指令成功回复时,回复的耗时
        /// </summary>
        TimeSpan Elapsed { get; }

        /// <summary>
        /// 10s 内最大回复的耗时
        /// </summary>
        int MaxElapsedms10s { get; }

        ErrorType Error { get; }

        bool IsError { get; }

        string ErrMsg { get; }

        bool IsCommConnected { get; }
        string CommErrMsg { get; }

        /// <summary>
        /// 接收的数据
        /// </summary>
        byte[] RXDs { get; }

        /// <summary>
        /// 数据包间隔时间,必须确保 接收包 与 发送包之间等待 3.5T以上时间
        /// </summary>
        int PackIntervalms { get; }

        void Init(IGeneralComm serial);

        #region  功能

        /// <summary>
        /// 读多个 COIL
        /// </summary>
        /// <param name="device_no">设备号</param>
        /// <param name="addr">参数首地址</param>
        /// <param name="cnt">线圈个数</param>
        /// <param name="values">输出线圈状态</param>
        /// <returns></returns>
        bool Do_01(byte device_no, 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(byte device_no, int addr, int cnt, out List<UInt16> values);


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


        /// <summary>
        /// Write Single REG
        /// </summary>
        /// <param name="addr"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        bool Do_06(byte device_no, int addr, UInt16 dat);
        /// <summary>
        /// 写多个coil
        /// </summary>
        /// <param name="addr"></param>
        /// <param name="datas"></param>
        /// <returns></returns>
        bool Do_0F(byte device_no, int addr, List<bool> datas);


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

        #endregion
    }

    public enum ErrorType
    {
        /// <summary>
        /// 默认值
        /// </summary>
        Idle,
        /// <summary>
        /// 超时
        /// </summary>
        TimeOut,
        /// <summary>
        /// 未知错误
        /// </summary>
        Unknown,
        /// <summary>
        /// 校验出错
        /// </summary>
        CRCError,
        /// <summary>
        /// 成功
        /// </summary>
        OK,
        /// <summary>
        /// 线路忙
        /// </summary>
        Busy,
        /// <summary>
        /// 连接断开
        /// </summary>
        Disconnected,
    }
}