串口和网络,开采设备驱动葡萄娱乐场

SuperIO相关资料下载:http://pan.baidu.com/s/1pJ7lZWf

目       录

1.1    开荒妄想

把“开荒包”内的有所文件复制到项目标“bin”目录下,或项目下的专项使用生成目录。开采包文件包罗如下图:

葡萄娱乐场 1

  SuperIO.dll是软件平台的中坚模块,
SuperIO目录是软件平台的参数配制、数据存款和储蓄的目录。

第十二章     三回开荒及应用… 2

1.2    项目配制

1)目标框架接纳Framework4.0

葡萄娱乐场 2

2)生成的靶子平台利用x86

葡萄娱乐场 3

不无事例程序的靶子平台应用x86。首要思索到三十五位操作系统与64操作系统的兼容性。

12.1        项目配制… 3

1.3    假定通讯协议

12.2        引用相关组件… 4

1.3.1    发送读实时数据命令协议

计算机发送0x61发令为读实时数据命令,共发送6个字节,校验和为从“从机地址”起始的丰富和,不包含“数据报头”、“校验和”和“协议截至”。

出殡指令数据帧如下:

葡萄娱乐场 4

  

12.3        营造主程序… 5

1.3.2    深入分析实时数据协议

   
下位机接收到读实时数据命令后,并校验成功,重临实时数据,校验和为从“从机地址”起首的增进和,不包罗“数据报头”、“校验和”和“协议甘休”。

采用数据帧如下:

葡萄娱乐场 5

 

12.4        设备驱动的开荒… 6

1.3.3    发送和接收数据事例

出殡(十六进制):0x55 0xaa 0x00 0x61 0x61 0x0d

抽取(十六进制):0x55 0xaa 0x00 0x61 0x43 0x7a 0x00 0x00 0x43 0xb4 0x15
0x0d

流量数据为:250.00

复信号数据为:360.00

12.4.1       假定通信协议… 6

1.4    新建设施模块

如下图:

葡萄娱乐场 6

增加对SuperIO.dll的引用,如下图:

葡萄娱乐场 7

    项目标配制请参见:1.2门类配制。

12.4.1.1   发送读实时数据命令协议… 6

1.5    营造筑协会谈商讨驱动

    新建四个类:MySendProtocol
和MyReceiveProtocol,MySendProtocol承袭SCL.Device.DeviceSendProtocol基类,MyReceiveProtocol类承袭SCL.Device.DeviceReceiveProtocol。

      MySendProtocol
和MyReceiveProtocol多个类都重写(override)“Function61”函数,MySendProtocol类中的Function61函数达成打包发送命令操作,MyReceiveProtocol类中的Function61函数完结分析数据操作,FunctionXX在五个类中都会成对出现,首借使为着好记。

    
在MySendProtocol实例中能够调用DriverFunction函数,传入相应的命令,举例:0x61。会自行调用“Function61”函数,作为调用相应命令函数的驱动接口。GetSendCmdBytes函数接口是在DriverFunction函数基础上包裹的,同样也得以行使,然而要把“isbox“设置成false,不然会对发送的数据做特殊的管理。

  
在MyReceiveProtocol实例中得以调用DriverFunction函数,传入相应的吩咐,比方:0x61。会活动调用“Function61”函数,作为调用相应命令函数的驱动接口。GetAnalysisData函数是在DriverFunction函数基础上包裹的,同样能够使用,只是多调用了一层GetCommand函数接口。

    具体代码请参见:Device德姆o项目。

12.4.1.2   解析实时数据协议… 6

1.6    创设参数和实时数据实例类

新建七个类:MyDeviceParameter和MyDeviceRTDataMyDeviceParameter承接SCL.Device.DeviceParameter类,用于保存备参数,能够在此类中追加新的配备参数。

          
MyDeviceRTData承袭SCL.Device.DeviceRealTimeData类,用于保存设备的实时数据,能够依据报纸发表协议自定义设备的实时数据。

     
那五个类承袭基类后会自动延续SaveSerialize和GetSerialize五个泛型函数,SaveSerialize函数是把目前目的体系化成XML,GetSerialize是把类别化的XML反向变化对象实例。

         
SCL.Device.DeviceParameter类和SCL.Device.DeviceRealTimeData类是后续自SerializeOperation类,他们的接口是IserializeOperation,SerializeOperation只是一个简练的系列化XML操作类库。

    
假使开荒者想完全自定义贰个数据悠久文件,那么能够承接IserializeOperation接口,重写相应的接口函数,自定义存款和储蓄数据的不二秘诀。

 

12.4.1.3   发送和接收数据事例… 7

1.7    塑造设备驱动

     
“创设协商驱动”和“创设参数和实时数据实例类”两节都认为营造运维设备做的前期筹划,将作为运营设备的性质。

      新建一个装备类:MyDevice,它继续自SCL.Device.RunSCLDevice1。

开拓者注意到还也是有叁个SCL.Device.RunSCLDevice类,它是比较早的运作设备类,思考的平台的包容性,未来还在延续使用,可是新开垦的设施模型不提议利用SCL.Device.RunSCLDevice类。

它们都是继续自IRunSCLDevice接口。

12.4.2       新建设施模块… 7

1.7.1    常用接口

1)         public override SCL.ProtocolDriver.ISendProtocol SendProtocol

把写好的出殡协议类实例化之后,在此重回。举个例子:MySendProtocol类。

 

2)         public override SCL.ProtocolDriver.IReceiveProtocol
ReceiveProtocol

把写好的吸收接纳协议类实例化之后,在此重回。比方:MyReceiveProtocol类。

 

3)         public override SCL.Device.IDeviceParameter DeviceParameter

把写好的装置参数类实例化之后,在此重返。譬如:MyDeviceParameter类。

 

4)         public override SCL.Device.IDeviceRealTimeData
DeviceRealTimeData

把写好的实时数据类实例化之后,在此重临。比方:MyDeviceRTData类。

 

5)         public override void InitDevice(int devid)

初叶化设备,可以在此间对出殡和埋葬协议、接收协议、设备参数和实时数据等消息实行开始化。

 

6)         public override byte[] GetRealTimeCommand()

其一类是回去读实时数据命令,当CommandCache命令缓冲区中有可发送命令的时候,优先读、发送取命令缓冲区中的命令数据;假诺CommandCache命令缓冲区没有多少的时候,软件平台会自行调用GetRealTimeCommand函数接口,再次来到读实时数据命令,实行发送。

 

7)         public override void DealData(byte[] data)

当报导平常时,软件平台会把收到到的多寡自动传入到那个函数,能够调用ReceiveProtocol属性进行分析数据以及管理、深入分析、保存。通信寻常与否和收受协议类中CheckData函数接口有关。

 

8)         public override void UnRegDevice()

当软件平台未有挂号的时候,软件平台会调用这一个函数。

 

9)         public override void UnknownIO()

当报纸发表链路为null的时候,软件平台会调用这么些函数。举个例子:串口未展开、网络未有连接等。

 

10)     public override void CommunicateChanged(SCL.Device.IOState
ioState)

当电视发表状态发送改造的时候,软件平台会调用这些函数。通讯状态包蕴:通讯寻常、通信中断和通信搅扰。

 

11)     public override void CommunicateError()

当报纸发表困扰的时候,软件平台会调用这一个函数。通信寻常与否和选拔协议类中CheckData函数接口有关。

 

12)     public override void CommunicateInterrupt()

当报导中断的时候,软件平台会调用那一个函数。通信不奇怪与否和收取协议类中CheckData函数接口有关。

 

13)     public override void CommunicateNone()

当未知通信状态的时候,软件平台会调用这么些函数。一般景观下不会出现此类意况。

 

14)     public override void SaveData()

对拍卖的数额举行保存。

 

15)     public override void Alert()

认清数据是或不是充足,假若出现万分数据,在拓展报告警察方管理。

 

16)     public override void ShowData()

呈现数据管理,用于更新设备运转器,以及自定义UI和导出数据。

 

17)     public override void DeviceTimer()

各种设备会分配一个停车计时器,暗许1秒钟调用二次这一个函数。能够通信IsStartTimer属性运行、结束计时器,通过TimerInterval属性设置反应计时器施行间隔。

 

18)     public override SCL.Device.DeviceType DeviceType

归来设备项目,设备项目包涵:普通设备、虚拟设备以及其余。

 

19)     public override s y s t e m.Windows.Forms.Control DeviceGraphics

重回设备图形化分界面。

 

20)     public override void ShowContextMenu()

来得上下文菜单函数。

 

21)     public override string ModelNumber

回到设备模块编号,也正是设备的型号,那几个号码尽量须要不能够再一次。

 

24)public void ShowMonitorIODialog();

来得通道监视器窗口

 

25)public void ShowMonitorIOData(byte[] data, string desc);

向运维监视器中显得数据新闻

12.4.3       营造筑协会谈商讨驱动… 8

1.7.2    属性表达

     下边是器械具备的习性,请参见。

1)         UserLevel

用户等第属性,蕴含:未知用户、普通用户、低档用户和高端用户等多个等级。

 

2)         IsStartTimer

获得或安装是还是不是张开当前器材的石英时钟,默许不展开。

 

3)         TimerInterval

收获或安装当前器械机械钟的间隔时间,默以为1秒。

 

4)         IsRegLicense

获得或设施当前配备是还是不是被注册,私下认可不注册。

 

5)         RunDevicePriority

获得或设置当前配备运维品级,分为:普通和预先。要是为事先等级,则先调用该举办发送和接收数据。

 

6)         CommunicationType

收获或安装当前器具的简报类型。包蕴:串口和网络三种。

 

7)         CommandCache

赢得或设置当前道具命令缓冲,固然有要发送的数码,则优先调用命令缓冲的数额开始展览发送。

 

8)         IsRunDevice

获得或安装是还是不是运维业前设施,假诺设置false,当前安装不到位运转(发送和接收数据)。

 

9)         DeviceParameter.IsSaveOriginBytes

标记是或不是保存原有发送和接到的字节数据,假若保留,暗中认可保存路线在D盘。

 

10)      object Tag

临时标志属性。

 

11)      object SyncLock

同步锁对象

12.4.4       创设参数和实时数据实例类… 8

1.7.3    事件作证

以下设备事件都以在原始事件的功底上进行李包裹装的函数,开垦者能够直

接调用以下触发事件的函数,软件平台在开发银行的时候已经暗中认可加载了这么些事件。

1)         void OnReceiveDataHandler(byte[] revdata);

接触接收数据事件

 

2)         void OnSendDataHandler(byte[] senddata);

接触发送数据事件,当网络通信的时候,应用Self形式的时候,能够透过那些事件自己作主发送数据。

 

3)         void OnDeviceRuningLogHandler(string statetext);

把器具运转日志输出到运营监视器

 

4)         void OnUpdateContainerHandler();

接触更国民党的新生活运动行监视器事件

 

5)         void OnCOMParameterExchangeHandler(int oldcom, int oldbaud,
int newcom, int newbaud);

串口改换事件。

 

6)         void OnDeviceObjectChangeHandler(object obj);

指标数据变动事件,用于驱动展现、导出、服务等模块。

 

7)         void OnDeleteDeviceHandler();

去除设备事件

12.4.5       构建设备驱动… 9

1.7.4    高档应用

1)         void RunIODevice (SCL.CommunicateController.IDeviceIO io)

能够重写那么些函数,在这里改造设备运行的流水生产线,遵照CommunicationType属性内定的电视发表类型,能够把io参数转变为网络通信接口ISocket或串口通信接口ICOM,之后能够有指向的对发送操作和吸收接纳操作实行二遍开拓。一般不提出重写这一个函数。

 

2)         void Send(SCL.CommunicateController.IDeviceIO io, byte[]
sendbytes)

可以重写这一个函数,依据CommunicationType属性内定的广播发表类型,能够把io参数调换为互连网通信接口ISocket或串口通信接口ICOM,举行发送数据操作。在不重写RunDevice函数的动静下,在相当的行使场景能够重写这些函数。

 

3)         byte[] Receive(SCL.CommunicateController.IDeviceIO io)

能够重写那么些函数,依据CommunicationType属性内定的电视发表类型,能够把io参数调换为互联网通信接口ISocket或串口通信接口ICOM,实行接收数据操作。在不重写RunDevice函数的事态下,在妥贴的采用场景能够重写那么些函数。

 

4)         void SaveBytes(byte[] data, string desc)

可以重写那么些函数,对发送的数码和选择的数额进行自定义保存。私下认可保存在”d:软件平台
原始数据”目录下。

 

5)         void SocketConnect(string ip, int port)

能够重写这么些函数,当互联网通信的时候,有客户端连接到软件平台会调用这些函数接口。

 

6)         void SocketDisconnect(string ip, int port)

能够重写这么些函数,当互联网通讯的时候,有客户端与软件平台断开会调用那个函数接口。

12.5        图形展现的开荒… 9

1.8    设备调节和测试

12.6        数据导出的开辟… 9

1.8.1    界面方式调整

   分界面情势测试首若是营造一个主程序,模拟真实的应用程序对器械进行

测试。推荐使用这种测试方法。

1)  引用组件

重在引用Device德姆o程序集。如下图:

 葡萄娱乐场 8

测试设施

界面格局测试是有窗体分界面包车型地铁,必须再而三“SCL.UI
.MainForm”类,并用代码把软件平台设置成调节和测试格局“SuperIO.Device.DebugDevice.IsDebug
= true;”,如图:

 葡萄娱乐场 9

在Form_Load中开头化实例,并且加载调节和测试设备模块,主假设创制设备实例、初步化参数、实行设施调节和测试,如:this.DebugDevice((IRunDevice)_myDevice)语句。如下图:

葡萄娱乐场 10

3)IO监测器,显示发送和接收的原始十六进制数据,便于调节和测试。如下图:

葡萄娱乐场 11

4)用VirtualSerialPortDriver在本机虚拟出来四个串口,三个串口完毕了虚拟连接,比方:COM1和COM2;张开串口帮手软件和平台软件(SuperIO平台),分别安装COM1和COM2,依照“1.3倘使通信协议”发送和接收数据。相关软件在“协理理工科程师具”目录里有。如下图:

葡萄娱乐场 12

具体育项目检验试代码,请参见:FormTest项目。

12.7        服务组件的开荒… 10

1.8.2    调节台形式调节和测试

调节台测试,未有UI展现分界面,部分机能大概测试不全。须要经过

SCL.Device.IdebugDevice debug=
SCL.Device.DebugDevice.GetDebugInstance()获得调节和测试实例。其余代码与“分界面格局测试”同样。如下图:

葡萄娱乐场 13

12.8        配置工具的应用… 10

1.9    挂载设备模块

在“工业串口和互联网软件通信平台_SuperIO”目录下找到【ConfigTool.exe】应用程序,选取【设备配置】选卡,单击【挂载设备】按键,把刚刚付出的器械驱动模块挂载到阳台下。如下图:

葡萄娱乐场 14

12.8.1       参数配置… 10

1.10    在平台下运作设备

    
把道具驱动挂载好今后,运维“工业串口和互联网软件通信平台_SuperIO”目录下的【SuperIO_Run.exe】应用程序,选拔【用户管理】->【用户登入】菜单,选取【程序员】或【管理员】用户,输入暗中认可的密码:123。

登录到软件平台后,选用【设备管理】->【扩展设备】菜单,选拔刚刚挂载的设施驱动模块。如下图:

葡萄娱乐场 15

付出的好的器械驱动模块同期帮助COM(串品)和TCP(网络)二种简报格局,TCP(互联网)通信时援救Client和Server两种职业情势。

 

作者QQ:504547114

交流QQ群:54256083

12.8.2       驱动挂载… 11

合法网站:http://www.bmpj.net

源文章地址:http://www.bmpj.net/index.php?m=article&f=view&id=4

12.9        小结… 11

第十二章      一次开拓及运用

   
帮忙二次开荒是框架的机要特点,作为设计者或架构师能使和煦的小说布满被利用是一件很光荣的一件事。不管做过多少项目,能够有和好的代表小说是一件很不便于的一件事,能够因此一个小说布满的交接一些朋友也是一件很庆幸的事。所以,平昔努力让SuperIO更安宁、越来越好的帮忙二回开采、更加快的营造贰个报纸发表平台。

   这一部分珍视介绍利用SuperIO举行二次开荒,开采流程如下图:

 葡萄娱乐场 16

 

12.1     项目配制

1)目的框架选择Framework4.0

 葡萄娱乐场 17

2)生成的对象平台运用x86

 葡萄娱乐场 18

    
全数事例程序的对象平台采取x86。首要思念到三十八人操作系统与64操作系统的兼容性。

12.2     引用相关组件

     在“开垦包”中引用相关组件。如下图:

 葡萄娱乐场 19

12.3     构建主程序

  
通过接二连三SuperIO.UI.MainForm窗体类能够营造筑协会调的宿主程序,那只是叁在那之中坚的分界面框架,能够在此基础上进展扩张。创设好的宿主程序如下图:

 葡萄娱乐场 20

12.4     设备驱动的开销

12.4.1固然通讯协议

12.4.1.1 发送读实时数据命令协议

   
Computer发送0x61指令为读实时数据命令,共发送6个字节,校验和为从“从机地址”起始的丰硕和,不包蕴“数据报头”、“校验和”和“协议甘休”。

    发送指令数据帧如下:

帧结构

多少报头

从机地址

一声令下代码

校验和

切磋甘休

0x55

0xAA

 

0x61

 

0x0D

字节数

1

1

1

1

1

1

  

12.4.1.2 分析实时数据协议

  
下位机接收到读实时数据命令后,并校验成功,再次来到实时数据,校验和为从“从机地址”初叶的拉长和,不包含“数据报头”、“校验和”和“协议甘休”。

   接收数据帧如下:

帧结构

数据报头

从机地址

指令代码

流量

信号

校验和

协商甘休

0x55

0xAA

 

0x61

浮点型

浮点型

 

0x0D

字节数

1

1

1

1

4

4

1

1

 

12.4.1.3 发送和接收数据事例

发送(十六进制):0x55 0xaa 0x00 0x61 0x61 0x0d

收受(十六进制):0x55 0xaa 0x00 0x61 0x43 0x7a 0x00 0x00 0x43 0xb4 0x15
0x0d

流量数据为:250.00

功率信号数据为:360.00

12.4.2新建设备模块

   如下图:

 葡萄娱乐场 21

     增加对SuperIO.dll的引用,如下图:

葡萄娱乐场 22 

12.4.3营造筑协会商驱动

      新建多少个类:MySendProtocol
和MyReceiveProtocol,MySendProtocol继承SuperIO.Device.DeviceSendProtocol基类,MyReceiveProtocol类承接SCL.Device.DeviceReceiveProtocol。

MySendProtocol 和MyReceiveProtocol两个类都重写(override)

     
“Function61”函数,MySendProtocol类中的Function61函数完结打包发送命令操作,MyReceiveProtocol类中的Function61函数实现深入分析数据操作,FunctionXX在八个类中都会成对出现,主假如为着好记。

 在MySendProtocol实例中得以调用DriverFunction函数,传入相应的一声令下,比如:0x61。会自行调用“Function61”函数,作为调用相应命令函数的驱动接口。GetSendCmdBytes函数接口是在DriverFunction函数基础上包裹的,一样也得以应用,不过要把“isbox“设置成false,不然会对出殡和埋葬的多少做特殊的管理。

     
在MyReceiveProtocol实例中得以调用DriverFunction函数,传入相应的通令,举例:0x61。会活动调用“Function61”函数,作为调用相应命令函数的驱动接口。GetAnalysisData函数是在DriverFunction函数基础上包裹的,同样可以运用,只是多调用了一层GetCommand函数接口。

      具体代码请参见:Device德姆o项目。

12.4.4营造参数和实时数据实例类

   
新建多个类:MyDeviceParameter和MyDeviceRTDataMyDeviceParameter承接SuperIO.Device.DeviceParameter类,用于保存备参数,能够在此类中加进新的设备参数。

   
MyDeviceRTData承接SuperIO.Device.DeviceRealTimeData类,用于保存设备的实时数据,能够依靠广播发表协议自定义设备的实时数据。

   
那四个类承继基类后会自动三番五次SaveSerialize和GetSerialize多个泛型函数,SaveSerialize函数是把当前指标连串化成XML,GetSerialize是把系列化的XML反向变化对象实例。SuperIO.Device.DeviceParameter类和SuperIO.Device.DeviceRealTimeData类是继续自塞里alizeOperation类,他们的接口是IserializeOperation,SerializeOperation只是一个轻巧易行的连串化XML操作类库。

借使开垦者想完全自定义贰个数量长久文件,那么能够继续IserializeOperation接口,重写相应的接口函数,自定义存款和储蓄数据的点子。

12.4.5构建设备驱动

   
“创设协商驱动”和“塑造参数和实时数据实例类”两节都认为创设运营设备做的最初准备,将作为运维设备的质量。

     新建贰个配备类:MyDevice,它三番六遍自SuperIO.Device. RunDevice1。

     开采者注意到还或许有三个SuperIO.Device.
RunDevice类,它是相比较早的运营设备类,思量的平台的包容性,今后还在后续使用,可是新开荒的设施模型不提出采取SuperIO.Device.
RunDevice1类。它们都以承继自IRunDevice接口。

12.5     图形显示的支付

  1. 扩张对SuperIO组件的引用。
  2. 新建Form窗体,承袭SuperIO.Show.IGraphicsShow接口,并且达成接口作用。
  3. 经过UpdateDevice接口落成剖析对象,并出示分析对象后的多寡。

12.6     数据导出的花费

  1. 追加对SuperIO组件的引用。
  2. 新建类,承接SuperIO.Export.IExportData接口,并且达成接口功用。
  3. 因而UpdateDevice接口达成分析对象,并出口格式化后的数目。

12.7     服务组件的付出

  1. 扩张对SuperIO组件的引用。
  2. 新建类,继承SuperIO.Services.AppService抽象类,并且完成接口效率。
  3. 能够经过UpdateDevice接口函数更新设备的缓存数据。

12.8     配置工具的使用

    
手动对框架平台的配备文件实行修改,对配置音讯不便于理解,也便于影响配置文件的格式,所以写了一个布局工具“ConfigTool.exe”,对框架平台的大局参数和驱动音讯进行挂载、删除等。

12.8.1参数配置

   
参数配置首要涉及到:软件消息、安装操作、网络和串口通信等新闻。配置内容如下图

 葡萄娱乐场 23

12.8.2驱动挂载

   
配置工具也足以挂载驱动和插件,配置好之后,运维框架平台能够对其开展操作,以挂载设备驱动为举例下图:

 葡萄娱乐场 24

12.9     小结

   
对器材驱动的付出进行了详细的牵线,对于其余插件请遵照现实的状态开始展览付出,实际情况请参见《叁遍开荒手册》。

 

作者:唯笑志在

Email:504547114@qq.com

QQ:504547114

.NET开荒技艺结盟:54256083

文书档案下载:http://pan.baidu.com/s/1pJ7lZWf

官方网址:http://www.bmpj.net