从端到云——工业物联网项目全栈快速开发
作者:刘洪峰,网名叶帆,叶帆科技创始人兼CEO,前微软(中国).NET Micro Framework开发团队成员,微软全球最有价值专家(MVP),CSDN十大MVB。以微软.NET MF系统为核心,研发了物联网智能网关、YFIOs和YFHMI等物联网中间件软硬件平台。
责编:屠敏,技术之路,共同进步,欢迎技术投稿、给文章纠错,请发送邮件至[email protected]。
版权声明:本文为 CSDN 原创文章,未经允许,请勿转载。
从去年伊始,国内外一些大公司都先后推出了面向物联网领域的平台产品,如微软Azure平台的IoT Hub、阿里云平台的物联网开发套件、百度云平台的物接入IoT Hub、物解析IoT Parser和物管理IoT Device等等,但上述公司的产品从平台特色和技术角度来看,相对比较适合一些企业级项目开发及智能硬件的云连接、云存储的使用,其实并不太适合一些对控制实时性较高、接入点多、业务逻辑相对复杂的工业领域。
工业自动化领域相对比较封闭,发展也比较慢,多年来涉及到通信相关的,大部分还是采用现场工业总线等技术来实现。笔者曾发过一篇《浅谈工业级物联网项目架构设计及实施》,里面除了介绍了工业物联网的概念和特色外,还介绍了物联网通用中间件平台的架构设计。时至今日,随着国内外大公司的介入,物联网越来越热。下面笔者将结合工控领域的特色及当前物联网领域的一些新技术新趋势,分享工业物联网和民用物联网的特色及异同,并从自身实际应用开发的角度,解读从端到云,工业物联网项目的全栈快速开发之路。
一、前言
1.1 民用物联网VS工业物联网
最近诞生的共享单车,短短一年多的时间就遍布国内一二线城市,迅速成为一个现象级应用,可以说是民用物联网领域最大的应用。小米的智能家居套件,以低廉的价格,相对实用的功能,也赢得了不少智能家居爱好者的追捧,也是比较典型的民用物联网应用。
工业物联网对大部分人来说,相对陌生,往往是面向行业的应用,比如我们当前所做的养殖物联网监控,污水处理物联网监控和垃圾处理物联网监控。
那民用物联网和工业物联网的区别是什么呢?
从技术角度来说,民用物联网和工业物联网并没有本质的区别,都是有云、有端、都具备传感器数据采集、设备控制及通信传输等功能。只是工业物联网脱胎于工控自动化网络,后者对可靠性和实时性有较高的要求,有各种工业级别的现场总线,如Profibus,Modbus RTU/TCP,CANopen等等,后续又在民用以太网的基础上,推出了工业以太网。那时候还没有云的概念,考虑到安全,网络都是私有的,很少和因特网进行互联。从某种意义上来说,没有云技术的高速发展,就不会有现在的民用物联网上各种现象级应用。当然工业物联网也得益于云技术的成熟,才能使高门槛的工业自动化技术得到了一定程度上的普及,否则也很难有今天所谓的工业物联网。不过民用物联网和工业物联网区别还是有的,下面将一一简要介绍。
- 首先是数量的区别,民用物联网往往面临的是百万、千万级别的用户群。工业物联网从量上来说,要比这个规模小得多。
- 其次是功能上的区别,民用物联网功能往往比较单一,易用,免维护。工业物联网功能就相对复杂的多,往往对应一个行业内的一系列具体的功能,
- 然后就是价格上的区别,民用领域的用户对价格相对敏感,所以民用领域的物联网产品往往价格比较低廉。工业物联网领域的产品由于面向行业,面向具体的应用,量少,所以单价相对较贵。
- 最后就是品质上的区别了,最简单的工业和民用的区别,就是设计产品的时候,器件选型民用产品往往选*用级别的,工业级产品往往选择工业级的。除了价格上工业级的芯片比较贵外,应用环境的温度范围比民用领域也要宽广,可以在相对苛刻的条件下也能可靠地工作。
1.2 工业物联网全栈开发
全栈开发的概念来源于Web开发领域,指同时具备前端和后台开发的能力。引申到工业物联网领域,全栈开发意味着要懂硬件开发,要懂各种传感器、云开发、Web开发技术、手机APP开发、各种通信技术和数据存取,大数据时代还要求懂数据挖掘和分析。
这对全栈工程师来说,要求就非常高了。考虑到实际,从技术路线来看,全栈开发还是分派系的,如“Java派”,各种层面的开发都是以Java类的开发技术为主。如“.NET派”,各种层面的开发都是用.NET技术进行开发。由于历史原因,我从2001年开始进入工控开发,工控软件类开发大都以微软技术为主,所以全栈开发主要采用了.NET技术。
二、工业物联网设备端开发
民用物联网端的开发和工业物联网端的开发还是有很大区别的,民用物联网端产品是厂家直接基于芯片进行产品开发。是典型的硬件开发了。而工业物联网端的开发,往往是在第三方厂家的产品基础上进行二次开发,也就是更多的是做集成类的开发工作。
我们所做的工业物联网的端设备就是供其他工业物联网集成商进行二次开发的。当然我们也会基于我们的软硬件产品进行工业物联网项目的集成开发。
这里着重介绍的就是在现有的工业物联网产品基础上进行的项目开发。
2.1 常见IO接口
目前工业领域常见的IO接口如下:
- RS485:两线制,差分信号传输,半双工通信,最大通信距离千米以上。
- RS232:三线制,全双工通信,一般通信距离小于10米。
CAN:两线制,多主通信,高性能,高可靠性,每次最多传输8个字节的数据。通信距离千米以上。 - 以太网:4线或8线,多主通信,高性能。普通网线通信距离100米以内。
- Zigbee:基于IEEE802.15.4标准的低功耗无线通信协议,低功率一般传输距离100米以内,高功率的1000米左右。
- LoRa:基于扩频技术的超远距离无线传输方案。低功耗,多节点。
- GPRS:通用分组无线服务技术,广域网通信。
- NB-IoT:IoT领域一个新兴的技术,支持低功耗设备在广域网的蜂窝数据连接,亦称低功耗广域网(LPWA)。
- 模拟量输入:0~20mA/0~5V/0~20V
- 开关量输入:0~24V
- 继电器输出:0~220V/2A
2.2 常见通信协议
Modbus RTU: 施耐德公司制定的基于RS485/RS232的串行通信总线协议。
Modbus TCP: 施耐德公司制定的基于以太网的通信总线协议。
PPI:西门子公司专为S7-200系列PLC开发的通讯协议。
Profibus:是一种国际化、开放式、不依赖于设备生产商的现场总线标准。
CANopen:是一种架构在CAN上的高层通信协协议,包括通信子协议及设备子协议。
2.3 常见智能模块
常见的智能模块其实种类比较多的,比如智能电表,智能水表,各种PLC及其配套的扩展模块等等。我们这里主要介绍的就是凌霄物联网智能网关、智能终端、智能IO模块和综合采集模块。
图1 物联网智能网关 智能终端 综合采集器
网关除具备网口、USB、SD卡及扩展两路智能模组(无线通信、RTC、存储等板卡)外,还可以配置各种不同通信接口板(当然也可以直接对接智能终端或智能IO上的输入输出子板)。
- 综合通信:1路RS485,2路RS232,1路CAN
- RS485-CAN:3路RS485,1路CAN
- RS485:4路RS485
智能终端和智能IO模块的主要区别有,一是通信接口,智能终端有三种接口可选,以太网、RS485和CAN;而智能IO模块仅具备CAN接口。二就是智能终端支持二次开发,能独立运行,也可以作为智能网关的扩展模块,而智能IO仅作为智能网关的扩展模块存在。
智能终端和智能IO模块,根据对外接口不同,主要有如下种类的模块:
- 综合输入输出模块:2路模拟量入,2路开关量入,2路继电器输出
- 综合模拟量模块:4路模拟量输入,2路模拟量输出
- 综合开关量模块:4路开关量输入,4路开关量输出
- 模拟量采集模块:4路模拟量输入
- 开关量输入模块:8路开关量输入
- 继电器输出模块:8路开关量输出
- 热电偶采集模块:4路热电偶采集
综合采集器,是一个九合一的传感器集成模块,可以说是国内外集成度最高的一款产品。一次可以采集的传感器数据有3路温度,1路湿度、1路氧气、1路氨气、1路二氧化碳、1路光照、1路PM2.5。该模块可以通过RS485直接和网关相连,标准Modbus RTU通信协议。
2.4 YFIOs数据组态开发
图2 YFIOs系统架构
图2是YFIOs数据组态系统的架构图,其包含三部分:驱动层,核心层(驱动引擎及实时数据库)和策略层。
所谓的二次开发大部分就是开发和具体业务联系密切相关的策略程序,此外就是少部分的驱动程序开发(除了对接特殊设备,大部分情况下无需用户开发驱动程序)。
下面我们用一个简单示例来介绍一下YFIOs组态开发。
2.4.1 硬件准备及连接
我们需要准备如下设备:1台物联网智能网关,1台物联网智能终端(或智能IO),1台综合采集器,1条USB线及附属电源及连接线等。设备及辅材准备好后,按如下方式进行接线:
图3 设备连接
2.4.2 创建用户驱动
图4 新建YFIOs设备
如图4所示,根据设备的类型,对应的网关接口,新建综合采集器和输入输出智能终端对应的用户设备。
设备创建后,对应的设备变量也会自动创建。
2.4.3 设备及变量监控
无需任何编程,只要把相关的驱动和配置信息部署到网关,就可以直接监控设备的通信状态、IO输入状态和连接的传感器数据。如果有IO继电器输出,也可以在IO监控界面,直接修改对应的值以改变继电器的开闭状态。
图5 IO数据监控
2.4.4 创建用户策略
如果仅仅实现数据从端到云的传输,那么无需写用户策略。当然对大部分的工业物联网现场应用来说,还是需要一定的业务逻辑进行处理的。比如检测到设备电机过热,则要求网关立即停止电机运行或者对外发出报警信号。这里我们写一个最简单的用户策略,就是当一路开关量输入为高电平的时候,让一路继电器闭合,低电平的时候则继电器释放。
开发用户策略,可以采用微软Visual Studio IDE开发工具进行开发,我们也提供了对应的模板程序,可以直接填入必要的业务代码即可。如图6所示,标准的用户策略其实只需要实现3个接口函数即可:OnLoad
、OnRun
和OnUnload
。
图6 策略开发
OnLoad在用户策略开始加载的时候执行,只执行一次。OnRun按设定的间隔,循环被YFIOs的驱动引擎调用。OnUnload是策略被卸载前执行一次。
图6中在OnRun添加的代码如下:
if (op.IOReadInt("QI44:I1") != op.IOReadInt("QI44:Q1"))
{
op.Extern_IOWrite("QI44:Q1", op.IOReadInt("QI44:I1").ToString());
op.Print(MessageType.Debug, "I1=" + op.IOReadInt("QI44:I1").ToString(), Name);
}
以上代码的意思是,从YFIOs实时数据库中读取QI44:I1通道值,如果和继电器的输出状态不同,则继电器的状态和输入通道保持一致。
用户策略编写完毕后,则可以用YFIOsManager工具进行加载和调试了(如图7和图8所示)。
图7 新建策略
图8 策略调试
从图8中我们可以看出,当I1输入状态被改变的时候,继电器的输出状态也被改变了,调试窗口中也输出了对应的调试信息。
2.4.5 添加QCPB云端通信策略
如果不和云端通信,也就不需要添加QCPB云端通信策略了,但是如果没有这部分也称之不上为物联网项目了,只是一个典型的小自动化项目而已。
和添加用户策略一样,我们添加上QCPB云端通信策略,除了设置运行间隔外,我们还需要设定相关的参数,如图9所示。
图9 添加云端通信策略
IP地址是指云端服务器端地址,端口号默认为12000,项目ID是指云端创建对应项目时的ID号(这个后文会有介绍)。由于QCPB协议支持变化上传数据,所以针对浮点数,需要设置数据变化的阈值。
“IO配置”面板中有一个导出按钮,可以单击导出,保存后的XML文件在创建云端项目及云端组态画面的时候会用到。
三、云端通信协议
3.1 MQTT通信协议
MQTT是Message Queuing Telemetry Transport的缩写,中文意思是消息队列遥测传输,它是IBM开发的一个即时通讯协议,目前已经成为物联网主流的通信协议,微软云、百度云、阿里云等都支持该通信协议。这意味着设备只要支持了该通信协议,就可以和当前主流的云进行云端通信。凌霄物联网网关也支持该协议,在一个消防相关的项目中,就是通过该协议把采集到的数据上传到的微软Azure IoT Hub中。
3.2 WebSocket通信协议
WebSocket协议是HTML5标准里,基于TCP的一种新的网络协议,2011年被IETF定为标准RFC 6455。它实现了浏览器与服务器全双工(full-duplex)通信,服务器可随时向客户端发送信息,不仅通信数据量变小,同时也大大改善了网页动画的实时性能。我们的YFHMI组态动画,就是基于WebSocket通信协议和服务器中间件YFCloud进行通信的。
3.3 QCPB通信协议
这是我们自行开发的一个基于二进制格式的云端通信协议,其优点是通信数据量小,支持数据变化上传。除了支持数据通信外,还支持设备的远程诊断、远程参数下载和远程升级等功能。支持TCP/IP以太网和GPRS双链路自动切换通信模式。本篇文章中所介绍的云端通信就是基于该协议来实现的。
四、云服务YFCloud开发
云端YFCloud有三部分组成:Web后台、Web前台和YFIOs云端中间件。Web后台和前台采用ASP.NET进行开发,YFIOs云端中间件也是采用.NET技术进行开发,是一个标准的Windows服务程序。
4.1 云端项目构建
首先登录YFCloud物联网中间件通用监控平台就可以开始创建云端项目了。YFCloud的构建思想是,先有项目模板,然后再基于项目模板创建应用。这样的好处就是,基于一个项目模板可以创建若干应用。
4.1.1 创建项目模板
图10 创建项目模板
先添加一个项目模板,然后比较重要的一步就是导入【2.4.5】章节所导出的IO配置文件,从而构建云端IO实时数据库(如图11所示)。
图11 云端IO列表
4.1.2 创建项目应用
基于我们刚刚创建的“工业物联网演示”模板创建一个项目应用。创建一个项目应用后,系统会自动生成一个项目ID号,把这个ID号填入【2.4.5】章节中所示的云端通信策略中的IO配置面板中,填入后部署到物联网智能网关即可。
4.2 YFIOs云端中间件
YFIOs云端中间件脱胎于嵌入式YFIOs,从图12的架构图上就可以看出,嵌入式YFIOs是一个“单机版”的数据组态平台,而云端中间件YFIOs是一个“网络版”数据组态平台。
图12 YFIOs中间件架构
YFIOs云端中间件集成了WebSocket服务器,Web动态网页可以通过WebSocket协议和服务器进行通信。
YFIOs云端中间件以项目为最小单位来进行管理的,一个或多个项目对应一个项目模板,实际应用通过项目ID进行区分。
4.2.1 远程IO监控
图13 YFIOs云端中间件
在云端服务器上打开YFIOs云端中间件-客户端程序,可以看到在“工业物联网演示”项目模板下,我们看到“工业物联网Demo”应用的运行标志已经变为绿色,表示物联网智能网关设备已经和云端连接成功。右侧的显示面板上可以看到从物联网智能网关上传到云端的各种IO数据。在该界面上,也可以对继电器变量进行操作,写入0或1,可以看到物联网智能终端上对应的继电器闭合或开启。
4.2.2 远程参数&远程升级
图14 远程参数&远程升级
针对一个具体的项目,远程参数即可能云端策略需要,也可能同时远程设备上的策略需要,如果是这种情况,处理要复杂一些,相关参数需要保存到云端服务器,并且参数一旦修改,需要同时通知云端策略和远程设备上的策略。如果仅远程设备需要,那么简单期间,可以直接通过YFIOs云端中间件直接传递一个二进制参数文件即可。
远程升级的实现要相对复杂,因为升级文件相对较大,并且传输通道有可能是GPRS窄带传输,所以需要分段进行传输。要确保整个的升级文件,完整可靠的传输到远程的物联网智能网关上,并且重启重连成功后,才算真正的升级完毕。
由于基于同一个项目模板下的多个相关应用的物联网智能网关上的应用往往是一样的,所以只要设定一个升级文件就可以升级整个项目模板下的所有的项目应用。但是这有一个前提,要升级的固件版本,要比设备上当前运行的版本高。
考虑到一些特殊情况的存在,YFIOs云端中间件也支持远程强制升级,不管当前什么版本,不管以前运行的什么应用,都可以强制实现远程升级的功能。
4.2.3 云端策略开发
YFIOs云端中间件的策略和YFIOs嵌入式的策略开发基本相同,也含有OnLoad、OnRun和OnUnload,差别就是云端中间的策略能力更强,可以充分利用Windows平台本身的.NET Framework能力。
有些业务逻辑即可以放在设备端的策略里,也可以放到云端的策略里,比如一些当日量和累积量的处理和换算。有些最好放到设备端,比如某些指标超过阈值,需要立即关闭或开启设备的。有些则放在云端更合理,比如需要把数据进行永久存储的。
云端策略分三种类型:核心策略、公共策略和用户策略。核心策略,YFIOs云端中间件每个项目都会执行,公共策略是多个项目可选择性的执行,用户策略则是用户项目模板下的项目才会执行。其上三种策略从代码结构上没有什么区别,以所在的目录决定其策略类型。
图15 策略管理
五、云画面YFHMI组态开发
YFHMI画面组态最早支持WinCE平台,后来在WinCE平台软件的基础上开发出了基于.NET Micro Framework平台的版本。.NET Micro Framework一般运行在相对资源较小的物联网芯片(Cortex-M系列)上,所以YFHMI在性能和体积上做了进一步的优化。考虑到Html5+WebSocket是未来WEB前端的主流,在YFHMI支持Windows版本后,又直接推出了Html5的组态版本。
5.1 Web组态画面构建
5.1.1 创建组态画面
在创建基本组态画面的同时,我们还是需要导入在【2.4.5】章节所导出的IO配置文件,以便于动画绑定对应的IO变量(如图16所示)。
图16 YFHMI图元创建 & IO导入
我们构建的组态画面比较简单,两个指示灯分别对应智能终端的I1、I2,一个切换开关对应Q2,四个文本框分别对应T1、T2、T3和H。IO变量导入后,相关的图元分别绑定上对应的变量。
5.1.2 导出Html5文件
图17 Html5网页导出
导出的bg.png、Monitor.html、PublishIO.xml和YFWebSocket.js四个文件需要上传到云端对应的项目模板目录下。导出的PublishIO.xml文件需要导入云端IO列表,以设定对应的发布IO。
5.2 Web画面呈现及操控
图18 动画监控
在Web网页上我们打开动画监控页,可以看到这个内容是和我们在YFHMI中创建的组态画面是一致的,并且其显示的数据也和真实设备的值一样(和YFIOs云端中间件的IO实时数据保持一致)。这个时候如果我们用鼠标操作开关按钮,可以看到物联网智能终端的继电器吸合或释放。
六、应用案例
综上,我们可以看出无需太多专业技能,无需太多时间,就可以从端到云构建一套相对实用,且有一定复杂度的工业物联网方案。下面我们将介绍的案例,就是我们这两三年来在实际现场实施的项目,是真正得到实际运行考验的项目。
6.1 远程污水监测/监控系统
图19 恭城远程污水监测界面
图20 龙滩远程污水监控界面
图21 硬件控制柜
广西龙滩和恭城的污水监控和监测系统,分别在2014和2015年开始着手实施,最初龙滩项目没有远程监控画面,仅包含现场自动化系统,在恭城远程监控画面实现后,才又增添了远程监控功能。目前该项目已经在现场运行了两年以上。
6.2 远程垃圾处理系统
广西龙滩垃圾处理系统在2015年开始研发实施,和污水监控系统不同的是,除了包含现场自动化控制、远程云端监控外,现场还有显示器进行现场监控。所以YFHMI构建的组态,不仅支持HTML 5网页组态画面,还支持嵌入式组态画面。
图22 龙滩远程垃圾监控系统
6.3 物联网养殖监控系统
物联网养殖监控系统是我们在2015年底和新希望六合还有微软共同合作研发的一套养殖监控系统。目前已经在山东济南、潍坊、河南新乡、武陟,河北香河等地进行了安装实施。
本系统和上面介绍的污水处理和垃圾处理系统有些不同,上述两个系统的架构,核心就是物联网智能网关连接若干不同功能的智能终端和智能电表,通信也是仅采用3G/4G方式和远程服务器进行通信。物联网养殖系统除了包含上述的功能外,还专门为其研制了九合一的综合采集器,此外还能连接智能电表、智能水表,环控器等等智能设备。为了保证通信的可靠性,还支持GPRS/因特网双网自动切换功能。在远程监控端,除了具备网页监控,微信监控外,还提供手机APP进行远程操控。
图23 养殖监控-实时数据
2017年7月1日(星期六),线上物联网全栈开发峰会将在 CSDN 学院召开,刘洪峰将与其他六位专家将一起从整体架构、技术栈、应用开发平台到实战经验与安全方案,希望通过一天的时间,帮助开发者快速掌握物联网全栈开发之道,目前火热报名中,欲购从速。立即报名:http://edu.csdn.net/huiyiCourse/series_detail/42。
推荐阅读