从去年伊始,国内外一些大公司都前后推出了面向物联网领域的平台产品,如微软 Azure 平台的 IoT Hub、阿里云平台的物联网开发套件、百度云平台的物接入 IoT Hub、物解析 IoT Parser 和物管理 IoT Device 等等,但上述公司的产品从平台特点和技术角度来看,相对比较适合一些企业级项目开发及智能硬件的云链接、云存储的使用,其实并不太适合一些对控制实时性较高、接入点多、业务逻辑相对复杂的工业领域。html
工业自动化领域相对比较封闭,发展也比较慢,多年来涉及到通讯相关的,大部分仍是采用现场工业总线等技术来实现。笔者曾发过一篇《浅谈工业级物联网项目架构设计及实施》,里面除了介绍了工业物联网的概念和特点外,还介绍了物联网通用中间件平台的架构设计。时至今日,随着国内外大公司的介入,物联网愈来愈热。下面笔者将结合工控领域的特点及当前物联网领域的一些新技术新趋势,分享工业物联网和民用物联网的特点及异同,并从自身实际应用开发的角度,解读从端到云,工业物联网项目的全栈快速开发之路。前端
最近诞生的共享单车,短短一年多的时间就遍及国内一二线城市,迅速成为一个现象级应用,能够说是民用物联网领域最大的应用。小米的智能家居套件,以低廉的价格,相对实用的功能,也赢得了很多智能家居爱好者的追捧,也是比较典型的民用物联网应用。
工业物联网对大部分人来讲,相对陌生,每每是面向行业的应用,好比咱们当前所作的养殖物联网监控,污水处理物联网监控和垃圾处理物联网监控。ios
那民用物联网和工业物联网的区别是什么呢?web
从技术角度来讲,民用物联网和工业物联网并无本质的区别,都是有云、有端、都具有传感器数据采集、设备控制及通讯传输等功能。只是工业物联网脱胎于工控自动化网络,后者对可靠性和实时性有较高的要求,有各类工业级别的现场总线,如 Profibus,Modbus RTU/TCP,CANopen 等等,后续又在民用以太网的基础上,推出了工业以太网。那时候尚未云的概念,考虑到安全,网络都是私有的,不多和因特网进行互联。从某种意义上来讲,没有云技术的高速发展,就不会有如今的民用物联网上各类现象级应用。固然工业物联网也得益于云技术的成熟,才能使高门槛的工业自动化技术获得了必定程度上的普及,不然也很难有今天所谓的工业物联网。不过民用物联网和工业物联网区别仍是有的,下面将一一简要介绍。数据库
全栈开发的概念来源于 Web 开发领域,指同时具有前端和后台开发的能力。引伸到工业物联网领域,全栈开发意味着要懂硬件开发,要懂各类传感器、云开发、Web 开发技术、手机 APP 开发、各类通讯技术和数据存取,大数据时代还要求懂数据挖掘和分析。编程
这对全栈工程师来讲,要求就很是高了。考虑到实际,从技术路线来看,全栈开发仍是分派系的,如“Java 派”,各类层面的开发都是以 Java 类的开发技术为主。如“.NET 派”,各类层面的开发都是用.NET 技术进行开发。因为历史缘由,我从 2001 年开始进入工控开发,工控软件类开发大都以微软技术为主,因此全栈开发主要采用了.NET 技术。浏览器
民用物联网端的开发和工业物联网端的开发仍是有很大区别的,民用物联网端产品是厂家直接基于芯片进行产品开发。是典型的硬件开发了。而工业物联网端的开发,每每是在第三方厂家的产品基础上进行二次开发,也就是更多的是作集成类的开发工做。安全
咱们所作的工业物联网的端设备就是供其余工业物联网集成商进行二次开发的。固然咱们也会基于咱们的软硬件产品进行工业物联网项目的集成开发。服务器
这里着重介绍的就是在现有的工业物联网产品基础上进行的项目开发。微信
目前工业领域常见的 IO 接口以下:
Modbus RTU: 施耐德公司制定的基于 RS485/RS232 的串行通讯总线协议。
Modbus TCP: 施耐德公司制定的基于以太网的通讯总线协议。
PPI:西门子公司专为 S7-200 系列 PLC 开发的通信协议。
Profibus:是一种国际化、开放式、不依赖于设备生产商的现场总线标准。
CANopen:是一种架构在 CAN 上的高层通讯协协议,包括通讯子协议及设备子协议。
常见的智能模块其实种类比较多的,好比智能电表,智能水表,各类 PLC 及其配套的扩展模块等等。咱们这里主要介绍的就是凌霄物联网智能网关、智能终端、智能 IO 模块和综合采集模块。
网关除具有网口、USB、SD 卡及扩展两路智能模组(无线通讯、RTC、存储等板卡)外,还能够配置各类不一样通讯接口板(固然也能够直接对接智能终端或智能 IO 上的输入输出子板)。
智能终端和智能 IO 模块的主要区别有,一是通讯接口,智能终端有三种接口可选,以太网、RS485 和 CAN;而智能 IO 模块仅具有 CAN 接口。二就是智能终端支持二次开发,能独立运行,也能够做为智能网关的扩展模块,而智能 IO 仅做为智能网关的扩展模块存在。
智能终端和智能 IO 模块,根据对外接口不一样,主要有以下种类的模块:
综合采集器,是一个九合一的传感器集成模块,能够说是国内外集成度最高的一款产品。一次能够采集的传感器数据有 3 路温度,1 路湿度、1 路氧气、1 路氨气、1 路二氧化碳、1 路光照、1 路 PM2.5。该模块能够经过 RS485 直接和网关相连,标准 Modbus RTU 通讯协议。
图 2 是 YFIOs 数据组态系统的架构图,其包含三部分:驱动层,核心层(驱动引擎及实时数据库)和策略层。
所谓的二次开发大部分就是开发和具体业务联系密切相关的策略程序,此外就是少部分的驱动程序开发(除了对接特殊设备,大部分状况下无需用户开发驱动程序)。
下面咱们用一个简单示例来介绍一下 YFIOs 组态开发。
咱们须要准备以下设备:1 台物联网智能网关,1 台物联网智能终端(或智能 IO),1 台综合采集器,1 条 USB 线及附属电源及链接线等。设备及辅材准备好后,按以下方式进行接线:
如图 4 所示,根据设备的类型,对应的网关接口,新建综合采集器和输入输出智能终端对应的用户设备。
设备建立后,对应的设备变量也会自动建立。
无需任何编程,只要把相关的驱动和配置信息部署到网关,就能够直接监控设备的通讯状态、IO 输入状态和链接的传感器数据。若是有 IO 继电器输出,也能够在 IO 监控界面,直接修改对应的值以改变继电器的开闭状态。
若是仅仅实现数据从端到云的传输,那么无需写用户策略。固然对大部分的工业物联网现场应用来讲,仍是须要必定的业务逻辑进行处理的。好比检测到设备电机过热,则要求网关当即中止电机运行或者对外发出报警信号。这里咱们写一个最简单的用户策略,就是当一路开关量输入为高电平的时候,让一路继电器闭合,低电平的时候则继电器释放。
开发用户策略,能够采用微软 Visual Studio IDE 开发工具进行开发,咱们也提供了对应的模板程序,能够直接填入必要的业务代码便可。如图 6 所示,标准的用户策略其实只须要实现 3 个接口函数便可:OnLoad
、OnRun
和OnUnload
。
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 所示)。
从图 8 中咱们能够看出,当 I1 输入状态被改变的时候,继电器的输出状态也被改变了,调试窗口中也输出了对应的调试信息。
若是不和云端通讯,也就不须要添加 QCPB 云端通讯策略了,可是若是没有这部分也称之不上为物联网项目了,只是一个典型的小自动化项目而已。
和添加用户策略同样,咱们添加上 QCPB 云端通讯策略,除了设置运行间隔外,咱们还须要设定相关的参数,如图 9 所示。
IP 地址是指云端服务器端地址,端口号默认为 12000,项目 ID 是指云端建立对应项目时的 ID 号(这个后文会有介绍)。因为 QCPB 协议支持变化上传数据,因此针对浮点数,须要设置数据变化的阈值。
“IO 配置”面板中有一个导出按钮,能够单击导出,保存后的 XML 文件在建立云端项目及云端组态画面的时候会用到。
MQTT 是 Message Queuing Telemetry Transport 的缩写,中文意思是消息队列遥测传输,它是 IBM 开发的一个即时通信协议,目前已经成为物联网主流的通讯协议,微软云、百度云、阿里云等都支持该通讯协议。这意味着设备只要支持了该通讯协议,就能够和当前主流的云进行云端通讯。凌霄物联网网关也支持该协议,在一个消防相关的项目中,就是经过该协议把采集到的数据上传到的微软 Azure IoT Hub 中。
WebSocket 协议是 HTML5 标准里,基于 TCP 的一种新的网络协议,2011 年被 IETF 定为标准 RFC 6455。它实现了浏览器与服务器全双工(full-duplex)通讯,服务器可随时向客户端发送信息,不只通讯数据量变小,同时也大大改善了网页动画的实时性能。咱们的 YFHMI 组态动画,就是基于 WebSocket 通讯协议和服务器中间件 YFCloud 进行通讯的。
这是咱们自行开发的一个基于二进制格式的云端通讯协议,其优势是通讯数据量小,支持数据变化上传。除了支持数据通讯外,还支持设备的远程诊断、远程参数下载和远程升级等功能。支持 TCP/IP 以太网和 GPRS 双链路自动切换通讯模式。本篇文章中所介绍的云端通讯就是基于该协议来实现的。
云端 YFCloud 有三部分组成:Web 后台、Web 前台和 YFIOs 云端中间件。Web 后台和前台采用 ASP.NET 进行开发,YFIOs 云端中间件也是采用.NET 技术进行开发,是一个标准的 Windows 服务程序。
首先登陆 YFCloud 物联网中间件通用监控平台就能够开始建立云端项目了。YFCloud 的构建思想是,先有项目模板,而后再基于项目模板建立应用。这样的好处就是,基于一个项目模板能够建立若干应用。
先添加一个项目模板,而后比较重要的一步就是导入【2.4.5】章节所导出的 IO 配置文件,从而构建云端 IO 实时数据库(如图 11 所示)。
基于咱们刚刚建立的“工业物联网演示”模板建立一个项目应用。建立一个项目应用后,系统会自动生成一个项目 ID 号,把这个 ID 号填入【2.4.5】章节中所示的云端通讯策略中的 IO 配置面板中,填入后部署到物联网智能网关便可。
YFIOs 云端中间件脱胎于嵌入式 YFIOs,从图 12 的架构图上就能够看出,嵌入式 YFIOs 是一个“单机版”的数据组态平台,而云端中间件 YFIOs 是一个“网络版”数据组态平台。
YFIOs 云端中间件集成了 WebSocket 服务器,Web 动态网页能够经过 WebSocket 协议和服务器进行通讯。
YFIOs 云端中间件以项目为最小单位来进行管理的,一个或多个项目对应一个项目模板,实际应用经过项目 ID 进行区分。
在云端服务器上打开 YFIOs 云端中间件-客户端程序,能够看到在“工业物联网演示”项目模板下,咱们看到“工业物联网 Demo”应用的运行标志已经变为绿色,表示物联网智能网关设备已经和云端链接成功。右侧的显示面板上能够看到从物联网智能网关上传到云端的各类 IO 数据。在该界面上,也能够对继电器变量进行操做,写入 0 或 1,能够看到物联网智能终端上对应的继电器闭合或开启。
针对一个具体的项目,远程参数便可能云端策略须要,也可能同时远程设备上的策略须要,若是是这种状况,处理要复杂一些,相关参数须要保存到云端服务器,而且参数一旦修改,须要同时通知云端策略和远程设备上的策略。若是仅远程设备须要,那么简单期间,能够直接经过 YFIOs 云端中间件直接传递一个二进制参数文件便可。
远程升级的实现要相对复杂,由于升级文件相对较大,而且传输通道有多是 GPRS 窄带传输,因此须要分段进行传输。要确保整个的升级文件,完整可靠的传输到远程的物联网智能网关上,而且重启重连成功后,才算真正的升级完毕。
因为基于同一个项目模板下的多个相关应用的物联网智能网关上的应用每每是同样的,因此只要设定一个升级文件就能够升级整个项目模板下的全部的项目应用。可是这有一个前提,要升级的固件版本,要比设备上当前运行的版本高。
考虑到一些特殊状况的存在,YFIOs 云端中间件也支持远程强制升级,无论当前什么版本,无论之前运行的什么应用,均可以强制实现远程升级的功能。
YFIOs 云端中间件的策略和 YFIOs 嵌入式的策略开发基本相同,也含有 OnLoad、OnRun 和 OnUnload,差异就是云端中间的策略能力更强,能够充分利用 Windows 平台自己的.NET Framework 能力。
有些业务逻辑便可以放在设备端的策略里,也能够放到云端的策略里,好比一些当日量和累积量的处理和换算。有些最好放到设备端,好比某些指标超过阈值,须要当即关闭或开启设备的。有些则放在云端更合理,好比须要把数据进行永久存储的。
云端策略分三种类型:核心策略、公共策略和用户策略。核心策略,YFIOs 云端中间件每一个项目都会执行,公共策略是多个项目可选择性的执行,用户策略则是用户项目模板下的项目才会执行。其上三种策略从代码结构上没有什么区别,以所在的目录决定其策略类型。
YFHMI 画面组态最先支持 WinCE 平台,后来在 WinCE 平台软件的基础上开发出了基于.NET Micro Framework 平台的版本。.NET Micro Framework 通常运行在相对资源较小的物联网芯片(Cortex-M 系列)上,因此 YFHMI 在性能和体积上作了进一步的优化。考虑到 Html5+WebSocket 是将来 WEB 前端的主流,在 YFHMI 支持 Windows 版本后,又直接推出了 Html5 的组态版本。
在建立基本组态画面的同时,咱们仍是须要导入在【2.4.5】章节所导出的 IO 配置文件,以便于动画绑定对应的 IO 变量(如图 16 所示)。
咱们构建的组态画面比较简单,两个指示灯分别对应智能终端的 I一、I2,一个切换开关对应 Q2,四个文本框分别对应 T一、T二、T3 和 H。IO 变量导入后,相关的图元分别绑定上对应的变量。
5.1.2 导出 Html5 文件
导出的 bg.png、Monitor.html、PublishIO.xml 和 YFWebSocket.js 四个文件须要上传到云端对应的项目模板目录下。导出的 PublishIO.xml 文件须要导入云端 IO 列表,以设定对应的发布 IO。
在 Web 网页上咱们打开动画监控页,能够看到这个内容是和咱们在 YFHMI 中建立的组态画面是一致的,而且其显示的数据也和真实设备的值同样(和 YFIOs 云端中间件的 IO 实时数据保持一致)。这个时候若是咱们用鼠标操做开关按钮,能够看到物联网智能终端的继电器吸合或释放。
综上,咱们能够看出无需太多专业技能,无需太多时间,就能够从端到云构建一套相对实用,且有必定复杂度的工业物联网方案。下面咱们将介绍的案例,就是咱们这两三年来在实际现场实施的项目,是真正获得实际运行考验的项目。
广西龙滩和恭城的污水监控和监测系统,分别在 2014 和 2015 年开始着手实施,最初龙滩项目没有远程监控画面,仅包含现场自动化系统,在恭城远程监控画面实现后,才又增添了远程监控功能。目前该项目已经在现场运行了两年以上。
广西龙滩垃圾处理系统在 2015 年开始研发实施,和污水监控系统不一样的是,除了包含现场自动化控制、远程云端监控外,现场还有显示器进行现场监控。因此 YFHMI 构建的组态,不只支持 HTML 5 网页组态画面,还支持嵌入式组态画面。
物联网养殖监控系统是咱们在 2015 年末和新但愿六合还有微软共同合做研发的一套养殖监控系统。目前已经在山东济南、潍坊、河南新乡、武陟,河北香河等地进行了安装实施。
本系统和上面介绍的污水处理和垃圾处理系统有些不一样,上述两个系统的架构,核心就是物联网智能网关链接若干不一样功能的智能终端和智能电表,通讯也是仅采用 3G/4G 方式和远程服务器进行通讯。物联网养殖系统除了包含上述的功能外,还专门为其研制了九合一的综合采集器,此外还能链接智能电表、智能水表,环控器等等智能设备。为了保证通讯的可靠性,还支持 GPRS/因特网双网自动切换功能。在远程监控端,除了具有网页监控,微信监控外,还提供手机 APP 进行远程操控。