You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

121 lines
2.5 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace B3DealerClient.Control
{
internal class Xk3124DataFormat : DataFormatBase
{
public override int DataLength
{
get { return 17; }
}
public override char Beginchar
{
get { return (char)0x02; }
}
public override char Endchar
{
get { return (char)0x0D; ; }
}
public override short Bufsize
{
get { return 36; }
}
public override string ParseData(string buf, out bool isStatic)
{
StringBuilder str = new StringBuilder();
char swa = buf[1]; // 状态字A
char swb = buf[2]; // 状态字B
int dotIndex = (swa & 0x07) - 2; // 小数点位置
bool isPositive = (((swb >> 1) & 0x01) == 0); // 符号:是否为正数
isStatic = (((swb >> 3) & 0x01) == 0);
char[] num = new char[6];
for (int i = 0; i < 6; i++)
{
num[i] = buf[i + 4];
}
if (dotIndex < 0)
{ // 不考虑精确到十,百位
return str.ToString();
}
for (int i = 0; i < 6 - dotIndex; i++)
{
str.Append(num[i]);
}
str.Append('.');
for (int i = 0; i < dotIndex; i++)
{
str.Append(num[6 - dotIndex + i]);
}
// 去掉空格
string result = str.ToString().Trim();
// 取消前面多余的0
for (int i = 0; i < result.Length; i++)
{
if (result[i] != '0')
{
result = result.Substring(i, result.Length - i);
break;
}
}
if (result.IndexOf('.') == 0)
{
result = result.Insert(0, "0");
}
if (result.IndexOf('.') == result.Length - 1)
{
result = result.Remove(result.IndexOf('.'), 1);
}
if (!isPositive)
{ // 负数
result = result.Insert(0, "-");
}
return result;
}
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;
}
public override bool ParseAscii(string buf, out string weight, out bool isStatic, out string subStr)
{
weight = "";
isStatic = false;
subStr = "";
return false;
}
}
}