### 程序功能

自动化测试数据处理工具，减少人工处理时长，提高测试数据处理的效率和准确度：
1. 制动数据，单轴数据处理3min以内
2. 电机电流数据，全部轴数据处理1min以内
3. ISO激光数据整理，1min以内
4. wavelogger波形处理，几乎不花费时间

### 使用方法

点击可执行程序 AIO.exe，然后选择功能，根据提示填写必要参数，点击运行即可

### 第三方库

```text
参考requirements.txt
```

### 打包方法

```
pyinstaller.exe -F --version-file file_version_info.txt -i .\icon.ico .\aio.py -p .\brake.py -p .\current.py
pyinstaller --noconfirm --onedir --windowed --add-data "C:/Users/Administrator/AppData/Local/Programs/Python/Python312/Lib/site-packages/customtkinter;customtkinter/" --version-file ..\assets\file_version_info.txt -i ..\assets\icon.ico ..\code\aio.py -p ..\code\brake.py -p ..\code\iso.py -p ..\code\current.py -p ..\code\wavelogger.py
```

---

### 注意事项

#### 制动数据

```text
1. 数据文件存储存储规则
数据文件，就是我们拍急停的时候，采集到的 .data 文件，正方向拍三次急停，会采集到三个 .data 文件，存储在同一个文件夹内，即每组（三个 .data 文件）文件必须存储在同一个文件夹内，数据文件的命名无要求，
	
2. 文件夹命名规则
采集到的 .data 文件没有命名要求，但是对于文件夹的命名是有要求的，必须是如下格式：
	dXX_speedXX_reachXX 或者 loadXX_reachXX_speedXX
	XX代表不同条件下的测试数值，比如：
	d100_speed33_reach66，指的是，负载100%，速度33%，臂展66%

3. 结果文件命名规则
所谓结果文件，就是处理数据的那个 excle 文件，该文件名字的前缀必须是 loadXX_XXXXXXXXX.xlsx，比如：
	load33_自研_制动性能测试.xlsx
	load66_自研_制动性能测试.xlsx
	load100_自研_制动性能测试.xlsx
	
！！结果文件可以是没有数据的，也可以是之前有数据的，只要保证第 6 点中的那几个数据准确即可
	
4. 数据存储的组织结
	..../j1/load100_speed33_reach100
	..../j1/load100_speed66_reach100
	....
	..../j1/load100_speed100_reach100
	..../j1/load100_speed33_reach100/2024_05_16_09_18_52.data
	..../j1/load100_speed33_reach100/2024_05_16_09_19_52.data
	..../j1/load100_speed33_reach100/2024_05_16_09_20_52.data
	..../j1/load33_自研_制动性能测试.xlsx
	..../j1/load66_自研_制动性能测试.xlsx
	..../j1/load100_自研_制动性能测试.xlsx
	
5. 文件的打开与关闭
	a. 在执行程序之前，需要关闭所有相关 excle 文件
	b. 在执行程序之中，不允许打开相关 excle 文件
	c. 在执行程序之后，需要逐个打开结果文件，并保存一次
	
6. 参数一致性检查
执行程序前，需要确定 configs.xlsx 中设定的减速比/最大角速度/额定电流的值是正确的
		
7. 数据准确性检查
执行完程序之后，需要对结果文件的数据准确性做核对，通过我自己的数据观察，误差基本在10ms以内，也即10个数据点，误差较大的情况可自行调整
	
8. 其他
程序运行主要的耗时集中在打开，保存和关闭结果文件，第一次打开的时候会比较慢，是因为 excel 在做首次公式的计算，保存关闭之后，再打开会比较快一些，另外，如果在运行出错并重复运行程序的时候无响应，或者出现异常，请打开任务管理器，关闭一切和excel相关的进程，重新运行即可
```

#### 电机电流

1. 单独使用max/avg功能时，对于文件命名同第二点，存放数据的文件夹，只允许有 .data 或者 .csv 文件，且每次只能处理rc相同的轴的数据
2. cycle功能只处理单文件单轴数据，可以批量处理所有轴，但要确保遵守如下规则：
	a. 数据整理文件以 .xlsx 为后缀
	b. 其他文件
		A. 单轴：j1_xxxxx.data/csv
		B. 保持：j1_hold_xxxx.data/csv
		C. 所有文件放在同一个文件夹即可
		d. 界面输入rc参数时，需要输入所有轴的数据

#### ISO数据

所有文件放在同一个文件夹即可，命名规则如下：
	a. ISO.pdf
	b. ISO-V1000.pdf
	c. ISO-V100.pdf
	d. iso-results.xlsx

#### wavelogger波形数据

1. 需要提前将 .xdt 波形数据转换成 .csv 文件
2. 组织目录下只允许有 .csv 文件，对文件夹无要求
3. 运行结束后，会生成 result.xlsx 文件，结果按照 .csv 文件名存放
4. 采集数据时，不同轮次数据时间间隔最好大于 2 倍的周期时间，否则会出现采集的轮数不正确的情况，但数据是完整的
	
#### 其他
customtkinter的tabview组件不支持修改字体大小，可以参考 [Changing Font of a Tabview](https://github.com/TomSchimansky/CustomTkinter/issues/2296) 进行手动修改源码实现：
	a. 运行 `pip show customtkinter`，获取到库的路径
	b. 修改.../windows/widgets/ctk_tabview.py
	c. 增加 from .font.ctk_font import CTkFont
	d. 在大概 78 行的位置，增加 font=CTkFont(family="Consolas", size=18, weight='bold')

---

RELEASE CHANGES


已知问题：
1. office套件下运行好像有问题，WPS无问题，集中在just_open函数的实现上

v0.0.1(2024/05/18)
Draft

v0.0.2(2024/05/20)
1. 功能模块化，为后面其他功能奠定一个基本的框架
2. 使用了多线程提高效率
3. 优化了准备工作中的细节
4. 运行初始化时自动删除 raw_data_dir 中的 .xlsx 文件
5. 优化了输出格式
6. 使用 pyinstaller 库进行代码冻结并调试成功

v0.0.3(2024/05/21)
1. just_open函数打开失败的信息中，添加文件名
2. 删除global变量，函数全部通过传参实现
3. configuration.xlsx配置文件增加AXIS常量，表示那个轴，取值为 j1/j2/j3/j4/j5/j6/j7
4. [bugfix] 增加get_threshold_step函数，用来获取在计算row_start时合适的阈值和步长，主要是解决了二轴最差工况下，最大速度是个尖端的问题：
	a. load100_speed100_reachxxx 二轴 threshold = 50 step = 20
	b. 其他 threshold = 50 step = 100
	如上是一个比较保守的设定，因为设定的step比较小，找到点之后要往后延200最好
5. 在find_row_start_dp函数中新增一个参数data_file，方便后续调试

v0.0.4(2024/05/22)
1. 重新标定了get_threshold_step函数，让处理更加准确
2. 新定义了now_doing_msg函数，实时输出处理信息
3. 修改了find_row_start和find_row_start_dp函数，增加的部分相同，处理数据的时候，先判断是否是空值，或者是0，此时可以加快步进
4. 修改了just_open函数，不在做重试

v0.0.5(2024/05/23)
1. 完善了函数注释
2. 调整了阈值和步长
3. 删除了just_open函数，以及对应的win32com库（Thank GOD!终于可以不用这个库了）
4. 重写了获取开始点位的代码，直接使用speed来判断，而不用角度，所以find_row_start_dp以及copy_data_to_excel_file函数也被一并删除
5. 修改了配置文件configs.xlsx的初始参数顺序及结构，使程序通用性更强
6. 将initialazation中的预定义变量赋值调整到try...except...之外，更方便排查问题
7. 修改结束时间的格式，精确到秒

v0.0.6(2024/05/23)
1. 为了调整多功能框架，aio.py文件将会作为入口程序存在，不实现具体功能，功能的实现将由具体的功能脚本实现，aio.py只负责条件调用
2. 新增了自动化处理电流数据（电机/过载）的功能

v0.1.0(2024/05/29)
1. 修改为customtkinter图形化界面
2. 支持工业机器人制动数据处理（理论上支持，测试数据有问题，待验证）
3. 删除configs.xlsx配置表格，直接在界面配置，新增layout.xlsx文件，存储customtkinter布局
4. 电流尚未支持

v0.1.1(2024/05/30)
1. 增加版本检测功能
2. 修改了无效数据下的动作
3. textbox只在开始和结束时改变状态，而不是每次写入都更改
4. 调整了brake的结构
5. 重新在write2textbox中添加exitcode参数，并补齐相关逻辑和修改brake中的调用方式
6. 修复参数检查无效的情况
7. 屏蔽电流相关的功能

v0.1.2(2024/06/01)
1. 增加iso数据处理功能
2. 重新修改了README.md
3. 单独将rokae拉出来，作为一个独立的repo进行维护，与scripts分离

v0.1.3(2024/06/01)
1. 完成电流处理的基本功能
2. 修复了一些已知bugs

v0.1.4(2024/06/06)
1. AV/RR支持小数
2. 可处理电机电流单轴以及多轴数据，可根据需要进行参数设定处理不同轴的数据
3. 界面初始位置修改，以及删除所有entry的长度设定，因为设定无效
4. 修改了layout.xlsx布局，增加了duration/trqH/STO字段，以及额外的RC行，整体扩展了区域
5. 更改label/entry/optionmenu等控件的生成方式，使用循环实现，更加简洁和容易维护（暂未实现）
6. 支持工业/协作两条产品线的电机电流数据处理，包括单轴，场景，max/avg计算

v0.1.5(2024/06/12)
1. [aio.py]: 主界面切换不同功能时保持placehold一致
2. [brake.py]: 由于制动采集模板和内容的更改，适配了新的数据，更新了算法
3. [aio.py]: 新增tabview组件，区分数据处理和自动化测试功能
4. [aio.py]: 重新调整界面配色
5. [aio.py]: 修改了write2textbox函数，定制化显示每一行的颜色，针对每一行可自定义输出内容颜色
6. [brake.py/iso.py/current.py]: 由于第 5 点的更改，同时修改了其他文件相关引用的部分
7. [aio.py]: 更改label/entry/optionmenu等控件的生成方式，使用循环实现，更加简洁和容易维护
8. [aio.py]: 修改customtkinter库中C:\Users\Administrator\AppData\Local\Programs\Python\Python312\Lib\site-packages\customtkinter\windows\widgets\ctk_tabview.py文件，参考https://github.com/TomSchimansky/CustomTkinter/issues/2296，实现修改tabview组件的字体大小
9. [aio.py]: 修改menu_main->menu_main_dp，menu_sub->menu_sub_dp，为后续其他tab功能按钮做扩展，是针对第三点做出的相应调整
10. [layout.xlsx]: 添加了各个功能的流程图

v0.1.5.1(2024/06/12)
[current.py]:  修改cycle功能中，数据清理范围为70000行，并将threshold从2调整为5
[current.py]:  修改位置超限提示，使更清楚了解问题原因
[current.py]:  修改find_point函数中错误提示，增加定位信息
[README.md]: 精简打包命令
[requirements.txt]: 新增必要库配置文件

v0.1.5.2(2024/06/13)
[brake.py/aio.py]: 将sto修改为estop
[brake.py]: 修改了速度计算逻辑，新版本的vel列数据遵循如下规则，av = vel * 180 / pi，根据av再计算speed
[brake.py]: 将threshold修改为常量50
[brake.py]: 提高了输出提示语的明确性，删除了不必要的省略号
[brake.py]: 更正了之前的数据copy错误，重新优化了estop处是否达到指定百分比的判定逻辑

v0.1.5.3(2024/06/14)
[aio.py]: 修改w_param为84，适配14寸电脑屏幕
[brake.py]: 将判定合规逻辑修改为角速度超过指定角速度的95%
[README.md]: 稍作修改，包括打包方式，功能特性等

v0.1.6.0(2024/06/15)
[aio.py]: 新增wavelogger处理界面
[wavelogger.py]: 新增精度数据处理模块

v0.1.6.2(2024/06/16)
1. [current.py] 修改了max/avg相关功能中对于返回值的处理逻辑，并在输出框以行的形式打印出来
