xml地图|网站地图|网站标签 [设为首页] [加入收藏]

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

2.7    数据存款和储蓄

    数据存款和储蓄接收的是MongoDB,不太喜欢大而重叠的事物,何况无需ORM了,布署轻便,能够接收MongoVUE工具对数据库实行保管。如若是大牛,能够一贯cmd。

开源跨平台IOT通信框架ServerSuperIO,集成到NuGet程序包微电脑,以致德姆o使用验证,iotnuget

      物联网涉及到种种设备、各类传感器、各样数据源、各类协商,並且很难统后生可畏,那么将在有二个结构性的框架解决这些难题。SSIO正是依据时期提高的等第和实际实际景况的重新整合成品。

      种种数据消息,如下图:

**          技术方案,同盟SIO使用:**

一、SSIO特点

  • 轻型高质量通讯框架,适用于多样应用项,轮询形式、自作者调控格局、并发情势和单例方式。
  • 不止是通信框架,是设备驱动、IO通道、调节格局场景的和谐机制。
  • 扶持左券驱动器,能够按规范写规范左券和自定义左券。
  • 协助发送数据缓存器,辅助命令缓存重发和按事先等第发送。
  • 支撑合同过滤器,按准绳筛选数据,而且能够承当接口,自定义过滤情势。
  • 帮衬选取数据缓存器,能够缓存不切合过滤器的多寡,和下一次接受数据实行拼接。
  • 支持按设备命令优先等第实行调整设施,保证有高端别命令的驱动及时发送。
  • 支撑三个器具驱动,同不经常常间协助串口和互联网二种简报格局,能够监视IO通道数据。
  • 扶助两个器材驱动,在网络通信时方可支撑TCP Server和TCP Client三种职业情势。
  • 帮助多配备分享同大器晚成IO通道实行广播发表。
  • 支撑准时清理超时的网络IO通道。
  • 扶植显得视图接口,满足差异突显要求。
  • 帮忙服务组件接口,能够自定义完毕OPC服务、4-20mA输出、LED大屏呈现、短信服务、以致多效果与利益网关服务。
  •  扶助创立多服务实例,完结区别工作的拆分。
  •  帮助跨平台铺排,能够运营在Linux和Windows系统。
二、SSIO发布到NuGet平台

图片 1

三、搜索SSIO

图片 2

四、安装SSIO

图片 3

五、事例代码(Demo)

    德姆o下载地址:

1.客商端(发送文书卡塔尔

 

        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的多寡新闻,稳固性、增加性都十三分正确。

图片 4

 

 

1.[连载]《C#报道(串口和网络卡塔 尔(阿拉伯语:قطر‎框架的规划与贯彻》

2.[开源]C#跨平台物联网通信框架ServerSuperIO(SSIO卡塔 尔(英语:State of Qatar)介绍

2.用到SuperIO(SIO卡塔 尔(阿拉伯语:قطر‎和开源跨平台物联网框架ServerSuperIO(SSIO卡塔尔国构建系统的完好方案

3.C#工业物联网和集成系统建设方案的才具路径(数据源、数据收罗、数据上传与选拔、ActiveMQ、Mongodb、WebApi、手提式有线话机App卡塔 尔(阿拉伯语:قطر‎

5.ServerSuperIO开源地址:

物联网&集成手艺(.NET) QQ群54256083

物联网涉及到 各个设施、种种传感器、各类数据源...

1.2           组件构架图... 4

2.4           数据上传服务... 6

2.7           数据存款和储蓄... 6

2.4    数据上传服务

     数据上传服务是在SuperIO平台下支付的,可以持续IAppService接口开垦插件服务,何况挂载到SuperIO平台下运作,设备驱动收罗完数据后,能够透过接口传递到服务插件内,通过内部存款和储蓄器人机联作数据。如若涉及到数量完全性的数量交互作用,能够经过媒介物实行多少人机联作,譬喻:数据库、文本文件等。

    数据上传服务一贯与音讯中间件(ActiveMQ卡塔尔国实行相互作用,再由AcitveMQ进行消息转载。数据上传服务实际是音信临盆者的剧中人物。

目       录

1.1    硬件构架图

 图片 5

3.2           Demo调试... 8

第二章     技艺选型与介绍

小说不介绍代码部分,在德姆o事例中有完全的代码和注释,能够下载调节和测量试验。

率先章     系统框架结构

     架构图那块首要表明三个大概的结构化的意趣,可以不太正确,希望大家能够精晓。作为三个体系来说还饱含互连网布局框架图,依据使用途景和互连网意况不平等互联网框架图也不均等,所以不在本文的钻探范围内。

2.8           数据接口... 7

2.1           开辟意况... 5

工业物联网和集成系统应用方案的技艺路径... 1

1.1           硬件构架图... 3

2.3           数据搜罗... 5

    数据的流淌能够展现,现金的流动能够扩展GDP。才干的升华正是分娩力的进级,以往协会结商谈涉及也明确发生变化。不管是不是懂才具技巧、是或不是懂管理,思维方法不转移断定会被淘汰。

2.3    数据收集

     数据采撷部分选取的是SuperIO框架,因为它援救串口和网口统生龙活虎的插件式设备驱动开垦,也正是说开辟三个使得能够援救串口和网口通信。其余,可扩大性相比较强,能够大大减小工作量。

     开垦了叁个驱动程序,在SuperIO平台下扩充多少个驱动实例,担任与数据源程序开展串口和互联网通信。

第二章           才能选型与介绍... 5

2.1    开发条件

开采语言:全体使用C#,配有微量的JS代码。

开拓工具:除App部分,全体组件都应用VS二零一三支出,App程序行使VS二〇一五付出,VS2014是三个最好开垦工具工厂,在Win10操作系统上开采IoT嵌入式程序,也还平常。

操作系统:Windows 8.1,用习贯了也不利,听别人说要停止服务了,但是还应该有人在动用XP呢,不必忧虑。

2.9    Web业务类别

    业务种类接收MVC框架,可是前端并从未与后台的调控器进行相互,而是与数量接口的WebAPI进行人机联作。前后端完全分开。

    下直面物联网和集成系统的施工方案的手艺路径开展介绍,只对技能选型和系统流程,对于架构的嬗变以至本领哪个越来越好不做具体表达。只供参谋!!!

2.5           音讯中间件... 6

第三章           Demo的介绍... 8

    2002年从此以后,网络在神州的天下上海高校肆的升高,在这里个行当角逐中比的是加快度。笔者显然的回忆《世界是平的》中有那般意气风发段话:在北美洲,羚羊每一天上午醒来时,它知道本身必得跑得比最快的非洲狮还快,不然就能够被吃掉;白狮每日深夜醒来时,它知道自个儿必得追上跑得最慢的剑羚,不然就能被饿死;不管您是狮子依然羚羊,当阳光升起时,你最棒起来奔跑!大家奔跑的那10多年的时间里,互连网手艺带给了各行各来的上进,同期也席卷了各行各来。

3.1           目录介绍... 8

2.5    音信中间件

     音信中间件接纳ActiveMQ,必要布署Java运维境况。可用的音信中间件比比较多,比方:RabbitMQ、ZeroMQ等。

     遵照使用项景差别,能够采取的施工方案和技能路子也不雷同。新闻中间件那块也全然能够应用通讯组件来取代,比方:Netty和SuperSocket。

    大数目、分布式、云总计等也在以惊人的速度进步,某一个人只怕认为这么些东西离大家生活还比较遥远。不过毫无是这么的,间距二零零五年只不过10年左右,以往的演化却是从前您不大概想像的,而这种加快度的腾飞方式,2年的升华可能是你过去10年的迈入之和。不管那么些技术今后是不是可以一败涂地,不过这种动向是无助改观的。

2.9           Web业务系统... 7

3.1    目录介绍

花色目录介绍如下:

ClientService:上传数据与相互影响组件。

Device德姆o:设备驱动,肩负征集数据。

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

DeviceShowUI:数据体现视图组件,担当显示收罗过来的数额消息。

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

ProtocolPackage:公用合同包。

ServerService:数据采取数据与互为组件。

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

SuperOPCClient:OPC顾客端组件。

SuperOPCServer:OPC服务端组件。

TestDevice:模拟客商端测量试验程序。

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

2.2    数据源

    数据源也等于发出多少的事物,也可能有人把那块统称为传感器,不过本人认为那几个叫法不太标准,所以小编平常把那块统称为数据源。

    数据源包涵的从头到尾的经过相当多,比如:各个传感器、大中型Mini型设备、硬件电路、软件组件等。种种数据源的电视发表公约分化、通信链路不一样、通讯机制分歧,在并未统后生可畏标准的情状下,那有的的劳作比首要。因为有了数量之后,你的事务体系才有使用的价值。

    数据源作者是写了一个模块的小程序,包含串口通信和网口通信。至于广播发表合同,请参见《C#通信(串口和网络卡塔 尔(英语:State of Qatar)框架的安顿与得以完结(SuperIO卡塔 尔(阿拉伯语:قطر‎- 12.二回开采及利用》。

2.2           数据源... 5

 

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

    2005年时,工业行业还在大范围使用电话线实行数量传输和长途扶植。互联网技能日趋的在向三百六十行传导,工业行当也在腾飞,局域网、光导纤维以太网、WIFI3G4G等曾经应用很广阔了。网络技巧在推动创制业发展的同时,也拉动了众多商行的与时俱进,晋级本领、提供越来越好的服务。

先是章           系统架构... 3

2.8    数据接口

    数据接口选取Web Api,适合RESTful风格的http左券,操作调用简单、方便。抛弃了WebService的Soap公约,更从未选取WCF框架。

    那块并未达成权力、安全管理。

2.10     手提式有线电话机活动终端App

     手提式有线电话机移动端应用VS二〇一四付出,使用Xamarin框架进行支付,那么些框架扶植跨平台。Xamarin是个很准确的事物,唯生机勃勃的缺点就是急需付费,对于中夏族民共和国IT职员来说,那一点相应不是阻碍。

2.6           数据选用服务... 6

    我们在思忖,后互连网时期将怎么样提升?将是互连网与五行深度融入的历程,举例以往常被谈起的物联网,笔者以为它实质上是工业网络,是创立才干与网络手艺无缝对接。不管是叫物联网仍然工业网络,未来物与物的竞相、物与人的并行将不可能制止。硬件与软件的联合签名发展,越来越快的推进了那些历程,比方:智能微电路的开辟进取、嵌入式操作系统的进步、智能传感器的提上升等第。

第三章     Demo的介绍

前言

前言... 1

1.2    组件构架图

 图片 6

 

2.6    数据采纳服务

     数据接纳服务是在SuperIO平台下支付的,能够一而再连续IAppService接口开拓插件服务,並且挂载到SuperIO平台下运作。

     数据接纳服务一贯与ActiveMQ举办交互作用,选取ActiveMQ转载过来的音信,实际上是消息花费者的剧中人物。

3.2    Demo调试

 下载地址:

(1)    下载DEMO和工具

    下载SuperIO v2.2.7SuperIO_德姆o v2.rar;下载mongodb数据库;下载ActiveMQ音信中间件。

(2卡塔尔    运维服务和顺序

     启动mongodb,mongodb-win32-x86_64-2008plus-3.0.3-1start.bat,暗中同意监听端口为:2222。

     启动ActiveMQ服务,apache-activemq-5.12.0binwin64activemq.bat,必要JAVA运转条件。

     启动SuperIO_德姆o.sln解决方案,需求VS2011支出IDE,也得以转成VS二〇一四工程,重新编写翻译。

     启动SuperIO_App.sln应用方案,须求VS贰零壹伍支付IDE,假若应用VS自带的模拟器,须求实施<adb connect 模拟器的IP>,才能把程序成功陈设到模拟器,而且实行调度,不然VS工具一贯处于计划阶段。

(3卡塔 尔(英语:State of Qatar)运转效果图

 图片 7

(4卡塔尔国调节和测量试验摄像

    youku录制不是太通晓,请下载高清调节和测量检验录像,地址:中的【录像演示】。

 

 

笔者:唯笑志在

Email:504547114@qq.com

QQ:504547114

.NET开辟才能联盟:54256083

文书档案下载:

官网:http://www.bmpj.net

本文由奥门金沙睹场www462net发布于驾考,转载请注明出处:C#工业物联网和集成系统解决方案的技术路线(数

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。