using System.Collections.Generic; using System.Threading.Tasks; using System; namespace Team.Communicate.Modbus { public interface IModbusTcpMaster { public string Ip { get; } public int Port { get; } int ConnectTimeOut { get; set; } byte SlaveId { get; set; } bool IsConnect { get; } void Connect(); Task ConnectAsync(); /// <summary> /// 重连 /// </summary> /// <param name="ip"></param> /// <param name="port"></param> /// <returns></returns> Task<bool> ReConnect(); ushort[] ReadBytes(ushort start, ushort length); /// <summary> /// 获取单个位状态 /// </summary> /// <param name="start">从PLC里读出第几个字节</param> /// <param name="index">第几位</param> /// <returns></returns> bool GetBool(ushort start, ushort index); List<KeyValuePair<string, bool>> GetBoolList(IEnumerable<string> addresses); /// <summary> /// 获取单个位状态 /// </summary> /// <param name="start">从PLC里读出第几个字节</param> /// <param name="index" >第几位</param> /// <returns></returns> Task<bool> GetBoolAsync(ushort start, ushort index); /// <summary> /// 写modbus位 /// </summary> /// <param name="start">字节位置</param> /// <param name="index">位索引</param> /// <param name="flag">位value</param> void WriteBool(ushort start, int index, bool flag); /// <summary> /// 异步写modbus位 /// </summary> /// <param name="start">字节位置</param> /// <param name="index">位索引</param> /// <param name="flag">位value</param> Task WriteBoolAsync(ushort start, int index, bool flag); void WriteInt32(ushort start, int value); Task WriteInt32Async(ushort start, int value); /// <summary> /// 写modbus位 /// </summary> /// <param name="start"></param> /// <param name="index"></param> /// <param name="value"></param> void WriteByte(ushort start, int index, byte value); /// <summary> /// 写modbus位 /// </summary> /// <param name="start"></param> /// <param name="index"></param> /// <param name="value"></param> Task WriteByteAsync(ushort start, int index, byte value); /// <summary> /// 写入双精度浮点 /// </summary> /// <param name="start"></param> /// <param name="value"></param> void WriteDouble(ushort start, double value); /// <summary> /// 异步写入双精度浮点 /// </summary> /// <param name="start"></param> /// <param name="value"></param> /// <returns></returns> Task WriteDoubleAsync(ushort start, double value); /// <summary> /// 写入单精度浮点 /// </summary> /// <param name="start"></param> /// <param name="value"></param> void WriteFloat(ushort start, float value); /// <summary> /// 异步写入单精度浮点 /// </summary> /// <param name="start"></param> /// <param name="value"></param> /// <returns></returns> Task WriteFloatAsync(ushort start, float value); /// <summary> /// 获取浮点数值 /// </summary> /// <param name="index">数据索引</param> /// <returns></returns> float GetFloat(ushort index); /// <summary> /// 获取浮点数值 /// </summary> /// <param name="index">数据索引</param> /// <returns></returns> Task<float> GetFloatAsync(ushort index); /// <summary> /// 获取字 /// </summary> /// <param name="index">数据索引</param> /// <returns></returns> ushort GetShort(ushort index); /// <summary> /// 获取字 /// </summary> /// <param name="index">数据索引</param> /// <returns></returns> Task<ushort> GetShortAsync(ushort index); /// <summary> /// 获取整型数值 /// </summary> /// 4字节整数 /// <param name="index">数据索引</param> /// <returns></returns> int GetInteger(ushort index); /// <summary> /// 异步获取整型数值 /// </summary> /// 4字节整数 /// <param name="index">数据索引</param> /// <returns></returns> Task<int> GetIntegerAsync(ushort index); /// <summary> /// 读字节 /// </summary> /// <param name="start">开始字索引</param> /// <param name="index">第几个字节</param> /// <returns></returns> Task<byte> GetByteAsync(ushort start, int index); /// <summary> /// 读字节 /// </summary> /// <param name="start">开始字索引</param> /// <param name="index">第几个字节</param> /// <returns></returns> byte GetByte(ushort start, int index); ushort[] GetBytes(ushort start, ushort length); Task<ushort[]> GetBytesAsync(ushort start, ushort length); event EventHandler<bool> ConnectChanged; } }