# 软件工程实验一 **Repository Path**: zou-lei123/software-engineering-lab1 ## Basic Information - **Project Name**: 软件工程实验一 - **Description**: 软件工程实验一:Git 基本操作与 HJ212-2017 报文解析 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-08 - **Last Updated**: 2026-10-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 软件工程实验一:Git 基本操作与 HJ212-2017 报文解析 本项目为「软件工程实验一」的提交内容,包含: 1. Git 版本管理工具的基本操作练习(仓库创建、提交、推送); 2. 编程基本功练习:Hello World; 3. 使用 AI 辅助编程开发的 **HJ212-2017 环保协议报文解析 Python 类库** `HJ212Parser`。 ## 目录结构 ``` . ├── hello_world.py # 实验内容 (1):输出 Hello World ├── hj212_parser.py # 实验内容 (2):HJ212-2017 报文解析类库 ├── demo.py # 类库端到端演示脚本 ├── test_hj212_parser.py # 单元测试(标准库 unittest) ├── README.md ├── .gitignore └── docs/ ├── 实验一报告.md └── 读后感.md ``` ## 实验环境 | 项目 | 版本 / 说明 | | -------- | ---------------------- | | 操作系统 | Windows 10 / 11 | | Python | 3.12(兼容 3.8+) | | Git | 2.55 | | 代码托管 | Gitee(亦可使用 GitHub)| ## 运行方法 ```bash # 1. Hello World python hello_world.py # 2. 类库演示 python demo.py # 3. 运行单元测试 python -m unittest -v test_hj212_parser ``` ## HJ212Parser 类库 `hj212_parser.py` 中的 `HJ212Parser` 类实现了实验要求的四大功能: | 方法 | 说明 | | ---- | ---- | | `is_valid_message(message, check_crc=True)` | 校验报文格式:起始符 `##`、4 位长度、结束符 `\r\n`、长度字段与实际数据段是否一致,并默认一并校验 CRC | | `validate_crc(message)` | 使用 ANSI(Modbus)CRC-16 算法校验报文的 CRC 值 | | `parse_data_segment(message)` | 解析数据段,返回包含所有键值对的字典(`CP` 字段解析为嵌套字典)| | `extract_monitoring_data(message)` | 从 `CP` 字段中提取监测因子,返回 `{因子编码: {参数: 值}}` | 另外提供了两个便利方法: - `HJ212Parser.crc16_ansi(data)` / `crc16_ansi_hex(data)`:CRC 计算(后者返回低字节在前的 4 位十六进制字符串); - `HJ212Parser.build_message(data_segment)`:由数据段组装一条完整合法报文,方便测试与学习。 ### 报文字段说明 | 字段 | 含义 | | ---- | ---- | | `QN` | 请求编号 | | `ST` | 系统编码 | | `CN` | 命令编号(`2011` 表示实时数据)| | `PW` | 访问密码 | | `MN` | 设备唯一标识 | | `Flag` | 标志位 | | `CP` | 命令参数,格式 `&&...&&`,其中 `-Rtd` 为监测值、`-Flag` 为数据标记 | ## HJ212-2017 报文结构 ``` ## + 4 位数据段长度 + 数据段 + 4 位 CRC16 + CRLF ``` - **数据段长度**:数据段的字符个数(ASCII 下等于字节数),不足 4 位前补 `0`; - **CRC16**:ANSI(Modbus)算法,初始值 `0xFFFF`、多项式 `0xA001`,计算结果低字节在前,共 4 位十六进制; - **结束符**:`\r\n`。 示例报文: ``` ##0173QN=20160801085857223;ST=32;CN=2011;PW=123456;MN=010000A8900016F000169DC0;Flag=7;CP=&&DataTime=20160801085857223;a01001-Rtd=57.8,a01001-Flag=N;a01002-Rtd=43.8,a01002-Flag=N&&2109\r\n ``` ## Git 基本操作(以 Gitee 为例) ```bash # 0. 安装并配置 Git(只需一次) git config --global user.name "你的名字" git config --global user.email "你的邮箱" # 1. 克隆代码仓库 git clone https://gitee.com/<用户名>/<仓库名>.git cd <仓库名> # 2. 将改动加入暂存区 git add . # 3. 提交改动 git commit -m "feat: 添加 HJ212 报文解析类库" # 4. 推送到远程仓库 git push origin master # 若默认分支为 main 则用 main ``` ## Git 提交注释规范 统一使用 `类型: 简要说明` 的格式(Conventional Commits): - `feat`:新增功能 - `fix`:修复问题 - `docs`:文档变更 - `test`:测试相关 - `refactor`:重构 - `style`:格式调整 示例:`fix: 修正 CRC16 低字节在前的拼接顺序`