http://www.web008.net

互相和级联调控

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.连发传输大块数据流的三种艺术(如:文件)


 

目       录

11.兑现设备(驱动)与道具(驱动)级联调节... 2

11.1         概述... 2

11.2         设备链接器... 2

11.3         场景借使... 3

11.4         设备驱动开荒及注意事项... 3

11.5         宿主程序服务实例配置注意事项... 5

11.6         运维作效果果... 6

11.贯彻设备(驱动)与器具(驱动)级联调控     

11.1     概述

    物联网建设中多少采撷是根底,进行支配是目标,那是多少个一直因素。在搜聚设备数量的时候,若是该装置的实时数据现身十分,那么是不是存在其余器具要进行联合浮动?也便是说三个设施现身相当之后,要对任何有个别设备开展联合浮动调整,以高达避免出现更加大危险的情况。

    那么不止要对某些设备开展联动调节,还要对调控的结果进行申报给现身分外的设备。变成非常、联合浮动、调整、反馈的闭环,以完毕监测与垄断(monopoly卡塔尔(英语:State of Qatar)合作功用的目标。

11.2     设备链接器

      IRunDevice设备驱动接口世襲了IDeviceConnector设备链接器接口,以便使器械驱动与设施驱动之间能够双向相互影响,达成数量传递与命令调节的指标。接口的定义如下:

public interface IDeviceConnector
    {
        /// <summary>
        /// 支行设备连接器
        /// </summary>
        /// <param name="fromDevice">信息传递的发送端</param>
        /// <param name="toDevice">信息传递的目的端,以及包含的数据信息</param>
        /// <returns></returns>
        object RunDeviceConnector(IFromDevice fromDevice, IDeviceToDevice toDevice);

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

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

        /// <summary>
        /// 连接器事件,发起端
        /// </summary>
        event DeviceConnectorHandler DeviceConnector;

        /// <summary>
        /// 确发事件接口
        /// </summary>
        /// <param name="fromDevice"></param>
        /// <param name="toDevice"></param>
        void OnDeviceConnector(IFromDevice fromDevice, IDeviceToDevice toDevice);
}

    通过那个接口定义,可以查出经过OnDeviceConnector事件触发音信传递的初阶端,会把音讯传送给选取新闻端设备驱动的RunDeviceConnector接口函数,履行完RunDeviceConnector函数后,会把结果数据再次回到给发送端设备驱动的DeviceConnectorCallback接口函数,就算选择数据端设备驱动试行RunDeviceConnector进程中现身相当,则会调用发起端设备驱动的DeviceConnectorCallbackError接口函数,至此整个流程停止。

11.3     场景倘若

    0号配备驱动的名号叫金三,1号配备驱动的称号叫普京总统。金三得悉南朝鲜朴大姨事件后,问普京先生:表弟,朴小姨怎么还不下课?。普京(Pu Jing卡塔尔国回答:你不认为那才是真正的日本片吗?傻小子。金三说:奥黑也真够坑爹的!成功总体育工作艺流程的音信传送。

11.4     设备驱动开荒及注意事项

  1. 金三接到音信后,发起音信传递。触发OnDeviceConnector事件,并把IDeviceToDevice接口deviceCode参数设置为1,指向传递给普京(Pu Jing卡塔尔国。代码如下:

    public override void Communicate(ServerSuperIO.Communicate.IRequestInfo info)

        {
            byte[] cmds = this.Protocol.GetCommand(info.Data);
            CommandArray cr = (CommandArray)cmds[0];
            dynamic obj = this.Protocol.DriverAnalysis<byte[]>(cr.ToString(), info.Data, info.BigData);
            if (obj != null)
            {
                if (cr == CommandArray.RealTimeData)
                {
                    _deviceDyn.Dyn = (Dyn)obj;
                    OnDeviceRuningLog("通讯正常");
    
                    Console.WriteLine(">>>>模拟控制命令开始");
                    this.OnDeviceConnector(new FromDevice(this.DeviceParameter.DeviceID,this.DeviceParameter.DeviceCode,this.DeviceParameter.DeviceAddr,this.DeviceParameter.DeviceName),new DeviceToDevice("1",this.DeviceParameter.DeviceName+"问:大哥,朴大妈为什么还不下课?",null,null) );
                }
            }
        }
    

     2.普京(Pu Jing卡塔尔国选择到新闻后,进行新闻深入分析后,并回到他的情致(结果)。代码如下:

public override object RunDeviceConnector(IFromDevice fromDevice, IDeviceToDevice toDevice)
        {
            Console.WriteLine(toDevice.Text);//输出其他设备传来的数据。
            return this.DeviceParameter.DeviceName + "答:你不觉得这才是真正的韩剧吗?傻小子";
        }  

    3.金三选用到普京总统的回来音信后,把趋向指向了奥黑。代码如下:

public override void DeviceConnectorCallback(object obj)
        {
            Console.WriteLine(obj.ToString());//输出返回结果
            Console.WriteLine(this.DeviceParameter.DeviceName+ "说:奥黑也真够坑爹的!");
            Console.WriteLine(">>>>模拟控制命令结束");
        }

     注:这里并从未选用DeviceConnectorCallbackError实践非凡再次回到接口函数。

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

       那是用限定情势达成的,设备驱动并从未积极性发送数据。代码如下:

static void Main(string[] args)
        {
            DeviceSelfDriver dev1 = new DeviceSelfDriver();
            dev1.DeviceParameter.DeviceName = "金三";
            dev1.DeviceParameter.DeviceAddr = 0;
            dev1.DeviceParameter.DeviceID = "0";
            dev1.DeviceDynamic.DeviceID = "0";
            dev1.DeviceParameter.DeviceCode = "0";
            dev1.DeviceParameter.COM.Port = 1;
            dev1.DeviceParameter.COM.Baud = 9600;
            dev1.DeviceParameter.NET.RemoteIP = "127.0.0.1";
            dev1.DeviceParameter.NET.RemotePort = 9600;
            dev1.CommunicateType = CommunicateType.NET;
            dev1.Initialize("0");

            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(dev1);
            server.AddDevice(dev2);

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

11.6     运行作效果果

      1.图片

图片 1

      2.视频


1.[连载]《C#报导(串口和网络)框架的安顿性与落到实处》

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

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

3.C#工业物联网和集成系统建设方案的本领路径(数据源、数据搜聚、数据上传与吸收、ActiveMQ、Mongodb、WebApi、手提式有线电话机App)

5.ServerSuperIO开源地址:

物联网&集成本领(.NET卡塔尔(قطر‎ QQ群54256083 

注:最新原代码,还向来不自由,教程写完了,同步修正。

郑重声明:本文版权归美高梅163888所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。