# 项目名称:激光测距仪 ## 项目介绍 将激光测距仪硬件根据测量方法采集到的数据进行分析处理,得到各种分析结果,包括: ### 1、数据表部分 - 3个叶片相对角度偏差 - 3个叶片的最大、最小净空及它们对应的转速,3个叶片平均净空和净空浮动范围 - 3个叶片叶根-叶尖扭转角 - 3个叶片塔筒振动主频、振动幅值 ### 2、数据图部分 - 叶根-叶尖测量数据原始图 - 滤波后的塔筒振动时域图 - 快速傅里叶变换(FFT)后的塔筒震动频谱图 - 叶根轮廓拟合图 - 叶尖轮廓拟合图 - 净空-转速分布图 ## 项目运行原理 导入1台风机的2组标准测量数据(定位(locate)数据和测量(measure)数据),输入风机的锥角和轴向倾角,即可得到分析结果。此外本项目还具有: - 历史测量结果摘要储存为excel,支持全部历史结果总览; - 每条测量结果全量数据本地保存、一键导入查看历史结果。 ## 项目文件功能 | 文件名 | 功能描述 | |------------------------|------------------------------------------------------------------------------------------------------------------| | api_test.py | 和前端的接口传输 | | data_analyse_origin.py | 调用frequency_filter.py组成的完整的算法代码,包含了data_clean.py中的全部功能。有着完整的注释、检查点和日志输出,不依赖软件即可分析,并添加了画图功能,但分析结果无法自动保存,通常用作算法调试。 | | data_clean.py | 调用frequency_filter.py组成的完整算法代码,但是没有注释、检查点和日志输出,无画图功能。是api_test.py调用的主程序,用于软件部署。 | | frequency_filter.py | 塔筒振动分析,叶根叶尖处塔筒距离计算,是完整算法的重要组成部分,内部有已经被注释掉的塔筒振动画图算法。 | | orginal_plot.py | 读取原始测量数据存储文件夹中的全部数据并绘图,通常用于检验原始数据基本情况。 | # 打包发布 尽可能的防反编译或增加反编译成本(时间、解读)。 ## 第三方依赖包 pip 安装 nuitka、 codeenigma 、cryptography ## 授权管理 (Cryptography) ### 生成 RSA 密钥对 执行命令:python keygen.py genkey 输出到 dist/license/ 目录:private_key.pem、public_key.pem ### 签发 License # 永不过期 python keygen.py genlicense --expire "never" --product "laser_cal" --version "1.0.0" --licensee "客户名" # 指定过期日期 python keygen.py genlicense --expire "2027-12-31" --product "laser_cal" --version "1.0.0" --licensee "客户名" ## 混淆与打包 (CodeEnigma + Nuitka) # 清理 python build.py --clean # 混淆 + 编译(standalone 模式) python build.py # 混淆 + 编译(单文件模式) python build.py --onefile # 混淆 + 编译为可执行程序(推荐生产使用) python build.py --exe # 仅编译,跳过混淆 python build.py --skip-obfuscate # 仅编译为可执行程序(跳过混淆,开发调试用) python build.py --exe --skip-obfuscate # 编译为单文件(最便于分发) python build.py --onefile --skip-obfuscate # 编译为共享库(原有模式,向后兼容;共享库在windows下为pyd文件,linux下位so文件) python build.py --module --skip-obfuscate 注意事项 1. --exe (编译为可执行程序后,Node.js 不再需要 Python 环境,可以直接调用) 和 --onefile 模式会将 pandas、numpy、scipy 等大型库一起打包,编译时间较长(Windows 上约 5-15 分钟),产物体积较大(约 200-500MB)。 2. --module 模式编译快(约 30 秒),产物小,但运行时仍需要 Python 虚拟环境。 3. 三种模式均支持 --skip-obfuscate 跳过混淆步骤。 4. license.lic 和 public_key.pem 会自动复制到编译产物目录。 5. node_caller文件夹为 vue3 调用算法示例, 如命令: node -e "require('./node_caller/laser.js').callPython('getpath').then(console.log).catch(console.error)"