2017-09
29

查bug成就感

By xrspook @ 11:31:40 归类于: 烂日记

去做一些,对别人来说几乎是不可能的事对我来说有相当大的成就感。昨天我就花了接近五个小时的时间去做这种事,但实际上一开始的时候,我并不知道我可以做到。甚至在开始的时候,我想都没想过我要做这种人,因为我只是打算找出我自己的毛病,结果却找出了系统的毛病。这种错乱可能早已存在,托利多这个世界上最有名的称量产品制造公司可能早就知道他们的东西有这样的不足,但是我却是这个单位里第一个发现这个问题的人。为什么别人就没有发现?我却发现了呢?因为一定程度上,我对自己写的程序有信心,我觉得那不可能出错,如果出错了,唯一的可能性只能是,我之前遵循的那条规则以外还有一些特例。

昨天一开始的时候,我只是想核对一下数据,接着发现数据差太远,有些根本没办法核对,造成那个的原因是操作人员在实际执行过程中没有完全按照正确操作去做。这是没办法挽救的,也只能按照他们记下来的那个时间点去计算,几乎可以这么说,那些数据是无法核对的。但另外有一些能核对的却很神奇,因为我那个程序计算出来的数值跟他们记录下来的就只差那么一点点。可能是两公斤,也可能是四公斤,也可能是八公斤,为什么会造成这个问题呢?之前程序之所以不能完全使用是因为第一称和最后一称的问题,但显然这公斤级的问题不是那个,问题到底出在哪里?我找了一条不算大的船检查,只有157斗。然后沿着斗数一个一个往下看,157斗数量没错,净重也没有出现逻辑以外的东西。斗数没错,净重也没有神经病,但为什么累计重量却不一样呢?到了这个程度,靠人肉去看是不行的,所以我直接把净重和累计重量连贴出来,然后用Excel累加一下。结果发现了惊天大秘密,某个数,如果按照上一个斗的累积重量加这一斗的净重得出某个数值。但实际上系统记录的累积重量却比那个数值少了两公斤。于是这也就很好理解为什么我调用的净重计算总是会比他们记录下来的累计重量多那么一点点。抽查了这几天的一些记录。发现了起码四处这样的问题。这些问题出现的频率很难说,有可能是40分钟,也有可能是一个小时。发生这种事感觉挺反人类,因为做一个程序设计的,不是应该首先得出净重,然后用净重去计算累计重量吗?但显然他们可能不这么干。至于托利多编程的人是怎么想的,真的不知道。如果有一天客户要求打印每一斗的详单,这该怎么办呢?当然不是每个死变态都会把净重全部加一遍,看一下跟累计重量是不是一致,因为所有人都会默认,累计重量就是从净重加出来的,实际上从这个系统看来,却不是这样。这个问题简直就是未解之谜。两公斤刚好是散粮称的最小刻度,一跳就是两公斤了。如果几百吨的船,出现两公斤的误差,完全可以接受。如果我们的人最终打单的时候选择选择我们自己写的查询程序,只要之前他的操作,一直都没错,也没有问题。这种事情居然被我发现了,我莫名的感感到很大成就感。我们单位的中控那里一共有四台散粮称。出现这个状况的貌似只有其中一台,其余两台用过的,对了一些可核对的数据,都没有问题。四台散粮称的程序完全一致,所以发生这种毛病也就只可能是某一台秤的某个传感器不知道哪里出问题了。出问题这很正常,毕竟这套设备买回来已经接近十年了,虽然从前我们用得不多,但是电子元件这种东西即便你不用,过了好长一段时间,也是会有毛病的。有毛病不是问题,重要的是你得把它发现出来。然后才好说后续要怎么办。

折腾的人生是痛并快乐着的。

2017-09
15

连续10小时的战斗

By xrspook @ 9:34:53 归类于: 烂日记

昨天从下午2点到晚上12点,我用了接近10个小时(吃饭+洗澡半小时)去解决一个一键打印的功能。而之所以会这么郁闷,完全是因为制造各种称的大头托利自身散粮称保存数据的模式有点神,说不准他们为什么一定得这么干,这有什么好处,但显然可能这是由来已久的问题。也正是因为这样,过去十年来,我们单位都在默默忍受着这种神奇,而没有像地磅那样,早就已经忍不住要改掉,因为散粮称要比地磅复杂很多。下午我用了几乎一整个上班时间在我的电脑上用模拟的数据研究该怎么去做。在整了两个多小时以后,我总算OK了,当我带着优盘去中控室实战的时候,我知道肯定还会有意外。因为数据模式这种东西,我实在很难预测。去到中控室的时候,基本已经是白班的下班时间。在那里,我把自己折腾了一个下午的方法套进去,套到你一半我就发现这样是不行的。我在那里停留了两个小时,没什么思路,大概是因为饿了,于是我把数据拷走一部分做测试,在回办公楼的路上一直在思考。从那时开始,我就已经有了个念头,我要重新从结构开始,重新规划。因为他们每一个ID流程号的第一条数据每次都会存在净重跟上一个ID流程号最后一条完全一致,但实际上这个第一条他们是不计入新ID总重量的。从前我不明白为什么他们的数据库里面有一列叫做最后一称。在我没到现场,去看这个问题的时候,我会猜想会不会他们把所有数量都跟这个最后一称拉上关系?如果他们把普通的设为1,第一称设为0,所有净重都和这个系数相乘然后累加得出的数是它们的总重量,这就不成问题。但从数据库看来,不是这回事。

在模拟数据的时候,我是可以在表里选择日期的第一条记录或者日期的最小值,获得正确的数据,但实际上在他们的表格里日期的最小值和日期的第一条记录不是一回事。日期的第一条记录不对,我可还可以用日期的最小值,但是如果在做净重的时候,第一条记录无法使用,我没办法用最小值去代替。晚上我又折腾了一两个小时去考虑这个问题,最终我的网友告诉我,表的存储没有时间先后的顺序。所有顺序都是要靠自己手动排序,听了他的那句话以后,我有个灵感就是要把原始的表用一个查询重新按照我希望的顺序排列,最终做到的效果是日期的最小值和日期第一条记录一致。做到了这一步以后,我终于得到了正确信息的条目。我的做法是筛选出每个ID的第一条记录,然后取负数,用那个负数跟原表做一个联合查询,也就是把他们的数据放在一个查询表里。把这个查询作为流水数据的修正版,然后再用之前的筛选方式和联结模式查询。以上我已经在昨晚做到,对比数据,90%已经一致,不一致的部分估计跟操作员的某些操作有关。今天早上我又在早餐前把斗数也修正了。在排列数据的时候我以计数净重的方式生成一个叫做斗数的条目,然后在筛选ID第一条记录的时候同时把斗数设为负数,联合查询操作加入斗数列,最后汇总计算的时候斗数的计算方式从之前的净重计数变成净重求和。这样操作下来,连真算入总重量的斗数也都一同修正了。

10个小时不算多,但对一个普通人来说,这很变态了。我觉得收获满满,虽然只是做了那么一件很简单的事而已。在Excel之后我觉得自己总算有点儿入门Access了。

© 2004 - 2024 我的天 | Theme by xrspook | Power by WordPress