精华内容
下载资源
问答
  • 亿联网建站平台代理系统源码是以asp+access进行开发的asp建站平台源码,内含PC+手机版,自动设别终端切换显示。 亿联网是昆山亿思互联信息科技有限公司旗下的服务产品。该平台是
  • 亿联网建站平台代理系统源码是以asp+access进行开发的asp建站平台源码,内含PC+手机版,自动设别终端切换显示。 亿联网是昆山亿思互联信息科技有限公司旗下的服务产品。该平台是
  • 亿联网建站平台代理系统源码是以asp+access进行开发的asp建站平台源码,内含PC+手机版,自动设别终端切换显示。 亿联网是昆山亿思互联信息科技有限公司旗下的服务产品。该平台是
  • 亿联网建站平台代理系统源码是以asp+access进行开发的asp建站平台源码,内含PC+手机版,自动设别终端切换显示。 亿联网是昆山亿思互联信息科技有限公司旗下的服务产品。该平台是
  • 亿联网建站平台代理系统源码是以asp+access进行开发的asp建站平台源码,内含PC+手机版,自动设别终端切换显示。 亿联网是昆山亿思互联信息科技有限公司旗下的服务产品。该平台是
  • 亿联网建站平台代理系统源码是以asp+access进行开发的asp建站平台源码,内含PC+手机版,自动设别终端切换显示。 亿联网是昆山亿思互联信息科技有限公司旗下的服务产品。该平台是一个能在线快速搭建企业网站,为...
  • 亿联网建站平台代理系统源码是以asp+access进行开发的asp建站平台源码,内含PC+手机版,自动设别终端切换显示。 亿联网是昆山亿思互联信息科技有限公司旗下的服务产品。该平台是一个能在线快速搭建企业网站,为...
  • 亿联网建站平台代理系统源码是以asp+access进行开发的asp建站平台源码,内含PC+手机版,自动设别终端切换显示。 亿联网是昆山亿思互联信息科技有限公司旗下的服务产品。该平台是一个能在线快速搭建企业网站,为...
  • 亿联网建站平台代理系统源码是昆山亿思互联信息科技有限公司旗下的服务产品。该平台是一个能在线快速搭建企业网站,为企业用户提供快捷、易用、适合SEO优化的互联网建站工具。 平台开设了两种运营服务体系:一种...
  • 亿联网建站平台代理系统源码是以asp+access进行开发的asp建站平台源码,内含PC+手机版,自动设别终端切换显示。亿联网是昆山亿思互联信息科技有限公司旗下的服务产品。该平台是一个能在线快速搭建企业网站,为企业...
  • 是用于构建IOE(万物互联)边缘计算网关的开源框架。 如何使用 应用程式开发 文件资料 例子 Modbus应用程序(主/从) OpcUA应用程序(服务器/客户端) 通过ubus代理收集Fanuc Focas CNC设备数据 DLT645设备数据...
  • :cloud:支持本机,从机,七牛,阿里OSS,腾讯COS,又拍,OneDrive(包括世纪互联版)作为存储端 :outbox_tray:发布/下载支持客户端直传,支持下载限速 :floppy_disk:可对接Aria2离线下载 :books:在线压缩/...
  • 源码阿里轻量服务器通过MQTT互联 并通过Python订阅主题实现数据互传

    1. 硬件配置 - 可根据自身需要跳过

    如果是直接使用ESP8266芯片的话建议直接跳到后面前面的配置就不用看了.

    1.1 硬件选择 - WeMos D1 WiFI UNO R3 开发板

    硬件购买传送门
    在这里插入图片描述
    这款的好处是集成了ESP8266模块这就意味着你不需要在单独的去购买并配置ESP8266 WIFI 模块了, 这款板子基于ESP-12E,而且兼容Arduino,有了这款 物联网开发板,我们可以愉快的使用Arduino 方式开发ESP8266,玩转物联网项目.

    1.2 开发板参数

    • 处理器ESP-8266EX
    • 工作电压3.3V 输入电压6-24V
    • I/O 数量11
    • AD 输入电压0-3.3V
    • Flash 4MB SRAM 32KB DRAM 80KB
    • 时钟频率80MHz/160Mhz 网络802.11 b/g/n
    • 尺寸规格:长68.6mm x 宽53.4mm
    • 重量21g

    在这里插入图片描述

    1.3 开发板实物

    在这里插入图片描述

    2. 开发环境配置 - 从arduino的下载开始

    2.1 下载Arduino

    下载传送门 解压密码: C6FX

    在这里插入图片描述

    2.2 安装驱动

    在这里插入图片描述

    drivers/ dpinst-amd64.exe 点击安装就好
    

    2.3 配置IDE

    2.3.1 打开文件首选项去配置开发板管理器

    在这里插入图片描述
    在下面的附加开发板管理器网址中加入:

    http://arduino.esp8266.com/stable/package_esp8266com_index.json
    

    2.3.2 下载库文件 并 添加到指定位置

    库文件下载地址 密码: RBXX
    解压到或者手动添加到:

    C:\Users\你电脑的用户名\AppData\Local\Arduino15\staging\packages
    

    在这里插入图片描述

    2.3.3 工具->开发管理器 安装我们的ESP8266相关板子

    知道为什么刚刚要添加开发管理器网址了吧
    在这里插入图片描述
    在里面查找8266添加2.4.0版本
    在这里插入图片描述

    2.3.4 工具->开发板->WeMos D1 R1

    在这里插入图片描述

    2.3.5 其它配置选项如下

    在这里插入图片描述

    2.3.6 测试一下哈

    在这里插入图片描述
    如果你的板子上开始一闪一闪的就成了

    3. ESP8266连接WIFI - 硬货来了

    3.1 动态IP方式连接WIFI热点

    #include <ESP8266WiFi.h>
    #define WIFI_SSID "zxy0016zxy"                       //这里是你自己的wifi名称
    #define WIFI_PASSWD "lyf!@#815168"                   //你自己的wifi密码
    void setup() {
    Serial.begin(115200);                                //波特率设置你要在你的串口中设置同样的波特率不然就是乱码
    WiFi.mode(WIFI_STA);
    WiFi.begin(WIFI_SSID, WIFI_PASSWD);                  //这个就是TCP连接一样的通过wifi名字和密码绑定wifi
    WiFi.setAutoConnect (true);
    WiFi.setAutoReconnect (true);
    while (WiFi.status() != WL_CONNECTED)
    {
    delay(1000);
    Serial.println("connecting......");
    }
    Serial.println("Connected to AP");
    delay(3000);
    }
    void loop() {
    if (WiFi.status() == WL_CONNECTED)
    {
    Serial.println("Zibo Zhao's FYP:");
    Serial.println("---------------------------------------------------------");
    Serial.println("Connect to router success");
    Serial.println(String("local IP is ")+WiFi.localIP().toString()); 
    Serial.println(String("Subnet mask is ")+WiFi.subnetMask().toString());
    Serial.println(String("gatewayIP address is ")+WiFi.gatewayIP().toString());
    Serial.println(String("dnsIP address is ")+WiFi.dnsIP().toString());
    Serial.println(String("SSID is ") + WiFi.SSID());
    Serial.println(String("PSK is ") + WiFi.psk());
    Serial.println(String("BSSID is ") + WiFi.BSSIDstr());
    Serial.println(String("RSSI is ") + WiFi.RSSI());
    Serial.println("---------------------------------------------------------");
    delay(10000);
    }else
    {
    Serial.println("Connect to router failed");
    }
    // Wait a bit before scanning again
    delay(1000);
    }
    

    里面的打印内容基本是IP地址 子网掩码 WIFI入口号等等 就不详细解释了 来看下运行效果
    在这里插入图片描述
    在这里插入图片描述
    大家不要来蹭我wifi哈
    在这里插入图片描述

    3.2 静态IP连接WIFI热点

    #include <ESP8266WiFi.h>
    #define WIFI_SSID "你的wifi名称"
    #define WIFI_PASSWD "你的wifi热点"
    IPAddress local_static_ip(192, 168, 43, 10); //设置静态连接的IP
    IPAddress local_gateway(192, 168, 43, 1);    //设置局域网登录地址
    IPAddress local_subnet(255, 255, 255, 0);    //设置子网IP
    IPAddress local_dns_ip(192, 168, 43, 1);     //设置DNS IP
    void setup() {
    Serial.begin(115200);
    WiFi.mode(WIFI_STA);
    WiFi.begin(WIFI_SSID, WIFI_PASSWD);
    WiFi.config(local_static_ip, local_gateway, local_subnet, local_dns_ip);
    WiFi.setAutoConnect (true);
    WiFi.setAutoReconnect (true);
    while (WiFi.status() != WL_CONNECTED)        //如果没连上每隔一秒重复尝试一次
    {
    delay(1000);
    Serial.println("connecting......");         
    }
    Serial.println("Connected to AP");
    Serial.println(String("mac address is ")+WiFi.macAddress());
    delay(3000);
    }
    void loop() {
    if (WiFi.status() == WL_CONNECTED)           //如果连上了每隔1秒打印一下以下相关信息
    {
    Serial.println("Connect to router success");
    Serial.println(String("Subnet mask is ")+WiFi.subnetMask().toString());
    Serial.println(String("gatewayIP address is ")+WiFi.gatewayIP().toString());
    Serial.println(String("dnsIP address is ")+WiFi.dnsIP().toString());
    Serial.println(String("SSID is ") + WiFi.SSID());
    Serial.println(String("PSK is ") + WiFi.psk());
    Serial.println(String("BSSID is ") + WiFi.BSSIDstr());
    Serial.println(String("RSSI is ") + WiFi.RSSI());
    }else
    {
    Serial.println("Connect to router failed");
    }
    // Wait a bit before scanning again
    delay(1000);
    }
    

    4. 云服务器MQTT服务器搭建

    4.1 创建MQTT文件夹用于下载MQTT安装包

    在这里插入图片描述

    4.2 下载MQTT安装包 并解压

    wget http://emqtt.com/static/brokers/emqttd-centos7-v2.3.1.zip
    

    在这里插入图片描述
    在这里插入图片描述

    yum install unzip -y
    
    unzip emqttd-centos7-v2.3.1.zip
    

    这里报了错误 不要急很有可能是没下载完全所以导致不能解压, 解决措施很简单多下几遍就行了
    在这里插入图片描述
    在这里插入图片描述

    4.3 安装主文件并运行mqtt

    cd emqttd 进入文件
    
    ./bin/emqttd console 安装主文件
    

    在这里插入图片描述
    这样就算成功了

    4.4 Screen 创建新进程并运行MQTT

    screen -ls 查看所有进程
    
    screen -r -d name 进入name进程
    
    ctrl+a d 从进程中脱离
    
    screen -S name 创建名为name的进程
    

    在这里插入图片描述

    4.5 查看MQTT状态

    ./bin/emqttd_ctl status 注意要在MQTT的安装目录下才能运行
    

    在这里插入图片描述

    4.6 进入MQTT后台

    在这里插入图片描述
    这个18083是用来进入后台的 我们进入screen MQTT进程查看MQTT监控的端口:
    在这里插入图片描述
    访问自己的公网IP:18083进入MQTT后台 账号 admin 密码 public
    在这里插入图片描述

    5. Arduino 连接MQTT服务器

    5.1 加载库文件 PubSubClient一定要有的用于MQTT连接

    在这里插入图片描述

    5.2 Arduino 分别连接WIFI和MQTT服务器

    连接wifi 相关代码

    #define WIFI_SSID "zxy0016zxy"
    #define WIFI_PASSWD "lyf!@#815168"
    
    void wifiInit()
    {
    WiFi.mode(WIFI_STA);
    WiFi.begin(WIFI_SSID, WIFI_PASSWD);
    
    while (WiFi.status() != WL_CONNECTED)
    {
    delay(1000);
    Serial.println("WiFi not Connect");
    }
    Serial.println("Connected to Zibo's wifi");
    Serial.println("----------------------------");
    Serial.println("Connected to AP");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
    Serial.print("espClient [");
    Serial.println("----------------------------");
    client.setCallback(callback);
    }
    
    

    连接MQTT服务器(在云服务器上的一个进程中运行)

    #define MQTT_SERVER "公网ip"
    #define MQTT_PORT 1883  /* 默认连接1883端口 TCP通讯*/
    #define MQTT_USRNAME "public" /* 用户名*/
    /* MQTT 设置*/
    #define CLIENT_ID "Zibo Zhao" /* 你的id*/
    #define MQTT_PASSWD "public"  
    #define ALINK_BODY_FORMAT "{\"id\":\"123\",\"version\":\"1.0\",\"method\":\"thing.event.property.post\",\"params\":%s}"
    #define ALINK_TOPIC_PROP_POST "/World" /* 发送数据到哪个主题*/
    
    
    client.setServer(MQTT_SERVER, MQTT_PORT); /* 连接WiFi 之后,连接MQTT 服务器*/
    
    
    

    5.3 完整版代码

    #include <ESP8266WiFi.h>
    /* 依赖PubSubClient 2.4.0 */
    #include <PubSubClient.h>
    /* 依赖ArduinoJson 5.13.4 */
    #include <ArduinoJson.h>
    #include <DHT.h> //DHT 温湿度传感器库
    #define SENSOR_PIN 13
    DHT dht13(13, 11);
    int TEMP;
    
    
    
    /* 连接您的WIFI SSID 和密码*/
    #define WIFI_SSID "zxy0016zxy"
    #define WIFI_PASSWD "lyf!@#815168"
    /* 设备的三元组信息*/
    
    /* 线上环境域名和端口号,不需要改*/
    #define MQTT_SERVER "公网ip"
    #define MQTT_PORT 1883
    #define MQTT_USRNAME "public"
    /* MQTT 设置*/
    #define CLIENT_ID "Zibo Zhao"
    #define MQTT_PASSWD "public"
    #define ALINK_BODY_FORMAT "{\"id\":\"123\",\"version\":\"1.0\",\"method\":\"thing.event.property.post\",\"params\":%s}"
    #define ALINK_TOPIC_PROP_POST "/World"
    unsigned long lastMs = 0;
    WiFiClient espClient;
    PubSubClient client(espClient);
    
    
    void callback(char *topic, byte *payload, unsigned int length)
    {
    Serial.print("Message arrived [");
    Serial.print(topic);
    Serial.print("] ");
    payload[length] = '\0';
    Serial.println((char *)payload);
    }
    
    
    void wifiInit()
    {
    WiFi.mode(WIFI_STA);
    WiFi.begin(WIFI_SSID, WIFI_PASSWD);
    while (WiFi.status() != WL_CONNECTED)
    {
    delay(1000);
    Serial.println("WiFi not Connect");
    }
    Serial.println("Connected to Zibo's wifi");
    Serial.println("----------------------------");
    Serial.println("Connected to AP");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
    Serial.print("espClient [");
    Serial.println("----------------------------");
    client.setServer(MQTT_SERVER, MQTT_PORT); /* 连接WiFi 之后,连接MQTT 服务器*/
    client.setCallback(callback);
    }
    
    
    void mqttCheckConnect()
    {
    while (!client.connected())
    {
    Serial.println("Connecting to MQTT Server ...");
    if (client.connect(CLIENT_ID, MQTT_USRNAME, MQTT_PASSWD))
    {
    Serial.println("MQTT Connected!");
    }
    else
    {
    Serial.print("MQTT Connect err:");
    Serial.println(client.state());
    delay(5000);
    }
    }
    }
    
    
    
    /* 绑定设备,标识符“RoomTemp” */
    void mqttIntervalPost()
    {
    char param[500];
    char jsonBuf[1023];
    boolean d = client.publish(ALINK_TOPIC_PROP_POST, "hahhahahahha"); 
    Serial.println(d);
    }
    
    
    void setup()
    {
    pinMode(SENSOR_PIN, INPUT);
    /* initialize serial for debugging */
    Serial.begin(115200);
    Serial.println("Demo Start");
    wifiInit();
    }
    
    
    // the loop function runs over and over again forever
    void loop()
    {
    mqttCheckConnect();
    /* 上报*/
    mqttIntervalPost();
    client.loop();
    delay(5000);
    }
    

    5.4 Python 监控主题

    这里Python的作用就是把主题上更新的内容给获取回来

    #!/usr/bin/python
    # -*- coding: utf-8 -*
    
    import paho.mqtt.client as mqtt
    import json
    
    # 服务器地址
    host = '你的公网ip'
    # 通信端口 默认端口1883
    port = 1883
    
    
    username = 'admin'
    password = 'public'
    
    # 订阅主题名
    topic = '/World'
    
    
    # 连接后事件
    def on_connect(client, userdata, flags, respons_code):
        if respons_code == 0:
            # 连接成功
            print('Connection Succeed!')
        else:
            # 连接失败并显示错误代码
            print('Connect Error status {0}'.format(respons_code))
    
        # 订阅信息
        client.subscribe(topic)
    
    
    # 接收到数据后事件
    def on_message(client, userdata, msg):
        # 打印订阅消息主题
        print("topic", msg.topic)
        # 打印消息数据
        print(msg.payload.decode())
    
    
    def main_demo():
        client = mqtt.Client()
        print('i am here')
    
        # 注册事件
        client.on_connect = on_connect
        print('i am here 1')
        client.on_message = on_message
        print('i am here 2')
    
        # 设置账号密码(如果需要的话)
        client.username_pw_set(username, password=password)
        print('dawdadwad')
        # 连接到服务器
        client.connect(host, port=port, keepalive=2)
        print('dawdawdawdawdawdad')
        # 守护连接状态
        client.loop_forever()
        print('dawdaw222222')
    
    
    if __name__ == '__main__':
        main_demo()
    
    
    
    

    5.5 整体效果

    可以看到全部连到了MQTT服务器上
    在这里插入图片描述
    在这里插入图片描述
    这里是被Python监控程序订阅的主题
    在这里插入图片描述
    这是Arduino程序发到订阅主题ALINL_TOPIC_PROP_POST的消息 (主题设定为 /World)

    在这里插入图片描述
    这是Python监控程序的打印可以看到已经完全可以互相通信成功了.

    展开全文
  • 原文链接:轻松用C#+S7-1200+阿里实现工业数据采集与监控[附源码]​mp.weixin.qq.com写在前面前面我们分享了:[智能制造]未来,我们需要什么样的自动化工程师?现在各大物联网平台层出不穷,看似离我们很遥远,其实...

    0a68366959ea3068483f9e6fffd0c48a.png

    原文链接:

    轻松用C#+S7-1200+阿里云实现工业数据采集与监控[附源码]mp.weixin.qq.com
    a5292daa3f4117e091500ddb8d950a2b.png

    写在前面

    前面我们分享了:

    [智能制造]未来,我们需要什么样的自动化工程师?

    现在各大物联网平台层出不穷,看似离我们很遥远,其实只要我们敢于去研究,敢于去发现,万物互联,近在咫尺之间。

    6d1558e3b7d065a35ec98411d9c92345.png

    今天给大家介绍一下,作为一个普通的.NET开发人员,如何不借助第三方的物联网平台,搭建一个简单实用的物联网平台框架。

    物联网框架

    此物联网框架是在上位机框架的基础上,结合物联网通信协议MQTT实现。上位机本身就集成有采集、归档及日志等功能,只需要在这个基础上,连接MQTT服务器之后,并向指定的主题Topic中发布相关的数据,相关的WEB、APP只需要订阅相应的主题,即可获取到数据。

    整体软件框架如下图示所示:

    c3105b8ee2202b1abffeef7d04020666.png

    图表 1 整体软件框架实现

    从上图可以看出,整体软件基于MQTT协议搭建,依据此软件框架搭建的MQTT物联网拓扑图如下图所示:

    3ad088c5702ce04768796b2deb2fc390.png

    图表 2 MQTT物联网平台拓扑图

    框架实现

    为了测试方便,这里选择西门子S7-1200 PLC作为下位机,采用西门子S7进行通信,上位机先与PLC进行通信,同时连接MQTT服务器,并向指定主题发布数据。

    (1)首先创建一个新的Windows窗体应用,从NuGet上下载xktComm.dll:

    9152de0b13c2d616b8218de4300ebddf.png

    图表 3 xktComm下载

    (2)开发UI界面开发,按照功能设计如下图所示:

    5a39c22fe10afd6e0f5d912170705143.png

    图表 4 MQTT客户端UI界面

    (3)UI界面设计完成之后,进行代码的编写,这里使用开源的mqtt库mqttnet,仍然通过NuGet下载安装一下,这里选择版本为2.8.2,选择不同的版本,使用上会有一些区别:

    1d998753e967a057a19795d950f23bfb.png

    图表 5 MQTTnet下载

    (4)先实现基本的MQTT连接服务器及断开连接:

    50ab12e356277e647462be2d0768736c.png

    (5)基于委托创建日志处理对象及方法体:

    a0dd2a2b31b14ef75af1e602c00e4152.png

    (6)确定并创建通信变量实体类及集合:

    实际开发过程中,这里是基于CMSPro实现的,本案例用于测试,以读取以下四个变量为例(实际应用时变量数据及结构可能要比这复杂),如下图所示:

    表格 1通信变量列表

    序号

    变量名称

    变量地址

    变量类型

    1

    出口压力

    DB100.DBD0

    Float

    2

    入口压力

    DB100.DBD4

    Float

    3

    出口温度

    DB100.DBD8

    Float

    4

    入口温度

    DB100.DBD12

    Float

    按照这个结构,创建一个实体类,如下图所示:

    31269c3c174f943122e9c6d8e1cc93b4.png

    199acdb875535ac1e8d952d5cc42496c.png

    (7)Nuget添加Newtonsoft.Json,引入JSON转换类,便于后续将对象转换成JSON格式字符串进行传输。

    (8)基于xktComm.dll与西门子PLC之间建立连接:

    a029249b307d1ce36856e23a3368e7fa.png

    (9)通过定时器定时向指定的主题发布实时数据:

    9dfe790bac6b57dfdff487e38cedf9ee.png

    (10)在云服务器端开启MQTT服务器:

    4db645f7f8d7b75b1333f59ea26b689b.png

    图表 6 MQTT服务器开启

    (11)运行MQTT客户端,连接服务器,并点击开始定时:

    e432b35fa85af8a574bb7c5076a57f64.png

    图表 7 运行MQTT客户端

    (12)连接成功后,可以观察到MQTT服务器中收到了来自MQTT客户端发来的信息:

    40ff34f51fef14594b9654fea6c01a96.png

    图表 8 MQTT服务器接收消息

    框架应用

    当数据已经上传到MQTT服务器后,那么如果需要获取这些数据,只需要开发一个MQTT,并订阅那个主题,这样,MQTT服务器就会自动将相关的信息推送到客户端软件中,可以先用MQTT.fx测试一下,MQTT.fx是一款基于Eclipse Paho,使用Java语言编写的MQTT客户端工具,支持通过Topic订阅和发布消息。打开MQTT.fx,输入正确的服务器地址、端口号、用户及密码,并订阅主题thinger后,就可以实时收到服务器发送过来的数据了,如下图所示:

    d3614b563bf7de7c96a3a702e401482c.png

    图表 9 MQTT.fx应用

    与此同时,我们也可以通过开发相关的WEB网页或者APP来获取数据,下面是一个简易APP的数据展示:

    b2fd287a0e28ac0c6e890f5592de2f11.png

    图表 10 TIA博途数据

    b1cc8a84f13445b04e57bcbd69c1d685.png

    图表 11 APP数据展示

    整体总结

    本文主要是基于MQTT协议实现了本地PLC控制器数据上传的过程。基于阿里云服务器,你可以在任意地方访问到本地PLC的实时数据,实现数据的远程上传。本文主要针对的是电气和工控人员,物联网必然是未来发展的趋势,建议所有的PLC工程师及电气工程师,都应该掌握一门编程语言,也许现在用不到,但未来总会用得到。

    来源:dotNet工控上位机

    往期推荐斗地主、扫雷、贪吃蛇、潜水艇...盘点那些PLC“不务正业”骚操作[附代码]

    哈工大被禁Matlab,美国用工业软件卡死中国制造?这只是开始...

    西门子WinCC OA的冗余、分布式及混合模式浅析:从软件架构到实例应用

    本田汽车遭工业型勒索软件攻击,致生产系统中断,工业安全任重道远

    一份MES系统整体解决方案

    从零开始基于西门子PLC用C#通过OPC编写一套简易车间能源信息系统(附代码)

    西门子工业软件+Mendix,低代码让普通员工秒变技术员,你会被取代吗?

    当西门子遇上施耐德:S7-1200&1500与M241的Ethernet通讯

    展开全文
  • 现在各大物联网平台层出不穷,看似离我们很遥远,其实只要我们敢于去研究,敢于去发现,万物互联,近在咫尺之间。今天给大家介绍一下,作为一个普通的.NET开发人员,如何不借助第三方的物联网平台,搭建一个简单实用...
    791ca2171bfe90caf13a574db3ed5714.png

    写在前面(文中链接仅在文末的扩展链接有效)

    前面我们分享了:

    [智能制造]未来,我们需要什么样的自动化工程师?

    现在各大物联网平台层出不穷,看似离我们很遥远,其实只要我们敢于去研究,敢于去发现,万物互联,近在咫尺之间。

    8c510749360705ba8c149f17bab7bf9d.png

    今天给大家介绍一下,作为一个普通的.NET开发人员,如何不借助第三方的物联网平台,搭建一个简单实用的物联网平台框架。

    物联网框架

    此物联网框架是在上位机框架的基础上,结合物联网通信协议MQTT实现。上位机本身就集成有采集、归档及日志等功能,只需要在这个基础上,连接MQTT服务器之后,并向指定的主题Topic中发布相关的数据,相关的WEB、APP只需要订阅相应的主题,即可获取到数据。

    整体软件框架如下图示所示:

    93bd6035c3df655381d7eff6a13d3af9.png

    图表 1 整体软件框架实现

    从上图可以看出,整体软件基于MQTT协议搭建,依据此软件框架搭建的MQTT物联网拓扑图如下图所示:

    f467ed02449fd30f968bc2f5347ebe25.png

    图表 2 MQTT物联网平台拓扑图

    框架实现

    为了测试方便,这里选择西门子S7-1200 PLC作为下位机,采用西门子S7进行通信,上位机先与PLC进行通信,同时连接MQTT服务器,并向指定主题发布数据。

    (1)首先创建一个新的Windows窗体应用,从NuGet上下载xktComm.dll:

    0d18a961ce7e1a50c620e554d7bd9239.png

    图表 3 xktComm下载

    (2)开发UI界面开发,按照功能设计如下图所示:

    44259f6edb00b601bbb152630cd756f0.png

    图表 4 MQTT客户端UI界面

    (3)UI界面设计完成之后,进行代码的编写,这里使用开源的mqtt库mqttnet,仍然通过NuGet下载安装一下,这里选择版本为2.8.2,选择不同的版本,使用上会有一些区别:

    fe9869635fa27fbf316c7785c49da79a.png

    图表 5 MQTTnet下载

    (4)先实现基本的MQTT连接服务器及断开连接:

    48cac9077f426c685ee6a5c3d0a16684.png

    (5)基于委托创建日志处理对象及方法体:

    6015a689337971f475f4123a4f656800.png

    (6)确定并创建通信变量实体类及集合:

    实际开发过程中,这里是基于CMSPro实现的,本案例用于测试,以读取以下四个变量为例(实际应用时变量数据及结构可能要比这复杂),如下图所示:

    表格 1通信变量列表

    序号

    变量名称

    变量地址

    变量类型

    1

    出口压力

    DB100.DBD0

    Float

    2

    入口压力

    DB100.DBD4

    Float

    3

    出口温度

    DB100.DBD8

    Float

    4

    入口温度

    DB100.DBD12

    Float

    按照这个结构,创建一个实体类,如下图所示:

    82e1b10cc30c64d742a0b277e80a2a2b.png
    c98e7ebbe25e4ce6a3a3d18c1d7e10cf.png

    (7)Nuget添加Newtonsoft.Json,引入JSON转换类,便于后续将对象转换成JSON格式字符串进行传输。

    (8)基于xktComm.dll与西门子PLC之间建立连接:

    6efa18f31af8cd93ab9dc6c10ad73aff.png

    (9)通过定时器定时向指定的主题发布实时数据:

    070ce7295775e3c89c8683c9fa9c630c.png

    (10)在云服务器端开启MQTT服务器:

    db369c98e391a49bb1923c5dd8b15225.png

    图表 6 MQTT服务器开启

    (11)运行MQTT客户端,连接服务器,并点击开始定时:

    52a4e24aef22862b65af6aed6ceb3c61.png

    图表 7 运行MQTT客户端

    (12)连接成功后,可以观察到MQTT服务器中收到了来自MQTT客户端发来的信息:

    e7cd409452de7e509e3585aca402f5ae.png

    图表 8 MQTT服务器接收消息

    框架应用

    当数据已经上传到MQTT服务器后,那么如果需要获取这些数据,只需要开发一个MQTT,并订阅那个主题,这样,MQTT服务器就会自动将相关的信息推送到客户端软件中,可以先用MQTT.fx测试一下,MQTT.fx是一款基于Eclipse Paho,使用Java语言编写的MQTT客户端工具,支持通过Topic订阅和发布消息。打开MQTT.fx,输入正确的服务器地址、端口号、用户及密码,并订阅主题thinger后,就可以实时收到服务器发送过来的数据了,如下图所示:

    55eab4bd7e45cbf79c88807ef81f7b47.png

    图表 9 MQTT.fx应用

    与此同时,我们也可以通过开发相关的WEB网页或者APP来获取数据,下面是一个简易APP的数据展示:

    b9b2bf04e310be1640f1a561bd07d903.png

    图表 10 TIA博途数据

    077fefc20cbd6db69f20115db91c4953.png

    图表 11 APP数据展示

    整体总结

    本文主要是基于MQTT协议实现了本地PLC控制器数据上传的过程。基于阿里云服务器,你可以在任意地方访问到本地PLC的实时数据,实现数据的远程上传。本文主要针对的是电气和工控人员,物联网必然是未来发展的趋势,建议所有的PLC工程师及电气工程师,都应该掌握一门编程语言,也许现在用不到,但未来总会用得到。

    本文来源:dotNet工控上位机

    往期推荐

    斗地主、扫雷、贪吃蛇、潜水艇...盘点那些PLC“不务正业”骚操作[附代码]

    哈工大被禁Matlab,美国用工业软件卡死中国制造?这只是开始...

    西门子WinCC OA的冗余、分布式及混合模式浅析:从软件架构到实例应用

    本田汽车遭工业型勒索软件攻击,致生产系统中断,工业安全任重道远

    一份MES系统整体解决方案

    从零开始基于西门子PLC用C#通过OPC编写一套简易车间能源信息系统(附代码)

    西门子工业软件+Mendix,低代码让普通员工秒变技术员,你会被取代吗?

    当西门子遇上施耐德:S7-1200&1500与M241的Ethernet通讯

    展开全文
  • 机智学习之旅

    2019-05-20 14:04:01
    机智开源框架(GizOpenSource_AppKit_Android_AS) 是开源的适用于物联网的软件框架,用于无缝的支持设备到设备的互联。 能帮助开发者快速构建物联网生态系统,实现设备间互联,加速智能设备的应用开发。其包含Wi-...
    • androidStudio工具的使用’’

    • 导入开源框架必须知道的知识点

    • 机智云简介:

    机智云开源框架(GizOpenSource_AppKit_Android_AS) 是开源的适用于物联网的软件框架,用于无缝的支持设备到设备的互联。

    能帮助开发者快速构建物联网生态系统,实现设备间互联,加速智能设备的应用开发。其包含Wi-Fi类智能硬件app通用功能的一套源码。

    只要是使用机智云协议的产品,开发者开发配套的app时都可以直接使用该框架的源码实现快速开发,从而缩短app的开发周期短、降低开发成本。
    1.机智云物联网应用程序地址:
    https://github.com/gizwits/GOpenSource_AppKit_Android_AS
    此为Android Studio版本.Eclipse版本下载地址:https://github.com/gizwits/GizOpenSource_AppKit_Android

    未完待续…学python QT去了,抽空再学机智云

    展开全文
  • nginx能做静态和动态的网页。 nginx 并结合 tomcat 反向代理,动静分离,负载均衡 ...CDN厂商:阿里,百度,华为云,京东,只要有平台的公司。 nginx的端口:80 配置文件:nginx.conf ...
  • 1. 停车 (开篇)

    2020-07-01 11:36:41
    停车 (源码篇) 现场示例图 系统架构图 端,网络高清摄像机车牌识别摄像机 1:车牌识别、通讯上云;2:IO控制道闸;3:485 透传(控制LED显示屏); ,即云端运维管理平台 在场记录/出场记录/月...
  • 机智APP开源框架的源码可快速开发配套app(目前提供ios、Andriod版本),不仅无缝的支持设备到设备的互联,还能完成不同类型的消息推送,如:邮件推送、短信推送、百度推送和极光推送。
  • 我们期待围绕这个项目发展一个强大的社区,并在智能互联城市,行业和组织,物联网处理和数据分析领域做一些真正具有挑战性和破坏性的事情。 请加入我们,如果您有任何疑问,请随时与我们联系! 〜智慧城市数据核心...
  • 新空互联简易文章系统下载 掌上湖北整站程序下载 WAP简单网站源码(.NET) WAP小说建站系统 飞库wap-web同步小说系统 杰奇小说系统 企业版(wap+web) 杰奇小说系统域名授权注册机 新飞库电子书连载+wap+采集器 野鹰小说...
  • 亿联网是昆山亿思互联信息科技有限公司旗下的服务产品。该平台是一个能在线快速搭建企业网站,为企业用户提供快捷、易用、适合SEO优化的互联网建站工具。 平台开设了两种运营服务体系:一种是自助服务,适合有网站...
  • 于2017-10-22,又拍 Open Talk 联合 Spring Cloud 中国社区举办的 "进击的微服务实战派上海站",我登台对XXL-JOB做了演讲,现场观众反响热烈并在会后与XXL-JOB用户热烈讨论交流。 于2017-12-11,XXL-JOB有幸参会...
  • 于2017-10-22,又拍 Open Talk 联合 Spring Cloud 中国社区举办的 "进击的微服务实战派上海站",我登台对XXL-JOB做了演讲,现场观众反响热烈并在会后与XXL-JOB用户热烈讨论交流。 于2017-12-11,XXL-JOB有幸参会...
  • ☁ 支持本机、从机、七牛、阿里 OSS、腾讯 COS、又拍、OneDrive (包括世纪互联版) 作为存储端 上传/下载 支持客户端直传,支持下载限速 可对接 Aria2 离线下载 在线 压缩/解压缩、多文件打包下载 覆盖...
  • ☁ 支持本机、从机、七牛、阿里 OSS、腾讯 COS、又拍、OneDrive (包括世纪互联版) 作为存储端 上传/下载 支持客户端直传,支持下载限速 可对接 Aria2 离线下载 在线 压缩/解压缩、多文件打包下载 覆盖...
  • Huawei LiteOS同时提供端协同能力,集成了LwM2M、CoAP、mbedtls、LwIP全套IoT互联协议栈,且在LwM2M的基础上,提供了AgentTiny模块,用户只需关注自身的应用,而不必关注LwM2M实现细节,直接使用AgentTiny封装的...

空空如也

空空如也

1 2 3
收藏数 44
精华内容 17
关键字:

云互联源码