zoukankan      html  css  js  c++  java
  • 【必学技能】自己动手——基于C#实现手机APP远程访问西门子PLC(附源码)

    扫一扫

    关注我们

    对于文中涉及的MQTT服务器及MQTT客户端的源码,大家可以点击上方公众号,关注后发送关键词:MQTT通信源码

    随着5G时代的来临,物联网开始加速盛行,慢慢地融入到我们的生活当中,万物互联互通将不再只是纸上谈兵。

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

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

    一、物联网框架

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

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

    图表 1 整体软件框架实现

     

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

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

     

    二、框架实现

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

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

    图表 3 xktComm下载

     

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

    图表 4 MQTT客户端UI界面

     

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

    图表 5 MQTTnet下载

     

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

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

      

     

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

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

     

    表格 1通信变量列表

     

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

     

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

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

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

     

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

    图表 6 MQTT服务器开启

     

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

    图表 7 运行MQTT客户端

     

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

    图表 8 MQTT服务器接收消息

     

    框架应用

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

    图表 9 MQTT.fx应用

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

    图表 10 TIA博途数据

    图表 11 APP数据展示

     

    整体总结

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

        对于文中涉及的MQTT服务器及MQTT客户端的源码,大家可以点击上方公众号,关注后发送关键词:MQTT通信源码

     

     

     

    WinForm通用自动更新AutoUpdater项目实战

     上位机开发之西门子PLC-S7通信实践

     基于GDI+技术开发工业仪表盘控件

     上位机C#通过OPCUA和西门子PLC通信

     基于S7-PLCSIM Advanced搭建S7通信仿真环境

     基于C#实现本地数据上传至云服务器

     OPCUA+MQTT构建物联网通用框架

     上位机开发之三菱Q系列PLC通信实践

     深度剖析西门子PLC的开放式TCP通信

     上位机开发之单片机通信实践

    欢迎关注抖音

     

     

     

  • 相关阅读:
    C#多态的实现
    C#虚方法
    stm32HAL库中串口部分各个传输和接收函数分析
    ASC字符串取模网址
    STM32F1高级定时器做普通PWM输出配置(例TIM1)
    maven 插件说明
    mac 离线安装yarn
    Tomcat 远程调试
    杀死 tomcat 进程的脚本
    mysql 安装
  • 原文地址:https://www.cnblogs.com/xiketang/p/13156537.html
Copyright © 2011-2022 走看看