根据动态链接库和头文件生成 Python 库的方法

给工业控制器和各种仪器设备写业务代码的时候,我们经常将 python 用作一门胶水语言来连接前后端程序和嵌入式设备。许多经典的工业控制器都提供动态链接库 (.dll, .so) 文件和一些头文件 (.h) 来方便二次开发。在 python 中,调用这些库函数的经典办法是通过 ctypes 标准库加载这些库文件,并且手动指定其参数类型,从而将其转变为封装好的 python 函数。利用 ctypesgen 可以方便地将这一过程自动化,从而得到易用的 python 库。

Continue reading “根据动态链接库和头文件生成 Python 库的方法”

拆解学习某国产特斯拉计的结构

前几天买了一个国产的磁场传感器粗略测定一个钕铁硼磁体的磁场强度(天恒测控 Tunkia 的 TM5100 手持特斯拉计),这几天正好需要扫描一个区域的磁场分布,就准备把这玩意接到电脑上采集数据,但是接上电脑之后竟然不工作。打电话问了厂家的技术支持,对方表示 TM5100 上原本配备有 USB 通信协议,甚至在官网的宣传手册里也写了支持 USB 通信,但是由于厂家的领导认为如果给手持仪器加上 USB 功能会导致台式的机器不好卖,因此强行要求技术人员屏蔽了这一部分程序。虽然他这种行为十分缺德,但是也是法律允许的商业行为,我也没有办法,只好把他的仪器拆开学习一下,看看如何能读出数据来。

Continue reading “拆解学习某国产特斯拉计的结构”

解决STM32F4系列MCU在Windows 10上无法打开 Virtual COM Port 的问题

用 CubeMX 生成代码试图在 STM32F4 系列的单片机中加入 USB CDC 中间件时,会出现一个奇怪的 bug,即在 macOS, Linux 等系统下运行时,可以正常打开串口操作,而在 Windows 10 中虽然在设备管理器中可以看到插入之后已经显示为 USB Serial Device, 但并不能正常打开操作。

比如最近我用的 STM32F407VET6,使用 CubeMX 生成代码,其中 USB_Device 设置为 Communication Device Class,所有参数都用默认,然后在主循环中只用一个最基本的 CDC_Transmit_FS 函数,编译之后依然不行。稍微调试之后可以发现如果把 Linker 的 minimum heap size 调到一些特定的数值上, 则程序有时候会正常。但这个很麻烦,因为随便改动程序之后就又要重新调整,所以稍微认真地找了一下bug,发现应该是官方库的函数有一些 bug。

Continue reading “解决STM32F4系列MCU在Windows 10上无法打开 Virtual COM Port 的问题”

给科研人员的家庭氩弧焊指南

我们在做高真空实验(比如质谱仪、冷原子)和一些惰性气体实验的时候,经常需要定制各种不锈钢高真空管件和各种箱体。贵得离谱不说,有时候我突然想实验一个新想法,真的很着急想在某个地方加一个法兰接口或者航空插头接口,如果临时去找焊工师傅的话又要预约再等几天,说不定2天过去好不容易调好的仪器又失锁或者温漂或者怎么了,心态就直接崩了。所以我决定自力更生,抄起焊枪自己搞。一方面是省钱又省时间,另一方面节省了和人家比划半天的功夫,有这功夫给人讲清楚我想要个什么结构我自己都焊出来了。

在我决定学习氩弧焊技术的时候,我以为这是一件很困难的事,所以在事先花了大概1天的功夫学习了一下相关的理论,甚至去拉来了一后备箱金属废品准备用来练习,但是在我上手之后,仅仅10分钟我就已经很熟练了。。。练习20分钟之后,我自己焊接了一个 10 吨级的小型液压压药装置,虽然有些边角处理得不是很好,但强度完全达到了要求。这之后又焊接了各种气密装置,效果都很好,甚至因为自己制作的用料更加扎实,各种泄漏率和散热情况还要更好一些。。。

实际上,我认为整个氩弧焊操作是比较容易掌握的,之所以各种技校和培训中心需要教学很长时间,是因为还需要讲解各种理论知识、参数选择和变通情况等等,而这些正是我们搞研究的人已经非常熟悉的。另外,因为我们不涉及高压力标准的压力容器焊接、焊缝后期热处理等比较硬核的内容,所以学起来很快也很正常。写这个指南的目的,就是给大家参考一下我的经验,在前期节省更多的时间。

花个一两天熟悉氩弧焊之后,平时也可以做很多有意思的东西,比如说和朋友一起搞院子烧烤的烤架、制作高真空微型扩散泵之类。我还顺便在家里焊接了一个惰性气氛手套箱,非常奢侈地配置了超大工作区和双过渡舱、四路气液接口和舱内循环再生装置,这样的手套箱市场上至少12万元起步,自己切割焊接组装实际上只需要几千元的材料费,虽然焊接这么大的工件比较费体力,但非常好玩,作为休闲 project 可以玩上好几天。

Continue reading “给科研人员的家庭氩弧焊指南”

线阵 CCD 的使用方法(以 TCD1304 为例)

本文首先简单介绍 CCD 原理,然后介绍如何驱动典型结构的线阵 CCD,最后介绍一个经典线阵 CCD 型号 TCD1304 配合 STM32 微控制器构建 USB CCD 模块的最简单例子。本文的目的是,使化学或者物理背景的中学或本科学生快速了解什么是 CCD,以及在几分钟的时间内大致学会如何在他们的研究项目中使用低速线阵 CCD。

(我不想学习,我只想马上整一个插电脑上就能用的便宜传感器 直接看文末 PS2)

Continue reading “线阵 CCD 的使用方法(以 TCD1304 为例)”

WordPress 迁移至 https 的正确办法

虽然我一向认为在公开的静态内容上使用加密没有必要,然而大公司,尤其 google,非常不厚道地在所有 http 站点上标记 “不安全”,其心可诛也。

作为 fallback,我会继续保留 http 的访问,不会强制跳转。

Continue reading “WordPress 迁移至 https 的正确办法”

解决 procps 更新报错

某日(就刚才)在日常更新一个 Debian 服务器的时候指令 sudo apt-get upgrade 失败,报错

Setting up procps (2:3.3.9-9+deb8u1) ...
Job for systemd-sysctl.service failed. See 'systemctl status systemd-sysctl.service' and 'journalctl -xn' for details.
invoke-rc.d: initscript procps, action "start" failed.
dpkg: error processing package procps (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 procps
E: Sub-process /usr/bin/dpkg returned an error code (1)
Continue reading “解决 procps 更新报错”