对串口仪表进行数据采集的通用软件模块的设计开发方法

xiaoxiao2020-7-22  18

对串口仪表进行数据采集的通用软件模块的设计开发方法
【专利摘要】本发明属于一种工业测控领域,尤其涉及对串口仪表进行数据采集的通用软件模块的设计开发方法,采用DLL的节省内存和硬盘空间以及使软件模块化的优点,尤其是总结了根据串口仪表通讯协议的共同特点后定义了一种特殊的DLL规范,这个规范就是XHDLL规范,其中包括标准的XHDLL规范通用要求,标准的XHDLL规范接口函数,XHDLL开发方法,XHDLL调试以及XHDLL使用方法。本发明的有益效果在于:本发明能够兼容不同厂家的仪器产品,兼容性好,开发维护方便,对硬件平台的要求比较低,这也减少了开发、实施、维护的成本;对开发者的知识经验要求不高,这也降低了这个规范的开发技术门槛。
【专利说明】对串口仪表进行数据采集的通用软件模块的设计开发方法
【技术领域】
[0001]本发明涉及一种工业测控领域,尤其涉及对串口仪表进行数据采集的通用软件模块的设计开发方法。
【背景技术】
[0002]对于环境监控等应用领域,一般使用数据采集传输仪通过串口连接到不同的监测仪表,然后采用该仪表专用的通讯协议采集其数据,最后汇总上传给监控中心的架构模式,如图1所示,图上显示的为远程数据采集架构图。通常采用资源比较充足的工控机来做采集数据采集传输仪的硬件平台,选择WINDOWS或LINUX操作系统,然后开发运行在该操作系统上的专用软件来实现数据采集。这个专用软件,即测控软件必须能对仪器设备的数据进行采集。因为受监控企业可以自行选择采用何种符合环保要求的仪器,这就要求软件必须能适应这种情况,所以就导致一些问题的产生:(I)不同的人选用不同厂家的监测仪表,而现实中不同厂家的监测仪表的通讯协议大都是自编协议,几乎没有相同的;(2)有些仪表的通讯协议尽管相同但又各有特殊性。比如对于MODBUS协议而言,参数所在的寄存器位置不同或参数值所占用的寄存器数目不同或者参数的解码方法不同;(3)监测仪表输出的数据种类增加或精度提高;(4)使用的监测仪表的升级换代情况。因此,设计开发一种对串口仪表进行数据采集的通用的软件模块是非常有必要的。

【发明内容】

[0003]本发明为克服上述的不足之处,目的在于提供对串口仪表进行数据采集的通用软件模块的设计开发方法,该方法采用一种专门定义的DLL规范,能够节省内存和硬盘空间以及使软件模块化和对串口仪表的采集接口通用化。
[0004]本发明是通过以下技术方案达到上述目的:对串口仪表进行数据采集的通用软件模块的设计开发方法,其特征在于:
[0005]采用DLL作为实现对串口仪表进行数据采集的软件模块,规定了该类DLL的特殊要求,这种规定为XHDLL规范。
[0006]每一种仪表根据其通讯协议及XHDLL规范要求编写开发一个XHDLL ;
[0007]利用测控软件对XHDLL进行调试;
[0008]将XHDLL通过互联网传递给用户操作员,用户操作员把测控系统使用的仪表对应的XHDLL复制到测控软件工作目录中;
[0009]测控软件采用操作系统的API函数显式载入XHDLL ;
[0010]测控软件调用XHDLL采集数据;
[0011 ] 测控软件卸载XHDLL,释放空间。
[0012]作为优选,XHDLL的开发方法步骤如下:
[0013]I)使用开发工具的DLL开发功能,生成一个以仪表名称拼音或英文为名字的空DLL项目,并产生相应的头文件与源文件;[0014]2)在空DLL项目的头文件中添加XHDLL规范接口函数原型,并且按照开发工具的导出函数声明句法声明为导出函数;
[0015]XHDLL规范接口函数原型包括:
[0016]仪表米集命令生产函数:intEncode (int Code, BYTE*buf, int bufLength);
[0017]仪表响应解析函数:BOOLDecode (int Code, BYTE*buf, intbufLength, float氺pfData);
[0018]仪表启动命令生成函数:intStartEncode (int Code, BYTE*buf, intbufLength);
[0019]仪表停止命令生成函数:intStopEncode (int Code, BYTE*buf, int bufLength);
[0020]获得仪表超时值函数:int GetTimeOut (void);
[0021]获得参数索引函数:B00LGetParameterIndex (TCHAR*ParaBuf, intbufLength, int*pnlndex);
[0022]3)根据XHDLL规范对接口函数要求,在DLL的源文件中,参考仪表规格书或使用说明书,以C语言分别实现接口函数;
[0023]4)编译连接,生成XHDLL。
[0024]作为优选,XHDLL通过测控软件调试,具体包括以下步骤:
[0025]I)根据仪表说明书,选择一条或几条真实的仪表的采集命令、该命令的响应以及该响应提供的参数数值,作为样例命令、样例响应及样例参数值;
[0026]2)启动测控软件并以调试模式运行;
[0027]3)添加仪表参数;
[0028]4)测控软件载入并调用DLL中的函数进行数据采集,在读取串口数据后添加断点,把样例响应写入临时缓冲区当做读到的数据;
[0029]5)继续运行测控软件,得到对样例响应解析后获得的参数值;
[0030]6)若获得的参数值同样例参数值不一致,则修改XHDLL源代码,重新调试,直到参数值与样例参数值一致。
[0031]本发明的有益效果在于:(I)当监测仪表新增加或改变时,只需要对每一种仪表编写一个XHDLL,然后通过互联网传递给用户操作员,操作员把该XHDLL复制到测控软件工作目录即可,不必要去现场进行开发。(2)方便用户增购监测仪表,适应用户升级仪表,升级后的监测仪表的XHDLL取同未升级监测仪表XHDLL不同的名字,这样两个不同硬件版本的同一厂家的监测仪表可以在同一系统和谐地工作。(3)开发者可使用自己熟悉的开发工具开发XHDLL,节约了好多时间,也为开发者开发此DLL提供了方便,对开发者的知识经验,计算机知识,编程能力要求也比较低;XHDLL只处理协议编解码,不涉及硬件,由于与硬件无关,编写、调试、测试都简单容易;开发者熟悉了仪表的通讯协议相关采集的几个命令,就可以迅速开发完成并提交用户符合要求的XHDLL ; (4)细化对采集参数的采集控制,增强了软件的适应性。参数指监测仪表测量获得的一种数据,监测仪表可以测量多种物理量因而获得多种数据。以参数为最小采集单位,就可以针对每个参数设定采集间隔和采集参数;(5)XHDLL与测控软件或应用软件开发完全分离,其使用显式载入的方法。当测控软件开发成功后,不会因为仪表的增减而改变,也不必重新建构测控软件即可使用和测试XHDLL ; (6)占用的用户存储空间小、兼容型性好,运用的范围广。XHDLL采用C标准库编写,完全可以被其他测控软件直接使用,不限于用于监测领域,用途广阔;只需要重新建构一下,不需要修改源代码,就可以把XHDLL用在不同的操作系统上;(7)降低了硬件平台的资源要求,也使得开发的应用软件因模块化而易于维护。XHDLL本质是一种DLL,因此对内存和硬盘容量的要求低,模块化了测控软件;(8)解决了用户监测系统的变动问题。
【专利附图】

【附图说明】
[0032]图1是远程数据采集架构图;
[0033]图2是本发明方法的步骤流程图;
[0034]图3是测控软件添加XHDLL仪表参数界面;
[0035]图4是测控软件使用XHDLL采集数据流程图。
【具体实施方式】
[0036]下面结合具体实施例对本发明进行进一步描述,但本发明的保护范围并不仅限于此:
[0037]实施例1:本发明的对串口仪表进行数据采集的通用软件模块的设计开发方法,如图2所示包括:
[0038]根据仪表说明书及通讯协议确定串口配置参数、采集相关命令及响应解析方法;
[0039]每一种仪表根据XHDLL规范编写开发一个XHDLL ;
[0040]利用测控软件对XHDLL进行调试;
[0041]将XHDLL通过互联网传递给用户操作员,用户操作员把添加仪表对应的XHDLL复制到测控软件工作目录中;
[0042]测控软件调用XHDLL采集数据;
[0043]测控软件卸载XHDLL,释放空间。
[0044]XHDLL规范通用要求包括以下几点:
[0045]1、每种不同的监测仪表都必须有一个与之对应的XHDLL。
[0046]2、调用XHDLL的测控软件或应用软件应该满足如下条件:
[0047](2.1)必须提供一个对话框,可参考图3。该对话框至少需要包括允许用户输入或修改XHDLL名字、采集参数、设备地址的编辑控件,包括输入或修改串口及其参数的控件;
[0048](2.2)测控软件应该能够允许用户存储、删除、增加、修改、显示通过上述对话框提供的用户输入;
[0049]3、一种监测仪表产生多种参数,这些参数的采集命令是不同的,XHDLL必须支持根据参数的不同生成不同的命令。
[0050]4、使用零基整数索引来对一个监测仪表的参数进行编码,比如一个监测仪表有3个参数,则编码为0,1,2。调用者使用这个编码作为索引来生成不同的参数的采集命令
[0051]5、不同监测仪表对命令的处理时间不同,因此必须根据监测仪表规格提供命令响应的最大超时时间。
[0052]6、对于MODBUS协议的仪表,硬编码进不同监测仪表的寄存器地址以及数目,实现对获得寄存器内容的解析方法,协议发送和响应字节流通过调用实现标准MODBUS协议的DLL或者外部库的相应函数来完成,XHDLL本身不提供。[0053]7、由于对串口的访问对于所有的设备都是相同的,XHDLL不可以涉及访问串口的代码(与硬件无关)。
[0054]8、为支持多线程应用软件使用XHDLL,XHDLL编写时不允许使用全局可写变量,
[0055]9、所有XHDLL必须采用相同原型的接口函数。这些接口函数为对仪表进行采集所必不可少的函数,其内部实现根据仪表的通讯协议不同而不同,XHDLL不必要提供对仪表通讯协议的完全支持。
[0056]10、XHDLL必须由测控软件采用操作系统的API函数显式载入,不可以使用隐式载入的方法使用。
[0057]11、XHDLL编写时只可以使用多线程C标准库函数。
[0058]XHDLL的开发方法步骤如下:
[0059]I)使用开发工具的DLL开发功能,生成一个以仪表名称拼音或英文为名字的空DLL项目,并产生相应的头文件与源文件;
[0060]2)在空DLL项目的头文件中添加XHDLL规范接口函数原型,并且按照开发工具的导出函数声明句法声明为导出函数;
[0061]3)根据XHDLL规范接口函数要求,DLL的源文件中,参考仪表规格书或使用说明书,以C语言分别实现接口函数;
[0062]4)编译连接,生成XHDLL。
[0063]其中,XHDLL规范接口函数原型包括6种,分别为仪表采集命令生产函数:int Encode (int Code, BYTE*buf, int bufLength);仪表响应解析函数:BOOLDecode (int Code, BYTE*buf, int bufLength, f loat*pfData);仪表启动命令生成函数:int StartEncode (int Code, BYTE*buf, int bufLength);仪表停止命令生成函数:int StopEncode (int Code, BYTE*buf, int bufLength);获得仪表超时值函数:intGetTimeOut (void);获得参数索引函数:B00L GetParameterIndex (TCHAR*ParaBuf, intbufLength, int*pnlndex)。
[0064](I)仪表采集命令生成函数:
[0065]采集仪表数据必须发送命令,因此所有XHDLL都有一个函数用于根据仪表的通讯协议生成命令。
[0066]函数原型为:intEncode (int Code, BYTE*buf, int bufLength)
[0067]说明:Code为参数索引,buf及bufLength分别为采集线程分配的缓冲区及其长度。此函数根据仪表通讯协议对对应的参数生成采集命令字节流,然后返回字节流的长度。如果无法对参数生成采集命令(不支持或命令字符串大于缓冲区长度)则返回长度为O。
[0068](2)仪表响应解析函数:
[0069]仪器设备对命令的响应必须解析才能得到数据,所以必须提供一个响应解析函数。
[0070]函数原型为:B00LDecode (int Code, BYTE*buf, int bufLength, f loat*pfData)
[0071]说明:Code为参数索引,buf及bufLength分别为从仪表读到的数据所在缓冲区指针及数据字节数,PfData为采集线程分配的用于存放采集结果的4字节浮点数缓冲区指针。此函数根据仪表的通讯协议,对从仪表读到的字节流进行解析,得到参数索引对应的参数的测量数据并存放到浮点缓冲区并返回真。如果返回命令格式、校验等出错,则返回假。[0072](3)仪表启动命令生成函数:
[0073]有些监测仪表在采集数据之前要执行特定的启动命令,这个函数用来生成此命令。这个函数根据仪表的规范来确定是否需要实现,可以简单的返回0,则调用者可以安全地忽略对此函数的调用;也可以不实现,那么调用者应该因为得到的函数指针为NULL而不调用此函数并且不以为有错地继续执行下去。
[0074]函数原型为:intStartEncode (int Code, BYTE*buf, int bufLength)
[0075]说明:Code为参数索引,buf及bufLength分别为采集线程分配的缓冲区及其长度。此函数根据仪表通讯协议对相应的参数生成启动命令字节序列,然后返回其长度。如果无法对参数生成启动命令(不支持或命令字符串大于缓冲区长度)则返回长度为O。如果仪表无启动要求,此函数可以不实现。
[0076](4)仪表停止命令生成函数:
[0077]有些监测仪表在采集数据结束之后要执行特定的停止分析命令,这个函数用来生成此命令。这个函数根据仪表的规范来确定是否需要实现,可以简单的返回0,则调用者可以安全地忽略对此函数的调用;也可以不实现,那么调用者应该因得到的函数指针为NULL而不调用此函数并且不以为有错地继续执行下去。
[0078]函数原型为:intStopEncode (int Code, BYTE*buf, int bufLength)
[0079]说明:Code为参数索引,buf及bufLength分别为采集线程分配的缓冲区及其长度。此函数根据仪表通讯协议对相应的参数生成停止命令字节序列,然后返回其长度。如果无法对参数生成停止命令(不支持或命令字符串大于缓冲区长度)则返回长度为O。如果仪表无停止要求,此函数可以不实现。
[0080](5)获得仪表超时值函数:
[0081 ] 监测仪表对命令的响应时间通常是不同的,不同的仪表有不同的响应时间,因而应该针对不同的仪表设定不同的超时常数。XHDLL提供一个函数以提供最大命令响应时间,这个时间应该由仪表规格书或者由仪表开发者提供,响应时间单位为毫秒。
[0082]函数原型为:intGetTimeOut (void)
[0083]说明:此函数返回一个预先设定的以毫秒为单位的超时值。
[0084](6)获得参数索引函数:
[0085]在XHDLL中实现一个查询函数,这个函数可以通过参数名称字符串作为参数获得该参数的索引。这样在配置的时候用户根据参数名称配置,而开发人员编写软件时内部使用索引来调用函数。
[0086]函数原型为:B00LGetParameterIndex (TCHAR*ParaBuf, intbufLength, int*pnlndex)
[0087]说明:ParaBuf为参数名字字符串缓冲区指针,参数名字为UNICODE编码。bufLength为参数缓冲区长度。PfData为采集线程分配的用于存放参数索引的整数缓冲区指针。此函数把参数名字同DLL中预先设定的参数名字进行字符串比较,如果有一个匹配,就返回其索引,返回真;如果没有匹配,则返回假。
[0088]完成XHDLL的开发后,需要对其进行测试和调试,以确保其正确性。调试时并不需要实际监测仪表,只要已经开发成功的测控软件即可。具体包括以下步骤:
[0089]I)根据仪表说明书,选择一条真实的仪表的的采集命令、该命令的响应以及该响应提供的参数数值,作为样例命令、样例响应及样例参数值;
[0090]2)启动测控软件并以调试模式运行;
[0091]3)添加仪表参数;
[0092]4)测控软件载入并调用DLL中的函数进行数据采集,在读取串口数据后添加断点,把样例响应写入临时缓冲区当做读到的数据;
[0093]5)继续运行测控软件,得到对样例响应解析后获得的参数值;
[0094]6)若获得的参数值同样例参数值不一致,则修改XHDLL源代码,重新调试,直到参数值与样例参数值一致。
[0095]XHDLL开发完成后,经过下述安装和添加参数操作后即可被软件使用来采集数据:
[0096](I)安装 XHDLL
[0097]对于已经正在运行的系统,把XHDLL通过互联网或其他媒介传递给用户,并由用户复制到测控软件安装目录下;对于最新软件更新,把XHDLL打包到测控软件安装包,这样安装测控软件时XHDLL就被复制到测控软件安装目录下了。每一个测控软件安装包制作时应该把到那时为止开发者组织已经开发完成的所有XHDLL都添加到安装包中。
[0098](2)添加监测仪表 [0099]系统维护人员在测控软件中执行添加仪表参数操作,测控软件的相关界面如图2所示。输入XHDLL名字、仪表参数名字、以及串口配置、仪表地址等并存入数据库。根据需要把一个采集系统所有监测仪表需要的XHDLL都添加到测控系统中。
[0100](3)使用XHDLL采集数据
[0101]测控软件如图4流程图所示载入、调用及卸载某一仪表参数对应的XHDLL,则可采集到该监测仪表某参数的一个数据。在软件中定时执行图4流程,就可实现对该监测仪表某参数的连续采集。对所有需要采集的监测仪表参数执行相同的流程,则全系统所有监测仪表参数都会得到采集。
[0102]下面是运行于WINDOWS XP的用VC2010开发的、用于采集分析污水中污染物含量的仪器T0C-602C的XHDLL源代码例子,只列出关键源代码,DLL架构相关的WINDOWS DLL通用文件省去,T0C-602C分析污水中的TOC (有机污染物)及COD (化学需氧量)并通过串口同上位机通讯。
[0103]一、XHDLL 的名称为:T0C_602C.DLL。
[0104]二、XHDLL 的头文件:
[0105]
Il下列ifdef块是创建使从DLL导出更简单的
Il宏的标准方法。此DLL中的所有文件都是用命令行上定义的T0C—620C—EXPORTS
//符号编译的。在使用此DLL的
Il任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会

[0106]
【权利要求】
1.对串口仪表进行数据采集的通用软件模块的设计开发方法,其特征在于: 采用DLL作为实现对串口仪表进行数据采集的软件模块,规定了该类DLL的特殊要求,这种规定为XHDLL规范。 每一种仪表根据XHDLL规范编写开发一个XHDLL ; 利用测控软件对XHDLL进行调试; 用户操作员把添加仪表对应的XHDLL添加到测控软件工作目录中; 测控软件调用XHDLL采集数据; 测控软件卸载XHDLL,释放空间。
2.根据权利要求1所述的对串口仪表进行数据采集的通用软件模块的设计开发方法,其特征在于,XHDLL的开发方法步骤如下: 1)使用开发工具的DLL开发功能,生成一个以仪表名称拼音或英文为名字的空DLL项目,并产生相应的头文件与源文件; 2)在空DLL项目的头文件中添加XHDLL规范接口函数原型,并且按照开发工具的导出函数声明句法声明为导出函数; XHDLL规范接口函数原型包括: 仪表米集命令生产函数:int Encode(int Code, BYTE*buf, int bufLength); 仪表响应解析函数:BOOL Decode (int Code, BYTE*buf, intbufLength, float氺pfData); 仪表启动命令生成函数:int StartEncode (int Code, BYTE*buf, int bufLength); 仪表停止命令生成函数:int StopEncode (int Code, BYTE*buf, int bufLength); 获得仪表超时值函数:int GetTimeOut (void); 获得参数索引函数:BOOL GetParameterIndex (TCHAR*ParaBuf, intbufLength, int*pnlndex); 3)根据XHDLL规范接口函数要求,DLL的源文件中,参考仪表规格书或使用说明书,以C语言分别实现接口函数; 4)编译连接,生成XHDLL。
3.根据权利要求1所述的对串口仪表进行数据采集的通用软件模块的设计开发方法,其特征在于,XHDLL通过测控软件调试,具体包括以下步骤: 1)根据仪表说明书获得真实的仪表的采集命令、响应以及该响应提供的参数数值,作为样例命令、样例响应及样例参数值; 2)启动测控软件并以调试模式运行; 3)添加仪表参数; 4)测控软件载入并调用DLL中的函数进行数据采集,在读取串口数据后添加断点,把样例响应写入临时缓冲区当做读到的数据; 5)继续运行测控软件,得到对样例响应解析后获得的参数值; 6)若获得的参数值同样例参数值不一致,则修改XHDLL源代码,重复步骤2)—5),直到参数值与样例参数值一致。
4.根据权利要求3所述的对串口仪表进行数据采集的通用软件模块的设计开发方法,其特征在于,测控软件采用操作系统的API函数显式载入XHDLL后再调用其中的函数。
【文档编号】G06F9/44GK103955371SQ201410179296
【公开日】2014年7月30日 申请日期:2014年4月29日 优先权日:2014年4月29日
【发明者】薛宏, 王辉, 张标标, 杜克林 申请人:浙江银江研究院有限公司

最新回复(0)