激光

zhouyang.xie a1954c1c85 防反编译打包 1 month ago
node_caller a1954c1c85 防反编译打包 1 month ago
.gitignore a1954c1c85 防反编译打包 1 month ago
api_test.py fd93310e63 激光测量v2,增加了分析数据本地保存,实时调取,分析历史管理 1 year ago
build.py a1954c1c85 防反编译打包 1 month ago
data_analyse_origin.py 6c0aebf932 激光测量v3.2,使用固定速度拟合圆,每个叶片与对应的圆心分别求桨距角,显示旋转修正后叶片轮廓,排查若干BUG 1 month ago
data_clean.py 6c0aebf932 激光测量v3.2,使用固定速度拟合圆,每个叶片与对应的圆心分别求桨距角,显示旋转修正后叶片轮廓,排查若干BUG 1 month ago
entry.py a1954c1c85 防反编译打包 1 month ago
frequency_filter.py f4180229da 激光测量v3.1,使用固定速度拟合圆,每个叶片与对应的圆心分别求桨距角,显示旋转修正后叶片轮廓,排查若干BUG 7 months ago
keygen.py a1954c1c85 防反编译打包 1 month ago
license_checker.py a1954c1c85 防反编译打包 1 month ago
orginal_plot.py 6c0aebf932 激光测量v3.2,使用固定速度拟合圆,每个叶片与对应的圆心分别求桨距角,显示旋转修正后叶片轮廓,排查若干BUG 1 month ago
readme.md a1954c1c85 防反编译打包 1 month ago
requirements.txt a1954c1c85 防反编译打包 1 month ago
接口说明.md 27a5549a66 激光测量v2.3.1,添加了简单的readme文件,原本的readme1文件为接口实现说明 1 year ago

readme.md

项目名称:激光测距仪

项目介绍

将激光测距仪硬件根据测量方法采集到的数据进行分析处理,得到各种分析结果,包括:

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)"