一、更新内容

1.修改*Server类,以及承继关系。
2.增加IRunDevice的IServerProvider接口继承。
3.修复增加COM设备驱动可能造成的异常。
4.修复网络发送数据可能引发的异常。
5.完善协议驱动器。

6.修改协议驱动接口。
7.修改协议命令接口。
8.修复协议命令,抽象基类情况下的异常BUG。

9.增加协议接口GetPackageLength,数据交互更灵活。
10.修复一些BUG。
11.优化代码。

二、GetPackageLength接口的使用

这个接口主要的使用场景是:当协议中有请求发送数据长度的命令,例如先向服务器发送数据包长度命令,得到返回确定后,再发送实际数据包信息。在连接发送大块数据的时候,例如文件内容、序列化后的内容等,内容有可能包含协议的头和尾,会影响数据包的完整性。主要用于交互连续的较大数据块内容。

1.接口参数

  /// <summary>
/// 获得应该接收的数据长度,如果当前接收的数据小于这个返回值,那么继续接收数据,直到大于等于这个返回长度。如果接收数据超时,则直接返回当前已经接收的数据。
/// </summary>
/// <param name="data">接收的数据</param>
/// <param name="channel">IO通道,用于返回确认数据</param>
/// <param name="readTimeout">返回读数据超时间隔时间</param>
/// <returns></returns>
public abstract int GetPackageLength(byte[] data, IChannel channel, ref int readTimeout);

2.接口使用

(1)设置配置参数

 IServer server = new ServerFactory().CreateServer(new ServerConfig()
{
ServerName = "服务1",
SocketMode = SocketMode.Tcp,
ControlMode = ControlMode.Loop,
CheckSameSocketSession = false,
StartCheckPackageLength = true, //开启检测数据包长度
NetReceiveBufferSize = 20,
});

(2)接口代码

        public override int GetPackageLength(byte[] data, IChannel channel, ref int readTimeout)
{
if (data == null || data.Length <= 0)
return 0; readTimeout = 2000; if (CheckData(data))
{
try
{
int length = BitConverter.ToInt32(new byte[] {data[3], data[4], data[5], data[6]}, 0); byte[] okBytes = System.Text.Encoding.ASCII.GetBytes("ok");
int num = channel.Write(okBytes);
if (num > 0)
{
Console.WriteLine("返回数据");
}
return length;
}
catch (Exception)
{ return 0;
}
}
else
{
Console.WriteLine("校验错误");
return 0;
}
}

 三、增加宿主程序(ServerSuperIO.Host)

static IServerFactory _serverFactory = null;
static void Main(string[] args)
{
Console.ForegroundColor = ConsoleColor.Green;
ConsoleUtil.SetConsoleCtrlHandler(new ConsoleUtil.ControlCtrlDelegate(HandlerRoutine), true);
bool success = true;
Console.WriteLine("正在初始化服务程序......");
IObjectBuilder builder = new TypeCreator();
_serverFactory = new ServerFactory();
try
{
GlobalConfig gc = GlobalConfigTool.Load();
foreach (ServerSuperIO.Config.Server serverCfg in gc.Servers)
{
IServer server = _serverFactory.CreateServer(serverCfg.ServerConfig);
server.AddDeviceCompleted += server_AddDeviceCompleted;
server.DeleteDeviceCompleted += server_DeleteDeviceCompleted;
server.Start();
_serverFactory.AddServer(server); foreach (Config.Device devCfg in serverCfg.Devices)
{
try
{
IRunDevice runDev = builder.BuildUp<IRunDevice>(devCfg.AssemblyFile, devCfg.Instance); runDev.DeviceParameter.DeviceID = devCfg.DeviceID;
runDev.DeviceDynamic.DeviceID = devCfg.DeviceID;
runDev.CommunicateType = devCfg.CommunicateType;
runDev.Initialize(devCfg.DeviceID); if (server.AddDevice(runDev) != devCfg.DeviceID)
{
Console.WriteLine("增加设备:" + devCfg.DeviceID + " 失败!");
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
continue;
}
}
}
}
catch (Exception ex)
{
success = false;
Console.WriteLine(ex.Message);
} if (success)
{
Console.WriteLine("初始化服务程序完成");
} while ("exit" == Console.ReadLine())
{
_serverFactory.RemoveAllServer();
break;
}
} private static bool HandlerRoutine(int ctrlType)
{
if (ctrlType == 0 || ctrlType == 2)
{
_serverFactory.RemoveAllServer();
}
return false;
}
}

 四、增加配置工具(ServerSuperIO.Tool)

1.增加服务,如下图:

2.增加设备,如下图:

3.单击树型菜单,修改配置属性。

物联网框架ServerSuperIO(SSIO)更新、以及增加宿主程序和配置工具,详细介绍的更多相关文章

  1. 《物联网框架ServerSuperIO教程》- 22.动态数据接口增加缓存,提高数据输出到OPCServer和(实时)数据库的效率

     22.1   概述及要解决的问题 设备驱动有DeviceDynamic接口,可以继承并增加新的实时数据属性,每次通讯完成后更新这些属性数据.原来是通过DeviceDynamic接口实体类反射的方式获 ...

  2. 《物联网框架ServerSuperIO教程》- 23.动态数据接口增加缓存,提高数据输出到OPCServer和(实时)数据库的效率

     22.1   概述及要解决的问题 设备驱动有DeviceDynamic接口,可以继承并增加新的实时数据属性,每次通讯完成后更新这些属性数据.原来是通过DeviceDynamic接口实体类反射的方式获 ...

  3. 开源物联网框架ServerSuperIO(SSIO),项目中实践应用介绍

    一.项目背景 我们是传统行业,但是我们有一颗不传统的心.企业用户遍布国内和国外,面对行业,要建设行业级的(大)数据平台.一提到大数据平台,大家往往想到Hadoop.Spark.Nosql.分布式等等, ...

  4. 《连载 | 物联网框架ServerSuperIO教程》- 16.OPC Server的使用步骤。附:3.3 发布与版本更新说明。

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  5. 《连载 | 物联网框架ServerSuperIO教程》- 17.支持实时数据库,高并发保存测点数据。附:3.4 发布与版本更新说明。

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  6. 《连载 | 物联网框架ServerSuperIO教程》- 18.集成OPC Client,及使用步骤

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  7. 《连载 | 物联网框架ServerSuperIO教程》- 17.集成Golden实时数据库,高并发保存测点数据。附:3.4 发布与版本更新说明。

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  8. 《连载 | 物联网框架ServerSuperIO教程》- 16.集成OPC Server,及使用步骤。附:3.3 发布与版本更新说明。

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  9. 《连载 | 物联网框架ServerSuperIO教程》-4.如开发一套设备驱动,同时支持串口和网络通讯。附:将来支持Windows 10 IOT

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

随机推荐

  1. 微信小程序的机会在于重新理解群组与二维码

    历时一年,唯一一个尚未发布就获得Pony Ma与Allen Zhang站台的产品:微信小程序,将于2017年1月9日正式上线了.我很期待.唯一要警惕的是:防止长考出臭棋. 在上线前夕,我对于如何借助小 ...

  2. BI分析受阻?FineBI推出SPA螺旋式分析新功能!

    过去,企业级的数据分析通常会有这么几种场景,业务部门托信息部门分析数据,结果报表一出,唇枪舌剑争论你我高低,数据不准,指标不对.信息部门欠缺业务概念,业务部门不懂技术逻辑,数据分析之路,暂时搁浅. 后 ...

  3. BPM费控管理解决方案分享

    一.方案概述费用是除经营成本外企业的最主要支出,费用管理是财务管理的核心之一,加强企业内控管理如:费用申请.费用报销.费用分摊.费用审批.费用控制和费用支付等,通过科学有效的管理方法规范企业费用管理, ...

  4. Android Studio-—使用OpenCV的配置方法和demo以及开发过程中遇到的问题解决

    前提: 1.安装Android Studio(过程略) 2.官网下载OpenCV for Android 网址:http:opencv.org/downloads.html 我下载的是下图的版本 3. ...

  5. Android Butterknife 8.4.0 使用方法总结

    转载请标明出处:http://www.cnblogs.com/zhaoyanjun/p/6016341.html 本文出自[赵彦军的博客] 前言 ButterKnife 简介 ButterKnife是 ...

  6. RunLoop 总结:RunLoop的应用场景(一)

    参考资料 好的书籍都是值得反复看的,那好的文章,好的资料也值得我们反复看.我们在不同的阶段来相同的文章或资料或书籍都能有不同的收获,那它就是好文章,好书籍,好资料.关于iOS 中的RunLoop资料非 ...

  7. Concurrency

    <Concurrency>:http://docs.oracle.com/javase/tutorial/essential/concurrency/index.html <Java ...

  8. 简述 OAuth 2.0 的运作流程

    本文将以用户使用 github 登录网站留言为例,简述 OAuth 2.0 的运作流程. 假如我有一个网站,你是我网站上的访客,看了文章想留言表示「朕已阅」,留言时发现有这个网站的帐号才能够留言,此时 ...

  9. 探索 Linux 系统的启动过程

    引言 之所以想到写这些东西,那是因为我确实想让大家也和我一样,把 Linux 桌面系统打造成真真正正日常使用的工具,而不是安装之后试用几把再删掉.我是真的在日常生活和工作中都使用 Linux,比如在 ...

  10. 跟我一起数据挖掘(23)——C4.5

    C4.5简介 C4.5是一系列用在机器学习和数据挖掘的分类问题中的算法.它的目标是监督学习:给定一个数据集,其中的每一个元组都能用一组属性值来描述,每一个元组属于一个互斥的类别中的某一类.C4.5的目 ...