分享

记录一次自己调试代码的过程

 老马的程序人生 2020-08-17

今年年初我们做了一套防窃电的软件,其中通讯采取的是串口方式。前段时间,根据现场的反馈,我们增加了蓝牙通讯的功能。系统界面如下图所示:

img01

img02

img03

今天,现场人员反馈说:“解析的数据出现问题”,所以我在这里把调试代码的过程做个记录,以方便大家的参考。现场发回的数据如下图所示:

img04

我们要做的就是对这些数据进行拆分,得到满足规约的数据,然后进行解析。

本软件所用规约如下图所示:

img05

这个规约比较简单,可以看到以 0x68 0xA5 0x00 0x68 开头,一共170(0xA5 0x00)个字节,为了验证数据的有效性,对数据做了CRC校验。

下面是读取数据、拆分数据、显示数据的代码。

//读取数据

public static List<byteReadFile(string fileName)
{
    List<byte> lst = new List<byte>();

    string[] strs = File.ReadAllLines(fileName);

    foreach (string str in strs)
    {
        string[] chars = str.Split(' ');
        foreach (string s in chars)
        {
            byte byt = Convert.ToByte("0x" + s, 16);
            lst.Add(byt);
        }
    }
    return lst;
}
//拆分并显示数据

private static int FindPara(List<byte> lst)
{
    byte[] model = new byte[] { 10416500104 };
    int count = lst.Count - model.Length;
    for (int i = 0; i <= count; i++)
    {
        if (lst[i] == model[0])
        {
            int j = 1;
            for (; j < model.Length; j++)
            {
                if (lst[i + j] != model[j])
                    break;
            }
            if (j == model.Length)
                return i;
        }
    }
    return -1;
}

private static string PrimaryDataOx(byte[] buf)
{
    string str = string.Empty;
    for (int i = 0; i < buf.Length; i++)
    {
        str += buf[i].ToString("X2") + " ";
    }
    return str.Trim();
}

public static void WriteFile(string fileName,List<byte> lst)
{
    StreamWriter sw = File.CreateText(fileName);

    int index = FindPara(lst);
    int len = 170;
    int count = 1;

    while (index != -1)
    {
        lst.RemoveRange(0, index);
        if (lst.Count < len)
            break;

        byte[] buf = lst.GetRange(0, len).ToArray();
        string text = count + " -- " + PrimaryDataOx(buf);
        sw.WriteLine(text);

        lst.RemoveRange(0, len);
        count++;
        index = FindPara(lst);
    }
    sw.Close();
    Process.Start(fileName);
}

通过以上代码,我们就可以把满足规约的数据拆分出来,根据规约进行解析得到实际的物理量,然后进行分析处理了。

拆分后的数据如下图所示:

img06

最后总结一下,通过这种方式就没有必要每次都等现场人员把设备拿回实验室,或者自己跑现场了,直接让他们把数据导入到文件中,我们在远程就能调试代码解决问题了,是不是很方便。今天就到这里吧!See You!

对了,再多说一句,各位老铁,如果你有项目需要写代码,我们可以合作一起来完成甲方的任务。See You!


参考阅读:


经过8年多的发展,LSGO软件技术团队在地理信息系统、数据统计分析、计算机视觉领域积累了丰富的研发经验,也建立了人才培养的完备体系。

欢迎对算法设计与实现感兴趣的同学加入,与我们共同成长进步。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多