zoukankan      html  css  js  c++  java
  • 《连载 | 物联网框架ServerSuperIO教程》2.服务实例的配置参数说明

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

     《连载 | 物联网框架ServerSuperIO教程》1.4种通讯模式机制

    一、综述

         SuperIO(SIO)定位在PC终端(上位机)应用,它只有一个服务实例,配置参数是全局属性。但是,ServerSuperIO(SSIO)与SuperIO(SIO)定位不一样,SSIO定位在服务器端,不管是串口通讯模式,还是网络通讯模式,都支持多服务实例,所以每个服务实例都有自己的配置参数,全部配置参数的定义在ServerConfig.cs文件中。

         如下图示意:

    二、配置参数说明

    #region 全局
            [Category("1.全局"),
             DisplayName("ServerSession"),
             Description("标识服务的唯ID,一般为Guid"),
             DefaultValue(""),
             ReadOnly(true)]
             public string ServerSession { get; set; }
    
            [Category("1.全局"),
            DisplayName("ServerName"),
            Description("标识服务的标题名称"),
            DefaultValue("")]
            public string ServerName { get; set; }
    
            [Category("1.全局"),
            DisplayName("DeliveryMode"),
            Description("接收数据后的分布策略,包括:按设备IP分发(DeviceIP)、按设备编码分发(DeviceCode)"),
            DefaultValue(DeliveryMode.DeviceIP)]
            public DeliveryMode DeliveryMode { get; set; }
    
            [Category("1.全局"),
             DisplayName("ControlMode"),
             Description("调度设备驱动和IO实例的策略,包括:循环模式(Loop)、并发模式(Parallel)、自主模式(Self)和单例模式(Singleton)"),
             DefaultValue(ControlMode.Loop)]
            public ControlMode ControlMode { get; set; }
    
            [Category("1.全局"),
             DisplayName("StartReceiveDataFliter"),
             Description("标识接收数据后是否按协议过滤器的规划过滤数据,不启用则直接返回数据"),
             DefaultValue(false)]
            public bool StartReceiveDataFliter { get; set; }
    
            [Category("1.全局"),
            DisplayName("StartCheckPackageLength"),
            Description("标识是否检测数据长度,如果开启,那么会调用协议驱动的GetPackageLength接口,直到接收返回的数据长度的数据"),
            DefaultValue(false)]
            public bool StartCheckPackageLength { get; set; }
            #endregion
    
            #region 串口
            [Category("2.串口"),
             DisplayName("ComReadBufferSize"),
             Description("设置一次接收数据的字节数组最大值"),
             DefaultValue(1024)]
            public int ComReadBufferSize { get; set; }
    
            [Category("2.串口"),
            DisplayName("ComWriteBufferSize"),
            Description("设置一次发送数据的字节数组最大值"),
            DefaultValue(1024)]
            public int ComWriteBufferSize { get; set; }
    
            [Category("2.串口"),
            DisplayName("ComReadTimeout"),
            Description("设置一次读取数据的超时时间"),
            DefaultValue(1000)]
            public int ComReadTimeout { get; set; }
    
            [Category("2.串口"),
            DisplayName("ComWriteTimeout"),
            Description("设置一次发送数据的超时时间"),
            DefaultValue(1000)]
            public int ComWriteTimeout { get; set; }
    
            [Category("2.串口"),
            DisplayName("ComLoopInterval"),
            Description("轮询模式下,发送和接收数据中间的等待时间,串口通讯不支持其他控制模式"),
            DefaultValue(1000)]
            public int ComLoopInterval { get; set; }
            #endregion
    
            #region 网络
            [Category("3.网络"),
             DisplayName("NetReceiveBufferSize"),
             Description("设置一次接收数据的字节数组最大值"),
             DefaultValue(1024)]
            public int NetReceiveBufferSize { get; set; }
    
            [Category("3.网络"),
            DisplayName("NetSendBufferSize"),
            Description("设置一次发送数据的字节数组最大值"),
            DefaultValue(1024)]
            public int NetSendBufferSize { get; set; }
    
            [Category("3.网络"),
            DisplayName("NetReceiveTimeout"),
            Description("设置一次读取数据的超时时间"),
            DefaultValue(1000)]
            public int NetReceiveTimeout { get; set; }
    
            [Category("3.网络"),
             DisplayName("NetSendTimeout"),
             Description("设置一次发送数据的超时时间"),
             DefaultValue(1000)]
            public int NetSendTimeout { get; set; }
    
            [Category("3.网络"),
            DisplayName("NetLoopInterval"),
            Description("轮询模式下,发送和接收数据中间的等待时间"),
            DefaultValue(1000)]
            public int NetLoopInterval { get; set; }
    
            [Category("3.网络"),
            DisplayName("MaxConnects"),
            Description("允许客户端最大的连接数,超取最大值,自动关闭远程连接"),
            DefaultValue(1000)]
            public int MaxConnects { get; set; }
    
            [Category("3.网络"),
            DisplayName("KeepAlive"),
            Description("检测死连接、半连接的一种机制"),
            DefaultValue(5000)]
            public uint KeepAlive { get; set; }
    
            [Category("3.网络"),
            DisplayName("ListenPort"),
            Description("侦听接收数据的端口"),
            DefaultValue(6699)]
            public int ListenPort { get; set; }
    
            [Category("3.网络"),
            DisplayName("BackLog"),
            Description("定队列中最多可容纳的等待接受的传入连接数"),
            DefaultValue(1000)]
            public int BackLog { get; set; }
    
            [Category("3.网络"),
            DisplayName("CheckSameSocketSession"),
            Description("对一个固定的设备,只允许有一个有效连接,重复IP多次连接,将断开之前的连接"),
            DefaultValue(true)]
            public bool CheckSameSocketSession { get; set; }
    
            [Category("3.网络"),
            DisplayName("SocketMode"),
            Description("标识设备是TcpServer、TcpClient模式,如果标识TcpClient模式,会主动连接远程IP和端口"),
            DefaultValue(SocketMode.Tcp)]
            public SocketMode SocketMode { get; set; }
    
    
            [Category("3.网络"),
            DisplayName("ClearSocketSession"),
            Description("标识是否清理连接,如果一个连接在一定时间范围内没有接收到数据,将主动断开连接"),
            DefaultValue(false)]
            public bool ClearSocketSession { get; set; }
    
            [Category("3.网络"),
            DisplayName("ClearSocketSessionInterval"),
            Description("如果标识清理连接,那么在此标识清理连接间隔时间"),
            DefaultValue(10)]
            public int ClearSocketSessionInterval { get; set; }
    
            [Category("3.网络"),
            DisplayName("ClearSocketSessionTimeOut"),
            Description("如果标识清理连接,那么在此标识多长时间没有接收到数据进行清理"),
            DefaultValue(30)]
            public int ClearSocketSessionTimeOut { get; set; }
            #endregion
    

      三、常用配置参数说明

           常用的配置参数包括:通讯参数类、控制参数类、以及一些高级的应用参数。如下代码

    IServer server = new ServerFactory().CreateServer(new ServerConfig()
                {
                    ServerName = "服务1",   //服务实例的名称
                    ComReadTimeout = 1000, //串口读数据超时
                    ComWriteTimeout = 1000, //串口发送数据超时
                    NetReceiveTimeout = 1000, //网络接收数据超时
                    NetSendTimeout = 1000,//网络发送数据超时
                    ControlMode = ControlMode.Parallel,//控制模式
                    SocketMode = SocketMode.Tcp, //网络通讯是TCP模式还是UDP模式
                    StartReceiveDataFliter = false,//是否开启接收数据过滤器,后面重要介绍
                    ClearSocketSession = false,//是否检测网络实例的有效性,后面重要介绍
                    StartCheckPackageLength = false //是否检测包长度,后面重要介绍
                });
    

           ControlMode参数是SSIO结合现实应用场景的控制模式,主要用于调用设备的发送和接收数据的调度方式。请参见:《连载 | 物联网框架ServerSuperIO教程》1.4种通讯模式机制。

    四、配置工具

          二次开发者,可以通过ServerSuperIO.Tool项目来配置服务实例、设备驱动和服务实例的参数。如下图:

    注:下篇文章介绍设备驱动

  • 相关阅读:
    运行jar包读取外部配置文件
    DES加密
    BlockingQueue
    文件锁
    Hive 的 排序
    linux下date命令实现时间戳与日期的转换
    bcov进行覆盖率统计
    对c++服务端进行覆盖率统计
    github基础命令
    gcc编译参数-fPIC问题 `a local symbol' can not be used when making a shared object;
  • 原文地址:https://www.cnblogs.com/lsjwq/p/5936715.html
Copyright © 2011-2022 走看看