配备驱动介绍

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

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

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

《连载 |
物联网框架ServerSuperIO教程》一.四种简报情势机制。

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

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

 

 

3.1    概述

    
定位ServerSuperIO(SSIO)为物联网通讯框架,正是因为这一个框架是以“设备”(驱动)为基本创设,“设备”是泛指传感器、下位机、PC机等每一类数据源,数据源有和煦的报导协议或数额传输格式;ServerSuperIO并不是以IO通道为主干创设的框架,不过ServerSuperIO有很好的报道才干,完全能够配备在服务端,并且帮忙八个劳务实例,以及能够在Linux下运维。

3.1    概述

    
定位ServerSuperIO(SSIO)为物联网通信框架,就是因为这几个框架是以“设备”(驱动)为宗旨创设,“设备”是泛指传感器、下位机、PC机等各种数据源,数据源有温馨的报纸发表协议或数额传输格式;ServerSuperIO并不是以IO通道为中心营造的框架,然则ServerSuperIO有很好的简报才具,完全能够布署在服务端,并且帮忙几个服务实例,以及能够在Linux下运作。

三.2    接口定义

  
ServerSuperIO的“设备”统1接口定义为IRunDevice,这是在框架之中运维、调整、与IO通道合营的绝无仅有接口。代码定义如下:

public interface IRunDevice: IServerProvider,IVirtualDevice
    {
        #region 函数接口

        /// <summary>
        /// 初始化设备,加载设备驱动的头一件事就是初始化设备
        /// </summary>
        /// <param name="devid"></param>
        void Initialize(string devid);

        /// <summary>
        /// 保存原始的byte数据
        /// </summary>
        /// <param name="data"></param>
        void SaveBytes(byte[] data, string desc);

        /// <summary>
        /// 获得发送数据的命令,如果命令缓存中没有命令,则调用获得实时数据函数
        /// </summary>
        /// <returns></returns>
        byte[] GetSendBytes();

        /// <summary>
        /// 如果当前命令缓存没有命令,则调用该函数,一般返回获得设备的实时数据命令,
        /// </summary>
        /// <returns></returns>
        byte[] GetConstantCommand();

        /// <summary>
        /// 发送IO数据接口
        /// </summary>
        /// <param name="io"></param>
        /// <param name="senddata"></param>
        int Send(IChannel io, byte[] senddata);

        /// <summary>
        /// 读取IO数据接口
        /// </summary>
        /// <param name="io"></param>
        /// <returns></returns>
        byte[] Receive(IChannel io);

        /// <summary>
        /// 接收数据信息,带过滤器
        /// </summary>
        /// <param name="io"></param>
        /// <param name="receiveFilter"></param>
        /// <returns></returns>
        IList<byte[]> Receive(IChannel io, IReceiveFilter receiveFilter);

        /// <summary>
        /// 同步运行设备(IO)
        /// </summary>
        /// <param name="io">io实例对象</param>
        void Run(IChannel io);

        /// <summary>
        /// 同步运行设备(byte[])
        /// </summary>
        /// <param name="key"></param>
        /// <param name="channel"></param>
        /// <param name="revData">接收到的数据</param>
        void Run(string key, IChannel channel, IRequestInfo ri);

        /// <summary>
        /// 如果通讯正常,这个函数负责处理数据
        /// </summary>
        /// <param name="info"></param>
        void Communicate(IRequestInfo info);

        /// <summary>
        /// 通讯中断,未接收到数据
        /// </summary>
        void CommunicateInterrupt(IRequestInfo info);

        /// <summary>
        /// 通讯的数据错误或受到干扰
        /// </summary>
        void CommunicateError(IRequestInfo info);

        /// <summary>
        /// 通讯未知,默认状态(一般不用)
        /// </summary>
        void CommunicateNone();

        /// <summary>
        /// 检测通讯状态
        /// </summary>
        /// <param name="revdata"></param>
        /// <returns></returns>
        CommunicateState CheckCommunicateState(byte[] revdata);

        /// <summary>
        /// 报警接口函数
        /// </summary>
        void Alert();

        /// <summary>
        /// 保存解析后的数据
        /// </summary>
        void Save();

        /// <summary>
        /// 展示
        /// </summary>
        void Show();

        /// <summary>
        /// 当通讯实例为NULL的时候,调用该函数
        /// </summary>
        void UnknownIO();

        /// <summary>
        /// 通讯状态改变
        /// </summary>
        /// <param name="comState">改变后的状态</param>
        void CommunicateStateChanged(CommunicateState comState);

        /// <summary>
        /// 通道状态改变
        /// </summary>
        /// <param name="channelState"></param>
        void ChannelStateChanged(ChannelState channelState);


        /// <summary>
        /// 当软件关闭的时间,响应设备退出操作
        /// </summary>
        void Exit();

        /// <summary>
        /// 删除设备的响应接口函数
        /// </summary>
        void Delete();

        /// <summary>
        /// 可以自定义返数据对象,用于与其他组件交互
        /// </summary>
        /// <returns></returns>
        object GetObject();

        /// <summary>
        /// 设备定时器,响应定时任务
        /// </summary>
        void OnRunTimer();

        /// <summary>
        /// 显示上下文菜单
        /// </summary>
        void ShowContextMenu();

        /// <summary>
        /// 显示IO监视器的窗体
        /// </summary>
        void ShowMonitorDialog();

        /// <summary>
        /// 在IO监视器上显示byte[]数据
        /// </summary>
        /// <param name="data"></param>
        /// <param name="desc"></param>
        void ShowMonitorData(byte[] data, string desc);
        #endregion

        #region 属性接口
        /// <summary>
        /// 默认程序集ID,用于存储临时对象
        /// </summary>
        object Tag { set; get; }

        /// <summary>
        /// 同步对象,用于IO互拆
        /// </summary>
        object SyncLock { get; }

        /// <summary>
        /// 实时数据持久接口
        /// </summary>
        IDeviceDynamic DeviceDynamic { get; }

        /// <summary>
        /// 设备参数持久接口
        /// </summary>
        IDeviceParameter DeviceParameter { get; }

        /// <summary>
        /// 协议驱动
        /// </summary>
        IProtocolDriver Protocol { get; }

        /// <summary>
        /// 是否开启时钟,标识是否调用OnRunTimer接口函数。
        /// </summary>
        bool IsRunTimer { set; get;}

        /// <summary>
        /// 时钟间隔值,标识定时调用DeviceTimer接口函数的周期
        /// </summary>
        int RunTimerInterval { set; get; }

        /// <summary>
        /// 设备的类型
        /// </summary>
        DeviceType DeviceType { get;  }

        /// <summary>
        /// 设备编号
        /// </summary>
        string ModelNumber { get;}

        /// <summary>
        /// 设备运行权限级别,如果运行级别高的话,则优先发送和接收数据。
        /// </summary>
        DevicePriority DevicePriority { get;set;}

        /// <summary>
        /// 设备的通讯类型
        /// </summary>
        CommunicateType CommunicateType { get;set;}

        /// <summary>
        /// 标识是否运行设备,如果为false,调用运行设备接口时直接返回
        /// </summary>
        bool IsRunDevice{ get;set;}

        /// <summary>
        /// 是否释放资源
        /// </summary>
        bool IsDisposed { get; }

        /// <summary>
        /// 显示视图
        /// </summary>
        Control DeviceGraphics { get;}
        #endregion

        #region 事件接口

        /// <summary>
        /// 发送数据事件
        /// </summary>
        event SendDataHandler SendData;

        /// <summary>
        /// 发送数据事件,对SendDataHandler事件的封装
        /// </summary>
        /// <param name="senddata"></param>
        void OnSendData(byte[] senddata);

        /// <summary>
        /// 设备日志输出事件
        /// </summary>
        event DeviceRuningLogHandler DeviceRuningLog;

        /// <summary>
        /// 运行监视器显示日志事件,对DeviceRuningLogHandler事件的封装
        /// </summary>
        void OnDeviceRuningLog(string statetext);

        /// <summary>
        /// 串口参数改变事件
        /// </summary>
        event ComParameterExchangeHandler ComParameterExchange;

        /// <summary>
        /// 串口参数改变事件,对COMParameterExchangeHandler事件的封装
        /// </summary>
        void OnComParameterExchange(int oldcom, int oldbaud, int newcom, int newbaud);

        /// <summary>
        /// 设备数据对象改变事件
        /// </summary>
        event DeviceObjectChangedHandler DeviceObjectChanged;
        /// <summary>
        /// 数据驱动事件,对DeviceObjectChangedHandler事件的封装
        /// </summary>
        void OnDeviceObjectChanged(object obj);

        ///// <summary>
        ///// 删除设备事件
        ///// </summary>
        //event DeleteDeviceCompletedHandler DeleteDeviceCompleted;
        ///// <summary>
        ///// 删除设备事件,对DeleteDeviceHandler事件的封装
        ///// </summary>
        //void OnDeleteDeviceCompleted();
        #endregion
}

3.二    接口定义

  
ServerSuperIO的“设备”统一接口定义为IRunDevice,那是在框架之中运维、调治、与IO通道同盟的绝无仅有接口。代码定义如下:

public interface IRunDevice: IServerProvider,IVirtualDevice
    {
        #region 函数接口

        /// <summary>
        /// 初始化设备,加载设备驱动的头一件事就是初始化设备
        /// </summary>
        /// <param name="devid"></param>
        void Initialize(string devid);

        /// <summary>
        /// 保存原始的byte数据
        /// </summary>
        /// <param name="data"></param>
        void SaveBytes(byte[] data, string desc);

        /// <summary>
        /// 获得发送数据的命令,如果命令缓存中没有命令,则调用获得实时数据函数
        /// </summary>
        /// <returns></returns>
        byte[] GetSendBytes();

        /// <summary>
        /// 如果当前命令缓存没有命令,则调用该函数,一般返回获得设备的实时数据命令,
        /// </summary>
        /// <returns></returns>
        byte[] GetConstantCommand();

        /// <summary>
        /// 发送IO数据接口
        /// </summary>
        /// <param name="io"></param>
        /// <param name="senddata"></param>
        int Send(IChannel io, byte[] senddata);

        /// <summary>
        /// 读取IO数据接口
        /// </summary>
        /// <param name="io"></param>
        /// <returns></returns>
        byte[] Receive(IChannel io);

        /// <summary>
        /// 接收数据信息,带过滤器
        /// </summary>
        /// <param name="io"></param>
        /// <param name="receiveFilter"></param>
        /// <returns></returns>
        IList<byte[]> Receive(IChannel io, IReceiveFilter receiveFilter);

        /// <summary>
        /// 同步运行设备(IO)
        /// </summary>
        /// <param name="io">io实例对象</param>
        void Run(IChannel io);

        /// <summary>
        /// 同步运行设备(byte[])
        /// </summary>
        /// <param name="key"></param>
        /// <param name="channel"></param>
        /// <param name="revData">接收到的数据</param>
        void Run(string key, IChannel channel, IRequestInfo ri);

        /// <summary>
        /// 如果通讯正常,这个函数负责处理数据
        /// </summary>
        /// <param name="info"></param>
        void Communicate(IRequestInfo info);

        /// <summary>
        /// 通讯中断,未接收到数据
        /// </summary>
        void CommunicateInterrupt(IRequestInfo info);

        /// <summary>
        /// 通讯的数据错误或受到干扰
        /// </summary>
        void CommunicateError(IRequestInfo info);

        /// <summary>
        /// 通讯未知,默认状态(一般不用)
        /// </summary>
        void CommunicateNone();

        /// <summary>
        /// 检测通讯状态
        /// </summary>
        /// <param name="revdata"></param>
        /// <returns></returns>
        CommunicateState CheckCommunicateState(byte[] revdata);

        /// <summary>
        /// 报警接口函数
        /// </summary>
        void Alert();

        /// <summary>
        /// 保存解析后的数据
        /// </summary>
        void Save();

        /// <summary>
        /// 展示
        /// </summary>
        void Show();

        /// <summary>
        /// 当通讯实例为NULL的时候,调用该函数
        /// </summary>
        void UnknownIO();

        /// <summary>
        /// 通讯状态改变
        /// </summary>
        /// <param name="comState">改变后的状态</param>
        void CommunicateStateChanged(CommunicateState comState);

        /// <summary>
        /// 通道状态改变
        /// </summary>
        /// <param name="channelState"></param>
        void ChannelStateChanged(ChannelState channelState);


        /// <summary>
        /// 当软件关闭的时间,响应设备退出操作
        /// </summary>
        void Exit();

        /// <summary>
        /// 删除设备的响应接口函数
        /// </summary>
        void Delete();

        /// <summary>
        /// 可以自定义返数据对象,用于与其他组件交互
        /// </summary>
        /// <returns></returns>
        object GetObject();

        /// <summary>
        /// 设备定时器,响应定时任务
        /// </summary>
        void OnRunTimer();

        /// <summary>
        /// 显示上下文菜单
        /// </summary>
        void ShowContextMenu();

        /// <summary>
        /// 显示IO监视器的窗体
        /// </summary>
        void ShowMonitorDialog();

        /// <summary>
        /// 在IO监视器上显示byte[]数据
        /// </summary>
        /// <param name="data"></param>
        /// <param name="desc"></param>
        void ShowMonitorData(byte[] data, string desc);
        #endregion

        #region 属性接口
        /// <summary>
        /// 默认程序集ID,用于存储临时对象
        /// </summary>
        object Tag { set; get; }

        /// <summary>
        /// 同步对象,用于IO互拆
        /// </summary>
        object SyncLock { get; }

        /// <summary>
        /// 实时数据持久接口
        /// </summary>
        IDeviceDynamic DeviceDynamic { get; }

        /// <summary>
        /// 设备参数持久接口
        /// </summary>
        IDeviceParameter DeviceParameter { get; }

        /// <summary>
        /// 协议驱动
        /// </summary>
        IProtocolDriver Protocol { get; }

        /// <summary>
        /// 是否开启时钟,标识是否调用OnRunTimer接口函数。
        /// </summary>
        bool IsRunTimer { set; get;}

        /// <summary>
        /// 时钟间隔值,标识定时调用DeviceTimer接口函数的周期
        /// </summary>
        int RunTimerInterval { set; get; }

        /// <summary>
        /// 设备的类型
        /// </summary>
        DeviceType DeviceType { get;  }

        /// <summary>
        /// 设备编号
        /// </summary>
        string ModelNumber { get;}

        /// <summary>
        /// 设备运行权限级别,如果运行级别高的话,则优先发送和接收数据。
        /// </summary>
        DevicePriority DevicePriority { get;set;}

        /// <summary>
        /// 设备的通讯类型
        /// </summary>
        CommunicateType CommunicateType { get;set;}

        /// <summary>
        /// 标识是否运行设备,如果为false,调用运行设备接口时直接返回
        /// </summary>
        bool IsRunDevice{ get;set;}

        /// <summary>
        /// 是否释放资源
        /// </summary>
        bool IsDisposed { get; }

        /// <summary>
        /// 显示视图
        /// </summary>
        Control DeviceGraphics { get;}
        #endregion

        #region 事件接口

        /// <summary>
        /// 发送数据事件
        /// </summary>
        event SendDataHandler SendData;

        /// <summary>
        /// 发送数据事件,对SendDataHandler事件的封装
        /// </summary>
        /// <param name="senddata"></param>
        void OnSendData(byte[] senddata);

        /// <summary>
        /// 设备日志输出事件
        /// </summary>
        event DeviceRuningLogHandler DeviceRuningLog;

        /// <summary>
        /// 运行监视器显示日志事件,对DeviceRuningLogHandler事件的封装
        /// </summary>
        void OnDeviceRuningLog(string statetext);

        /// <summary>
        /// 串口参数改变事件
        /// </summary>
        event ComParameterExchangeHandler ComParameterExchange;

        /// <summary>
        /// 串口参数改变事件,对COMParameterExchangeHandler事件的封装
        /// </summary>
        void OnComParameterExchange(int oldcom, int oldbaud, int newcom, int newbaud);

        /// <summary>
        /// 设备数据对象改变事件
        /// </summary>
        event DeviceObjectChangedHandler DeviceObjectChanged;
        /// <summary>
        /// 数据驱动事件,对DeviceObjectChangedHandler事件的封装
        /// </summary>
        void OnDeviceObjectChanged(object obj);

        ///// <summary>
        ///// 删除设备事件
        ///// </summary>
        //event DeleteDeviceCompletedHandler DeleteDeviceCompleted;
        ///// <summary>
        ///// 删除设备事件,对DeleteDeviceHandler事件的封装
        ///// </summary>
        //void OnDeleteDeviceCompleted();
        #endregion
}

叁.三    1遍开辟,常用接口

   
RunDevice抽象类承袭自IRunDevice接口,本质上来讲,3次开拓只必要承接RunDevice抽象类就能够了。RunDevice已经落成了配备驱动在ServerSuperIO框架下宗旨的尺度。那么在承袭RunDevice抽象类的时候,所急需三遍开采的办事相当的小,只须求关心协交涉拍卖数据业务本人,对于框架的中间运维机制能够布署、调治机制内部自行管理。

    贰遍开采常用的接口,项目表示如下图:

图片 1

    
那是一个按协议规则实现实时收到文件数量的配备驱动,ReceiveFileDriver继承自RunDevice抽象类,是设备驱动的骨干接口;Protocol是自定义协调接口,包含发送数据协商谈接收数据协议,实例化后在ReceiveFileDriver接口的IProtocolDriver属性中回到;不光要有商榷接口,在商榷里边还要有指令,那么Command正是商讨中的自定义命令,这么些体协会议命令规定了发送数据和接收分析数据,协议命令不仅仅囊括一个,依照作业必要,设备驱动可以涵盖三个商讨命令,以实现与实体硬件的交互;Parameter自定义参数接口,每一个设备对象自作者的参数不均等,实例化后在ReceiveFileDriver接口的IDeviceParameter属性中回到;Dynamic是自定义实时数据权且缓存接口,能够把分析后的实时数据目前存款和储蓄在那么些目标里,,实例化后在ReceiveFileDriver接口的IDeviceDynamic属性中回到,这些目的不是供给求贯彻的,ServerSuperIO内部并不曾直接引用。

    
以上是从项目角度轮廓解说了索要写哪几类代码,ReceiveFileDriver设备驱动需求3回开采访编写的代码,如下暗暗表示图:

图片 2

1)       
Initialize:发轫化设备驱动接口,在此处可以起始化协议驱动、设备参数和设备的实时数据等对象,以及成功部分其余的操作。

2)        DeviceDynamic:实时数码对象接口属性,不是必须兑现。

三)        DeviceParameter:参数数据对象接口属性,必须完毕。

四)        Protocol:协议驱动接口,很主要,必须兑现。

五)       
DeviceType:设备项目,一般指普通设备,虚拟设备适用于杰出意况,必须完结。

6)        ModelNumber:设备驱动的唯一编号,一般必须贯彻。

7)       
GetConstantCommand:固定重回发送数据的接口,一般重返读实时数据命令,在SendCache里未有命令的时候,会调用该接口,必须兑现。

八)       
Communicate:通信平常,会把数据再次来到到这一个接口,影响通信状态为Protocol接口中的CheckData函数,校验接收到数码的完整性。

玖)       
CommunicateInterrupt:通信中断代表未有收到到其余数据,会调用这些接口,影响通信状态为Protocol接口中的CheckData函数,校验接收到数量的完整性。

十)   
CommunicateError:通信困扰代表收到到数量,但是从未校验正确,会调用那个接口,影响通信状态为Protocol接口中的CheckData函数,校验接收到数量的完整性。

1一)   
CommunicateNone:通信未知,代表该设施驱动对应的IO通道COM没有展开或NET未有立见成效连接。

1二)    UnknownIO:未知IO通道,COM未有伸开或NET未有卓有功能连接。

一三)    CommunicateStateChanged:每一次通讯状态退换后会调用这一个接口函数。

14)   
ChannelStateChanged:IO通道状态改变后会调用这几个接口函数,COM是展开或关闭,NET是接二连三或断开。

一5)   
Save:保存数据函数接口,设备驱动推行到生命周期最后会调用这一个接口,以成功对数码的保存。

1六)   
Alert:报告警察方函数接口,数据管理完毕后,对数码进行判别,以成功报告警察方作用。

一七)   
Show:彰显数据函数接口,数据管理完了后,对数据开始展览展现,是SIO保留下去的接口函数,以往扩张使用。

18)    Exit:当设备驱动退出时调用该函数接口,举个例子:宿主程序退出时。

19)   
Delete:删除设备驱动调用该函数接口,是SIO保留下去的接口函数,适用于有分界面UI的应用场景,以往扩大使用。

20)    DeviceGraphics:视图接口,是SIO保留下来的接口函数,未来扩充使用。

贰一)   
GetObject:得到数量对象,未来准备为服务接口供数据支撑,现在没有实际用处。

2二)   
ShowContextMenu:突显上下文菜单,是SIO保留下来的接口函数,今后扩充使用。

 

1.[连载]《C#报道(串口和互连网)框架的陈设与落成》

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

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

3.C#工业物联网和集成系统消除方案的才干门路(数据源、数据搜罗、数据上传与接收、ActiveMQ、Mongodb、WebApi、手提式有线电话机App)

五.ServerSuperIO开源地址:https://github.com/wxzz/ServerSuperIO

物联网&集成技能(.NET) QQ群54256083

 

下1篇:开荒设备驱动。

3.3    二次开拓,常用接口

   
RunDevice抽象类承接自IRunDevice接口,本质上来讲,3回开荒只供给承继RunDevice抽象类就能够了。RunDevice已经做到了设施驱动在ServerSuperIO框架下中央的标准化。那么在承继RunDevice抽象类的时候,所急需一遍开荒的行事非常的小,只供给关爱协交涉管理数据业务自个儿,对于框架的在那之中运营机制能够配备、调解机制内部自行管理。

    二回开辟常用的接口,项目表示如下图:

图片 3

    
那是二个按协议规则实现实时收到文件数量的设施驱动,ReceiveFileDriver承继自RunDevice抽象类,是器物驱动的核心接口;Protocol是自定义磋商接口,包含发送数据协会谈接收数据协议,实例化后在ReceiveFileDriver接口的IProtocolDriver属性中回到;不光要有协商接口,在商酌里边还要有指令,那么Command正是说道中的自定义命令,那一个体协会议命令规定了发送数据和收受分析数据,协议命令不仅仅囊括叁个,依照业务须要,设备驱动能够包涵多个斟酌命令,以成功与实体硬件的相互;Parameter自定义参数接口,种种设备对象自己的参数分裂,实例化后在ReceiveFileDriver接口的IDeviceParameter属性中回到;Dynamic是自定义实时数据目前缓存接口,能够把分析后的实时数据一时半刻存款和储蓄在那些目的里,,实例化后在ReceiveFileDriver接口的IDeviceDynamic属性中回到,那么些目标不是必供给得以完结的,ServerSuperIO内部并不曾一直引用。

    
以上是从项目角度概略解说了特殊要求写哪几类代码,ReceiveFileDriver设备驱动要求叁次开垦写的代码,如下暗示图:

图片 4

一)       
Initialize:开端化设备驱动接口,在那边可以开头化协议驱动、设备参数和配备的实时数据等对象,以及产生都部队分别样的操作。

贰)        DeviceDynamic:实时数据对象接口属性,不是必须贯彻。

3)        DeviceParameter:参数数据对象接口属性,必须兑现。

4)        Protocol:协议驱动接口,很珍视,必须贯彻。

5)       
DeviceType:设备档次,一般指普通设备,虚拟设备适用于非凡情状,必须贯彻。

六)        ModelNumber:设备驱动的绝无仅有编号,一般必须兑现。

柒)       
GetConstantCommand:固定重返发送数据的接口,一般重返读实时数据命令,在SendCache里未有命令的时候,会调用该接口,必须达成。

八)       
Communicate:通信日常,会把数据重临到那么些接口,影响通信状态为Protocol接口中的CheckData函数,校验接收到数码的完整性。

九)       
CommunicateInterrupt:通讯中断代表未有抽出到其它数据,会调用那一个接口,影响通信状态为Protocol接口中的CheckData函数,校验接收到数码的完整性。

十)   
CommunicateError:通信干扰代表接受到数码,但是并未有校验正确,会调用这么些接口,影响通信状态为Protocol接口中的CheckData函数,校验接收到数码的完整性。

1一)   
CommunicateNone:通讯未知,代表该道具驱动对应的IO通道COM未有展开或NET未有立见成效连接。

1二)    UnknownIO:未知IO通道,COM未有张开或NET未有有效连接。

壹3)    CommunicateStateChanged:每趟通信状态改动后会调用这些接口函数。

1四)   
ChannelStateChanged:IO通道状态改换后会调用那个接口函数,COM是开拓或关闭,NET是连连或断开。

15)   
Save:保存数据函数接口,设备驱动推行到生命周期最后会调用那些接口,以落成对数据的保留。

16)   
Alert:报告警方函数接口,数据管理完结后,对数据开始展览决断,以形成报告警察方功能。

1七)   
Show:显示数据函数接口,数据管理完了后,对数据举办展示,是SIO保留下去的接口函数,今后扩充使用。

1捌)    Exit:当设备驱动退出时调用该函数接口,比如:宿主程序退出时。

1九)   
Delete:删除设备驱动调用该函数接口,是SIO保留下去的接口函数,适用于有分界面UI的接纳场景,今后扩充使用。

20)    DeviceGraphics:视图接口,是SIO保留下去的接口函数,以往扩充使用。

二一)   
GetObject:获得多少对象,未来准备为劳动接口供数据补助,今后并未有实际用处。

2二)   
ShowContextMenu:呈现上下文菜单,是SIO保留下来的接口函数,未来扩张使用。

 

1.[连载]《C#报道(串口和网络)框架的规划与落成》

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

2.利用SuperIO(SIO)和开源跨平台物联网框架ServerSuperIO(SSIO)创设系统的完好方案

3.C#工业物联网和集成系统消除方案的才干路径(数据源、数据搜罗、数据上传与吸收接纳、ActiveMQ、Mongodb、WebApi、手提式有线电话机App)

伍.ServerSuperIO开源地址:https://github.com/wxzz/ServerSuperIO

物联网&集成技巧(.NET) QQ群54256083

 

下一篇:开拓设备驱动。