各样数据新闻,第一章           系统架构… 3

目       录

开源跨平台IOT通信框架ServerSuperIO,集成到NuGet程序包管理器,以及德姆o使用表达,iotnuget

     
物联网涉及到各样器械、各类传感器、种种数据源、各个协商,並且很难统一,那么将要有八个结构性的框架消除这个主题材料。SSIO就是依靠有时发展的级差和现实实际情状的三结合产物。

      各类数码消息,如下图:

**          化解方案,同盟SIO使用:**

一、SSIO特点

  • 轻型高质量通讯框架,适用于各类应用场,轮询情势、自控形式、并发形式和单例形式。
  • 不仅仅是通信框架,是道具驱动、IO通道、调控情势场景的调理机制。
  • 支撑协议驱动器,能够按规范写标准协商谈自定义磋商。
  • 援救发送数据缓存器,帮忙命令缓存重发和按优先品级发送。
  • 支撑协议过滤器,按法则筛选数据,而且能够承受接口,自定义过滤方式。
  • 帮助接收数据缓存器,能够缓存不合乎过滤器的多少,和下一次接收数据举办拼接。
  • 补助按设备命令优先等第进行调解设施,保障有高档别命令的驱动及时发送。
  • 支撑叁个器具驱动,同期支持串口和互连网二种简报格局,能够监视IO通道数据。
  • 支撑三个配备驱动,在网络通讯时能够帮助TCP Server和TCP
    Client三种专门的学问形式。
  • 支撑多配备共享同一IO通道举办报导。
  • 帮助定期清理超时的网络IO通道。
  • 支撑显得视图接口,满足差别展现供给。
  • 扶助服务组件接口,可以自定义完结OPC服务、4-20mA输出、LED大屏显示、短信服务、以及多职能网关服务。
  •  援助创制多服务实例,完结不一样职业的拆分。
  •  匡助跨平台安排,能够运作在Linux和Windows系统。

二、SSIO发布到NuGet平台

365体育官网 1

三、搜索SSIO

365体育官网 2

四、安装SSIO

365体育官网 3

五、事例代码(Demo)

    Demo下载地址:https://github.com/wxzz/ServerSuperIO/tree/2.0

1.客户端(发送文书)

365体育官网, 

        static void SendFile()
        {
            if (!System.IO.File.Exists(_file))
            {
                Console.WriteLine("文件不存在:"+_file);
                return;
            }

            FileStream fs = null;
            try
            {
                Console.WriteLine("开始传输>>");

                string fileName=DateTime.Now.ToString("yyMMddHHmmss") + ".txt";
                int bufferSize = _sendBufferSize;
                byte[] sendBuffer = new byte[bufferSize];
                fs = new FileStream(_file, FileMode.Open,FileAccess.Read,FileShare.Read);

                long length = fs.Length;
                int count = 0;
                Stopwatch watch = new Stopwatch();
                watch.Start();
                while (length > 0)
                {
                    int sendNum = fs.Read(sendBuffer, 0, sendBuffer.Length);

                    byte[] package = GetDataPackage(fileName,sendBuffer, sendNum);

                    count+=_tcpClient.Client.Send(package, 0, package.Length, SocketFlags.None);

                    length -= sendNum;

                    float percent = ((fs.Length - length)/(float) fs.Length)*100.0f;
                    Console.WriteLine("已传:" + percent.ToString("0.00")  + "%");
                }
                watch.Stop();

                Console.WriteLine("传输完毕!总数:" + count.ToString()+",耗时:"+ watch.Elapsed.TotalSeconds.ToString(CultureInfo.InvariantCulture));
            }
            catch
            {
                throw;
            }
            finally
            {
                if (fs != null)
                {
                    fs.Close();
                    fs.Dispose();
                }
            }
        }

        static byte[] GetDataPackage(string fileName,byte[] sendBuffer, int sendNum)
        {
            byte[] sendPackage = new byte[sendNum + 24];
            sendPackage[0] = 0x35;
            sendPackage[1] = 0x35;

            string code = "0001";
            byte[] codeBytes = System.Text.Encoding.ASCII.GetBytes(code);
            Buffer.BlockCopy(codeBytes, 0, sendPackage, 2, 4);

            byte[] fileBytes= System.Text.Encoding.ASCII.GetBytes(fileName);
            Buffer.BlockCopy(fileBytes, 0, sendPackage, 6, 16);

            Buffer.BlockCopy(sendBuffer, 0, sendPackage, 22, sendNum);

            sendPackage[sendPackage.Length - 2] = 0x33;
            sendPackage[sendPackage.Length - 1] = 0x33;

            return sendPackage;
        }

 

 2.设备驱动

//设备驱动
 public class ReceiveFileDriver:RunDevice
    {
        private Dynamic _Dyn;
        private Parameter _Parameter;
        private Protocol _Protocol;
        public ReceiveFileDriver() : base()
        {
            _Dyn = new Dynamic();
            _Parameter = new Parameter();
            _Protocol = new Protocol();
        }

        public override void Initialize(int devid)
        {
            this.Protocol.InitDriver(this, new FixedHeadAndEndReceiveFliter(TransFileDriver.Protocol.Head, TransFileDriver.Protocol.End));    //初始化协议驱动
        }

        //省略......
}

//协议驱动,并处理数据
public class Command : ProtocolCommand
{
        public Command()
        {
        }
        public override string Name
        {
            get { return "writefile"; }
        }
        public override object Analysis(byte[] data, object obj)
        {
            try
            {
               //count += data.Length - 24;
               //Console.WriteLine(count.ToString()+","+data[0].ToString() + "," + data[data.Length - 1].ToString());

                string path = Path.Combine(Environment.CurrentDirectory, "rev");
                if (!System.IO.Directory.Exists(path))
                {
                    System.IO.Directory.CreateDirectory(path);
                }
                string fileName = System.Text.Encoding.ASCII.GetString(data, 6, 16);
                path=Path.Combine(path, fileName);
                using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Write))
                {
                    fs.Seek(fs.Length, SeekOrigin.Current);
                    byte[] content = new byte[data.Length - 24];
                    Buffer.BlockCopy(data, 22, content, 0, content.Length);
                    fs.Write(content, 0, content.Length);
                    fs.Flush();
                }

            }
            catch
            {
                return -1;
            }
            return 0;
        }

        public override byte[] Package(string code, object obj)
        {
            throw new NotImplementedException();
        }
    }

 3.宿主程序

 static void Main(string[] args)
{

            ReceiveFileDriver dev = new ReceiveFileDriver();
            dev.DeviceParameter.DeviceName = "设备4";
            dev.DeviceParameter.DeviceAddr = 0;
            dev.DeviceParameter.DeviceCode = "0001";
            dev.DeviceParameter.DeviceID = 0;
            dev.DeviceDynamic.DeviceID = 0;
            dev.DeviceParameter.NET.RemoteIP = "127.0.0.1";
            dev.DeviceParameter.NET.RemotePort = 9600;
            dev.CommunicateType = CommunicateType.NET;
            dev.Initialize(0);

            IServer server = new ServerFactory().CreateServer(new ServerConfig()
            {
                ServerName = "接收文件服务",
                ListenPort = 6699,
                NetReceiveBufferSize = 2048,
                ControlMode = ControlMode.Self,
                SocketMode = SocketMode.Tcp,
                DeliveryMode = DeliveryMode.DeviceCode,
                StartReceiveDataFliter = true,
                ClearSocketSession = false,
            });

            server.AddDeviceCompleted += server_AddDeviceCompleted;
            server.DeleteDeviceCompleted += server_DeleteDeviceCompleted;
            server.Start();

            server.AddDevice(dev);

            while ("exit" == Console.ReadLine())
            {
                server.Stop();
            }
}

 六、实验效果

 

      二日的岁月,将近3GB的数量消息,稳固性、扩充性都优秀不错。

365体育官网 4

 

 

1.[连载]《C#通信(串口和互联网)框架的设计与完成》

2.[开源]C#跨平台物联网通信框架ServerSuperIO(SSIO)介绍

2.用到SuperIO(SIO)和开源跨平台物联网框架ServerSuperIO(SSIO)创设系统的总体方案

3.C#工业物联网和集成系统化解方案的技艺门路(数据源、数据采摘、数据上传与接收、ActiveMQ、Mongodb、WebApi、手提式有线电话机App)

5.ServerSuperIO开源地址:https://github.com/wxzz/ServerSuperIO

物联网&集成技术(.NET) QQ群54256083

http://www.bkjia.com/C\_jc/1151255.htmlwww.bkjia.comtruehttp://www.bkjia.com/C\_jc/1151255.htmlTechArticle开源跨平台IOT通讯框架ServerSuperIO,集成到NuGet程序包管理器,以及Demo使用说明,iotnuget
物联网涉及到 各样道具、各类传感器、种种数码源…

工业物联网和集成系统消除方案的手艺路径… 1

前言… 1

第一章           系统架构… 3

1.1           硬件构架图… 3

1.2           组件构架图… 4

其次章           本事选型与介绍… 5

2.1           开荒意况… 5

2.2           数据源… 5

2.3           数据搜罗… 5

2.4           数据上传服务… 6

2.5           消息中间件… 6

2.6           数据接受服务… 6

2.7           数据存款和储蓄… 6

2.8           数据接口… 7

2.9           Web业务系统… 7

2.10        手提式无线电电话机移动终端App. 7

第三章           Demo的介绍… 8

3.1           目录介绍… 8

3.2           Demo调试… 8

 

前言

   
三千年以往,网络在中华的五洲上任意的前进,在这一个行业竞争中比的是加速度。作者清楚的记得《世界是平的》中有那般一段话:在南美洲,羚羊天天上午醒来时,它通晓本人必须跑得比最快的亚洲狮还快,不然就能被吃掉;非洲狮每日早晨醒来时,它驾驭本身必须追上跑得最慢的剑羚,不然就能够被饿死;不管你是白狮仍然羚羊,当太阳升起时,你最佳起来奔跑!大家奔跑的这10多年的岁月里,网络手艺带来了各行各来的向上,同期也包罗了各行各来。

   
二零零七年时,工业行业还在大范围选用电话线实行数量传输和长途支持。网络手艺慢慢的在向各行各业传导,工业行业也在迈入,局域网、光导纤维以太网、WIFI\3G\4G等业已运用很遍布了。互连网才能在力促创建业发展的同一时候,也推动了重重商场的与时俱进,进级本事、提供越来越好的劳务。

   
我们在观念,后互联网时期将怎么样进步?将是网络与五行深度融合的进程,举例今后常被聊起的物联网,小编以为它实质上是工业网络,是制作才具与网络才能无缝过渡。不管是叫物联网依然工业互连网,未来物与物的互动、物与人的互动将没办法防止。硬件与软件的一块发展,更加快的递进了那一个历程,比方:智能芯片的上扬、嵌入式操作系统的上扬、智能传感器的开荒进取等。

   
大数据、遍布式、云总计等也在以惊人的快慢前进,某个人恐怕认为这一个东西离我们生活还相比较持久。不过不假若那般的,距离二〇〇五年只不过10年左右,今后的开辟进取却是在此之前您不可能想像的,而这种加快度的进步办法,2年的上进可能是你过去10年的上进之和。不管那么些手艺往后是还是不是能够落地,可是这种趋势是无法改变的。

   
数据的流淌可以表现,现金的流动能够扩大GDP。手艺的开垦进取便是生产力的晋级换代,现在团队结商谈涉及也一定发生变化。不管是不是懂本事工夫、是不是懂管理,思维方法不转换料定会被淘汰。

   
下面对物联网和集成系统的化解方案的技术路径开始展览介绍,只对才能选型和系统流程,对于架构的嬗变以及技术哪个越来越好不做具体表明。只供参照他事他说加以考察!!!

率先章     系统架构

    
架构图那块首要表明一个大致的结构化的情趣,能够不太可相信,希望大家能够知道。作为二个系统来说还满含网络布局框架图,依据使用场景和网络遭逢不平等互连网框架图也不平等,所以不在本文的座谈范围内。

1.1    硬件构架图

 365体育官网 5

1.2    组件构架图

 365体育官网 6

 

其次章     手艺选型与介绍

作品不介绍代码部分,在德姆o事例中有全部的代码和注释,可以下载调节和测量检验。

2.1    开采意况

支付语言:全体使用C#,配有一些些的JS代码。

开垦工具:除App部分,全数组件都施用VS二零一一开销,App程序选择VS二零一四费用,VS二零一六是三个特级开拓工具工厂,在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平台下支付的,能够三番五次IApp瑟维斯接口开荒插件服务,而且挂载到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

    
手提式有线电话机移动端选拔VS二零一五开辟,使用Xamarin框架实行支付,那个框架帮忙跨平台。Xamarin是个很正确的东西,独一的毛病正是亟需付费,对于中华夏族民共和国IT人员来说,这点应有不是障碍。

第三章     Demo的介绍

3.1    目录介绍

体系目录介绍如下:

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

Device德姆o:设备驱动,担负募集数据。

DeviceExport:数据输出组件,在德姆o未有使用。

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_德姆o
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_德姆o.sln化解方案,供给VS二〇一一花费IDE,也足以转成VS二零一四工程,重新编写翻译。

    
启动SuperIO_App.sln消除方案,须求VS二〇一四费用IDE,假诺采纳VS自带的模拟器,需求奉行<adb
connect
模拟器的IP>,才具把程序成功安顿到模拟器,並且开始展览调治,不然VS工具平素处于铺排阶段。

(3)运营效果图

 365体育官网 7

(4)调节和测验录制

   
youku摄像不是太理解,请下载高清调试录制,地址:http://pan.baidu.com/s/1pJ7lZWf中的【摄像演示】。

 

 

笔者:唯笑志在

Email:504547114@qq.com

QQ:504547114

.NET开拓技艺结盟:54256083

文书档案下载:http://pan.baidu.com/s/1pJ7lZWf

法定网站:http://www.bmpj.net

相关文章