前言

写了多年的LabVIEW程序,你是否面临这样的问题

总是在做一些重复的工作,感觉很没有意思;
总在不停的写代码,做类似的控件,实现相同的功能,丝毫没有成就感;
总在天加班,没有时间去提高自己;

你也知道简单的重复并不能带来效率的提高,却不知道走向何方,无奈而又焦急着?

小黑今天继续带你聊一聊LabVIEW吸星大法,让你在工作中越来越有效率,体会一切皆可掌控的妙感~

记住,我们的口号是 : 告别重复造车,你的就是我的,万物皆为我所用~

引言

上一篇,我介绍UI控件的复用。通过UI Control的个性化自定义,可以在前面板层级实现复用和积累。今天介绍函数选板层级的复用,通过对个性函数选板的工作自定义,实现个人函数库的打造。

下面几张图贴出来的是小黑专属的函数选板,如果你学会了这招吸星大法,也将拥有属于自己的库函数。
Elton Architecture
Foder API
 
TestStand API
Quick Drop API
UI API

什么是函数库的复用?

函数库的复用指的是将工作经验积累,固化为LabVIEW常用函数,实现工作经验在函数上的展现。

为什么要进行函数库复用?

大多数工程师都处在一个特定领域,较长时间做着某一个领域的测控系统。

通过努力工作,伟大的工程师们会经历大大小小的坑,形成每个人特有的工作经验。这些工作经验促使工程师们遇到相似问题时可以顺利解决,然而,大多数时候,经验留在了的脑海中,很难去传授或者分享。

其实,只要对的这些经验稍加总结,每个人都可以将自己的经验以文件或者代码的形式表达,从而把脑袋中的知识固化,形成一套属于自己的工具。

LabVIEW工程师通过总结抽象代码工作,形成特定函数库,这样做会将重复编码降低到最少,抽出更多时间进行更有创造力的活动。

谁来进行函数库复用?

无论你是还未毕业的学生,或者是出入职场的菜鸟,还是久经职场的工程师,函数代码的复用都应当不停的进行,毕竟,代码复用对于一个软件工程师的诱惑还是非常大的。如果你还没有复用过代码,或者复用仅仅是从另一个项目中扒一些代码出来使用,那么函数库复用的这套方法可以让你轻松积累。无论是对自己的工作经验总结还是与团队小组分享,这些内容都将获益匪浅。


 什么时候进行函数库复用呢?
函数复用主要在两大环节使用,即总结阶段和使用阶段。

一般在项目结尾阶段,无论代码写的怎样我们都会获得项目发起人的验收。但软件工程师的复用工作才刚刚开始。通过分析整个软件在设计上的成功和失败之处,总结当前项目的复用点,将项目中有价值的VI和库函数重新整理设计,形成自己的库函数并添加到属于自己的函数选板上。随着时间的推移,函数功能愈加丰富,做项目也会更加得心应手。

总结出来的代码如果没有经过审核,那代码的稳定性和可靠性仍需验证。在新项目开启的时候,使用上一个项目所总结的代码,去验证迭代,不断升级自己的用户函数库,几轮之后,你将形成属于自己的代码风格。

怎么进行函数库复用呢?

核心:总结归纳,吸收利用!

吸星大法之总结归纳

总结归纳说起来容易,做起来却是颇有难度。小黑也不知道什么样的方法是最好的,这里仅仅介绍一下我是如何做的。

在刚开始进行函数库复用的时候,小黑严格遵循归纳总结的方法,在项目完成后单独抽一段时间去分析自己的代码,并形成了一套API库。

后来出于事后总结耗时间等原因,小黑在项目创建的过程就开始考虑部分复用问题。在设计代码模块的时候,提前问自己:这个代码模块是否有复用价值.,是否可以独立解耦。

如果回答有,将其单独放置于一个文件夹中,并且对文件的使用采用统一的命名规范,尽可能的将代码与其他模块解耦,减少或者固化特定的接口,最终实现复制文件夹即可复用代码的效果。下图即时小黑整理的一些可复用模块仅供参考。
 当然,在设计流程测试的时候,也编写一些驱动可服用模块

一开始文件夹规则设计不明确,建议大家都从简单复用开始。但是只要有归纳整理的心思,你将开启了复用积累的道路,持之以恒,积累会让你效率倍增。

吸星大法之吸收利用

与UI控件复用类似,为了避免重复造车,你需要去各个论坛或者VIPM狩猎自己可用的优秀的工具包。一旦找到心仪的猎物,马上将这些工具包Down下来,重新整理这些工具包,与自己的工作需求与代码风格结合,改装到自己的库函数中。这里需要强调的是,下载来的工具包可能功能丰富,而你只用到里面很小的一部分,摘取出来,而不是使用整个工具包,这将使得你有更大的动力去使用他们。

另外,如果说你不知道如何进行函数复用,不妨好好看看优秀的复用是怎么做的,别的不说,只谈OpenG工具,我们就可从中学习到复用的很多技巧。下面这个选板是OpenG的主选板,可以借鉴其分类思路和图标设计思路。

OpenG工具包通过对LabVIEW常用功能增强,实现了许多功能函数,从文件夹层级,可以了解到分类标准,吸收过来,也建立一套属于自己的API库。
从VI命名可以学习到一些命名的方式和规则,有助于我们写出工整的代码

我们会看到很多类似OpenG的工具包,这些工具包一定要妥善利用,除了直接下载使用,你可以在其功能上重新封装定义,形成一套自己用得顺手的工具,从而进一步拓展工具包在特定领域的积累。下图所示是小编一部分树形工具包的范例,在传统的Tree工具包上,根据特定的Tree操作,可以拓展自己在特定UI操作中的工具包。

后记

LabVIEW吸星大法,将你的经验积淀,吸收他人所长,形成属于自己的知识宝库。本文一样没有仔细展开如何去实现,只是从思想上引入了函数复用的概念,希望可以对大家重视经验在函数复用上的积累。

如果本文对你有所触动,真心希望你能去尝试尝试,体会一下积累的价值,告别盲目的加班,让工作更加有效率~

术业有专攻,闻道有先后,在知识大门前,我们可以略窥一二,却不知天外有天,人外有人。保持一颗谦逊的心,专注于技术的提高,精益求精~
 
-----谨以此文献给落入LabVIEW坑却仍不放弃的各位,我们不是专业的软件工程师,却有一颗上进的心。
 
 

LabVIEW 吸星大法 - 看见的好东西都是我的(中篇)的更多相关文章

  1. LabVIEW 吸星大法 - 看见的好东西都是我的(上篇)

    前言 写了多年的LabVIEW程序,你是否面临这样的问题 总是在做一些重复的工作,感觉很没有意思: 总在不停的写代码,做类似的控件,实现相同的功能,丝毫没有成就感: 总在天加班,没有时间去提高自己; ...

  2. LabVIEW 吸星大法 - 看见的好东西都是我的(下篇)

    前言 写了多年的LabVIEW程序,你是否面临这样的问题 总是在做一些重复的工作,感觉很没有意思: 总在不停的写代码,做类似的控件,实现相同的功能,丝毫没有成就感: 总在天加班,没有时间去提高自己; ...

  3. 低耦合高内聚 - 不要把所有东西都放在 vuex中

    我就举一个例子.比如,我想看电视,是否需要遥控器??请认真思考这个问题. 看似电视与“我”已经解耦了.然而,我需要通过遥控器去看电视,我的目的是看电视,但是我却需要依赖遥控器这个中间件.这就变相地将“ ...

  4. 从Hello World说起(Dart)到“几乎所有东西都是Widget”小部件。

    import 'package:flutter/material.dart'; void main() => runApp(new MyApp()); class MyApp extends S ...

  5. 用LabVIEW实现《家国梦》游戏中自动收货收金币

    前几周,很流行一个手机游戏,叫<家国梦>.我在手机上玩了一两天后,发现了两个问题: 1. 收货收金币太没意思,只需要手指滑在固定的路线,一会儿就烦了 2. 怎么追赶也追不上手快的人(当然也 ...

  6. 关于Unicode,字符集,字符编码,每个程序员都应该知道的事

    关于Unicode,字符集,字符编码,每个程序员都应该知道的事 作者:Jack47 李笑来的文章如何判断一个人是否聪明?中提到: 必要.清晰.且准确的概念,是一切思考的基石.所谓思考,很大程度上,就是 ...

  7. 重置了下系统好多关于mysql密码的文章都很渣拷分好的备用

    方法1: 用SET PASSWORD命令 mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass ...

  8. 输入URL之后都发生了什么

    输入URL之后都发生了什么 这个标题印象中已经有很多讨论了.也来说说这个话题. 从头开始,当你的电脑使用网线连接到网络的时候,我们都知道,这个时候你的电脑会获取一个IP,这个IP就是你的唯一标识了.好 ...

  9. LabVIEW有限状态机

    顺序模式是我们最先接触,也是最基本的一种编程模式, 程序按照固定的顺序依次执行,结束(如图1) 但在很多情况下,静态的顺序模式并不能满足我们编程的要求,我们需要更有效地动态结构来实时改变程序的执行顺序 ...

随机推荐

  1. Python: 利用Python进行数据分析 学习记录

    -----15:18 2016/10/14----- 1. import numpy as np;import pandas as pd values = pd.Series(np.random.no ...

  2. Java Graphics2D 画出文字描边效果

    在CSDN看到的,在此记下. (http://bbs.csdn.net/topics/390703095) import javax.swing.*; import java.awt.*; impor ...

  3. div不换行_div同行_div强制不换行

    使用Float <!--已知两个div的宽度使用[Float]使两个DIV同行!注:float使用后需要清除:所以多写一个div--> <div style="width: ...

  4. 弹出层提示,X秒后关闭

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...

  5. Python学习笔记(3)

      1.元组 元组的定义符号是() ,元素定义与列表完全一致.不同的是元组的内容是不可变的. 2.字典 字典里面的内容是无序的. 字典的元素组成形式是 key:value key的定义规则:key是不 ...

  6. 用ILSpy查看Session.SessionID的生成算法

    缘由 asp.net Session在InProc模式下,容易丢失,经常需要重新登录,且不支持分布式共享. 所以在研究Redis实现原生的Session,本来想用GUID作为key存入cookie,又 ...

  7. Win7 U盘安装Ubuntu16.04 双系统详细教程

    Win7 U盘安装Ubuntu16.04 双系统详细教程 安装主要分为以下几步: 一. 下载Ubuntu 16.04镜像软件: 二. 制作U盘启动盘使用ultraISO: 三. 安装Ubuntu系统: ...

  8. winform快速开发平台 -> 基础组件之分页控件

    一个项目控件主要由及部分的常用组件,当然本次介绍的是通用分页控件. 处理思想:我们在处理分页过程中主要是针对数据库操作. 一般情况主要是传递一些开始位置,当前页数,和数据总页数以及相关关联的业务逻辑. ...

  9. 多个jar包合并成一个jar包的办法

    步骤: 1.将多个JAR包使用压缩软件打开,并将全包名的类拷贝到一个临时目录地下. 2.cmd命令到该临时目录下,此时会有很多.class文件,其中需要带完整包路径 3.执行 jar -cvfM te ...

  10. Android中轻松显示Gif图片

    android中现在没有直接显示gif的view,只能通过mediaplay来显示,且还常常不能正常显示出来,为此写了这个gifview,其用法和imageview一样使用方法:1-把GifView. ...