初出茅庐

  四年前我写过一片文章《我是半个程序员》,最近重读,发现挺有意思的,准备把最近四年的日子也写下来,同时也算是一个总结。

  2013年6月,我终于从学了7年的环境工程专业毕业了。别问我为什么选环境工程,是它选择我的。高考失利,填了6个专业,前4个都是计算机专业相关,然后第5个才被选中,就是环境工程,随后就在这个万丈深渊里爬了7年。幸运的是,研究生期间从事的基本都是产品开发和软件编程,最终毕业论文写的也是仪器的开发。毕业后,我毫不犹豫的选择了留在老师的公司,我觉得在这里能学到的东西太多了。那个暑假,CMC检定通过了,进样器也开发出来了。大家都很高兴,仪器可以全面销售了。

  这个时候有一个非常严谨的经销商,愿意代理我们的仪器。他拿到仪器后,并不是立刻推给用户,而是自己测试起来,连续两天弄到凌晨2点。最后给我们的答复是,我们的仪器不行,原理上就行不通。事实证明他是正确的,我们的测试都是拿清水来做,一旦遇到真实的水样,立刻就歇菜了。更加讽刺的是,这个原理我们都已经申请了专利,本来是引以为豪的东西,一下子被否定了。大家又陷入了开发危机,什么时候才能做出一款能正常使用的仪器呢?

  经过大家的讨论,新的方案出来了,就是在进样器上增加一个搅拌的功能。说干就干,一个月的时间,带搅拌的进样器也出来了。当时的开发速度,简直就是在飞。新的方案经过实际水样的验证,是可行的,于是就按这个结构生产。然而又出现了新的问题——电器控制总是时好时坏。仪器的整体结构是这样的,PC机和主机通过RS232通信,进样器并没有独立的电路板,上面的部件都是由主机的主板控制。主机和进样器之间通过一根1.5米串口线连接。控制不正常,我从代码里找了很久,刚开始怀疑是否有响应延时,加了一些延时,还是没能解决。无奈之下,找了之前帮忙的王工过来查看原因。王工一过来,就哈哈大笑,举着1.5米的串口线说,串口线怎么可以用来传输电压?

  由于进样器里面的所有部件都是由主机继电器控制的,我就从主机主板的IO口直接通过串口线接到进样器里。而这些部件的控制电压都是12V。也就是说,我用串口线来传输12V的电压,结果是什么样的呢?王工用万用表量了进样器里面电磁阀的输入电压,6.7V,而原本应该是12V,串口线竟然进行了如此严重的压降!终于找到原因了,只能笑自己太想当然,谁让我没学过电路呢。解决方案是在旁边单独拉两条线来传输电压,用的是自制的两针航空接头。这种做法在后面又出了一系列隐患,因为电压分正负,而接线的人经常不注意就接反了。

  王工建议进样器使用单独的电路板,这样结构就合理很多:进样器<==>PC<==>主机,也就是使用两条串口线接到PC上。问题来了,现有的VB软件上只有一个串口,怎么办?那时候,我对串口编程只懂点皮毛,只会收发指令,连一些基本的常识也不懂。我不知道串口对于软件而言都是独立的,根本没想过可以使用两个串口,而是自作聪明的想到了串口并用——把主机和进样器的两个串口一起并接到了PC上。于是,一不小心,又走上了一条不归路。

  首先,我进行了代码剥离,把原本由主机控制的进样器部件相关的代码剔除。然后开始编写进样器的代码,单片机用的51,所以很不费力的写完了。我还查看了多设备通信的资料,了解到必须要有地址,于是,在原来的通信协议上面增加了一个地址位,一切都非常规范。我并没有直接把两个设备接在一起联调,先试了下PC跟主机的通信,通过;然后单独接进样器,也很顺利的调通了。心里就暗爽,这未免也太容易了吧。最后一步,两个串口并联,接到PC上,通信就异常了。每次都是第一步跟主机通信成功,第二步跟进样器通信就失败。把两个并联的串口脱开来,单独运行,又是正常的。到底是怎么回事呢?用串口调试助手模拟软件发送指令,发现收到的指令跟下位机应该回复的并不一致。以当时的见识和觉悟,完全是一头雾水。现象一直能重现,但是找不到问题所在。

  后来突发奇想,把本来接进样器的那个串口,接到了另一台电脑上,也装了串口助手,再次模拟。第一条指令是发给主机的,发现替代进样器的电脑上也能显示,这个是正常的,谁让咱是并联呢。主机正常回复了应答指令到PC上,咦,好像指令对上了。也就是说,用另一台电脑替换进样器,PC收到的指令就正常了。这个差异可以得出结论,当PC第一次给主机发指令时,进样器也能收到该指令,但是有异常的反馈,这个反馈和主机应答的指令混在一起,于是通信就异常了。至于进样器为什么产生不该有的反馈,不得而知了,很有可能是串口中断部分的代码有bug。待我想进一步去验证的时候,我接到了老板新的任务。后面就再也没有涉及这个方案,也就是说就此夭折了。

  第一代仪器落下帷幕。非常享受整个开发过程,小公司的好处在于,想到就能做。缺什么部件可以立刻下单,不知道哪个型号,那就多买几个型号来试。需要加工的,立马出图去加工,在现场等着加工完就拿回来试。可以用“零阻力”来形容这种状态。大家也都积极性很高,经常不由自主的加班到很晚,还乐此不疲。第一代仪器正式开发结束,进入销售攻坚阶段,看到自己开发的仪器能被大家用起来,对于涉世未深的我,自豪感爆棚。

  

时间: 2024-11-08 18:20:11

初出茅庐的相关文章

初出茅庐--文本自动校对技术综述

申明:本博纯属个人对文本校对技术的偏好,以便于以后查阅.由于自己尚在学习探索中,内容不免有些显得不成熟,若有不当之处还请阅者指正. 文本自动校对是自然语言处理的重要研究领域之一.可用个人书写文字的检查,也可满足出版社的大量较高需求.文本自动校对,分为集中技术,一是文字文字自动校对,即程式将文本中出现的错字,借助文法检查器的检查,一一标出,由使用者用眼看逐一校对.二是语音自动校对,即让语音程式将文本转成语音输出,让校稿人员来听,以发现错误.这种校对方式,属于比较弱的校对方式,更多的依赖于人的听觉与

初出茅庐-----微信好友分析与微信机器人

初出茅庐-----微信好友分析与微信机器人 一.微信好友分析 1.简介 对微信的好友进行分析,统计好友的人数,省市的分布,并排序,并统计好友签名用词的特点.用pyechart图像显示,并存为网页文件. 2.函数描述 函数 描述 get_friends_info(self) 获取好像信息,返回lis列表 friends_info_lis_to_excle(self) 把lis信息写入到excle extract_data_as_two_lis(self, condition) 参数为conditi

初出茅庐——新起点

2016年1月23日下午17:30,时间悄然走到了这一刻,无情被碾压. 2016年1月8日-1月22日,为期14天的ACM新生线上赛,同时,也是我们军训的两周.每天除了疲惫的军训,回到宿舍就是写题,打码.有时熬夜到一两点.每天饱受身体和精神双重折磨,才终于在最后两天拿到了现场赛的门票. 23日下午1时,现场赛正式开始.10道题目,做出两题即有机会进入校队.残酷的结局是,四个半小时过去了,我一题也没有做出来. 对于没有学过算法的新手,只能暴力解题.奈何10道题的数据都是10^10,暴力超时...

菜鸟学Java—初出茅庐

2013年年初认识的Java,因为之前学习过C++,也考过NCRE 二级C++,知晓C++是一种十分让人头疼的OO高级程序设计语言,感觉高不可攀的样子,后来才知道C++大多用来写底层代码的,心里才觉得释然:以当时自己的水平根本配不上人家. 在见到Java之后,我发现她比C++单纯多了,而且是面向对象的,各方面品质条件的都不错,一种怦然心动的感觉啊!可是看到我们系主任给定的教材,顿时觉得她又是那么的难追,整整800页的"大砖头块"啊-- 还好后来教我们Java的何老师根本没有让我们看这本

基于python的接口测试学习笔记一(初出茅庐)

第一次写博客笔记,讲一下近来学习的接口自动化测试.网上查阅了相关资料,最后决定使用python语言写接口测试,使用的是python的第三方库requests.虽然python本身标准库中的 urllib2 模块提供了你所需要的大多数 HTTP 功能.但requests更好用简单.果断入门学习. 新手入门,代码比较简单 import requests import unittest class apiTest(unittest.TestCase): def setUp(self): self.ba

初出茅庐之第一个项目历程(三)

上次说到当前台页面需要加载多个数据类,而前台页面只有一直一个form表单,那我们该如何进行数据回显. 为了解决这个问题,小组成员就讨论能不能把数据返回给页面而不是返回给表单,于是就有了以layer(web弹层组件)进行多个表单提交,多个表单数据回显的开发模式. 来看看原先前台页面 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% Str

初出茅庐的图片上传的封装-- -- --面向对象

//今天才学的  留作纪念吧 //upload.php <?php    class Upload    {        private $filename;//文件名        private $type;//文件类型        private $fileerror;//文件错误        private $allowsize;//允许的文件大小        private $allowtype;//允许的类型        private $path;//路径        

初出茅庐的分页封装- - -面向对象

<?php    class Page    {        var $table;//表名        var $counts;//总条数        var $pagesize;//每页的条数        var $pages;//总页数        var $page;//当前页        var $first;//第一个        var $uppage;//上一页        var $downpage;//下一页        function __constru

初出茅庐(二)

说说Java学习的经历吧. 在网上查找了一堆杂七杂八的攻略,看了一堆大神给的学习建议. 总结起来学习Java主要分为两个方向JavaEE.安卓.(毕竟Java做桌面应用比拼不过C++嘛) 一顿思想斗争后,我决定往JavaEE方向发展. 在网易云课堂搜索了一大堆Java学习视频,发现了北京尚学堂的视频很不错,花费了将近一个月看了高琪.马士兵的视频教程,掌握了面向对象继承.封装.多态三大特性,了解了集合.多线程.socket编程.jdbc与数据库操作后也算是对Java入了个门. 在过完这些SE基础知