当前位置: 首页 > news >正文

结构体当中的变量scanf输入是否需要取地址_面对万物互联的智能世界,你是否也想分一杯羹...

5afce7cc3e2460319c35ca14cdfaf37d.png

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

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

65b5bc588d350511a495a31a93af6b3b.png

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

1、物联网框架

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

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

869abdf966295e10d7d29a8e80a9c996.png

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

dfb2b36051cb734a3ef4c9558c2067c5.png

2、框架实现

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

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

74a8e6072fa5df6bbd975882e7315cf6.png

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

90cbe6ac7f457e8724ca5b63b15af297.png

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

5b86439153f374e393856a7a8a5afeb9.png

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

9761774b2a8a489ed31749074cf65461.png

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

e9c1540fa816f0ba025b4c53109249bc.png

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

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

序号变量名称变量地址变量类型
1出口压力DB100.DBD0Float
2入口压力DB100.DBD4Float
3出口温度DB100.DBD8Float
4入口温度DB100.DBD12Float

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

1ffd2463f7daba0b4786b1b53632ab9e.png

8263c37931410d421da484c2439810fe.png

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

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

61cedf6be9653ec7c120bcb3fa832890.png

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

07b5ed3cc68515f2a348e67c3384934d.png

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

70eb1e52a963d229f7b33585ca1dcbb6.png

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

eed2a2557f6840d26b58f4ed5c3b1c6e.png

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

9be2b8d4dd639f322a90f0e91243c220.png

3、框架应用

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

ccd50b3302b9931bcd2c09f69f287a3d.png

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

ef7e9cf1f077f00c57dbc4102cb4e664.png

065ad83b43ae18e231e48501c70c7d40.png

4、整体总结

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

相关文章:

  • 安卓listview点击空白事件_王者荣耀安卓系统的角色怎么转移到苹果系统上?
  • 复制opencv的代码出来运行为什么速度差很多?_我只用了二十行代码给(都挺好)剧组全部人脸识别了!...
  • layer.open传参数到子页面_产品要页面72变,x满足她
  • ospf hello时间和dead_HCIP学习 | OSPF魔鬼知识点,你又知道多少呢?
  • python装饰器 稀里糊涂_python--装饰器
  • 正在摧毁协议处理器_Netty2020最新版介绍:代码+方案+响应协议服务+客户
  • centos 忘记root密码_redhat重置密码
  • 直接编辑class文件_JVM循序渐进(一) 浅识class文件
  • 用python和opencv来测量目标到相机的距离_毕业课题项目——基于单目摄像头的距离测量...
  • c语言判断素数_C语言的那些经典程序 第十一期
  • delphi usb通讯 com通讯_你知道电脑上怎么设置“串口号COM”吗?教你一个方法,1分钟学会...
  • c++ format长度限制_2020年C证(安全员)考试总结及C证(安全员)模拟试题
  • post多个参数_2020Python编程高频面试题:Post和get区别?
  • docker rabbitmq_SpringBoot2.x系列教程64--消息队列之RabbitMQ安装及环境变量配置
  • before start of result set_ECMAScript 6 入门教程—Iterator 和 for...of 循环
  • @jsonView过滤属性
  • 【个人向】《HTTP图解》阅后小结
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • Angular数据绑定机制
  • DOM的那些事
  • ECMAScript6(0):ES6简明参考手册
  • go语言学习初探(一)
  • JAVA 学习IO流
  • Netty 4.1 源代码学习:线程模型
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Octave 入门
  • react-native 安卓真机环境搭建
  • SpiderData 2019年2月25日 DApp数据排行榜
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 浮动相关
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 将回调地狱按在地上摩擦的Promise
  • 如何在GitHub上创建个人博客
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 原生 js 实现移动端 Touch 滑动反弹
  • zabbix3.2监控linux磁盘IO
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (13):Silverlight 2 数据与通信之WebRequest
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (k8s中)docker netty OOM问题记录
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (Python) SOAP Web Service (HTTP POST)
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (四)图像的%2线性拉伸
  • (转) 深度模型优化性能 调参
  • (转)LINQ之路
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)人的集合论——移山之道
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .Net 路由处理厉害了