C#工业物联网和集成系统解决方案的技术路线

前言

    2000年以后,互联网在中国的大地上如火如荼的发展,在这个行业竞争中比的是加速度。我清晰的记得《世界是平的》中有这样一段话:在非洲,羚羊每天早上醒来时,它知道自己必须跑得比最快的狮子还快,否则就会被吃掉;狮子每天早上醒来时,它知道自己必须追上跑得最慢的羚羊,否则就会被饿死;不管你是狮子还是羚羊,当太阳升起时,你最好开始奔跑!我们奔跑的这10多年的时间里,互联网技术带动了各行各来的发展,同时也席卷了各行各来。

    2006年时,工业行业还在普遍使用电话线进行数据传输和远程帮助。网络技术慢慢的在向各行各业传导,工业行业也在发展,局域网、光纤以太网、WIFI\3G\4G等已经应用很广泛了。互联网技术在推动制造业发展的同时,也带动了众多公司的与时俱进,升级技术、提供更好的服务。

    我们在思考,后互联网时代将如何发展?将是互联网与各行各业深度融合的过程,例如现在常被提及的物联网,我认为它本质上是工业互联网,是制造技术与互联网技术无缝对接。不管是叫物联网还是工业互联网,未来物与物的交互、物与人的交互将无法避免。硬件与软件的协同发展,更快的推动了这个进程,例如:智能芯片的发展、嵌入式操作系统的发展、智能传感器的发展等。

    大数据、分布式、云计算等也在以惊人的速度发展,有些人可能认为这些东西离我们生活还比较遥远。但是并非是这样的,距离2006年只不过10年左右,现在的发展却是以前你无法想象的,而这种加速度的发展方式,2年的发展可能是你过去10年的发展之和。不管这些技术现在是否能够落地,但是这种趋势是无法改变的。

    数据的流动可以变现,现金的流动可以增加GDP。技术的进步就是生产力的提升,将来组织结构和关系也势必发生变化。不管是否懂技术技术、是否懂管理,思维方式不转变肯定会被淘汰。

    下面对物联网和集成系统的解决方案的技术路线进行介绍,只对技术选型和系统流程,对于架构的演变以及技术哪个更好不做具体说明。只供参考!!!

第一章     系统架构

     架构图这块主要表达一个大概的结构化的意思,可以不太准确,希望大家能够理解。作为一个系统来讲还包括网络部署框架图,根据应用场景和网络环境不一样网络框架图也不一样,所以不在本文的讨论范围内。

1.1    硬件构架图

 

1.2    组件构架图

 

 

第二章     技术选型与介绍

文章不介绍代码部分,在Demo事例中有完整的代码和注释,可以下载调试。

2.1    开发环境

开发语言:全部使用C#,配有少量的JS代码。

开发工具:除App部分,所有组件都采用VS2012开发,App程序采用VS2015开发,VS2015是一个超级开发工具工厂,在Win10操作系统上开发IoT嵌入式程序,也没有问题。

操作系统:Windows 8.1,用习惯了也不错,听说要停止服务了,不过还有人在使用XP呢,不必担心。

2.2    数据源

    数据源也就是产生数据的东西,也有人把这块统称为传感器,但是我认为这个叫法不太准确,所以我一般把这块统称为数据源。

    数据源包括的内容很多,例如:各类传感器、大中小型设备、硬件电路、软件组件等。各类数据源的通讯协议不同、通讯链路不同、通讯机制不同,在没有统一标准的情况下,这部分的工作比重要。因为有了数据之后,你的业务系统才有应用的价值。

    数据源我是写了一个模块的小程序,包括串口通讯和网口通讯。至于通讯协议,请参见《C#通讯(串口和网络)框架的设计与实现(SuperIO)- 12.二次开发及应用》。

2.3    数据采集

     数据采集部分使用的是SuperIO框架,因为它支持串口和网口统一的插件式设备驱动开发,也就是说开发一个驱动可以支持串口和网口通讯。另外,可扩展性比较强,可以大大减小工作量。

     开发了一个驱动程序,在SuperIO平台下增加两个驱动实例,负责与数据源程序进行串口和网络通讯。

2.4    数据上传服务

     数据上传服务是在SuperIO平台下开发的,可以继承IAppService接口开发插件服务,并且挂载到SuperIO平台下运行,设备驱动采集完数据后,可以通过接口传递到服务插件内,通过内存交互数据。如果涉及到数据完全性的数据交互,可以通过介质进行数据交互,例如:数据库、文本文件等。

    数据上传服务直接与消息中间件(ActiveMQ)进行交互,再由AcitveMQ进行消息转发。数据上传服务实际上是消息生产者的角色。

2.5    消息中间件

     消息中间件采用ActiveMQ,需要部署Java运行环境。可用的消息中间件比较多,例如:RabbitMQ、ZeroMQ等。

     根据应用场景不同,可以选择的技术方案和技术路线也不一样。消息中间件这块也完全可以使用通讯组件来代替,例如:Netty和SuperSocket。

2.6    数据接收服务

     数据接收服务是在SuperIO平台下开发的,可以继承IAppService接口开发插件服务,并且挂载到SuperIO平台下运行。

     数据接收服务直接与ActiveMQ进行交互,接收ActiveMQ转发过来的消息,实际上是消息消费者的角色。

2.7    数据存储

    数据存储采用的是MongoDB,不太喜欢大而臃肿的东西,而且不需要ORM了,部署简单,可以使用MongoVUE工具对数据库进行管理。如果是大拿,可以直接cmd。

2.8    数据接口

    数据接口采用Web Api,符合RESTful风格的http协议,操作调用简单、方便。抛弃了WebService的Soap协议,更没有选择WCF框架。

    这块并没有实现权限、安全管理。

2.9    Web业务系统

    业务系统采用MVC框架,但是前端并没有与后台的控制器进行交互,而是与数据接口的WebAPI进行交互。前后端完全分离。

2.10     手机移动终端App

     手机移动端使用VS2015开发,使用Xamarin框架进行开发,这个框架支持跨平台。Xamarin是个很不错的东西,唯一的缺点就是需要付费,对于中国IT人员来讲,这一点应该不是障碍。

第三章     Demo的介绍

3.1    目录介绍

项目目录介绍如下:

ClientService:上传数据与交互组件。

DeviceDemo:设备驱动,负责采集数据。

DeviceExport:数据输出组件,在Demo没有使用。

DeviceShowUI:数据显示视图组件,负责显示采集过来的数据信息。

FormTest:测试各部分的主工程。

ProtocolPackage:公用协议包。

ServerService:数据接收数据与交互组件。

SuperIO_App:移动APP端,需要VS2015打开。

SuperOPCClient:OPC客户端组件。

SuperOPCServer:OPC服务端组件。

TestDevice:模拟客户端测试程序。

WebAPI:WebAPI和Web业务端数据显示。

3.2    Demo调试

 下载地址:http://pan.baidu.com/s/1pJ7lZWf

(1)    下载DEMO和工具

    下载SuperIO v2.2.7\SuperIO_Demo v2.rar;下载mongodb数据库;下载ActiveMQ消息中间件。

(2)    启动服务和程序

     启动mongodb,mongodb-win32-x86_64-2008plus-3.0.3-1\start.bat,默认监听端口为:2222。

     启动ActiveMQ服务,apache-activemq-5.12.0\bin\win64\activemq.bat,需要JAVA运行环境。

     启动SuperIO_Demo.sln解决方案,需要VS2012开发IDE,也可以转成VS2015工程,重新编译。

     启动SuperIO_App.sln解决方案,需要VS2015开发IDE,如果使用VS自带的模拟器,需要执行<adb connect 模拟器的IP>,才能把程序成功部署到模拟器,并且进行调试,否则VS工具一直处于部署阶段。

(3)运行效果图

 

(4)调试视频

    youku视频不是太清楚,请下载高清调试视频,地址:http://pan.baidu.com/s/1pJ7lZWf中的【视频演示】。

原文地址:http://www.cnblogs.com/lsjwq/p/5122612.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329823.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

转:Kafka事务使用和编程示例/实例

Kafka事务使用和编程示例/实例_JobShow裁员加班实况-微信小程序-CSDN博客一、概述​ Kafka事务特性是指一系列的生产者生产消息和消费者提交偏移量的操作在一个事务中&#xff0c;或者说是一个原子操作&#xff0c;生产消息和提交偏移量同时成功或者失败。注意&#xff1a;kafk…

[初级]Java中的switch对整型、字符型、字符串的具体实现细节

转载自 [初级]Java中的switch对整型、字符型、字符串的具体实现细节Java 7中&#xff0c;switch的参数可以是String类型了&#xff0c;这对我们来说是一个很方便的改进。到目前为止switch支持这样几种数据类型&#xff1a;byteshort int char String 。但是&#xff0c;作为一个…

SpringBoot-Cache整合redis

前言 SpringBoot的众多Starter有两个很重要的缓存Starter&#xff0c;其中一个是我们经常用到的Redis&#xff08;spring-boot-starter-data-redis&#xff09;还有一个是 spring-boot-starter-cache。 今天主要是简单介绍一个如何整合这两个组件&#xff0c;达到相互合作的关系…

C#跨平台物联网通讯框架ServerSuperIO(SSIO)

一.SSIO的特点 轻型高性能通信框架&#xff0c;适用于多种应用场&#xff0c;轮询模式、自控模式、并发模式和单例模式。设备驱动、IO通道、控制模式场景协调统一。设备驱动内轩命令驱动器、命令缓存器、自定义参数和实时数据元素。框架平台支持按设备命令优先级别进行调度&…

spring boot 单元测试_spring-boot-plus1.2.0-RELEASE发布-快速打包-极速部署-在线演示

spring-boot-plusspring-boot-plus集成spring boot常用开发组件的后台快速开发脚手架Purpose每个人都可以独立、快速、高效地开发项目&#xff01;Everyone can develop projects independently, quickly and efficiently&#xff01;官网地址&#xff1a;springboot.plusGITHU…

在Java中如何高效的判断数组中是否包含某个元素

转载自 在Java中如何高效的判断数组中是否包含某个元素如何检查一个数组(无序)是否包含一个特定的值&#xff1f;这是一个在Java中经常用到的并且非常有用的操作。同时&#xff0c;这个问题在Stack Overflow中也是一个非常热门的问题。在投票比较高的几个答案中给出了几种不同的…

spring-kafka整合:DefaultKafkaProducerFactory默认kafka生产者工厂介绍

【README】 0&#xff0c;为啥要看 DefaultKafkaProducerFactory&#xff1f; 最近在基于 springboot 开发kafka模块&#xff0c;发现 kafakTemplate构造器传入了 DefaultKafkaProducerFactory实例&#xff0c; kafkaTemplate内部使用了 很多 DefaultKafkaProducerFactory的方…

【SpringSecurity】【JJWT】JJWT踩坑LocalDateTime

前言 最近自己又在开始闲搞&#xff0c;主要原因还是下山无望&#xff08;买显卡&#xff09;。只能晚上下班找点事情做啦~~ 环境 版本请根据实际情况参考JJWT官网选择使用&#xff0c;这里只说明一下问题大概思路&#xff01; <!-- 增加token生成依赖 --> <depen…

针对Linux ASP.NET MVC网站中 httpHandlers配置无效的解决方案

近期有Linux ASP.NET用户反映&#xff0c;在MVC网站的Web.config中添加 httpHandlers 配置用于处理自定义类型&#xff0c;但是在运行中并没有产生预期的效果&#xff0c;服务器返回了404&#xff08;找不到网页&#xff09;错误。经我亲自测试&#xff0c;在WebForm网站中&…

简单介绍Java中Comparable和Comparator

转载自 简单介绍Java中Comparable和ComparatorComparable 和 Comparator是Java核心API提供的两个接口&#xff0c;从它们的名字中&#xff0c;我们大致可以猜到它们用来做对象之间的比较的。但它们到底怎么用&#xff0c;它们之间有又哪些差别呢&#xff1f;下面有两个例子可以…

spring-kafka整合:KafkaTemplate-kafka模板类介绍

【README】 1&#xff0c;本文主要关注 KafkaTemplate的重点方法&#xff0c;并非全部方法&#xff1b; 2&#xff0c;KafkaTemplate 底层依赖于 DefaultKafkaProducerFactory &#xff0c; 关于 DefaultKafkaProducerFactory 的介绍&#xff0c;refer2 spring-kafka整合:…

安卓 on a null object reference_详解Object.prototype.__proto__

Object.prototype 的 __proto__ 属性是一个访问器属性(一个getter函数和一个setter函数), 暴露了通过它访问的对象的内部[[Prototype]] (一个对象或 null)。使用__proto__是有争议的&#xff0c;也不鼓励使用它。因为它从来没有被包括在EcmaScript语言规范中&#xff0c;但是现…

【SpringBoot】服务器JVM远程调试

目的 当系统部署到测试环境服务器时&#xff0c;难免会遇到bug。这个时候如果能远程调试&#xff0c;那么能够大大提高我们的生产效率&#xff0c;快速完成服务调试&#xff0c;最快发布生产环境。&#xff08;领导好评不就到手了&#xff09; 准备 Idea&#xff08;Java最好…

图说:为什么Java中的字符串被定义为不可变的

转载自 图说&#xff1a;为什么Java中的字符串被定义为不可变的字符串&#xff0c;想必大家最熟悉不过了&#xff0c;通常我们在代码中有几种方式可以创建字符串&#xff0c;比如&#xff1a;String s "Hollis";这时&#xff0c;其实会在堆内存中创建一个字符串对象…

值得推荐的微软技术公众号推荐

为开阔技术人眼界&#xff0c;促进技术人职业成长。小二在此诚意推荐最值得关注的微软技术公众号。平时关注推送的文章或多或少要么学到知识技能&#xff0c;要么收到一些启发&#xff0c;有利于个人成长。这些公众号为笔者个人积累&#xff0c;不一定都合大家口味&#xff0c;…

springboot:BeanPostProcessor示例及分析

【README】 1&#xff0c;本文主要分析 BeanPostProcessor 的作用&#xff0c; 开发方式&#xff1b; 2&#xff0c;BeanPostProcessor 是bean后置处理器&#xff0c; 简而言之就是bean被创建好了&#xff0c;之后如果需要对其属性进行修改&#xff0c;则 需要使用 BeanPost…

实现了某一个接口的匿名类的例子_java中的内部类内部接口详解,一文搞定

简介一般来说&#xff0c;我们创建类和接口的时候都是一个类一个文件&#xff0c;一个接口一个文件&#xff0c;但有时候为了方便或者某些特殊的原因&#xff0c;java并不介意在一个文件中写多个类和多个接口&#xff0c;这就有了我们今天要讲的内部类和内部接口。内部类先讲内…

Java 8 日期和时间解读

转载自 Java 8 日期和时间解读现在&#xff0c;一些应用程序仍然在使用java.util.Date和java.util.Calendar API和它们的类库&#xff0c;来使我们在生活中更加轻松的处理日期和时间&#xff0c;比如&#xff1a;JodaTime。然而&#xff0c;Java 8 引进的新的类库来处理日期和时…

云计算产值将超3000亿美元 亚马逊微软谷歌居三甲

腾讯科技讯 3月27日消息&#xff0c;据外电报道&#xff0c;云计算曾经主要是无法承担建造和维护基础设施的初创公司的解决方案&#xff0c;但对于管理数字业务的大型企业而言&#xff0c;云计算正快速成为省钱的管理数字业务的方式。市场调研公司IDC在上月的一份调查数据显示&…

oracle中join另一个表后会查询不出一些数据_面试必备 | 8个Hive数据仓工具面试题锦集!...

是新朋友吗&#xff1f;记得先点蓝字关注我哦&#xff5e;今日课程菜单Java全栈开发 | Web前端H5大数据开发 | 数据分析人工智能Python | 人工智能物联网进入数据时代&#xff0c;大数据技术成为互联网发展的核心要素之一。与此同时大数据开发工程师的薪资也成为行业内高薪的代…