快捷搜索:
来自 计算机编程 2019-12-30 00:59 的文章
当前位置: 67677新澳门手机版 > 计算机编程 > 正文

67677新澳门手机版:物联网框架ServerSuperIO教程

1.C#跨平台物联网通信框架ServerSuperIO(SSIO)介绍

《连载 | 物联网框架ServerSuperIO教程》1.4种简报格局机制。

《连载 | 物联网框架ServerSuperIO教程》2.劳动实例的配备参数表达

《连载 | 物联网框架ServerSuperIO教程》- 3.装置驱动介绍

《连载 | 物联网框架ServerSuperIO教程》-4.如开采风流洒脱套装置驱动,同期协助串口和互联网通讯。

《连载 | 物联网框架ServerSuperIO教程》- 5.轮询通信情势开垦及注意事项。

《连载 | 物联网框架ServerSuperIO教程》- 6.并发通信方式开荒及注意事项

《连载 | 物联网框架ServerSuperIO教程》- 7.约束通信方式开采及注意事项

《连载 | 物联网框架ServerSuperIO教程》- 8.单例通信形式开采及注意事项

《连载 | 物联网框架ServerSuperIO教程》- 9. 共谋过滤器,解决生机勃勃包多发、粘包、冗余数据

《连载 | 物联网框架ServerSuperIO教程》- 10.连发传输大块数据流的三种方式(如:文件)

《连载 | 物联网框架ServerSuperIO教程》- 11.落到实处设备(驱动)与道具(驱动)人机联作和级联调控。


目       录

12.服务接口的支出,以至与云端双向人机联作... 2

12.1        概述... 2

12.2        设备链接器... 2

12.3        服务链接器... 3

12.4        场景假若... 3

12.5        设备驱动开垦及注意事项... 4

12.6        服务实例开荒及注意事项... 4

12.7        宿主程序服务实例配置注意事项... 8

12.8        运维效果... 9

12.劳动接口的开辟,以致与云端双向相互影响     

12.1     概述

     服务接口IService是除道具驱动接口IRunDevice外的非正规应用途景,例如:短信报告急察方、LED输出、模拟量的访谈、OPC服务端/客商端、数据的级联转载、以至其余的异样应用。是根据设备驱动接口IRunDevice的无敌扩大,让框架的效果更增加和有力。

     那篇小说主要介绍数据的转载和垄断(monopoly卡塔尔国服务,其余的劳动支出与此相同。借使依照ServerSuperIO服务接口的开销具备数据转载和调控工夫,那么在物联网建设军长具有数据的最棒级联传递与调控能力,使用大器晚成套框架产生生机勃勃套施工方案。暗中提示图如下:

67677新澳门手机版 1 

12.2     设备链接器

      IRunDevice设备驱动接口继承了劳动的IServiceConnectorDevice接口,设备驱动会完成RunServiceConnector接口函数,代表能够接到或运转来自服务实例传递过来的数量新闻。代码定义如下:

public interface IServiceConnectorDevice
{
        /// <summary>
        /// 支行设备连接器
        /// </summary>
        /// <param name="fromService"></param>
        /// <param name="toDevice"></param>
        /// <returns></returns>
        object RunServiceConnector(IFromService fromService, IServiceToDevice toDevice);
}

12.3     服务链接器

     IService接口继承自IServiceConnector服务链接器,代表服务具备两大效益:1、向设施驱动发送命令或新闻。2、采取设备驱动管理命令或音信的结果。代码如下:

public interface IServiceConnector
    {
        /// <summary>
        /// 设备连接器回调函数,在这里写回调的处理结果
        /// </summary>
        /// <param name="obj"></param>
        void ServiceConnectorCallback(object obj);

        /// <summary>
        /// 如果执行方出现异常,则返回给这个函数结果
        /// </summary>
        /// <param name="ex"></param>
        void ServiceConnectorCallbackError(Exception ex);

        /// <summary>
        /// 连接器事件,发起端
        /// </summary>
        event ServiceConnectorHandler ServiceConnector;

        /// <summary>
        /// 确发事件接口
        /// </summary>
        /// <param name="fromService"></param>
        /// <param name="toDevice"></param>
        void OnServiceConnector(IFromService fromService, IServiceToDevice toDevice);
}

12.4     场景若是

     设备驱动实时搜集传感器的多寡音讯,然后通过OnDeviceObjectChanged事件接口把多少新闻传送给劳务实例UpdateDevice接口函数,然后进行数据的缓存。开启服务线程,连接云端服务并且定期上传传感器的数码新闻。云端服务下发调整指令command:control:1(注:命令调控1号编码设备),然后设备驱动把命令颁发给传感器,最后把结果回到给劳务实例。

12.5     设备驱动开垦及注意事项

1.给劳务实例传递数据音信,通过OnDeviceObjectChanged事件。代码如下:

List<string> list = new List<string>();
list.Add(_devicePara.DeviceCode);
list.Add(_devicePara.DeviceName);
list.Add(_deviceDyn.Dyn.Flow.ToString());
list.Add(_deviceDyn.Dyn.Signal.ToString());
OnDeviceObjectChanged(list.ToArray());

2.接纳服务实例传递的命令和音信。代码如下:

 public override object RunServiceConnector(IFromService fromService, IServiceToDevice toDevice)
        {
            Console.WriteLine(this.DeviceParameter.DeviceName ",接收到云端指令:" toDevice.Text);
            return this.DeviceParameter.DeviceName ",执行完成";
        }

12.6     服务实例开拓及注意事项

     服务实例首要的成效是:缓存数据、连接云端服务并按时发送数据、选择云端命令音讯并传递给配备驱动、采取驱动推行命令新闻的结果。

  1. 缓存数据,代码如下:

    public override void UpdateDevice(string devCode, object obj)

        {
            lock (_SyncObject)
            {
                if (obj != null)
                {
                    if (obj is string[])
                    {
                        string[] arr = (string[])obj;
                        //OnServiceLog(String.Format("服务:{0} 接收到'{1}'的数据>>{2},{3}", ServiceName, arr[1], arr[2], arr[3]));
                        if (arr.Length >= 2)
                        {
                            if (this._Cache.ContainsKey(devCode)) //判断ID
                            {
                                this._Cache[devCode] = arr;
                            }
                            else
                            {
                                this._Cache.Add(devCode, arr);
                            }
                        }
                    }
                }
            }
        }
    

     2.接连云端服务并定时发送数据,代码如下:

private void Target_Service()
        {
            while (_IsRun)
            {
                try
                {
                    if (_tcpClient != null)
                    {
                        lock (_SyncObject)
                        {
                            string content = String.Empty;
                            foreach (KeyValuePair<string, string[]> kv in _Cache)
                            {
                                content  = String.Join(",", kv.Value)   Environment.NewLine;
                            }

                            if (!String.IsNullOrEmpty(content))
                            {
                                byte[] data = System.Text.Encoding.ASCII.GetBytes(content);
                                this.OnSend(data);
                            }
                        }
                    }
                    else
                    {
                        this.ConnectServer();
                    }
                }
                catch (SocketException ex)
                {
                    this.CloseSocket();
                    OnServiceLog(ex.Message);
                }
                catch (Exception ex)
                {
                    OnServiceLog(ex.Message);
                }
                finally
                {
                    System.Threading.Thread.Sleep(2000);
                }
            }
        }

     3.摄取云端命令新闻并传递给器械驱动

private void ReceiveCallback(IAsyncResult ar)
        {
            TcpClient socket = (TcpClient)ar.AsyncState;
            try
            {
                if (socket != null)
                {
                    int read = socket.Client.EndReceive(ar);
                    if (read > 0)
                    {
                        //处理数据.....................通知设备
                        string text = System.Text.Encoding.ASCII.GetString(_Buffer, 0, read);
                        OnServiceConnector(new FromService(this.ServiceName,this.ServiceKey),new ServiceToDevice("1",text,null,null) );
                        OnReceive();
                    }
                    else
                    {
                        this.CloseSocket();
                    }
                }
            }
            catch (SocketException ex)
            {
                this.CloseSocket();
                this.OnServiceLog(ex.Message);
            }
            catch (Exception ex)
            {
                this.OnServiceLog(ex.Message);
            }
        }

      4.接到驱动推行命令音讯的结果

public override void ServiceConnectorCallback(object obj)
        {
            OnServiceLog(obj.ToString());
            OnServiceLog("设备已经处理完成指令");
        }

12.7     宿主程序服务实例配置注意事项

static void Main(string[] args)
        {
            DeviceSelfDriver dev2 = new DeviceSelfDriver();
            dev2.DeviceParameter.DeviceName = "网络设备";
            dev2.DeviceParameter.DeviceAddr = 1;
            dev2.DeviceParameter.DeviceID = "1";
            dev2.DeviceDynamic.DeviceID = "1";
            dev2.DeviceParameter.DeviceCode = "1";
            dev2.DeviceParameter.NET.RemoteIP = "127.0.0.1";
            dev2.DeviceParameter.NET.RemotePort = 9600;
            dev2.CommunicateType = CommunicateType.NET;
            dev2.Initialize("1");

            IServer server = new ServerManager().CreateServer(new ServerConfig()
            {
                ServerName = "服务1",
                ComReadTimeout = 1000,
                ComWriteTimeout = 1000,
                NetReceiveTimeout = 1000,
                NetSendTimeout = 1000,
                ControlMode = ControlMode.Self,
                SocketMode = SocketMode.Tcp,
                StartReceiveDataFliter = true,
                ClearSocketSession = false,
                StartCheckPackageLength = true,
                CheckSameSocketSession = false,
                DeliveryMode = DeliveryMode.DeviceCode,
            });
            server.AddDeviceCompleted  = server_AddDeviceCompleted;
            server.DeleteDeviceCompleted =server_DeleteDeviceCompleted;
            server.Start();

            server.AddDevice(dev2);

            TestService.Service service=new TestService.Service();
            service.IsAutoStart = true;
            server.AddService(service);

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

12.8     运转效果

1.图片

 67677新澳门手机版 2

2.视频


 

1.[连载]《C#简报(串口和网络)框架的思虑与完结》

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

2.行使SuperIO(SIO)和开源跨平台物联网框架ServerSuperIO(SSIO)塑造系统的完全方案

67677新澳门手机版 ,3.C#工业物联网和集成系统建设方案的技艺门路(数据源、数据搜聚、数据上传与选取、ActiveMQ、Mongodb、WebApi、手提式无线电话机App)

5.ServerSuperIO开源地址:

物联网&集成手艺(.NET卡塔尔国 QQ群54256083 

本文由67677新澳门手机版发布于计算机编程,转载请注明出处:67677新澳门手机版:物联网框架ServerSuperIO教程

关键词: