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

1.1    开发准备

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

图片 1

  SuperIO.dll是软件平台的基本模块,
SuperIO目录是软件平台的参数配制、数据存储的目录。

1.2    项目配制

1)目标框架选用Framework4.0

图片 2

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

图片 3

具备事例程序的靶子平台采纳x86。首要考虑到32位操作系统与64操作系统的兼容性。

1.3    假定通讯协议

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

电脑发送0x61指令为读实时数据命令,共发送6个字节,校验和为从“从机地址”先导的增长和,不包括“数据报头”、“校验和”和“协议停止”。

出殡指令数据帧如下:

图片 4

  

1.3.2    解析实时数据协议

   
下位机接收到读实时数据命令后,并校验成功,重临实时数据,校验和为从“从机地址”最先的充足和,不包括“数据报头”、“校验和”和“协议结束”。

收受数据帧如下:

图片 5

 

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

1.4    新建设施模块

如下图:

图片 6

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

图片 7

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

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函数接口。

    具体代码请参见:DeviceDemo项目。

1.6    构建参数和实时数据实例类

新建六个类:MyDeviceParameter和MyDeviceRTDataMyDeviceParameter继承SCL.Device.DeviceParameter类,用于保存备参数,可以在此类中加进新的设施参数。

          
MyDeviceRTData继承SCL.Device.DeviceReal提姆(Tim)eData类,用于保存设备的实时数据,可以按照报导协议自定义设备的实时数据。

     
这五个类继承基类后会自动连续SaveSerialize和GetSerialize多少个泛型函数,SaveSerialize函数是把当下目的连串化成XML,GetSerialize是把序列化的XML反向变化对象实例。

         
SCL.Device.DeviceParameter类和SCL.Device.DeviceReal提姆eData类是连续自SerializeOperation类,他们的接口是IserializeOperation,SerializeOperation只是一个简便的系列化XML操作类库。

    
即便开发者想全盘自定义一个数据持久文件,那么可以继承IserializeOperation接口,重写相应的接口函数,自定义存储数据的章程。

 

1.7    构建设备驱动

     
“构建协商驱动”和“构建参数和实时数据实例类”两节都是为构建运行设备做的最初准备,将作为运行设备的习性。

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

开发者注意到还有一个SCL.Device.RunSCLDevice类,它是比较早的运作设备类,考虑的平台的兼容性,现在还在继续使用,可是新开发的设施模型不指出利用SCL.Device.RunSCLDevice类。

它们都是继续自IRunSCLDevice接口。

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命令缓冲区没有数据的时候,软件平台会自行调用GetReal提姆(Tim)eCommand函数接口,重临读实时数据命令,举行发送。

 

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分钟调用四遍这么些函数。可以通讯IsStart提姆er属性启动、截至定时器,通过提姆erInterval属性设置定时器执行间隔。

 

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);

向运行监视器中呈现数据音信

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

同步锁对象

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();

剔除设备事件

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)

可以重写这几个函数,当网络通讯的时候,有客户端与软件平台断开会调用这么些函数接口。

1.8    设备调试

1.8.1    界面形式调度

   界面形式测试首倘使构建一个主程序,模拟真实的应用程序对装备举办

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

1)  引用组件

最紧要引用DeviceDemo程序集。如下图:

 图片 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项目。

1.8.2    控制台形式调试

控制台测试,没有UI突显界面,部分效能可能测试不全。需要经过

SCL.Device.IdebugDevice debug=
SCL.Device.DebugDevice.GetDebugInstance()拿到调试实例。其他代码与“界面格局测试”一样。如下图:

图片 13

1.9    挂载设备模块

在“工业串口和网络软件通讯平台_SuperIO”目录下找到【ConfigTool.exe】应用程序,选拔【设备配备】选卡,单击【挂载设备】按钮,把刚刚开发的装备驱动模块挂载到平台下。如下图:

图片 14

1.10    在凉台下运行设备

    
把设备驱动挂载好未来,运行“工业串口和网络软件通讯平台_SuperIO”目录下的【SuperIO_Run.exe】应用程序,接纳【用户管理】->【用户登陆】菜单,选取【工程师】或【管理员】用户,输入默认的密码:123。

登陆到软件平台后,拔取【设备管理】->【扩充设备】菜单,采纳刚刚挂载的设备驱动模块。如下图:

图片 15

支出的好的装备驱动模块同时协理COM(串品)和TCP(网络)二种简报情势,TCP(网络)通讯时辅助Client和Server二种工作情势。

 

作者QQ:504547114

交流QQ群:54256083

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

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

相关文章

网站地图xml地图