概述及项目背景

互联网、物联网和工业制造业的结合属于信息化和工业化融合的范畴,深入推进“两化”融合,是我国化解资源环境约束、摆脱对物质消耗过度依赖、转变经济发展方式的必然选择,更是构筑国家竞争新优势不可错失的历史性机遇。习近平总书记曾多次强调,要“做好信息化和工业化深度融合这篇大文章”。

现有的工业互联网平台,主要由物资需求计划(MRP)、制造执行系统(MES)、仓库管理系统(WMS)、ERP系统等等组成,以数字化的方式将企业的购、存、产、销、人、财、物资源统一管理起来。

在工厂的制造过程中,最重要的就是生产设备,如何实现对生产设备数据的监控和分析,是工业互联网重要的研究课题。

中国目前大部分工厂还处于自动化、智能化较低的工业2.0阶段,生产设备只有简单的控制逻辑,少数设备有本地数据接口,如何将这部分庞大的数据采集到互联网,是本文的讨论重点。

产品架构及工作流程

目标:使用低成本方案,将传统制造设备数据采集上云,实现数据展示和分析。

考虑到现实情况,本方案需满足以下需求:

  • 由于很多制造业的利润微薄,本方案成本需要足够低,百元级别
  • 由于大多数设备没有数据接口,本方案应采用非侵入式的、加装设备实现数据采集
  • 实现数据的上下行,即支持数据上报,同时支持远程控制设备
  • 实现简单的数据大屏、APP监控,开放数据接口供进一步进行数据分析
  • 标准化,安装简单,做到通用方案无需技术人员上门安装,进一步降低成本

经过以多种方案的选型,我们选用了nodeMCU+阿里云的方案。nodeMCU是一款带有ESP8266 WiFi模块的开源的物联网平台,可以使用我熟悉的arduino IDE进行开发,成本约13元。

阿里云是一个成熟的物联网平台,可以通过MQTT协议连接设备,基于阿里云的各种SaaS应用,能够方便的开发数据大屏、APP等应用,按消息数收费,消息数量不多小项目几乎免费。

整体的工作流程如下。

  1. 在阿里云平台创建产品和设备,定义设备功能参数
  2. 进行设备端嵌入式开发调试
  3. 在阿里云平台创建应用(数据大屏)
  4. 大屏和设备联调

nodeMCU介绍

NodeMCU,是一个开源的物联网平台。 它使用Lua脚本语言编程。该平台基于eLua开源项目,底层使用ESP8266 sdk 0.9.5版本。由于我不熟悉Lua语言,可以使用arduino IDE和C语言进行开发,配置方法可以参见这篇文章

nodeMCU的引脚图和技术参数如下图,一共有11个数字I/O口,我们可以通过这些I/O口外接传感器或执行器,来实现数据采集和远程控制。

第一步·创建设备

在开始开发之前,我们需要明确设备的功能,在这个样例中,我们将要实现一个制袋机器的监控设备,实现制袋数量的实时上传。

打开阿里云物联网平台,新建一个产品,输入名称,选择“自定义品类”,“直连设备”,其他默认,点击保存,完成创建。

此时我们就在云端创建了一个虚拟的“机器”,下一步需要定义这个“机器”的功能。打开刚刚创建的产品详情,点击“功能定义”tab,可以看到此产品的所有功能。

点击添加自定义功能,添加一个属性“制袋数量”,表示机器当前的总产量。关于物模型的详细定义可以参考之前的文章

至此,我们创建了一个产品,这个产品有个属性“制袋数量”。下一步我们要基于这个产品创建一个设备,“设备”是“产品”的实例,是一个个的实体,我们需要创建一个设备,拿到设备的“三元组”(),就可以将平台上这个虚拟的“设备”和我们实际的设备对应起来。

创建好设备后,获取到“三元组”(ProductKey,DeviceSecret,DeviceName)备用,至此云端的虚拟设备已创建好,可以看到设备是“离线状态”,因为平台还没有检测到此设备联网,下一步我们将要进行设备端的开发,让设备联网后,带着上面的“三元组”上报消息,即可让设备在线。

第二步·nodeMCU嵌入式开发

设备端的接入本质上是让设备连接WiFi后,通过MQTT协议和阿里云进行数据交换,有大神已经写好了相关的库,我们就无需造轮子了,点此查看SDK

在SDK的示例代码中,我们只需要关注以下几个参数,设备三元组:

  • #define PRODUCT_KEY xxx
  • #define DEVICE_NAME Device_D
  • #define DEVICE_SECRET xxxxxxxxxxxxxx

设备将要连接的wifi名称和密码:

  • #define WIFI_SSID xxxxx
  • #define WIFI_PASSWD xxxxx

另外我们用一个参数pack_num来表示“制袋数量”,和我们在产品中创建的参数对应。

// 引入 wifi 模块,并实例化,不同的芯片这里的依赖可能不同
#include <ESP8266WiFi.h>
static WiFiClient espClient;

// 引入阿里云 IoT SDK
#include <AliyunIoTSDK.h>

// 设置产品和设备的信息,从阿里云设备信息里查看
#define PRODUCT_KEY "xxx"
#define DEVICE_NAME "Device_D"
#define DEVICE_SECRET "xxxxxxxxxxxxxx"
#define REGION_ID "cn-shanghai"

// 设置 wifi 信息
#define WIFI_SSID "xxxxx"
#define WIFI_PASSWD "xxxxx"

//需要上报的制袋数量pack_num参数
int pack_num = 0;
void setup()
{
    Serial.begin(115200);
    // 初始化 wifi
    wifiInit(WIFI_SSID, WIFI_PASSWD);
    
    // 初始化 iot,需传入 wifi 的 client,和设备产品信息
    AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID);
    
    // 发送一个数据到云平台,修改属性,pack_num是在设备产品中定义的参数
    AliyunIoTSDK::send("pack_num", pack_num);
}

void loop()
{
    AliyunIoTSDK::loop();
}

// 初始化 wifi 连接
void wifiInit(const char *ssid, const char *passphrase)
{
    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid, passphrase);
    while (WiFi.status() != WL_CONNECTED)
    {
        delay(1000);
        Serial.println("WiFi not Connect");
    }
    Serial.println("Connected to AP");
}

我们用一个红外反射传感器来获取数量,每当有物体接近时,传感器的输出电压会变为高电平,我们将传感器放置在产品出口处,每当有一个产品经过即输出一个高电平,通过nodeMCU的I/O口获取高电平数量即可统计“制袋数量”。

传感器的VCC、GND端口分别连接nodeMCU的3V、G端口用于供电,D0接入nodeMCU的D8端口,用于检测电平并统计。数量的统计需要用到中断函数,并经过去抖处理,此处需要一定的C语言和arduino经验,就不再赘述,可以直接参考项目源码。

连接并将代码上传到nodeMCU开发板,打开串口监视器,可以看到设备已经连接到WiFi,同时阿里云平台上的设备状态应该也变成了“在线”。

至此,设备已成功连接到云端,能够实时上报数据。有了数据,下一步我们将做一个数据大屏,将数据以展示出来。

第三步·云端应用开发-数据大屏

阿里云有成熟的在线编辑工具,无须代码,就可以在线以拖拽的方式生成一个页面。打开IoT studio,创建一个web应用

创建完成后,打开编辑页面,添加一个大屏组件,点击编辑大屏,即可拖入组件,绘制页面。

每个组件可以和上面我们创建的设备参数绑定,例如nodeMCU上报的“制袋数量”更新后,可以同步更新大屏上的数字翻牌器,做到显示实时数据。

选择一个组件,点击“设置数据源”,选择产品、设备和属性,即可完成配置。

完成编辑后,发布页面,可以配置独立域名,例如iot.zfpack.com,访问域名即可打开制作的页面。

总结

我们用20元的不到的成本搭建了一个物联网应用,从数据采集、设备管理、数据展示都可以在平台上简单完成,采集的数据后期可以进行处理分析,为业务决策、流程优化提供参考。当然,本方案采用的nodeMCU和相关传感器能否在工业环境长期稳定运行还需要进一步测试。

技术和成本已经不是限制工业互联网发展的障碍,如何通过数据发掘更大的价值才是我们需要思考的。


0 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注