微型机与应用
MICROCOMPUTER & ITS APPLICATIONS
2000　Vol.19　No.6　P.41-43




用于电器商品安全检验的Windows数据采集系统
钟冠平　徐玉霖
摘要：在Windows环境下，把电器商品安全检测的模拟信号波形采集输入微机，对波形进行显示、存储、打印的软硬件设计方法。
关键词：电器安全检验 波形显示 漏电流
　　机电类商品的安全检测是各国都强制性执行的法定项目，其中要求绝缘强度必须经受高压试验而不击穿，试验通过的电流峰值不超过通常人体能承受的电流。如对于带保护接地端的电器，其试验的高压为交流50Hz、有效值为1500V，限定的试验电流峰值不得超过10mA，持续时间1min。
　　通常以专用的高压仪来测试，高压仪可以输出高压，加在电器需要绝缘隔离的二端，并且检测回路的电流，当电流峰值超过限定值时，切断高压输出，并作出不合格判定。因为高压试验的波形特征复杂、不规则，有的绝缘材料没有重复性现象，如第1次击穿后第2次不再击穿，或第1次击穿后第2次击穿得更严重，或出现飞弧、闪烁。用普通示波器无法观察、保留波形，而存储示波器价格昂贵，也难以保存长时间的波形数据。
　　据此，笔者在计算机Windows环境下，用多媒体声卡及Borland C＋＋编程，设计了一微机模拟信号采集系统，方便了上述问题的分析和解决。经过半年的应用，效果良好。该系统能把安全测试波形的模拟量采集送入微机，进行显示、存储、打印等操作，显示波形可在大范围内缩放，刻度清楚。该系统与通常的存储示波器相比，有记录容量大、方便保存拷贝、价格低的优点。
1  关键技术及运行机制
　　本系统利用目前广泛使用的声卡作为A／D转换工具，经过衰减和取样电路得到的模拟信号送至声卡的线路输入端Line in，A／D转换结果在Windows管理下送入微机，测试过程中可以观察波形。
　　应用程序采用Windows下的Borland C＋＋编写。在开发声卡的Windows程序时，最简单的方法是利用媒体控制高层调用接口。高层调用封装了对硬件设备操作的许多细节，编程者可以采用它的结果，但无法改动其中的细节以满足自身程序的需要，例如对采集数据进行实时处理、加工等。要解决这一问题，必须采用能控制硬件细节的低层调用技术，并且在数据输入过程中，采用双缓冲技术，以便使输入数据流连续而不丢失。双缓冲技术是指二个缓冲区轮流接收输入数据流，当一个缓冲区填满数据时，交给应用程序进行处理，同时另一个缓冲区接收输入数据流，二者轮流进行，不断循环。
　　应用程序处理的数据量很大，它是以数据块为单位，把分配好的空内存块交给声卡设备，内存块的地址、大小、信息格式必须由应用程序指定。当采集数据填满数据块时，设备送1个消息或触发事件通知应用程序，应用程序提交另一个空内存块给设备并对数据进行处理。声卡设备通知应用程序的消息或事件有4种方式，本应用程序采用给设备指定1个窗口的方法，当设备用完数据块、打开或关闭时，把消息发送给窗口。
2  硬件电路的设计与连接
　　下面说明高压试验过程中，观察回路漏电流波形的电路设计和连接方法。
　　高压试验的漏电流一般为几mA，有时会达到几十mA，多数安全标准规定判定上限为10mA，高压仪中可设定的判定电流从0.5至100mA。
　　微机采集信号声卡线性输入端Line in适合的输入峰－峰电压为3V，输入阻抗大于1KΩ。
　　设计原则为：采集信号的一端必须为高压仪的保护地，取样电路的接入不影响高压测试(不明显改变回路电阻、允许通过较宽的漏电流范围使击穿现象正常发生)，微机采集线路的接入不影响取样电路，取样电路的电压范围适合于微机采集信号输入端。
　　根据欧姆定理，当取峰－峰电压V＝0.1V，I＝10mA时，得出R＝10Ω；当取峰－峰电压V＝0.1V，I＝100mA时，得出R＝1Ω。10Ω的电阻对几兆的高压测试回路来说可以忽略不计。当漏电流取100mA时，电阻R应承受的功率为P＝I2R＝0.1×0.1×10＝0.1W，选取功率为5W的电阻，以保证其承受能力。取样电路在漏电流为100mA，R＝10Ω时，峰－峰电压为2V，其电压范围适合微机采集信号输入端。
　　测试漏电流波形的硬件电路连接方法如图1所示。

图1  测试漏电流波形的电路连接图
3  软件系统的设计与实现
　　本系统的软件开发在Borland C＋＋ 5.0 for Windows下进行，其使用环境必须是Windows 95、98或以上操作系统，系统必须安装声卡。
软件开发使用对象Windows库(即OWL)生成程序框架，使用类、低层代码调用及一些必要的API完成本软件的应用功能的编程，下面主要介绍程序的功能实现部分，以说明设计方法。程序的主要功能由mmshlwnd.h和mmshlwnd.cpp完成，为了使用多媒体的低层调用技术，在程序的头文件中必须包含mmsystem.h文件。
　　文件mmshlwnd.cpp按以下方法实现存储示波器的功能。在消息响应表中加入用户命令，如启动示波器输入、停止示波器输入、保存文件、打开文件显示、打印、打印机设置等消息响应函数，以及设备发送的消息，如打开设备、数据输入满、关闭设备等处理函数。
　　在启动示波器输入的响应函数中，首先在内存中开辟1个长度为MAXSIZEOFDATA的采集数据缓冲区，并清除其中内容，分配和建立信息格式块，打开声卡设备，分配和传递1个数据块(长度为VIEWBLOCK)给设备，启动数据采集，同时分配和传递第2个数据块给设备，使其在第1个数据块之后等待，当第1个采集数据块填满时，设备会发送消息给窗口，同时第2个数据块进入接收数据的工作。应用程序收到消息后必须马上取回数据块并进行数据处理。
　　常量宏定义放在头文件中：
＃define MAXSIZEOFDATA  常量1
＃define VIEWBLOCK     常量2
　　CPP的实现过程如下：
void TMmshelWindow::CmScopein()
｛
　／／INSERT＞＞Your code here.
　分配MAXSIZEOFDATA缓冲区；
　清除显示数据缓冲区；
　设置输入数据的信息格式；
　打开输入设备；
　为第一数据块分配内存VIEWBLOCK，并得到其首地址指针；
　为第二数据块分配内存VIEWBLOCK，并得到其首地址指针；
　准备和传递第一个数据块给设备；
　开始输入数据；
　准备和传递第二个数据块给设备；
　启动数据处理程序，保存数据；
　开始在屏幕显示波形；
｝
　　其中的内存分配、数据处理和波形显示等使用OWL和API进行编程，与声卡设备有关的编程使用低层代码调用。停止示波器输入的响应函数包括停止输入数据、清理数据、释放内存、关闭输入设备和保存数据至磁盘文件中等，如下所示：
void TMmshelWindow::CmScopestop()
｛
　／／INSERT＞＞Your code here.
　停止输入数据；
　复位数据块；
　撤销数据块的准备；
　关闭设备；
　读取数据并释放内存；
　打开保存文件对话框，取得文件名；
　保存文件；
　……
}
　　单个数据块装满数据时，设备会发送消息给窗口，应用程序必须取出数据，更换空数据块给设备，其响应函数如下所示：
void TMmshelWindow::MmWimDataFull()
{
　／／INSERT＞＞Your code here.
　撤销数据块的准备；
　取回数据块；
　读取数据并移至MAXSIZEOFDATA显示缓冲区；
　数据块清空后还给设备；
｝
　　波形显示、保存文件和打印波形的响应函数与一般OWL、API应用程序类似，为节省篇幅，以上只叙述本软件实现的主要思想方法及低层调用方式。
4  试验效果
　　(1)合格样品的漏电流波形
　　图2所示为1台合格的电视机高压试验漏电流波形，
用于电器商品安全检验的Windows
数据采集系统它也是交流50Hz，但已经不是正弦波，其峰值为4.7mA。

图2  合格的电视机高压试验漏电流波形
　　(2)不合格样品的漏电流波形
　　对于不合格的测试样品，其漏电流波形不是恒定的周期信号，而是开始部分出现一段冲击波形，在仪器对电流作出判定并切断高压后，出现放电波形。如图3所示为1台不合格的进口传真机高压试验漏电流波形（判定电流为10mA）。该样品在开始测试多次时，均击穿不合格。经过装卸移动之后，由于振动使绝缘距离微小变化及空气温湿度影响等，不再击穿不合格，但根据标准这也是不允许的，因为该样品经过再次人为振动之后仍会击穿不合格。由于测试时采用了该微机采集存储系统，波形保留完好，随时可调出观察，外商对此信服，并做赔偿处理。

图3   不合格的传真机高压试验漏电流波形（判定电流：10mA）
　　该微机存储示波器不仅适合于电器安全试验各项目的波形测试，而且适合于多数需要测量电压、电流波形的情况，其采样间隙可达到22μs，采样精度可达到双字节（即65536个分级精度），微机硬件普及，软件操作简单，在电子电器（或其它专业的商品）检验的许多项目上都可以得到很好的应用。本文所述方法也可供其它实时处理的应用参考和借鉴。
钟冠平（厦门出入境检验检疫局机电所361012）
徐玉霖（厦门出入境检验检疫局机电所361012）
参考文献
1，王培杰．Borland C＋＋环境下Windows 3．1～95编程技术 及实例．北京：机械工业出版社，1997
2，木林森．Windows95应用编程与范例．北京：清华大学出 版社，1997
3，吴炜煜．多媒体技术开发指南．大连：大连理工大学出版 社，1994
收稿日期：1999－12－22
