跳到主要内容

驱动开发指南

1. 驱动概述

和Windows或Linux等操作系统一样,要想让接入的硬件设备正常工作,必须有对应的设备驱动程序。

1.1 驱动类型

YFIOs®的驱动程序正常情况下,一个驱动程序对应一种设备。不过如果硬件有一定的兼容性,一个驱动程序也可以对应一类设备。

1.2 驱动特点

和传统的组态驱动不同,YFIOs®绝大多数驱动都不是通用驱动。

1.2.1 通用驱动 vs YFIOs驱动

通用驱动(如Modbus):

  • 大多数厂家的智能设备都不同程度地支持
  • 凡支持该协议的设备,都可以通过同一个设备驱动进行访问
  • 唯一不同的就是设备地址、数据类型、起始地址和数据长度等参变量

YFIOs驱动

  • 支持IO变量自动添加
  • 通信协议本身反而不那么重要
  • 重要的是智能设备本身的"属性",比如温度、湿度、大气压等指标属性

1.2 面向对象设计

YFIOs®很早就采用面向对象的思想构建设备驱动,所以天然地和当前主流的物联网平台相匹配,从设备到云端都可以采用一致的物模型去构建物联网项目。

2. 驱动运行模式

2.1 周期执行模式

驱动程序按设定的扫描时间周期执行。

2.2 手动调用模式

把扫描时间设置为0,表示不会自动运行。设置为该模式的驱动,一般被策略程序直接调用而得以执行。

2.3 禁用模式

驱动还可以设置为Disabled,这样该驱动任何方式的调用将被禁止,如该驱动不存在一样。

3. 开发环境搭建

3.1 两种开发方式

有两种方法开发设备驱动:

方式1:YFIOs开发环境

针对Modbus或者CJ/188协议的智能设备,只需要简单的配置就可以自动生成对应的驱动。

方式2:Visual Studio开发

在Microsoft Visual Studio开发环境里进行开发。

3.2 YFIOs IDE环境

只要下载了YFIOs® Manager,打开运行后:

  • 在菜单【工具】->【YFIOs开发环境】中就可以打开YFIOsIDE程序
  • 或者在YFIOs Manager所在的目录下进入"Tools\F-YFIOsIDE"目录
  • 可以看到"YFIOsIDE.exe",双击打开即可

3.3 Visual Studio环境

3.3.1 安装前提

需要先安装:

  • Visual Studio 2010
    • 安装时需要选择"Visual C# 2010"
  • .NET Micro Framework SDK

3.3.2 安装YFIOs开发模板

下载地址:http://cloud.yfiot.com/file/YFIOs/YFIOsVS2010.rar

安装步骤:

  1. 下载YFIOsVS2010.rar后,解压到合适的目录

    • 文件目录最好不要有中文,不要有空格
    • 后续安装后不能移动
  2. 以管理员身份运行install_vs2010_template.exe

    • 或在有超级用户权限的DOS命令窗口执行该命令
    • 以便于查看调试信息

3.3.3 创建项目

安装完毕后,打开Microsoft Visual C# 2010学习版:

  1. 【文件】菜单下单击"新建项目"
  2. 弹出对话框

从上图可以看出YFIOs模板下,有两个模板:

  • YFIOs Driver:驱动开发的模板
  • YFIOs Strategy:策略开发的模板

4 Modbus驱动开发向导

4.1 开发流程

YFIOs IDE开发环境提供了Modbus驱动开发向导和CJ/188驱动开发向导。

我们以叶帆科技的YF3610-TH21温湿度传感器为例,进行驱动开发及网关接入。

第一步:获取设备说明书

对任何智能设备,第一步需要获取该设备的说明书,了解:

  • 模块供电电压范围
  • 电源和通信接线说明

第二步:获取通信协议

获得通信协议,了解:

  • 通信参数
  • 需要读取的数据的寄存器地址

第三步:设备接线

让YF3300和YF3610-TH21连接在一起。

第四步:使用向导开发驱动

运行YFIOsIDE程序:

  1. 在菜单【文件】下,单击"Modbus驱动开发向导"菜单项
  2. 在弹出的对话框中,根据通信协议的说明,填写和添加相关的选项

4.2 配置说明

基本信息

驱动名称、版本、作者、说明、制造商和设备类型根据实际进行填写即可。

注意

  • 填写什么没有硬性规定
  • 只是驱动名称不要和已有的重复即可

IO变量配置

添加IO变量(物模型中的属性)这一步比较关键。

标识符最好和云端物模型保持一致,这样上传云端的时候,无需进行变量映射,就可以上传到物联网云平台了。

数据区域

数据区域选择保持寄存器(40000)。

一般情况下:

  • 数据地址40001对应的数据地址为0
  • 数据地址40002对应的数据地址为1
  • 依次类推

数据类型

Modbus保持寄存器最小的数据单位就是字,也就是两字节:

  • 无符号:一般选择UInt16
  • 有符号:选择Int16

其它具体的类型就根据实际来进行选择了。

字节顺序

虽然Modbus协议规定是大端传输,高字节在前,但是很多智能设备虽然采用了Modbus协议,在IO数据这块并不一定严格遵守这个约定。

所以字节顺序可以依次验证一下,直到获取的数据和期望值一样,就可以了。

运算表达式

温度和湿度是含有一位小数的,这个需要驱动进行特别处理。

因为Int16的变量范围为-32768到32765,含一位小数,范围是-3276.8到3276.5,也满足温度(-40~1000°C)和湿度(0-100%)的需要。

所以运算表达式需要填写$Value/10.0

  • $Value为获取的原始值
  • 除以10就是我们需要的最终值

4.3 编译和部署

编译驱动

如上,我们依次添加了温度T和湿度H选项,添加完毕后:

  1. 单击"编译"按钮
  2. 选定好输出目录
  3. 编译完毕后会输出两个文件:
    • "YFTH21.dll"
    • "YFTH21.pe"

安装驱动

把这两个文件拷贝到(或者一开始就输出到)YFIOsManager程序所在目录的"Driver"子目录下。

也可以在"Driver"目录下新建目录,然后拷入其中。

验证驱动

拷贝完毕后,重新启动YFIOsManager程序,可以在驱动列表中看到我们新添加的驱动YFTH21。

5 使用自定义驱动

5.1 添加用户设备

  1. 单击"用户设备"选项
  2. 然后双击"新建…"项
  3. 在弹出的用户设备对话框中,单击"..."按钮
  4. 添加一个基于YFTH21驱动的用户设备

5.2 配置设备参数

设置串口号

单击对话框框左下角的"设备接口表"按钮,设置串口号。

我们采用的网关是"YF3300",接入的是RS485接口,所以是COM2,双击该选项则会自动设置串口号为"COM2"。

设备名称和地址

  • 设备名称:设置为"TH21",名称可以任意,只要和其它用户设备名称不重复即可
  • 设备地址:设置为"253",这是叶帆科技智能设备默认的通用地址

如果RS485总线只有一个设备,可以直接设置为这个地址,否则就要设置该设备实际的地址。

串口参数采用默认值即可。

5.3 自动生成IO变量

单击"确定"按钮,则用户驱动完成创建。同时在数据配置中,自动生成IO数据变量。

  • TH就是我们在Modbus驱动开发向导中添加的
  • Csr是驱动自动添加的,表示网关和YF3610-TH21温湿度传感器之间的通信成功率
  • Commstate也是驱动自动添加的,表示智能设备的通信状态,比如0就是正常,非0就是异常

5.4 部署和监控

部署项目

  1. 单击菜单【调试】下的"部署"选项
  2. 或者直接单击工具条上的部署按钮
  3. 部署驱动及相关配置到YF3300网关

数据监控

部署成功重启后,单击"数据监控",就可以看到温度T和湿度H都有对应的值了。

6 调试技巧

6.1 启用调试模式

如果通信失败,我们也可以输出对应的调试信息进行调试。

步骤1:配置信息输出

  1. 双击"项目属性"
  2. 在弹出的对话框面板中,单击进入"信息输出控制"
  3. 勾选所有的选项

步骤2:启用DEBUG模式

  1. 单击"用户设备"
  2. 双击我们添加的用户驱动"TH21"
  3. 在弹出的对话框中,单击进入"其它"面板
  4. 勾选"DEBUG模块"
  5. 单击"确定"按钮关闭对话框

步骤3:重新部署

重新单击"部署"按钮向YF3300网关下载相关配置。

步骤4:查看调试信息

部署完毕重启后,在信息输出区,可以看到网关发出的命令帧及YF3610-TH21温湿度设备的响应帧了。

7. Visual Studio驱动开发

7.1 开发场景

如果基于Modbus或CJ/T188驱动开发向导无法满足驱动开发的需要,则就需要采用Visual Studio进行开发了。

7.2 创建项目

在VS2010中的YFIOs开发模板中,选择YFIOs Driver选项,项目名为"YFIOsDriver",打开后发现,已经有相关的模板代码了。

7.3 核心接口

所有的驱动类需要继承一个接口类:IDriver。

public interface IDriver
{
DriverInfo GetDriverInfo();
int OnLoad(Device dv, IOperate op, object arg);
int OnRun(Device dv, IOperate op, object arg);
int OnUnload(Device dv, IOperate op, object arg);
}

驱动程序必须要实现这四个函数接口。

7.4 接口说明

GetDriverInfo

返回驱动相关信息(请参见DriverInfo驱动配置信息类)。

说明:仅供YFIOs Manager程序调用。

OnLoad

驱动被加载时,将自动调用OnLoad方法。用户可以在该函数内,完成一些初始化操作。

OnRun

根据配置不同,该函数按指定的时间间隔连续被系统调用。

说明

  • 如果时间间隔配置为0,则系统不会自动调用OnRun方法
  • 同一个接口配置的驱动,将共享一个线程
  • 系统将依次调用该方法

OnUnload

驱动被卸载时,系统将调用OnUnload。

注意:目前YFIOs系统不支持驱动卸载,所以该函数可以为空。

7.5 DriverInfo驱动配置信息类

public class DriverInfo
{
//32byte,驱动名称(要保证唯一)
public string Name;

//16byte,版本信息
public string Ver;

//64byte,说明
public string Explain;

//16byte,开发者
public string Developer;

//16byte,日期
public string Date;

//自动化标志
//0 bit 0 - 系统为你初始化通信接口 1 - 由驱动程序本身完成通信接口初始化
//1 bit 0 - 无操作 1 - 由驱动程序本身完成IO变量添加
//2~31 bit 备用
public int AutoFlag;

//通信方式
public DeviceConnMode ConnMode;

//64byte,设备制造商
public string Manufacturer;

//32byte,设备类型
public string DeviceType;

//设备参数
//硬件端口名称 空为无效项
public string PortAddrExplain;

//硬件端口默认值 项选择(如果有的话)用"|" 分隔开,默认项为第一个
public string PortAddrValue;

//端口参数名称 空为无效项
public string PortConfigExplain;

//端口参数默认值 项选择(如果有的话)用"|" 分隔开,默认项为第一个
public string PortConfigValue;

//设备地址名称 空为无效项
public string DeviceAddrExplain;

//设备地址默认值 项选择(如果有的话)用"|" 分隔开,默认项为第一个
public string DeviceAddrValue;

//设备参数名称 空为无效项
public string DeviceConfigExplain;

//设备参数默认值 项选择(如果有的话)用"|" 分隔开,默认项为第一个
public string DeviceConfigValue;

//项参数
//8*32 byte,连接项名称
public string[] ItemExplain;

//8*4 byte 默认值 项选择(如果有的话)用"|" 分隔开,默认项为第一个
public string[] ItemValue;

//扩展配置信息的长度 如果为0,则表示没有(上位机管理程序使用)
public int ConfigSize;
}

7.6 配置说明

该驱动配置信息类的配置信息主要供YFIOs Manager调用,YFIOs Manager根据这个配置:

  1. 自动生成驱动配置参数选项
  2. 生成相关配置信息
  3. 用户配置后,相关配置参数连同驱动程序一起被部署到网关设备里

8.最佳实践

驱动开发建议

  1. 优先使用向导:对于Modbus和CJ/T188协议设备,优先使用驱动开发向导
  2. 规范命名:驱动名称、变量名称要有意义,便于维护
  3. 充分测试:在不同环境下测试驱动稳定性
  4. 完善文档:为驱动编写详细的使用说明

调试技巧

  1. 使用DEBUG模式:查看通信数据帧
  2. 查看日志:分析运行日志定位问题
  3. 数据监控:实时监控变量值变化
  4. 逐步调试:先确保通信正常,再处理数据解析

性能优化

  1. 合理设置扫描周期:根据设备特性设置合适的扫描时间
  2. 优化数据解析:避免过于复杂的数据处理逻辑
  3. 错误处理:添加完善的错误处理机制
  4. 资源管理:合理使用内存和CPU资源