   # 项目说明书：104规约数据获取系统

## 一、项目概述
本项目用于处理和分析风电场SCADA数据、故障报警数据等，通过定时任务实现数据的自动获取、解析与存储，为风电场运行状态监控和数据分析提供支持。

## 二、项目结构
项目根目录位于<mcfolder name="energy-online-data" path="d:\project\energy-online-data"></mcfolder>，主要包含以下文件和目录：

### 核心文件
- <mcfile name="app_run.py" path="d:\project\energy-online-data\app_run.py"></mcfile>：项目主程序入口，负责协调数据处理流程
- <mcfile name="parse_scada_data.py" path="d:\project\energy-online-data\parse_scada_data.py"></mcfile>：SCADA数据解析脚本
- <mcfile name="parse_warn_fault_data.py" path="d:\project\energy-online-data\parse_warn_fault_data.py"></mcfile>：故障报警数据解析脚本
- <mcfile name="add_or_remove_partition.py" path="d:\project\energy-online-data\add_or_remove_partition.py"></mcfile>：数据库分区管理脚本
- <mcfile name="create_table.py" path="d:\project\energy-online-data\create_table.py"></mcfile>：数据库表创建脚本

### 主要目录
1. **conf/**：配置文件目录
   - <mcfile name="config.yaml" path="d:\project\energy-online-data\conf\config.yaml"></mcfile>：系统配置文件
   - 多个Excel文件：包含测点表、故障代码表等业务配置数据

2. **data/**：数据处理核心模块
   - <mcfile name="ReadAndSaveDb.py" path="d:\project\energy-online-data\data\ReadAndSaveDb.py"></mcfile>：数据读取与存储管理
   - <mcfile name="ClassIdentifier.py" path="d:\project\energy-online-data\data\ClassIdentifier.py"></mcfile>：数据分类标识
   - <mcfile name="WindFarmDayCount.py" path="d:\project\energy-online-data\data\WindFarmDayCount.py"></mcfile>：风电场日数据统计

3. **service/**：服务层模块
   - <mcfile name="common_connect.py" path="d:\project\energy-online-data\service\common_connect.py"></mcfile>：数据库连接管理
   - <mcfile name="trans_service.py" path="d:\project\energy-online-data\service\trans_service.py"></mcfile>：数据传输服务

4. **utils/**：工具类模块
   - <mcfile name="read_conf.py" path="d:\project\energy-online-data\utils\conf\read_conf.py"></mcfile>：配置文件读取工具
   - <mcfile name="ConnectMysql.py" path="d:\project\energy-online-data\utils\db\ConnectMysql.py"></mcfile>：MySQL数据库连接工具
   - <mcfile name="trans_log.py" path="d:\project\energy-online-data\utils\log\trans_log.py"></mcfile>：日志管理工具

## 三、核心功能

### 1. 数据处理流程
项目核心数据处理逻辑在<mcsymbol name="ReadAndSaveDb" filename="ReadAndSaveDb.py" path="d:\project\energy-online-data\data\ReadAndSaveDb.py" startline="15" type="class"></mcsymbol>类中实现，主要流程包括：
- 读取历史数据表信息
- 多线程处理风机数据
- 数据清洗与转换
- 数据分类标识
- 结果存储与临时表清理

### 2. 定时任务调度
系统通过crontab配置定时任务，实现自动化数据处理：
- 每10分钟执行SCADA数据解析：`0/10 * * * * /home/trans/script/start.sh parse_scada_data.py`
- 每10分钟执行故障报警数据解析：`0/10 * * * * /home/trans/script/start.sh parse_warn_fault_data.py`
- 每天1点执行数据转化：`0 1 * * * /home/trans/script/start.sh app_run.py`
- 每月1号1点执行分区管理：`0 1 1 * * sh /home/trans/script/start.sh add_or_remove_partition.py`

### 3. 数据库交互
通过<mcsymbol name="ConnectMysql" filename="ConnectMysql.py" path="d:\project\energy-online-data\utils\db\ConnectMysql.py" startline="1" type="class"></mcsymbol>实现数据库连接，在<mcfile name="common_connect.py" path="d:\project\energy-online-data\service\common_connect.py"></mcfile>中定义了全局数据库连接实例。

## 四、环境要求与安装

### 环境要求
- Python 3.x
- 依赖包：详见<mcfile name="requirements.txt" path="d:\project\energy-online-data\requirements.txt"></mcfile>

### 安装步骤
1. 克隆项目到本地
2. 安装依赖包：
```bash
pip install -r requirements.txt
```
3. 配置<mcfile name="config.yaml" path="d:\project\energy-online-data\conf\config.yaml"></mcfile>文件
4. 设置定时任务（参考README中的定时任务配置）

## 五、配置说明
系统配置主要通过<mcfile name="config.yaml" path="d:\project\energy-online-data\conf\config.yaml"></mcfile>文件进行，包括数据库连接参数、数据处理配置等。可通过<mcsymbol name="yaml_conf" filename="read_conf.py" path="d:\project\energy-online-data\utils\conf\read_conf.py" startline="8" type="function"></mcsymbol>函数读取配置内容。

## 六、关键代码说明

### 数据处理核心方法
<mcsymbol name="run" filename="ReadAndSaveDb.py" path="d:\project\energy-online-data\data\ReadAndSaveDb.py" startline="100" type="function"></mcsymbol>方法实现了多进程处理数据的逻辑：
```python:/d:/project/energy-online-data/data/ReadAndSaveDb.py
def run(self):
    with multiprocessing.Pool(2) as pool:
        pool.map(self.read_and_save_db, self.yesterday_tables)
```

### 配置文件读取
<mcsymbol name="read_conf" filename="read_conf.py" path="d:\project\energy-online-data\utils\conf\read_conf.py" startline="16" type="function"></mcsymbol>函数提供了统一的配置读取接口：
```python:/d:/project/energy-online-data/utils/conf/read_conf.py
def read_conf(dict_conf, col, default_value=None):
    if col in dict_conf:
        res = dict_conf[col]
        if res is None and default_value is not None:
            return default_value
        return res
    else:
        return default_value
```
        