namespace IStation.DataDockingSocket
|
{
|
/// <summary>
|
/// app参数(可配制)
|
/// </summary>
|
public class AppParas
|
{
|
/// <summary>
|
/// 指令发送间隔
|
/// </summary>
|
public int InstructionSendSpace { get; set; }
|
|
/// <summary>
|
/// 指令项列表
|
/// </summary>
|
public List<InstructionItem> InstructionItems { get; set; }
|
|
/// <summary>
|
/// 旧传输
|
/// </summary>
|
public Transfer OldTransfer { get; set; }
|
|
/// <summary>
|
/// 支持旧
|
/// </summary>
|
public bool SupportOld { get; set; }
|
|
/// <summary>
|
/// 是否保存原始
|
/// </summary>
|
public bool Src { get; set; }
|
|
/// <summary>
|
/// 是否调试
|
/// </summary>
|
public bool Debug { get; set; }
|
|
/// <summary>
|
/// 验证ModbusRtu 协议
|
/// </summary>
|
public static bool Verify(byte[] bts)
|
{
|
if (bts == null)
|
return default;
|
if (bts.Length < 6)
|
return false;
|
if (bts.Length - 5 != bts[2])
|
return false;
|
if (!ModBusRtuHelper.CheckReceivedMessage(bts))
|
return false;
|
return true;
|
}
|
|
}
|
|
|
|
/// <summary>
|
/// 解析规则枚举
|
/// </summary>
|
public enum eRule
|
{
|
/// <summary>
|
/// 两个字节为一组,两组表示一个数据,通过得到的四个字节反转后,BitConvert.Single()获取值
|
/// </summary>
|
[Display(Name = "双字解析为浮点数", Description = "双字解析为浮点数 ")]
|
Float = 1,
|
|
/// <summary>
|
/// 两个字节表示一个整数值,通过得到的2个字节反转后,BitConvert.ToInt16()获取值
|
/// </summary>
|
[Display(Name = "单字解析为整数", Description = "单字表示一个整数值")]
|
Short = 2,
|
|
/// <summary>
|
/// 两个字节为一组,两组表示一个数据,通过得到的四个字节反转后,BitConverter.ToInt32();获取值
|
/// </summary>
|
[Display(Name = "双字解析为整数", Description = "双字表示一个整数值")]
|
Int = 3,
|
}
|
|
/// <summary>
|
/// 解析项
|
/// </summary>
|
public class RuleItem
|
{
|
/// <summary>
|
/// 标记标识
|
/// </summary>
|
public string SignId { get; set; }
|
|
/// <summary>
|
/// 索引 从1开始
|
/// </summary>
|
public int Index { get; set; }
|
|
/// <summary>
|
/// 系数
|
/// </summary>
|
public double Ratio { get; set; }
|
|
/// <summary>
|
/// 解析规则
|
/// </summary>
|
public eRule Rule { get; set; }
|
|
}
|
|
/// <summary>
|
/// 指令项
|
/// </summary>
|
public class InstructionItem
|
{
|
/// <summary>
|
/// 指令
|
/// </summary>
|
public string Instruction { get; set; }
|
|
/// <summary>
|
/// 指令发送频率 秒
|
/// </summary>
|
public int Frequency { get; set; }
|
|
/// <summary>
|
/// 解析项
|
/// </summary>
|
public List<RuleItem> RuleItems { get; set; }
|
|
/// <summary>
|
/// 验证
|
/// </summary>
|
public bool Verify(byte[] bts)
|
{
|
if (bts == null)
|
return default;
|
if (bts.Length < 6)
|
return false;
|
if (bts.Length - 5 != bts[2])
|
return false;
|
if (string.IsNullOrEmpty(this.Instruction))
|
return default;
|
|
var instruction = BitTransfer.FromString(this.Instruction);
|
if (bts[0] == instruction[0])
|
{
|
if (bts[1] == instruction[1])
|
{
|
//请求的数据字节数量
|
var requestDataCount = BitConverter.ToInt16(instruction.Skip(4).Take(2).Reverse().ToArray(), 0) * 2;
|
if (requestDataCount == bts[2])
|
{
|
return true;
|
}
|
}
|
}
|
return default;
|
}
|
|
}
|
|
/// <summary>
|
/// 传输
|
/// </summary>
|
public class Transfer
|
{
|
/// <summary>
|
/// 注册码
|
/// </summary>
|
public string RegisterCode { get; set; }
|
|
/// <summary>
|
/// 传输Url
|
/// </summary>
|
public string TransferUrl { get; set; }
|
}
|
}
|