网站最近更新

© 乙回庐 2018. All rights reserved.

关于一个工作用自制小软件

阅读某些国际和行业标准是我日常工作的一部分。不过这些看似权威的标准也常常有很多并不权威的地方。比如,大量试验要求缺乏理论依据,即使作为经验所得也有点粗糙;又比如,个别标准在一次次升版后竟留下了前后自相矛盾之处;再比如,都已经是二十一世纪的第二个十年的后半期了,许多标准仍然停留在大量的查表上,或者基于其他对数据的手工处理。今天我所涉及的标准,就属于第三类问题。

通电后的发热量是电子电气产品在生产过程中必须注意的问题。为此有一项通用试验专为测量不同电流下的元器件温升。测得若干组电流—温升值后,就可以根据数据点绘制电流—温升曲线。进一步的,可以根据器件工作时的环境温度和器件本身可承受的最高温度,确定最大许用电流,从而得到环境温度—许用电流曲线。这点很好理解,比如通电10安培时的温升是60摄氏度,器件本身所能承受的最高温度是100摄氏度,那么如果使用时的环境温度是40度,就不能通超过10安培的电流。通常,为了保障一定的安全余量,还会给最大许用电流乘以一个0.8的系数,得到一条降额的许用电流曲线 (derating curve)。

在IEC (国际电工委员会) 和EIA (美国电子工业协会) 的相关标准中,都提到了曲线,不过都没有说曲线该怎么画。几十年前,标准初定的时候,自然是手绘。手工描点连线,再画平滑一点,恁谁都会。但现在,我们用计算机了,曲线该怎么出?这还是个比较专业的问题。同时呢,又有充分的必要让专业性的问题得到一个通用解答。测试人员和产品工程师每天面对众多的产品和数据,给出数据得到曲线,这才是他们所希望的。此外,产品千变万化、数据各不相同,我们需要的解决方案不仅要通用,还得够鲁棒。

我所观察到的原有的一些方案,大部分都是二次拟合,最常见的并且被通用程序化的是不带一次项和常数项的二次拟合,也即认为温升和电流平方成严格正比。这个误差大到什么程度呢,大到程序作者都不愿意把数据点给显示出来的程度。大家得到的只有一条曲线,背后一片茫然。

那么,为啥要采用这种最粗糙的只有二次项的二次函数呢。我猜除了好实现,还因为简单就是大美:不管原始数据长成什么鬼样子,拟合曲线永远光滑,绝无驻点和拐点。这种方法对数据点的质量和数量都没有要求,只要用户不去探究拟合偏差 (可能大家工作都太忙了,还真没遇到去打开这程序的盖头钻进去看的) ,程序就是最普适、最鲁棒,最好使。大家都爱它。曾经有人这么夸赞它:“只给一个数据点就能出曲线,这程序太厉害了。”

然而我还是不能接受“虚假繁荣”。自制一个小软件,就是为了提供更真实的结果,改善“描点连线”这个说简单其实简单,但又一直是个问题的问题。软件提供了七种拟合公式,其中部分是基于理论推导,部分是纯粹构造,只是大量基于实测数据的测试表明,构造的效果要好于理论推导;七种方法也自然包括了常见的幂函数拟合。在软件界面上,实验数据和拟合曲线的对比可以直观地看到,也提供了误差值作为拟合效果的定量表征。为了方便用户,还专门设了与给定格式的excel文档的原始数据交互。虽然是一个超级不专业的小软件,同样不专业的软件文档倒也是有的。

我给软件取名为“KareTA”。T是温度,A是电流,这一个是物理量的通用符号而另一个是单位的,整个名字就透出一股“错乱”的气息。至于“Kare”,认为是“care”也好,认为是“calculate”也罢,或许也还有“report”的意思在,都不重要。这整个词在日文里可以写作“枯れた”、“涸れた”等,是干燥、枯萎等含义的过去式。在整个编写、测试、发布及收集反馈进一步修改的过程中,我确实是有精疲力竭之感。对完全不专业的作者来说,满足用户无穷无尽又偶尔彼此矛盾的需求可谓大麻烦。在这个自制图标 (有点丑。找不到好看的可用字体 T^T) 里,K的两肢就是软件所给出的两类曲线:电流—温升曲线以及室温—许用电流曲线。

这个软件并不直接给出最优的拟合结果,而是需要用户根据误差和曲线形态自己挑选。直接确定最优是可行的,无非是比较拟合误差值,再判断曲线是否有拐点和驻点。只是我不愿意这么做。测试员必须要对测试数据负责,而不是把自己都没观察判断过的原始数据直接丢给程序来美化。我也能想象一旦把拟合、统计和判断都埋在后台而前台只出一幅图的后果,那势必有许多用户会问:二次函数的结果你我看看呀!

再说得远一点。许多员工都希望能有一套程序自动替他们完成日常工作里繁杂的手工劳动,只是他们还没有想到,一旦出现了这种工具,也就不再有他们存在的必要。这也是目前不少有能力做自动化程序的人迟迟不愿意动手的原因。

此文文长1868字,君不评论一二?
亲,给点评论吧!

展开本分类索引