码迷,mamicode.com
首页 > 其他好文 > 详细

《连载 | 物联网框架ServerSuperIO教程》2.服务实例的配置参数说明

时间:2016-11-22 23:46:21      阅读:364      评论:0      收藏:0      [点我收藏+]

标签:comment   self   end   space   class   category   介绍   connect   add   

感谢唯笑志在分享
原博主原地址:
http://www.cnblogs.com/lsjwq/

一、综述

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

     如下图示意:

技术分享

二、配置参数说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#region 全局
        [Category("1.全局"),
         DisplayName("ServerSession"),
         Description("标识服务的唯ID,一般为Guid"),
         DefaultValue(""),
         ReadOnly(true)]
         public string ServerSession { getset; }
 
        [Category("1.全局"),
        DisplayName("ServerName"),
        Description("标识服务的标题名称"),
        DefaultValue("")]
        public string ServerName { getset; }
 
        [Category("1.全局"),
        DisplayName("DeliveryMode"),
        Description("接收数据后的分布策略,包括:按设备IP分发(DeviceIP)、按设备编码分发(DeviceCode)"),
        DefaultValue(DeliveryMode.DeviceIP)]
        public DeliveryMode DeliveryMode { getset; }
 
        [Category("1.全局"),
         DisplayName("ControlMode"),
         Description("调度设备驱动和IO实例的策略,包括:循环模式(Loop)、并发模式(Parallel)、自主模式(Self)和单例模式(Singleton)"),
         DefaultValue(ControlMode.Loop)]
        public ControlMode ControlMode { getset; }
 
        [Category("1.全局"),
         DisplayName("StartReceiveDataFliter"),
         Description("标识接收数据后是否按协议过滤器的规划过滤数据,不启用则直接返回数据"),
         DefaultValue(false)]
        public bool StartReceiveDataFliter { getset; }
 
        [Category("1.全局"),
        DisplayName("StartCheckPackageLength"),
        Description("标识是否检测数据长度,如果开启,那么会调用协议驱动的GetPackageLength接口,直到接收返回的数据长度的数据"),
        DefaultValue(false)]
        public bool StartCheckPackageLength { getset; }
        #endregion
 
        #region 串口
        [Category("2.串口"),
         DisplayName("ComReadBufferSize"),
         Description("设置一次接收数据的字节数组最大值"),
         DefaultValue(1024)]
        public int ComReadBufferSize { getset; }
 
        [Category("2.串口"),
        DisplayName("ComWriteBufferSize"),
        Description("设置一次发送数据的字节数组最大值"),
        DefaultValue(1024)]
        public int ComWriteBufferSize { getset; }
 
        [Category("2.串口"),
        DisplayName("ComReadTimeout"),
        Description("设置一次读取数据的超时时间"),
        DefaultValue(1000)]
        public int ComReadTimeout { getset; }
 
        [Category("2.串口"),
        DisplayName("ComWriteTimeout"),
        Description("设置一次发送数据的超时时间"),
        DefaultValue(1000)]
        public int ComWriteTimeout { getset; }
 
        [Category("2.串口"),
        DisplayName("ComLoopInterval"),
        Description("轮询模式下,发送和接收数据中间的等待时间,串口通讯不支持其他控制模式"),
        DefaultValue(1000)]
        public int ComLoopInterval { getset; }
        #endregion
 
        #region 网络
        [Category("3.网络"),
         DisplayName("NetReceiveBufferSize"),
         Description("设置一次接收数据的字节数组最大值"),
         DefaultValue(1024)]
        public int NetReceiveBufferSize { getset; }
 
        [Category("3.网络"),
        DisplayName("NetSendBufferSize"),
        Description("设置一次发送数据的字节数组最大值"),
        DefaultValue(1024)]
        public int NetSendBufferSize { getset; }
 
        [Category("3.网络"),
        DisplayName("NetReceiveTimeout"),
        Description("设置一次读取数据的超时时间"),
        DefaultValue(1000)]
        public int NetReceiveTimeout { getset; }
 
        [Category("3.网络"),
         DisplayName("NetSendTimeout"),
         Description("设置一次发送数据的超时时间"),
         DefaultValue(1000)]
        public int NetSendTimeout { getset; }
 
        [Category("3.网络"),
        DisplayName("NetLoopInterval"),
        Description("轮询模式下,发送和接收数据中间的等待时间"),
        DefaultValue(1000)]
        public int NetLoopInterval { getset; }
 
        [Category("3.网络"),
        DisplayName("MaxConnects"),
        Description("允许客户端最大的连接数,超取最大值,自动关闭远程连接"),
        DefaultValue(1000)]
        public int MaxConnects { getset; }
 
        [Category("3.网络"),
        DisplayName("KeepAlive"),
        Description("检测死连接、半连接的一种机制"),
        DefaultValue(5000)]
        public uint KeepAlive { getset; }
 
        [Category("3.网络"),
        DisplayName("ListenPort"),
        Description("侦听接收数据的端口"),
        DefaultValue(6699)]
        public int ListenPort { getset; }
 
        [Category("3.网络"),
        DisplayName("BackLog"),
        Description("定队列中最多可容纳的等待接受的传入连接数"),
        DefaultValue(1000)]
        public int BackLog { getset; }
 
        [Category("3.网络"),
        DisplayName("CheckSameSocketSession"),
        Description("对一个固定的设备,只允许有一个有效连接,重复IP多次连接,将断开之前的连接"),
        DefaultValue(true)]
        public bool CheckSameSocketSession { getset; }
 
        [Category("3.网络"),
        DisplayName("SocketMode"),
        Description("标识设备是TcpServer、TcpClient模式,如果标识TcpClient模式,会主动连接远程IP和端口"),
        DefaultValue(SocketMode.Tcp)]
        public SocketMode SocketMode { getset; }
 
 
        [Category("3.网络"),
        DisplayName("ClearSocketSession"),
        Description("标识是否清理连接,如果一个连接在一定时间范围内没有接收到数据,将主动断开连接"),
        DefaultValue(false)]
        public bool ClearSocketSession { getset; }
 
        [Category("3.网络"),
        DisplayName("ClearSocketSessionInterval"),
        Description("如果标识清理连接,那么在此标识清理连接间隔时间"),
        DefaultValue(10)]
        public int ClearSocketSessionInterval { getset; }
 
        [Category("3.网络"),
        DisplayName("ClearSocketSessionTimeOut"),
        Description("如果标识清理连接,那么在此标识多长时间没有接收到数据进行清理"),
        DefaultValue(30)]
        public int ClearSocketSessionTimeOut { getset; }
        #endregion

 

  三、常用配置参数说明

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

1
2
3
4
5
6
7
8
9
10
11
12
13
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项目来配置服务实例、设备驱动和服务实例的参数。如下图:

技术分享

 

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

 

《连载 | 物联网框架ServerSuperIO教程》2.服务实例的配置参数说明

标签:comment   self   end   space   class   category   介绍   connect   add   

原文地址:http://www.cnblogs.com/CoderJYF/p/6091393.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!