using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ButcherFactory.Controls { internal class JST2018SDataFormat : DataFormatBase { public override int DataLength { get { return 10; } } public override char Beginchar { get { return (char)0xFF; } } public override char Endchar { get { return (char)0x37; } } public override short Bufsize { get { return 36; } } public override string ParseData(string buf, out bool isStatic) { string weight; // 小数位数0-4 int dot = (short)(0x07 & buf[1]) - 1; weight = CharTo16(buf[2]) + CharTo16(buf[3]) + CharTo16(buf[4]); weight = new string(weight.Reverse().ToArray()); // insert dot weight = InsertDot(weight, dot); isStatic = true; // 默认 为 稳定 // buffer[1] 符号位 if (buf[5] == 0x01) { weight = (Convert.ToDecimal(weight) / 1000).ToString("#0.0"); } if ((buf[1] & 0x20) == 1) weight = "-" + weight; return weight; } string CharTo16(char c) { return ((int)c).ToString("x2"); } public override bool ParseAscii(string buf, out string weight, out bool isStatic) { isStatic = false; weight = FindDataFrame(buf, DataLength); if (string.IsNullOrEmpty(weight)) { return false; } weight = ParseData(weight, out isStatic); return true; } private static string InsertDot(string weight, int dotBits) { var rst = weight.Insert(weight.Length - dotBits, ".").Trim('0'); if (rst.StartsWith(".")) rst = "0" + rst; return rst; } public override bool ParseAscii(string buf, out string weight, out bool isStatic, out string subStr) { weight = ""; isStatic = false; subStr = ""; return false; } } }