# LRJsonToStruct **Repository Path**: bushlyc/lrjson-to-struct ## Basic Information - **Project Name**: LRJsonToStruct - **Description**: JSON转换成结构体调试使用 - **Primary Language**: C/C++ - **License**: LGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2022-03-11 - **Last Updated**: 2026-04-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 简介 :smile: JSON分析工具是LR内部调试工具,可以基于本公司内部协议实现硬件设备的简单读取以及配置。本软件支持,网络,串口两种方式。 ![数据结构分析](https://foruda.gitee.com/images/1732175846185279012/9e4ebbca_7820924.png "屏幕截图") ![输入图片说明](%E6%88%AA%E5%9B%BE1.png) ### 核心特性 :star: - 通过自定义的简单语法,将其转换成类似C++结构体,以此对于数据进行分析与处理 - 可以实现本公司常见的,比例,两点法,7022三种校准模式,目前仅仅支持两点法校准 ### 如何编写描述文件 描述文件基于JSON格式,如果没有了解过JSON,建议花20分钟了解一下JSON。 下面贴上一个最简单的配置文件,此配置可以让您读取系统参数中的MyName字段 ``` { "CommType": "net", "EquIdStr": "GCS31BConfigData", "UartBaud": 19200, "UartAddr": 1, "UDPPort": 2305, "Structs": [ { "Name": "系统参数", "ParaStaAdd": 186, "MemberPool": [ { "Name": "MyName", "Hint": "设备名称123", "Type": "char", "Count": 64 } ] } ], "Calibs": [ { "Name": "<1>电流量程1(大电流)零点校准(无电流时点击校准)", "Type": 1, "MeasAdc": "TIOStatus,AdcAve,4", "MeasVal": "TIOStatus,IRealAve,0", "CalibSour": "TCalibPara,I,0,Sour", "CalibTarg": "TCalibPara,I,0,Targ", "DestDefVal": 0, "CalibCnt": 20, "Dig": 2, "Unit": "A" } ] } ``` 文件分为三个分区 - 基础功能区: 也就是指定通讯参数,还有设备识别字的区域。 - 结构体功能区 :star: : 最主要的分区,用于描述C++数据结构,然后分析硬件设备数据。 - 校准功能区: 需要对电流电压等进行测算的设备,常常需要进行校准,这里便是描述校准。 #### 关键字 ##### 基础功能区 | 字段 | 功能 | |----------|---------------------------| | CommType | 通讯类型 "net":网络 "serial":串口 | | EquIdStr | 设备识别字 | | UartBaud | 波特率 | | UartAddr | 串口地址(用于结构体内部) | | UDPPort | UDP端口 | | Structs | 结构体功能区(下面详细介绍) | | Calibs | 校准功能区(下面详细介绍) | ##### 结构体功能区 | 字段 | 功能 | |------------|---------------------| | Visible | true: 显示 false: 不显示 | | Name | 名称 | | ParaStaAdd | 起始地址 | | MemberPool | 成员(下面详细介绍) | 下面是MemberPool的详细介绍 | 字段 | 功能 | |------|------------------| | Name | 名称 | | Type | 数据类型 支持如下 “char” “u8” “u16” “s16” “u32” “s32” “s64” “u64” | | Count | 数组长度,若此字段不是数组,那么此字段可以省略 | | Hint | 提示,鼠标移动到相应成员上,会提示此字段 | ##### 校准功能区 | 字段 | 功能 | |----------|------------------------------| | Name | 名称 | | Type | 类型 0: 比例校准(不支持) 1: 偏移校准 2: 7022校准(不支持) | | MeasVal | 测量值,比如实际的电压电流,仅仅用于显示。 | | MeasAdc | 测量ADC值,校准的时候会将这个值取平均计算然后下发。 | | CalibSour | 校准Sour值,ADC取完平均之后会下发到此处。 | | CalibTarg| 校准Targ值,软件上填写的目标值会下发到此处。 | | DestDefVal | 默认目标值,仅仅加载的时候显示在控件上,比如设置 100.0 V | | CalibCnt | 采样次数 | | Dig | 测量值和目标值的小数位数 | | Unit| 测量值和目标值的单位 | :star: 测量值,测量ADC值,校准Sour值,校准Targ值,均采用描述法定位,原来都是采用直接写偏移地址和数据类型来定位的,但是这样编写起来就很麻烦,如果结构体稍微一改动,这里就全乱了!很不方便。因此现在采用了描述法来定位。举个例子如下图,一看便明白了。 ![输入图片说明](%E6%A0%A1%E5%87%86%E5%80%BC%E6%8F%8F%E8%BF%B0%E6%A0%BC%E5%BC%8F.png) ### 三种校准方式的说明 #### 比例校准(不支持) ![比例校准](https://foruda.gitee.com/images/1732181148543218075/691edaec_7820924.png "屏幕截图") #### 两点法校准 ![输入图片说明](%E4%B8%A4%E7%82%B9%E6%B3%95%E6%A0%A1%E5%87%86%E6%B5%81%E7%A8%8B.png) #### 7022校准(不支持) ![7022校准](https://foruda.gitee.com/images/1732181191122362442/f4fd3ca0_7820924.png "屏幕截图") ### 计划添加以下特性 - 透传通讯方式 - 数据示波器 - 组态配置工具