第1章 物联网时代的低代码开发
1.1 何为低代码开发
最近一两年,低代码和零代码的概念非常火,但是每个行业,每个不同职位的从业人员对低代码和零代码的认知,以及需求是不一样的,为了便于理解和具象化,下面从开发语言的演变来简单谈谈低代码和零代码。
1.1.1 低代码、零代码开发的由来
从演进历史来分,开发语言分为三种:机器语言(二进制编码);汇编语言;高级语言。
从编程思想上来分,分为面向过程和面向对象的开发。
从变量类型确定的时机来分,又分为静态语言和动态语言。
如果从语言的种类上来分,那就更多了,比如汇编语言、Basic、C、C++、C#、Objective-C,Java、Go、Python、JavaScript、TypeScript、Lua、PHP、Ruby、Perl……
对任何一个智能设备,严格意义上来讲,设备的每一个操作的背后其实都对应着一个个指令,这也是最初面向过程开发思想的由来。任何一个工序都是由一个个执行过程组合而成,一个个环节逐一开发实现的过程,就是用面向过程思想编写代码的过程。
最开始就是所谓二进制编码的机器语言,是通过打孔机来进行编程的(如图1.1.1所示)。
• 图1.1.1 IBM029打孔机和打孔卡
可以想象,用此方式编程,效率是多么低下,所以汇编语言诞生了,可以用符号对应一个个二进制编码,开发效率得到了一定的提高。随着计算机设备性能越来越强,人们对代码执行效率的要求越来越低,反而对开发效率的要求越来越高,随后更容易理解和开发的高级语言出现了,比如C语言。C语言的执行效率大概相当于汇编语言的70%,但是在开发效率上,C语言至少高汇编语言一个数量级(如图1.1.2所示)。
• 图1.1.2 机器语言、汇编语言和高级语言的比较
随着业务逻辑越来越复杂,用面向过程思想开发的代码累积到一定程度,会变得异常难以管理,很容易出现BUG、内存泄漏或系统崩溃。面向对象的开发思想此时应运而生,提出了类的概念,有属性、有事件也有方法,在封装的基础上可以继承、支持多态。不再关注每个过程细节,每个类相对封闭,只需要了解对应的接口就可以了,不仅便于维护,还可以在其他人写的代码基础上进行快速开发。
从DOS时代的代码开发,过渡到Windows时代的代码开发,笔者认为这是一个划时代的改变,也是面向对象思想快速发展的一个时期。同时,也是笔者认为有着低代码思想的开发语言出现的时期,比如Visual Basic语言(如图1.1.3所示)、Visual C/C++等可视化开发语言的出现。
• 图1.1.3 Visual Basic语言开发环境
这种可视化程序开发,仅通过拖拽就可以完成绝大部分的界面开发工作,不需要用户写一行代码,就可以实现漂亮的Windows风格的窗体界面。也许大部分读者对此司空见惯,不以为然。但是对于经历过DOS时代的开发人员来说,感受还是非比寻常的。这里讲一个小插曲,笔者大学的毕业设计是用Borland C++语言在DOS平台上开发了一个仿Windows界面的图书管理程序(如图1.1.4所示),不仅仅鼠标形状和控制命令需要自己用一行行代码来编写,界面上的每一个像素也是用一行行代码堆叠而成,上万行的代码,80%以上和界面相关。而在Windows平台下进行界面开发,仅需要拖拽,基本不需要开发者编代码就可以实现漂亮的界面,此外还包括鼠标和窗体的交互。
• 图1.1.4 图书管理系统
同样这种让用户只关注业务逻辑,不需要把精力浪费在非业务层面的思想,在工控(工业控制、工业自动化)领域得到了更进一步的发展。工控领域大部分的项目实施由于涉及生产环境,所以对完成的周期和完成的质量要求非常高。如果是一般的程序开发,先收集需求,然后进行开发,再上线运行,程序有了BUG再进行修改,那么由此带来的开发周期延长,以及BUG导致的生产损失是无法估量的,更是无法承受的,所以组态软件出现了(如图1.1.5所示)。
• 图1.1.5 YFHMI组态软件
所谓组态(Configuration),就是模块化任意组合(类似积木玩具)。Visual Basic/ Visual C++语言的出现,让烦琐的界面开发工作通过简单的拖拽就完成了,而组态软件则更进一步,不仅仅是界面通过简单拖拽就可以完成,大部分的业务逻辑也是通过这种拖拽和简单配置,近乎零代码的开发方式去快速实现的。这种开发方式的好处不言而喻,开发周期不仅大大缩短,另外一个更为重要的好处就是,程序的质量得到了保证,因为这是积木式开发方式,每种积木模块都是预先开发完毕,并且大部分模块在各个现场久经考验。所以这些模块有机组合在一起,其稳定可靠性远远高于根据现有需求所开发的代码。
如果用户有些特殊的业务需求,组态软件则提供了脚本语言,通过简单写几行代码基本就可以实现相关的业务逻辑。
其实不仅仅在工业自动化领域,在其他涉及代码开发的领域,由于用户需求的大爆发,如何快速开发,快速满足用户的需求被提上了日程,这也是脚本语言出现的契机。比如Web网页开发的JavaScript脚本语言的出现就迎合了这个时代背景。JavaScript脚本语言就像一个黏合剂(俗称胶水语言)。把各个功能,各个模块黏接在一起,且以个性化、定制化的方式去快速实现用户的需求。
这种让用户以最少的代码,甚至不用写代码的方式实现项目开发的思想,就是低代码或零代码开发思想,也称为低代码或零代码开发模式。
1.1.2 物联网时代需要低代码开发模式
记得2007年初识.NET Micro Framework的时候,有一个宣传文案印象深刻。一位研发工程师采用.NET Micro Framework进行嵌入式开发,在出差途中,利用飞机上的两三个小时就完成了一个,如果按常规嵌入式开发方式至少需要几个月的产品研发周期。
随着物联网时代的到来,各种各样的嵌入式设备越来越多,需要联网的设备也越来越多。中国智能物联网(AIOT)白皮书中的数据显示,2025年物联网连接数近200亿。这么多海量的设备,如何快速开发是一个值得思考的问题。
物联网涉及的链条众多,是一个庞杂的东西,要想说明白真不容易,一千个读者心中,就有一千个哈姆雷特,每个人的理解都有所不同,无论怎么说,都给人一种盲人摸象的感觉。其实最开始,笔者也不太理解什么是物联网,一直以为物联网是工业自动化项目的延伸,后来随着实施物联网的项目增多,及相关物联网新技术的产品和平台涌现,对物联网有了新的认知:物联网和工业自动化最大的区别就是,前者的量级非常巨大,对成本也比较敏感,一般没有专门维护的队伍。另外对数据实时分析和深度挖掘也有很高的要求。所以在项目架构设计及实施上,二者就有了很大的区别。
为了便于深入理解物联网时代为什么需要低代码开发模式,我们在传统工业自动化和物联网两个领域,分别举一个典型的应用,来阐述一下二者到底有何不同。一个是在2001年起开始研发的专利项目:焦炉四大机车自动化系统;另外一个就是和新希望集团一起合作开发的养殖物联网远程监控系统。
焦炉四大机车自动化系统的目标就是通过推焦车、拦焦车、熄焦车和装煤车各自行走位置的精确测量和相互之间可靠的数据通信,来实现三车推焦连锁和四车协调工作,以及在生产计划控制下的自动行走、自动定位、自动操作,从而实现四大机车的自动化生产运行和计算机生产管理(如图1.1.6所示)。
从系统架构方面主要分为三部分:下层是0.5cm级精度的定位标尺,安装在四大机车导轨的一边;中间层则是在运行的四大机车的驾驶舱内的PLC、显示设备和无线电台;上层是在厂区中控室内,安装计算机监视设备和无线电台。
项目价格在2002~2003年大概在百万元左右。实施工期大概在40天左右。客户有专门的维护团队,一般的小问题,客户可以直接解决。
养殖物联网远程监控系统(如图1.1.7所示),通过物联网技术,实现数字化管理,能够保证精确的环境控制,实现精准管理、精准营养。在设备层面,主要涉及环境监控、水线监控、用电监控、设备监控、报警通知和业务管理系统等内容。传感器相对比较多,有多路温度传感器、温湿度传感器、光照传感器、氨气传感器、氧气传感器、二氧化碳传感器和PM2. 5传感器等,仪表主要是物联网远传水表、电表及远程监控摄像头,然后就是网关和上云模块。管理软件有Web网页,手机App和小程序,如果有主控室,则主控室还包含远程监控大屏。
• 图1.1.6 焦炉四大机车自动化项目
• 图1.1.7 养殖物联网远程监控系统
一个养殖棚的价格大概在2万~3万元,如果选择了轻量级物联网监控系统,价格则在几千元不等。安装调试时间为1~3天,无专门维护人员。
通过以上的对比,可以清晰地看出,一是系统价格越来越低,需要连接的设备越来越多;二是系统越来越复杂,可现场却缺少专业的维护人员。
通过十多年的物联网开发经历,笔者也总结了一些物联网落地实施的痛点:
1)需要接入的传感器及智能仪表种类繁多,物理通信链路多样,通信协议也各有不同;
2)客户现场差异大,对接设备多样,系统整体成本敏感;
3)设备安装量大,缺少专业的实施和维护队伍,长期稳定性、可靠性难保证。
如何解决当前物联网困境,实现物联网项目快速落地实施,是我们不得不面对的问题。而解决这个问题的钥匙,其实就是低代码或零代码开发模式。不仅仅开发成本降低,开发和实施周期也大大缩短,另外由于都是模块化、组态化开发,稳定性和可靠性非常高,所以维护成本也变得非常低。只有这样,物联网才能真正彻底解放束缚,释放自我,得到快速发展。
1.1.3 低代码开发之语言支持
一个典型的物联网系统,至少包括如下几个环节:传感器、网关、云端服务器和手机端。从开发角度来分,涉及嵌入式开发、Web后台和前端开发、手机App开发和小程序开发,有些项目还需要PC程序开发。至少需要多个工种的开发工程师联合起来,才能一起完成一个完整的物联网项目开发。不仅沟通成本大,也缺少整体系统的视角,造成开发周期大大延长,开发成本也节节攀升。如果嵌入式开发用C/C++,Web后台采用Java或C#开发,前端采用JavaScript开发,而手机端App采用Objective-C开发,且这些工作让一个开发人员全部熟悉、掌握,并且开发出商用程序,几乎是不可能的事。这种要求太高了,能全部掌握整个物联网链条相关技术的人毕竟是凤毛麟角。但是相对于互联网时代,在物联网时代,越是应用场景的碎片化,技术能力越分散,人们则更需要全栈工程师,即一个人就可以全部掌握从端到云全过程的开发技术。
其实,掌握.NET开发技术的人是最有可能做全栈开发的。因为.NET框架分为三个版本:标准版(.NET Framework),精简版(.NET Compact Framework)和微小版(.NET Micro Framework)。采用.NET标准版不仅可以开发PC桌面程序,还可以开发Web后台和前端服务;采用.NET精简版可以开发手机App和一些大型嵌入式设备应用;而采用微小版,则可以开发资源相对受限的嵌入式应用。从端到云,再到手机端,只要掌握.NET技术,就可以实现全栈开发。只可惜,微软在手机领域的发展严重受挫,真是一着不慎,满盘皆输。幸好微软云平台发展比较好,又收购了Xamain,可以采用.NET技术开发苹果手机App、安卓手机App。后来又大力推出了.NET Core,更是一种全平台的技术框架,可以高效率地运行在Windows、macOS、Linux等平台上。
虽然相对于C/C++开发,.NET开发的效率大大提升,但是做物联网开发,还是感觉效率不够极致。并且掌握这门开发语言还是有一定技术门槛的。
而最可能实现全栈技术开发的语言是JavaScript。我们知道JavaScript是一种典型的Web前端开发语言,但是在2009年5月由Ryan Dahl开发的Node.js发布,打破了这一界限。Node.js是一个基于Chrome V8引擎的JavaScript的运行环境,可以让JavaScript轻松开发Web服务端。
手机小程序框架是一个典型的前端框架,所以采用JavaScript开发是非常自然而然的事,而这种手机端的开发,JavaScript也可以轻松搞定。
笔者最早接触到采用JavaScript做硬件应用的开发平台是Ruff,它可以让开发者采用JavaScript轻松开发一款硬件产品。2015年,韩国三星集团不仅开源了可以采用JavaScript语言编写物联网平台应用的IoT.js,同时还开源了适用于嵌入式设备的小型JavaScript引擎的JerryScript。它能运行在小于64KB内存的设备上,并且Flash空间需求不到200KB。
当下国内比较流行的物联网嵌入式操作系统,比如AliOS Things、LiteOS和RT-Thread都含有一个支持JavaScript脚本的引擎模块。编译嵌入式系统固件的时候添加上这个模块,就可以在嵌入式设备上进行JavaScript开发了。
Python语言的火爆得益于人工智能领域大范围采用Python作为前端分析工具。和JavaScript一样,也有多种框架,比如Django、Falsk和Tornado支持Python做Web后端和前端开发。
2014年英国剑桥大学的教授Damien George对外推出了MicroPython,它支持Python 3语法,可以在嵌入式平台运行Python。最开始MicroPython在STM32F微控制器上实现,后来移植到STM32F7、ESP8266、ESP32、CC3200、dsPIC33FJ256、MK20DX256、microbit、MSP432、XMC4700、RT8195等众多硬件平台上。其功能的完整性和性能也引爆了一些嵌入式开发者的热情,所以MicroPython成为物联网领域嵌入式开发的一门首选语言。
Lua开发语言在游戏开发领域比较火,它是由巴西里约热内卢天主教大学的一个由Roberto Ierusalimschy、Waldemar Celes和Luiz Henrique de Figueiredo三人所组成的研究小组于1993年开发的。它由标准C编写而成,几乎在所有的操作系统和平台上都可以编译运行,并且一个完整的Lua解释器不过200KB,在所有的脚本引擎里,Lua是性能最好的一个。又小又快的特性,在资源受限的嵌入式领域非常受欢迎,这也是Lua过渡到嵌入式领域的一个很大的原因。
1.1.4 低代码开发之硬件支持
1. C#硬件开发
美国GHI公司是最早并且持续支持.NET Micro Framework的硬件公司,推出了不少基于.NET Micro Framework的核心板(如图1.1.8所示)。可以采用这些核心板做工业产品设计,然后使用C#或VB.NET快速开发各种应用。相对于其他低代码快速开发语言,采用.NET Micro Framework开发是支持在Microsoft Visual Studio环境里进行断点设定、单步运行等调试功能的,并且由于是编译后运行,所以执行效率也是远超一般的脚本语言。
Netduino是支持.NET Micro Framework的轻量级开发板(如图1.1.9所示),从名字上可以看出它是对标Arduino开发板的,它有Netduino标准版、Netduino 2,还有Netduino plus版本,可以快速用C#/VB.net操控硬件,只要熟悉.NET开发的软件人员,是非常容易上手的。
• 图1.1.8 GHI .NET Micro Framework核心板
• 图1.1.9 Netduino开发板
笔者从2006年开始知悉.NET Micro Framework,并于2008年进入微软中国工程院.NET Micro Framework项目组工作四年,由于之前一直在工控领域工作,非常看好.NET Micro Framework在硬件层面的低代码快速开发能力,所以创业后,设计并推出了若干款工业级的,可直接用C#开发的物联网智能网关(如图1.1.10所示)。
2. JavaScript硬件开发
相对较早支持JavaScript开发的是Ruff开发板(如图1.1.11所示),可以采用Web前端开发者比较熟悉的JavaScript语言快速实现硬件层面的操作。
比较成熟,且大力推广JavaScript开发的是阿里云物联网团队最近推出的HaaS 200和HaaS 600系列硬件(如图1.1.12所示)。所谓HaaS就是Hardware as a Service硬件即服务,该硬件底层基于阿里云AliOS Things操作系统,集成了JavaScript引擎及云端适配模块,可以采用JavaScript语言快速开发基于HaaS标准的各种物联网硬件产品。
• 图1.1.10 叶帆科技工业级物联网智能网关
• 图1.1.11 Ruff开发板
• 图1.1.12 阿里云HaaS硬件系列
3. MicroPython硬件开发
当下学习Python语言的人越来越多,几乎成为大众编程开发的启蒙语言。其使用占比和排名第一的C语言之间差距越来越小,大有超过C语言成为第一名之势。所以相对其他开发语言,在硬件开发层面,支持MicroPython的开发板非常多。比较典型且影响比较大的MicroPython硬件开发板有阿里云HaaS硬件系列的板子(如图1.1.12所示),它不仅支持JavaScript,还支持MicroPyhton。还有上海乐鑫的ESP32 Wi-Fi模组及各种衍生开发板(如图1.1.13所示),上海移远4G Cat.1的通信模组(如图1.1.14所示),都支持采用MicroPython进行物联网应用的快速二次开发。
• 图1.1.13 乐鑫的ESP32 WiFi模组
• 图1.1.14 移远4G Cat1的通信模组
4. Lua硬件开发
上海合宙公司推出的2G/4G等无线模块都内嵌了Lua引擎,并完全开源了硬件开发板(如图1.1.15所示)。仅采用通信模组,不需要外挂MCU,就可以采用Lua语言直接开发嵌入式产品。相对于其他公司的OpenCPU,采用C/C++开发的框架方案,Lua开发更容易上手,所以这个功能一经推出,就得到了广大用户的欢迎,各种轻量级物联网应用如春笋一样破土而出,这也是上海合宙公司能得到快速发展的一个原因。此外广州大彩的LCD串口显示屏(如图1.1.16所示)也支持Lua开发,可以采用Lua脚本语言,进行个性化的LCD应用程序开发。
• 图1.1.15 合宙Lua二次开发通信模组
• 图1.1.16 大彩Lua二次开发串口屏
1.1.5 低代码开发之平台支持
从前文所述内容,我们已经了解了物联网是一个从云到端涉及众多环节的领域。所以低代码开发不仅仅是物联网硬件设备上的低代码开发,更需要平台层面的低代码快速开发支持。
物联网和互联网有所不同,笔者一直认为物联网更有工业自动化领域的基因。所以在物联网领域的项目开发和实施上,更应该从工业自动化开发领域的经验出发。物联网平台的发展,从当前实际发展的过程和结果来看,似乎也遵循了这一认知。
工业自动化领域最重要的两个控制系统概念,第一个是DCS(Distributed Control System,集散控制系统),又称为分布式控制系统,从4~20mA模拟量采集网络发展而来;第二个是FCS(FieldBus Control System现场总线控制系统),从PLC(Program Logic Control,可编程逻辑控制器)组成的网络发展而来。两大控制系统都离不开一个平台软件,那就是工业组态软件。
工业组态软件很多,比如国外的iFix、InTouch、WinCC,国内的组态王、力控、MSCG等。组态软件的出现彻底解决了软件重复开发的问题,实现模块级复用,不仅仅是提高了开发效率,降低了开发周期,更大的优势是成熟模块的复用,大大提高了系统稳定性和可靠性。
所谓组态(Configuration)就是模块化任意组合(类似积木玩具)。组态软件的主要特点如下:
1)延展性。所谓延展性,就是系统的延续和易于扩展性,用组态软件开发的系统,当现场或用户需求发生改变时(包括硬件设备或系统结构的改变),用户无须做很多修改,就可以很方便地完成系统的升级和改造。
2)易用性。组态软件对底层功能都进行了模块级封装,对于用户,只需掌握简单的编程语言(内嵌的脚本语言、类Basic或类C语言),甚至不需要编程技术,就能很好地通过组态配置的方式完成一个复杂系统的开发和集成。
3)通用性。不同用户根据系统的不同,利用组态软件提供的I/O驱动(如PLC、仪表、板卡、智能模块、变频器等)、数据库和图元,就能完成一个具有动画、实时数据处理、历史数据和图表并存,且具有多媒体功能和网络功能的系统工程,不受领域或行业限制。
最开始的组态软件,数据采集部分和界面展示部分是紧密结合在一起的。后来从大庆油田监控项目走出的力控组态软件,由于数据量众多,率先把数据部分从组态界面中剥离出来,有专门的数据处理模块IOServer。
纵观阿里云物联网平台的发展,也有类似的发展进程,阿里云最初推出的物联网一站式开发平台(Link Develop),就是一个典型的可以称为网络端或云端的组态软件。随着后续的发展,阿里云从物联网一站式开发平台中剥离出数据部分,发展成为今天影响深远的物联网开发平台,而界面部分则成为今天的IoT Studio物联网应用开发平台,又称为物联网低代码开发平台。
和物联网技术脱胎于工业自动化,又高于工业自动化一样,物联网开发思想也是高于工业自动化的开发思想。工业领域其实更注重的是业务生产的过程数据,就如最初的面向开发过程的编程开发思想进化为面向对象的开发思想。从工业开发平台进化到今天的物联网开发平台的过程,也遵循了这一进化途径。所以物联网平台是需要建模的,针对不同的物联网智能硬件,都需要建立一个与之对应的物联网模型。不仅仅是数据部分需要建模,界面部分也是根据实际需要针对具体的智能设备,进行组件化建模。为了更进一步推广和发展这一思想,阿里云IoT联合ICA联盟,在2018年发布了“物模型”,旨在打造一个能够让各种各样的物理空间实体在云端进行数字化展示的工具,缩短开发时间、标准化开发工具,同时融入多领域的物联网应用。
和阿里云物联网平台一样,在设备端,叶帆科技公司同样汲取工业自动化组态软件的思想,开发并推出了YFIOs数据组态系统。YFIOs就是YFSoft I/O Server的简称,和传统组态软件不同,YFIOs具备远程调试、远程升级等这种云时代的物联网技能。传统组态软件,其组态类似搭积木,组态粒度类似于积木块的颗粒度,大部分通过串口、网口、CAN等通道把一个个系统模块连接在一起,在一定程度上增加了系统构建的成本和代价。
而以.NET Micro Framework为依托构建的轻量级嵌入式组态软件(YFIOs)就很好地解决了上述问题,除支持常规的串口、网口、CAN外,还支持USB、Wi-Fi、ZigBee、SPI、I2C等通道,SPI、I2C片级总线的支持加上强大的托管代码(C#,VB.net)开发能力,使嵌入式硬件系统真正组态化、模块化成为可能,这个平台的推出,无疑为快速打造形态各异,功能不同、高扩展性和高性价比的物联网产品和系统提供了最有力的支撑。