第一个程序
2002年第一次上班,公司生产轨道上的称重设备。我当时负责设备的维修工作。维修得多了,就把整个设备的原理搞清楚了。在铁轨下放置压力传感器,用运算放大器对信号进行放大,再用电脑内采集卡对信号进行数字化精确测量,对数据进行处理就得到了铁皮的重量。但这是原理部分,对数据的处理是算法部分,是公司的机密,我并没有懂.
那时看到总工程师经常看一些很象示波器里的波形,那些波形是外出维修人员在现场采集的,据说看那波形,总工程师就可以分析那台秤出了什么问题。评价一台秤电子设备安装的质量也常常以采集到的波形为依据。波形为一个数据文件,需要用专用的软件才可以在电脑上显示出波形来。
我明白了,波形文件就是电脑连续采集到的数据,要想明白计算重量的原理就必须从分析电脑采集到的数据入手。
我拿来一个数据文件,一连串的数据能看出什么,我也把它显示成波形吧,但当时显示波形的软件我没有,向大头目要吧担心他们认为我不务正业。于是我自己来编了。当时是我第一次编windows软件,以前只用C写过一个简单的程序,VC工具让我写一个带个窗口的程序是很容易的事(其实一行代码都不用写),对于我来说困难的是如何在窗口中画点。每一点对应一个数据,点的高度对应数据的大小,从左往右顺序画点就组成了波形,改变最左边点的数据在文件中的位置就能移动地显示波形。
看着那一列波形在眼前移动,我真的很佩服别人能把它分析成重量数据。波形呈现台阶形,最高两个台阶。火车在轨道上运行的时候,一个轮子接一个轮子地上了秤台,有时两个轮子能同时存在于秤台上,维持一个很短的时间,前面的轮子下了,波形上就变成一级台阶高度。每节车皮由两组轮子承重,两组轮子分别在车皮的两端,波形上最多能出现某组轮子全部在秤台上的情形,不可能出现两组轮子同时在秤台上的情形。那么一节车皮的重量只要把两组轮子称的重量加起来就行。(我到现在都不知道这种假设是不是合理的,如果秤台处铁轨绝对水平的话应该没错)
手工从波形上计算车皮的重量知道怎么计算了,但数据不可能靠手工来计算的,列车运行得那么快,你怎么算得过来,而且数据都有轻微的抖动,以哪个数据为准?
用电脑怎么识别数据中的两个台阶呢?可以把超过某个数值的数据认为是两个台阶中吗?不行,有的车皮是空的,两个台阶的数值也很小。
我盯着波形看了很久,终于找到了识别波形跳变段的方法。
你来看一下这段波形:为什么在平缓段点之间的距离短而在上升段点之间的距离长呢?数据是周期采集的,两个数据之间有一个时间差,在平缓阶段,两个数值的大小很接近,所以看起来是一条连续的线,但在上升段,数据的变化快,看起来就成了分开的一个一个点。可见上升段的特征是相邻两数据的差值比较大。
你看,波形分析就是如此简单。
然后,我就编出了称重的软件,在某个新建秤台上,公司原有软件运行出错,总工叫我把软件装上试试。我到那儿一看,采集到的波形有很多毛刺,原有软件可能就是因为这个原因而产生逻辑错误的,我把我的软件装上了,结果运行良好。可见我的软件的波形识别能力比原有软件强。