新闻中心

EEPW首页 > 电源与新能源 > 设计应用 > 电力谐波治理装置数据采集处理系统设计

电力谐波治理装置数据采集处理系统设计

作者: 时间:2011-10-11 来源:网络 收藏
3.3 pci8360a部分代码

本文引用地址:https://www.eepw.com.cn/article/178537.htm

  if(zt8360a_opendevice(m_cardno) > 0) then

  //初始化卡,返回0表示打开设备成功,m_cardno为1

  begin

  showmessage(`打开设备失败`);

  exit;

  end

  else

  begin

  i:=zt8360a_getcardstatus(1); //采集卡状态

  if i>0 then

  begin

  i:=zt8360a_getlasterr(); //得到当前错误号,为0表示无错误

  showmessage(`错误号为:`+inttostr(i));

  end;

  getmem(data,sizeof(tsomearray)*8092); //读数据

  zt8360a_disablead(m_cardno); //禁止ad

  i:=zt8360a_getcardstatus(1);

  if i>0 then

  showmessage(`禁止ad失败,错误号为:`+inttostr(i));

  zt8360a_clearhfifo(m_cardno); //清硬件缓冲区

  i:=zt8360a_getcardstatus(1);

  if i>0 then

  i:=zt8360a_getlasterr();

  showmessage(`清硬件缓冲区失败,错误号为:`+inttostr(i));

  //showmessage(`hfifo`);

  zt8360a_clearsfifo(m_cardno); //清驱动缓冲区

  i:=zt8360a_getcardstatus(1);

  if i>0 then

  i:=zt8360a_getlasterr();

  showmessage(`清驱动缓冲区失败,错误号为:`+inttostr(i));

  zt8360a_aiinit(m_cardno, 0, 1, 0, 0, 1, 625 ,1, 0, 0);

  //设置ad方式控制寄存器

  i:=zt8360a_getcardstatus(1);

  if i>0 then

  // i:=zt8360a_getlasterr();

  i:=zt8360a_getlasterr();

  showmessage(`intit`+inttostr(i));

  zt8360a_openirq( m_cardno, 0, 0, 0, 0); //打开8360a中断

  i:=zt8360a_getcardstatus(1);

  if i>0 then

  i:=zt8360a_getlasterr();

  showmessage(`打开中断失败,错误号为:`+inttostr(i));

  end;

  end;

  3.4 基于单个人工神经元的自适应检测方法

  基于单个人工神经元的自适应检测原理如图2所示,该方法能够对奇次、偶次、特定次、总以及相位进行实时准确的动态检测。假设实际系统中需要检测的最高次谐波是n次。

  (1) 检测总谐波电流:只取sinωt和cosωt作为参考输入。人工神经元学习完成之后,系统的输出z(t)即为总谐波电流。

  (2) 检测奇次谐波电流:取sinωt、cosωt以及sin(2k+1)ωt、cos(2k+1)

  (3) ≤2k+1≤n,k为正整数) 等作为参考输入。人工神经元学习完成之后

  i2k+1(t) = w(2k+1)s·sin(2k+1)ωt + w(2k+1)c·cos(2k+1)ωt (1)

  就是对应的奇次谐波电流的值。

  (4) 检测偶次谐波电流:取sinωt、cosωt以及sin2kωt、cos2kωt(2≤2k≤n,k为正整数)等作为参考输入。人工神经元学习完成之后

  i2k(t) = w2ks·sin2kωt + w2kc·cos2kωt (2)

  就是对应的偶次谐波电流的值。

  (5) 检测特定次谐波和相位:取sinωt、cosωt以及sinkωt、coskωt(k∈[2,n]且为正整数)等作为参考输入。人工神经元学习完成之后

  ik(t) = wks·sinkωt + wkc·coskωt (3)

  就是对应的k次谐波的值;wkc/wks就是k次谐波相角的正切值。

  

  图2 基于单个神经元的谐波检测原理图

  3.5 iplot控件的应用

  iplot控件是非常优秀的控件,能够直观实时显示工业现场中的模拟信号。它功能强大,即使在划分数据时也可以缩放,滚动。x轴,y轴和频道数均无限制。对于不同通道信号采用颜色区分,并用文字标注,方便观察比较分析。能以.bmp,.emf,.jpg各种图形格式保存信号曲线,也可以打印输出。现以其中一路通道信号的显示加以说明。

  var

  currcount:integer;

  retcount:integer;

  i:integer;

  begin

  //设置iocomp中iplt控件的参数

  iplot.channel[0].titletext:= `u相电压信号`; //设置通道标题文字

  iplt1.xaxis[0].min:=0; //设置u相电压信号x轴的起始坐标值

  iplt1.xaxis[0].span:=2560; //设置x轴的坐标域

  iplt1.yaxis[0].min:=-5000; //y轴表示u相电压信号的幅值

  iplt1.yaxis[0].span:=10000;

  i:=zt8360a_getlasterr();

  if i>0 then

  showmessage(`错误号为:`+inttostr(i));

  currcount := zt8360a_getsfifodatacount(m_cardno);

  //得到驱动缓冲区(sfifo)中当前有效数据的个数

  if currcount > 0 then

  begin

  retcount := zt8360a_aisfifo(m_cardno, data, 8192);

  //定时启动ad或外触发启动ad时,从驱动缓冲区中读8192个数到缓冲区

  for i:=0 to retcount do

  begin

  iplt1.channel[0].addxy(x,data^[i]); //图形显示

  x:=x+1;

  end;

  end;

  end;

  3.6 线程的应用和防止数据覆盖

  windows提供的多媒体定时器,它的最小时间精度只能达到1ms。不能满足实时数据采集的要求。在本项目中,采集的电压信号频率为50hz,每个周期为0.02秒。根据项目要求,每个周期需采样256个点,即每0.02/256=0.000078125秒读一次。因此需要使用线程。另外,pci8360a的单通道采样频率最高可达500khz,即每1/500000=0.000002秒采样一次。因此,可能出现数据覆盖,即还没有的数据被新读入的数据覆盖。为防止这种情况发生,需要创建缓存区。

  4 结束语

  在该项目的上位机软件开发过程中,数据采集是其它工作的前提。在数据采集中掌握pci8360a数据采集卡的的使用是非常重要的,它有效的利用了工机控机高速能力。在使用过程中要注意:未接信号的通道一定要接模拟地;为防止引入现场干扰,不应该使信号引脚悬空,可以将不使用的信号引脚与模拟地短路;各选择跳线均选出厂设置。iocomp图形控件的使用使得实验的上位机界面更加美观。iplot控件显示各路信号波形。ispectrumdisplay,ipiechart控件用于显示各次谐波含有率,iangularloggauge控件用于显示基波功率。为提高读数据的速率,使用了线程。动态链接库和防覆盖技术的应用,使得系统更为可靠。多种采集方式同时应用,便于比较多种方法各自的优缺点。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭