注意 win7 需要 Windows6.1-KB2533623-x64.msu 补丁

打包为可执行文件以便分发。

PyInstaller – 将 Python 程序转换成独立的执行文件(跨平台)。
dh-virtualenv – 构建并将 virtualenv 虚拟环境作为一个 Debian 包来发布。
Nuitka – 将脚本、模块、包编译成可执行文件或扩展模块。
py2app – 将 Python 脚本变为独立软件包(Mac OS X)。
py2exe – 将 Python 脚本变为独立软件包(Windows)。
pynsist – 一个用来创建 Windows 安装程序的工具,可以在安装程序中打包 Python本身。

Nuitka

website

Nuitka直接将python编译成C++代码 ,再编译C++代码产生可执行文件,完全不存在反向解析的问题,非常安全,而且由于可执行文件由C++编译而来,运行速度也会获得提升。

下载MinGW64 8.1(MinGW编译器比MSVS编译器要快,并且不需要下载一堆20多G的安装文件到C盘)

20200601_145914.png

解压后放在C盘目录下,查询gcc.exe是否有效 gcc.exe –version

20200601_145936.png

设置环境变量

20200601_145955.png

查看相关信息
python -m nuitka –version
python -m nuitka –plugin-list

pip install nuitka
pip install -U nuitka

使用 anaconda 安装
conda install -c conda-forge nuitka

使用 anaconda 安装 mingw64 更方便
conda install m2w64-gcc libpython
setenv CC=<path_to_Anaconda>\Library\mingw-w64\bin\gcc.exe
set CC=D:\Anaconda3\envs\leastSquare\Library\mingw-w64\bin\gcc.exe

然后使用 提示模式 自动设置参数
python get-hints.py your.py
python nuitka-hints.py your.py


手动设置参数

setenv CC=C:\mingw64\bin\gcc.exe
python -m nuitka --mingw64 --standalone --output-dir=out --show-progress --plugin-enable=numpy --follow-imports app.py

python nuitka --mingw64 --standalone --show-modules --show-progress --show-scons --plugin-enable=numpy --plugin-enable=tk-inter --plugin-enable=pylint-warnings -j 8 main.py


python -m nuitka --mingw64 --standalone --windows-disable-console --python-flag=no_site --show-modules --show-progress --show-scons --plugin-enable=numpy --plugin-enable=tk-inter --plugin-enable=pylint-warnings --assume-yes-for-downloads --nofollow-import-to=numpy,jinja2,matplotlib,scipy,sqlalchemy,pandas,pygal,pyzbar --follow-import-to=tkArc -j 8 app.py



--show-scons

python -m nuitka --mingw64 --standalone --show-progress --plugin-enable=numpy --plugin-enable=tk-inter --plugin-enable=pylint-warnings --plugin-enable=qt-plugins --assume-yes-for-downloads --nofollow-imports --follow-import-to=numpy,matplotlib app.py

遇到缺少库文件的就找到文件拷贝过去,有目录的考目录,有.py文件的拷文件



# 下面的编译时间非常的长超过8小时
nuitka --mingw64 --standalone --show-progress --plugin-enable=numpy --plugin-enable=tk-inter --plugin-enable=pylint-warnings --plugin-enable=qt-plugins --assume-yes-for-downloads --recurse-all main.py



--nofollow-imports --follow-import-to=numpy,matplotlib

--recurse-all 如同pyinstaller 的--onefile 将所有文件打包为一个可执行程序。
--output-dir=out
--windows-dependency-tool=pefile
--follow-imports
--python-flag=nosite
--file-reference-choice=original

--python-flag=no_site

--mingw64 #默认为已经安装的vs2017去编译,否则就按指定的比如mingw
--standalone 不依赖安装的python文件,这是必须的
--windows-dependency-tool=pefile 查找依赖库
--windows-disable-console 没有CMD控制窗口
--recurse-all 所有的资源文件 这个也选上
-recurse-not-to=numpy,jinja2 不编译的模块,防止速度会更慢
--output-dir=out 生成exe到out文件夹下面去
--show-progress 显示编译的进度,很直观
--show-memory 显示内存的占用
--plugin-enable=pylint-warnings 报警信息
--plugin-enable=qt-plugins 需要加载的PyQT插件

-o: 指定输出的文件名(需包含所在目录)

编译 pyd

如果 pyd 调用有问题,可以尝试一下 cpython 生成 pyd

nuitka --mingw64 --module --show-progress --output-dir=o 你的.py

pyinstaller

pip install pyinstaller

pyinstaller -y --upx-dir E:\green\upx-3.96-win64\ --clean --onefile MainWindow.py 

pyinstaller -y --clean --onefile --distpath ../dist --workpath ../build app.py
pyinstaller -y --clean --distpath ../dist --workpath ../build app.py

问题

Could not find the matplotlib data files

当前版本 3.3.7 降级据说可以
pip install matplotlib==3.0.3 -i https://pypi.tuna.tsinghua.edu.cn/simple –user
pip install matplotlib==3.1.3
pip install matplotlib==3.2.2

No module named ‘TkTreectrl’

_tkinter.TclError: Can’t find a usable init.tcl

pybind11

目前 python3 在软件退出时会有内存泄漏,暂不使用

数据可以用不同的方式”分布”

20200525_135604.png 20200525_135610.png 20200525_135615.png

但数据经常会集中在一个中心值的附近,而不向左或右偏斜,叫做 “正态分布”:

20200525_135636.png

通常这就叫做 “钟形曲线”因为曲线的形状像个钟。

20200525_135657.png 20200525_135759.png

统计学里面,正态分布(normal distribution)最常见。男女身高、寿命、血压、考试成绩、测量误差等等,都属于正态分布。

20200525_135849.png

正态分布为什么常见?真正原因是中心极限定理(central limit theorem)

正态分布的主要特征:

  1. 集中性:正态曲线的高峰位于正中央,即均数所在的位置。
  2. 对称性:正态曲线以均数为中心,左右对称,曲线两端永远不与横轴相交。
  3. 均匀变动性:正态曲线由均数所在处开始,分别向左右两侧逐渐均匀下降。
  4. 正态分布有两个参数,即均数μ和标准差σ,可记作N(μ,σ):均数μ决定正态曲线的中心位置;标准差σ决定正态曲线的陡峭或扁平程度。σ越小,曲线越陡峭;σ越大,曲线越扁平。
  5. u变换:为了便于描述和应用,常将正态变量作数据转换。
20200525_142443.png 20200525_143934.png

有68.2%数值位于平均值1个标准差的范围之内
有95.4%的数值位于2个标准差的范围以内
有99.7%的数值位于3个标准差的范围以内

最小平方法是十九世纪统计学的主题曲。 从许多方面来看, 它之于统计学就相当于十八世纪的微积分之于数学。
—-乔治·斯蒂格勒的《The History of Statistics》

numpy.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False)

"""
x:要拟合点的横坐标
y:要拟合点的纵坐标
deg:自由度.例如:自由度为2,那么拟合出来的曲线就是二次函数,自由度是3,拟合出来的曲线就是3次函数
"""
def fit_raw_data(x, y):
"""
使用最小二乘法 拟合函数,生成 360*10 个数据,每 1 度 10 个数据点。
:return:

"""
# 求出参数
parameter = np.polyfit(x,y,6)
# 拼接处方程
p = np.poly1d(parameter)
# 上打印拟合多项式
print(p)
# 生成 3600 个数据
gen_x_data = np.linspace(0, 360, 360)
gen_y_data = p(gen_x_data)
return gen_x_data,gen_y_data

问题

RankWarning ‘Polyfit may be poorly conditioned’

polyfit issues a RankWarning when the least-squares fit is badly conditioned. This implies that the best fit is not well-defined due to numerical error. The results may be improved by lowering the polynomial degree or by replacing x by x - x.mean(). The rcond parameter can also be set to a value smaller than its default, but the resulting fit may be spurious: including contributions from the small singular values can add numerical noise to the result.
Note that fitting polynomial coefficients is inherently badly conditioned when the degree of the polynomial is large or the interval of sample points is badly centered. The quality of the fit should always be checked in these cases. When polynomial fits are not satisfactory, splines may be a good alternative.

等待答辩中,顺便看完了这本书,缓解一下紧张的情绪。

作者 茂木健一郎(日) 李力丰译 江西人民出版社

20200524_120317.png

整本书比较轻松,闲暇时读一下也不错。200 页

大脑适合 “杂食”,不分领域的杂读至关重要,会有潜移默化的积累。
大脑有一种 “默认模式网络” 在不做事情或放松时活跃,是在整理集中注意力是收集的信息。
记得之前看过一种说法,说人在发呆的时候消耗能量反而比做事情的时候大,可能就是这个原因吧。

读书时要保持一种意识,能够向其他人 “讲述” 这本书。
这个应该和费曼学习法差不多。消化理解吸收然后输出。

阅读能够带着你的大脑去旅行,锻炼你的想象力。
阅读可以作为生活中的“预防针”,随着主人公去感受不同的生活和遭遇,面对不同的选择。

转换角度

16384 是 2 的码盘位数次幂

14位码盘是 16384 圈 2^14
分辨力为 360/2^14 = 1’19’’

20200523_150954.png

如果知道编码器的一圈脉冲数就可以 360/脉冲数 * 当前脉冲 得到角度

datas['angle'] = (datas['pulse'] * 360 / 16384) % 360
20200814_171826.png

鼠标缩放字体

File —> setting —> Keymap —>在搜寻框中输入:increase —> Increase Font Size(双击) —> 在弹出的对话框中选择Add Mouse Shortcut
在弹出的对话框中同时按住ctrl键和鼠标滚轮向上滑。

File —> setting —> Keymap —>在搜寻框中输入:decrease —>Decrease Font Size(双击)—> 在弹出的对话框中选择Add Mouse Shortcut
在弹出的对话框中同时按住ctrl键和鼠标滚轮向下滑。

画图 独立显示

File->Settings->Tools->Python Scientific
取消掉Show plots in toolwindow选项

ctrl+shift+f失效的解决方案

如果使用了搜狗输入法,在设置里面取消简繁切换快捷键即可

引用

20200819_170443.png

表面粗糙度评定参数

20200523_125014.png

表面粗糙度是指加工表面具有的较小间距和微小峰谷的不平度。其两波峰或两波谷之间的距离(波距)很小(在1mm以下),它属于微观几何形状误差。

具体指微小峰谷Z高低程度和间距S状况。一般按S分:

  • S<1mm 为表面粗糙度;
  • 1≤S≤10mm为波纹度;
  • S>10mm为 f 形状。
20200523_125130.png

计算

基准线

基准线是用以评定表面粗糙度参数的轮廓中线 。基准线有两种:轮廓的小二乘中线:在取样长度内,轮廓线上各点的轮廓偏距的平方和为小,具有几何轮廓形状。轮廓的算术平均中线:在取样长度内,中线上下两边轮廓的面积相等。理论上*小二乘中线是理想的基准线,但在实际应用中很难获得,因此一般用轮廓的算术平均中线代替,且测量时可用一根位置近似的直线代替。

轮廓最小二乘中线?
轮廓的最小二乘中线是在取样长度内,使轮廓上各点轮廓偏距的平方和为最小的线。

轮廓算术平均中线
轮廓的算术平均中线是在取样长度内,划分实际轮廓为上、下两部分,且使上、下面积相等的线。

测量行程

测量行程是指传感器触针,在实际工件上的移动距离。测量行程通常是评定长度加2个取样长度的计算关系:例如评定长度选为5L时,取样长度L为0.8mm,测量行程为5L+2L=7L 测量行程为 7X0.8=5.6mm 知道这一点非常重要,可以计算出工件上移动的距离。从而判定用户测量的*小工件的接触面尺寸。

GB/T 1031-1995 表面粗糙度参数及其数值;
GB/T 131-1993 机械制图表面粗糙度符号、代号及其注法。

什么称为轮廓算术平均偏差(Ra)?
答:在取样长度内,被测轮廓上各点至轮廓中线距离绝对值的算术平均值,Ra值越大,则表面越粗糙。Ra能客观地反映被测轮廓的几何特性。Ra值可用电动轮廓仪直接测量,但不够直观。

Ra=中心线平均粗糙度

设于表面轮廓曲线上撷取长度L,以该长度内中心现为X轴,撷取长度内所有斜线部分面积之和除以测定长度L所得之值。即为Ra。

20200819_173002.png

Ry=最大粗糙度

设于表面轮廓曲线上撷取长度L,在该长度内曲线最高峰至最低谷之垂直距离,即为最大粗糙值Rmax/Ry。(Rmax和Ry算法概念相同,但取样的峰谷不同。近年Ry近乎取代了Rmax)

20200819_173057.png

Rz=十点平均粗糙度

设于表面轮廓曲线上撷取长度L,在该长度内曲线中心以第五高峰顶与第五低谷底测出高低距离,即Rz。

20200819_173118.png

vs2019 c++17 byte 冲突

问题是由于把 std::byte 引入了全局空间,和SDK的定义冲突了。

using namespace std; 会把 std::byte 也引入到全局空间

该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失

(1)单击“工具”|“自定义”命令,弹出“自定义”对话框。
(2)单击“命令”标签,进入“命令”选项卡。
(3)在“菜单栏”下拉列表中,选择“文件”选项。
(4)单击“添加命令”按钮,弹出“添加命令”对话框。
(5)在“类别”列表中,选择“文件”选项;在“命令”列表中,选择“高级保存选项”选项。
(6)单击“确定”按钮,关闭“添加命令”对话框。
(7)选中“控件”列表中的“高级保存选项”选项,单击“上移”或者“下移”按钮,调整该命令的位置。
(8)单击“关闭”按钮,完成“高级保存选项”命令的添加操作。
(9)打开“文件”菜单下的“高级保存选项”,设置编码 Unicode(utf-8带签名)- 代码页 65001

新建 win32 dll 项目