namespace IStation.DataDockingSocket
{
///
/// app参数(可配制)
///
public class AppParas
{
///
/// 指令发送间隔
///
public int InstructionSendSpace { get; set; }
///
/// 指令项列表
///
public List InstructionItems { get; set; }
///
/// 旧传输
///
public Transfer OldTransfer { get; set; }
///
/// 支持旧
///
public bool SupportOld { get; set; }
///
/// 是否保存原始
///
public bool Src { get; set; }
///
/// 是否调试
///
public bool Debug { get; set; }
///
/// 验证ModbusRtu 协议
///
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;
}
}
///
/// 解析规则枚举
///
public enum eRule
{
///
/// 两个字节为一组,两组表示一个数据,通过得到的四个字节反转后,BitConvert.Single()获取值
///
[Display(Name = "双字解析为浮点数", Description = "双字解析为浮点数 ")]
Float = 1,
///
/// 两个字节表示一个整数值,通过得到的2个字节反转后,BitConvert.ToInt16()获取值
///
[Display(Name = "单字解析为整数", Description = "单字表示一个整数值")]
Short = 2,
///
/// 两个字节为一组,两组表示一个数据,通过得到的四个字节反转后,BitConverter.ToInt32();获取值
///
[Display(Name = "双字解析为整数", Description = "双字表示一个整数值")]
Int = 3,
}
///
/// 解析项
///
public class RuleItem
{
///
/// 标记标识
///
public string SignId { get; set; }
///
/// 索引 从1开始
///
public int Index { get; set; }
///
/// 系数
///
public double Ratio { get; set; }
///
/// 解析规则
///
public eRule Rule { get; set; }
}
///
/// 指令项
///
public class InstructionItem
{
///
/// 指令
///
public string Instruction { get; set; }
///
/// 指令发送频率 秒
///
public int Frequency { get; set; }
///
/// 解析项
///
public List RuleItems { get; set; }
///
/// 验证
///
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;
}
}
///
/// 传输
///
public class Transfer
{
///
/// 注册码
///
public string RegisterCode { get; set; }
///
/// 传输Url
///
public string TransferUrl { get; set; }
}
}