现有的工业互联网平台,主要由物资需求计划(MRP)、制造执行系统(MES)、仓库管理系统(WMS)、ERP系统等等组成,以数字化的方式将企业的购、存、产、销、人、财、物资源统一管理起来。
在工厂的制造过程中,最重要的就是生产设备,如何实现对生产设备数据的监控和分析,是工业互联网重要的研究课题。
中国目前大部分工厂还处于自动化、智能化较低的工业2.0阶段,生产设备只有简单的控制逻辑,少数设备有本地数据接口,如何将这部分庞大的数据采集到互联网,是本文的讨论重点。
目标:使用低成本方案,将传统制造设备数据采集上云,实现数据展示和分析。
考虑到现实情况,本方案需满足以下需求:
经过以多种方案的选型,我们选用了nodeMCU+阿里云的方案。nodeMCU是一款带有ESP8266 WiFi模块的开源的物联网平台,可以使用我熟悉的arduino IDE进行开发,成本约13元。
阿里云是一个成熟的物联网平台,可以通过MQTT协议连接设备,基于阿里云的各种SaaS应用,能够方便的开发数据大屏、APP等应用,按消息数收费,消息数量不多小项目几乎免费。
整体的工作流程如下。
NodeMCU,是一个开源的物联网平台。 它使用Lua脚本语言编程。该平台基于eLua开源项目,底层使用ESP8266 sdk 0.9.5版本。由于我不熟悉Lua语言,可以使用arduino IDE和C语言进行开发,配置方法可以参见这篇文章。
nodeMCU的引脚图和技术参数如下图,一共有11个数字I/O口,我们可以通过这些I/O口外接传感器或执行器,来实现数据采集和远程控制。
在开始开发之前,我们需要明确设备的功能,在这个样例中,我们将要实现一个制袋机器的监控设备,实现制袋数量的实时上传。
打开阿里云物联网平台,新建一个产品,输入名称,选择“自定义品类”,“直连设备”,其他默认,点击保存,完成创建。
此时我们就在云端创建了一个虚拟的“机器”,下一步需要定义这个“机器”的功能。打开刚刚创建的产品详情,点击“功能定义”tab,可以看到此产品的所有功能。
点击添加自定义功能,添加一个属性“制袋数量”,表示机器当前的总产量。关于物模型的详细定义可以参考之前的文章。
至此,我们创建了一个产品,这个产品有个属性“制袋数量”。下一步我们要基于这个产品创建一个设备,“设备”是“产品”的实例,是一个个的实体,我们需要创建一个设备,拿到设备的“三元组”,就可以将平台上这个虚拟的“设备”和我们实际的设备对应起来。
创建好设备后,获取到“三元组”(ProductKey,DeviceSecret,DeviceName)备用,至此云端的虚拟设备已创建好,可以看到设备是“离线状态”,因为平台还没有检测到此设备联网,下一步我们将要进行设备端的开发,让设备联网后,带着上面的“三元组”上报消息,即可让设备在线。
设备端的接入本质上是让设备连接WiFi后,通过MQTT协议和阿里云进行数据交换,有大神已经写好了相关的库,我们就无需造轮子了,点此查看SDK。
在SDK的示例代码中,我们只需要关注以下几个参数,设备三元组:
设备将要连接的wifi名称和密码:
另外我们用一个参数pack_num来表示“制袋数量”,和我们在产品中创建的参数对应。
// 引入 wifi 模块,并实例化,不同的芯片这里的依赖可能不同
#include
static WiFiClient espClient;
// 引入阿里云 IoT SDK
#include
// 设置产品和设备的信息,从阿里云设备信息里查看
#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和相关传感器能否在工业环境长期稳定运行还需要进一步测试。
技术和成本已经不是限制工业互联网发展的障碍,如何通过数据发掘更大的价值才是我们需要思考的。
欢迎访问我的网站:process-z.com