设计文件 名称 编号 版本 Qtouch 驱动文件设计说明 V2.2.0 版权专有违者必究 标准模板 :Q/ST41.34-2010
编制 校核 审核 工艺 标准化 批准 版本号更改人更改日期更改说明变更编号 I
1 目的和范围 1.1 目的 本文档详细介绍了 Qtouch 驱动文件设计的基本格式和接口, 使用这些接口函数可实现与设备的通 讯 QTouch 通讯配置的连接和实时数据库的交互 2 规范性引用文件 表 1 序号标准 / 文件号标准 / 文件名称备注 1 软件编码规范 -C++ 语言 2 C 语言编码规范使用手册 3 术语和缩略语 表 2 序号术语 / 缩略语描述 1 Qt 一种图形系统 2 Linux 嵌入式操作系统 3 QT3 Qt 的版本号 4 4 驱动开发包组成 ( 以 modbusrtu 为例 ) 表 3 序号一级文件二级文件 1 Bin ioitem.dll io 连接属性设置 dll 2 modusrtu linux 下执行程序 3 modbusrtu.exe windows 下执行程序 4 modbusrtu.chm chm 格式帮助文档 共 8 页第 1 页
序号一级文件二级文件 5 Source modbusrtu_linv2.2 lin 下源程序 6 modbusrtu_winv2.2 win 下源程序 驱动包文件组成如下图 : Bin 文件夹下组成如下图 : Source 文件夹下组成如下图 : 5 驱动执行依赖关系 ( 以 modbustcp 为例 ) 表 4 序号文件依赖关系 1 modbustcp 增加一个 modustcp 驱动之后, 从 drive 包中拷贝出来的 linux 下执行程序 2 modbustcp.exe 增加一个 modustcp 驱动之后, 从 drive 包中拷贝出来的 win 下执行程序 3 modbustcp.xml 增加一个 modustcp 驱动之后, 由驱动设置窗口配置的初始化参数 4 modbustcp_reg.xml 由数据库管理配置的 IO 关联参数, 根据这个文件进行发送帧配置 工程文件包组成如下 : 6 结构分解 6.1 顶层包 共 8 页第 2 页
驱动协议模板 ( 串口设备 ) 主程序框架 QCtDrive Xml 配置文件读取 QDomParser 串口操作 QextSerialBase QextSerialPort CSerial 发送接收帧处理 CQueryItem 通讯协议处理 CCom CModbus 实时共享内存 QRamDrive 远程端口连接 SimpleServer ClientSocket 表 5 序号主要接口文件描述 1 ramrt.h,ramrt.cpp 实时数据库系统函数封装 2 domparser.h,domparser.cpp XML 文件读取, 获取用户配置信息的接口 3 serial.h,serial.cpp 串口操作封装, 对串口读写之调用 4 qextserialbase.h,qextserialbase.cpp qextserialport.h,qextserialport.cpp 串口操作基本类 5 win_qextserialport.h,win_qextserialport.cpp Windows 下串口设置和操作类, 与 linux 下而选一 6 posix_qextserialport.h,posix_qextserialport.cpp Linux 下串口设置和操作类, 与 windows 下而选一 7 ctsocket.h,ctsocket.cpp TCP 服务器端封装类 8 socketclient.h,socketclient.cpp TCP 客户端封装类 9 trayicon.h,trayicon.cpp trayicon_win.h,trayicon_win.cpp Windows 下驱动程序显示图标类, 仅 windows 下使用 10 comm.h,comm.cpp 对驱动程序处理的父类, 共有特性初始化 11 Modbus.h,Modbus.cpp 特定 Modbus 程序通讯处理类 12 ctdrive.h,ctdrive.cpp 主框架处理类 共 8 页第 3 页
序号主要接口文件描述 13 main.cpp 程序 main 入口 6.2 执行流程 main QCtDrive 读取 XML 文件 Qtimer 定时器 QDomParser CModbus display CCom CQueryItem CSerial QextSerialPort QextSerialBase QRamDrive SimpleServer ClientSocket 6.3 主要函数说明 1 bool CreateRam( int istationnum ); * 打开实时数据库共享内存, 在操作实时数据库之前必须先打开共享内存 * 参数 istationnum * 站号, 默认为 0 true 表示成功, 否则表示失败 2 double GetItemValue( int istationid, int id ) * 获取实时数据库指定编号的数据 * 参数 istationid * 站号, 默认为 0 * 参数 id 共 8 页第 4 页
* 指定数据在内存中编号 数据值 3 void SetItemValue( int istationid, int id, double dvalue ) * 设置实时数据库指定类型指定编号的数据值 * 参数 istationid * 站号, 默认为 0 * 参数 id * 指定数据在内存中编号 * 参数 dvalue * 设置的数值 * 无返回值 4 int GetKcFlag( int istationid ) * 获取实时数据库下发控制标志 * 参数 istationid * 站号, 默认为 0 int 实时数据库下发控制标志, 为 1 表示有控制要下发, 否则为空 5 StructKcData GetKcData( int istationid ) * 获取实时数据库下发控制信息, 一般在 GetKcFlag( 0 ) 返回 1 后调用 * 参数 istationid * 控制量编号 StructKcData * struct StructKcData { int kcno; // 下发控制的数据内存序号 共 8 页第 5 页
char datakc[200]; // 传递下来的数值 * }; 6 void SetKcFlag(int istationid, int flag) * 设置实时数据库下发控制信息, 一般在 GetKcData(0) 获取到控制信息后清空标志 * 参数 istationid * 站号, 默认为 0 * 参数 flag * 需要被设置的值 * 无返回值 7 void SetKcClear(int istationid,int flag) * 清除数据库下发控制信息 * 参数 istationid * 站号, 默认为 0 * 参数 flag * 为 0 时, 表示清空, 否则无效 * 无返回值 8. bool readethernetlinklayer_reg(qstring path,qstring sname) * 打开 XML 文件, 并读取信息 * 参数 path * 文件路径 * 参数 sname * 文件名 true 表示成功, 否则表示失败 共 8 页第 6 页
9. bool CSerial::OpenCom( ) * 打开串口, 此前需要先配置好 PortSettings settings 结构的串口参数 * 参数 * 无 true 表示成功, 否则表示失败 10. int CSerial::ReadCom( unsigned char * lpbuf, int datalen ) * 读取串口信息 * 参数 lpbuf * 接收数据的结构 * 参数 datalen * 接收数据的最大长度, 函数会在接收到此长度的数据或 1S 未响应后返回 int * 接收到的数据字节长度 11. int CSerial::WriteCom( const void* lpbuf, int dwcount ) * 写入串口信息 * 参数 lpbuf * 写入的数据结构 * 参数 dwcount * 被写入的数据串长度 int * 写入的数据字节长度 共 8 页第 7 页
12. int QSocketClient::readSocketBlock( unsigned char* Buf,int maxlen) * 读取网口接收到的数据 * 参数 Buf * 用以接收数据的结构 * 参数 maxlen * 接收最大长度 int * 接收到的数据字节长度 13. int QSocketClient::writeSocketBlock(unsigned char *Buf,int ilen) * 写入数据到网口 * 参数 Buf * 传入的数据结构 * 参数 ilen * 传入的数据最大长度 int * 写入数据字节长度 7 用户自定义驱动方法 用户可以将自己定义的驱动文件放到 QTouch 的 drives 目录下, 按照一定的规格保存, 即可以实现自定 义驱动的添加,QTouch 的参数系统就会找到这个文件 规则文件为 DrivesConfig.ini, 主要对 drives 下面的文件夹进行管理, 用户可以增加一个专用的文件夹 文件夹分为 2 级管理, 如上图所示为一级文件夹, 主要是对设备的分类, 一般用户可以不新建一级文件夹, 在一级文件夹之下, 可以新建自己的文件夹, 用于将自定义的程序保存进来 以 ModBus 设备为例 : 共 8 页第 8 页
如上表明 : 在 ModBus 设备这个文件夹下面有 5 个子文件夹, 如用户要增加一个专用文件夹则可以如下操作 : 完成这个设置之后, 在 Modbus 设备下就可以建立一个自定义文件夹了 : 在自定义文件夹下, 用户就可以添加自定义驱动, 需要增加一个配置文件 CONFIG.ini: 文件夹内容如下 : 完成后在 QTouch 的设备选择中就会出现自定义的选项 : 共 8 页第 9 页
协议选择中就会出现自定义协议的选项 : A 共 8 页第 10 页