1 引言
在信息科學(xué)中,,數(shù)據(jù)采集技術(shù)已經(jīng)成為其重要的一個研究問題,,它已經(jīng)與計算機技術(shù)、網(wǎng)絡(luò)技術(shù),、傳感器技術(shù),、信號處理技術(shù)共同構(gòu)成了現(xiàn)代檢測技術(shù)的基礎(chǔ),隨著科學(xué)技術(shù)的發(fā)展和數(shù)據(jù)采集系統(tǒng)的廣泛應(yīng)用,,人們對數(shù)據(jù)采集的主要技術(shù)指標(biāo),,如采樣速率、分辨率,、精度,、輸入電壓范圍、控制方式以及抗干擾能力等方面,,都提出了越來越高的要求,,尤其是采樣速率,更是數(shù)據(jù)采集系統(tǒng)設(shè)計者和使用者最關(guān)心的一項重要指標(biāo),。在電力系統(tǒng)自動化領(lǐng)域,,實時數(shù)據(jù)采集是至關(guān)重要的環(huán)節(jié),它直接影響整個自動化裝置的性能,。因此,,提高采集速度和精度一直是電力系統(tǒng)軟件開發(fā)人員要解決的難題。
2 系統(tǒng)結(jié)構(gòu)
本文介紹的phcteeq-1型電力諧波綜合治理實驗裝置的實時數(shù)據(jù)采集系統(tǒng)結(jié)構(gòu)示意如圖1所示,。
圖1 采集系統(tǒng)結(jié)構(gòu)示意圖
裝置采用電力諧波有源濾波和無源濾波的先進理論和技術(shù),,以igbt-ipm智能模塊、dsp,、工控機等核心部件為硬件基礎(chǔ),,進行電力諧波綜合治理技術(shù)實驗,實時性好,,實驗效果明顯。裝置采用公共基礎(chǔ)臺+功能掛件的設(shè)計方式,,結(jié)構(gòu)緊湊,,集成度高,,擴展性好,能夠完成單相/三相電力諧波的產(chǎn)生,、在線檢測,、分析、有源濾波和無源濾波等多項實驗,。
2.1 數(shù)據(jù)采集卡
在該裝置中,模擬信號的采集主要通過數(shù)據(jù)采集卡,,在這個裝置中采用的pci8360a數(shù)據(jù)采集卡:它具有32個模擬量輸入通道:ad0-ad31;輸入信號范圍:0~10v,,-5v~+5v,,0~20ma (0~10v為出廠默認(rèn)設(shè)置)。輸入精度為12位,。單通道最大采樣頻率:500khz,多通道最大采樣頻率為200khz,。啟動轉(zhuǎn)換方式為軟件啟動/外觸發(fā)(定時)啟動。這里將模擬量輸入單雙端選擇跳線jp2設(shè)置為單端輸入,,模擬量輸入范圍選擇跳線jp1,,jp3設(shè)置為雙極性。
在這個實驗裝置中需要采集的模擬信號有十四路:三相負(fù)載電流信號,,三相補償電流信號,,三相電源電流信號,pwm波信號,,變壓器原邊電流信號,,三相電壓信號。采用dhpt,、dhct高精度微型傳感器來完成數(shù)據(jù)采集的功能,,采集到的數(shù)據(jù)經(jīng)處理后傳輸?shù)綌?shù)據(jù)采集卡與dsp中。傳輸?shù)綌?shù)據(jù)采集卡的信號,,一方面,,實時動態(tài)顯示原始信號,另一方面,,經(jīng)fft分析和基于單個人工神經(jīng)元的自適應(yīng)電力諧波檢測方法分析后顯示各次諧波權(quán)值,。
2.2 dsp部分
dsp采用tms320f2812,tms320x28xx信號處理器集成了事件管理器(281x處理器),,epwm, ecap, a/d轉(zhuǎn)換模塊,,spi外設(shè)接口,sci通信接口,,ecan總線通信模塊,,看門狗,通用目的數(shù)字量io,,pll時鐘模塊,,多通道緩沖串口,,外部中斷接口,存儲器及其接口,,內(nèi)部集成電路(i2c)等多種外設(shè)單元,,使用戶能夠以很便宜的價格開發(fā)高性能數(shù)字控制系統(tǒng)。傳輸給dsp的各種信號經(jīng)fft算法分析,,將各次諧波權(quán)值發(fā)送給工控機,。dsp與上位機采用232串口通信。數(shù)據(jù)幀的格式如下:
a相:aaaa 1次諧波權(quán)值 3次諧波權(quán)值 5次諧波權(quán)值 … 25次諧波權(quán)值 aaaa
b相:bbbb 1次諧波權(quán)值 3次諧波權(quán)值 5次諧波權(quán)值 … 25次諧波權(quán)值 bbbb
c相:cccc 1次諧波權(quán)值 3次諧波權(quán)值 5次諧波權(quán)值 … 25次諧波權(quán)值 cccc
當(dāng)用戶選中了查看經(jīng)dsp分析的某相信號時(單選),,上位軟件發(fā)送相應(yīng)需求信號給dsp,,例如:上位機發(fā)送aaaa,dsp接收到該信號后,,首先發(fā)送兩個字節(jié)的幀頭aaaa響應(yīng)上位機,,上位機判斷回傳的數(shù)據(jù)是否為aaaa,是,,則接收并顯示,,否,則不予理采,。每次諧波權(quán)值采用32位表示,,按照ieee 754 標(biāo)準(zhǔn):
(1) 第1位為符號位,1 代表負(fù),,0代表正,;
(2) 接下來用8位來表示指數(shù)部分;
(3) 接下來的23位用來表示有效數(shù)位,。
幀尾為aaaa,,表示一幀數(shù)據(jù)發(fā)送完畢。
2.3 plc部分
plc采用s7-200,,主要完成掛件識別功能,。將各變量狀態(tài)通過opc技術(shù)與上位機軟件通信。上位機軟件組態(tài)顯示電路狀態(tài),,可以直觀查看電路當(dāng)前狀態(tài),。
3 上位機軟件
3.1 軟件開發(fā)方式
軟件采用delphi 7.0完全面向?qū)ο蟮目梢暬脚_開發(fā),它是borland公司最優(yōu)秀的windows開發(fā)工具之一,它的可視化開發(fā)環(huán)境和面向?qū)ο蟮目焖賾?yīng)用程序開發(fā)(rad)工具,使程序開發(fā)人員能在windows平臺上快速開發(fā)出32位的windows應(yīng)用程序,。它采用面向?qū)ο蟮某绦蛟O(shè)計語言object pascal,。下面對上位機軟件中的關(guān)鍵技術(shù)加以說明。
在pci8360a的使用中有三種可行的軟件開發(fā)方式:
(1) 使用廠家提供的開發(fā)軟件,。廠家提供的軟件只能作為測試采集卡是否正常的工具,。
(2) 自己動手編制程序完成底層的數(shù)集和指令的輸出。此方法工作量大,。
(3) 利用開發(fā)商所提供的windows標(biāo)準(zhǔn)動聯(lián)接庫文件,。使用動態(tài)鏈接庫有如下優(yōu)點:
l應(yīng)用程序編譯鏈接后的可執(zhí)行文件較?。?br />
l應(yīng)用程序所需用到的內(nèi)存較?。?br />
l對應(yīng)用程某一模塊的修改,,更換不會影響到其它模塊,。本系統(tǒng)的開發(fā)此種方式。動態(tài)鏈接庫主要有兩種調(diào)用方法:靜態(tài)調(diào)用和動態(tài)調(diào)用,。
動態(tài)鏈接庫的靜態(tài)調(diào)用是最簡單的調(diào)用方法,。它主要使用external指令來聲明外部的函數(shù)或過程。為了方便使用和維護動態(tài)鏈接庫,,可以將工程中所用到的所有不同動態(tài)鏈接庫中的函數(shù)統(tǒng)一定義在一個單元中,,并且還可以在該單元中定義調(diào)用庫中函數(shù)或過程時所使用的常量或數(shù)據(jù)類型。
動態(tài)鏈接庫的動態(tài)調(diào)用主要是使用windows api函數(shù)進行相應(yīng)的操作,,比靜態(tài)調(diào)用復(fù)雜的多,。因此,這里采用動態(tài)鏈接庫的靜態(tài)調(diào)用的方向,。
3.2 連續(xù)ad采集的編程思路
(1)首先在程序初始化時調(diào)用 zt8360a_opendevice函數(shù),,用于打開設(shè)備,只調(diào)一次即可,。
(2) 調(diào)用 zt8360a_disablead 函數(shù),,禁止ad;調(diào)用zt8360a_clearhfifo函數(shù),,清硬件緩沖區(qū)(hfifo),;調(diào)用 zt8360a_clearsfifo 函數(shù),清軟件緩沖區(qū)(sfifo),;調(diào)用zt8360a_aiinit 函數(shù),,做一些ad初始化工作;調(diào)用 zt8360a_openirq函數(shù),,打開hfifo半滿中斷,。
(3)在一個循環(huán)中不斷調(diào)用zt8360a_getsfifodata count判斷sfifo中數(shù)據(jù)的個數(shù),申請一個數(shù)組,,并把這個數(shù)組中傳入 zt8360a_ aisfifo 用于接收數(shù)據(jù),把讀出的數(shù)據(jù)保存到文件或直接顯示,。注意:sfifo的默認(rèn)大小為 819200,用戶要不斷讀數(shù),,使sfifo有空間放入新的來自hfifo的數(shù),,如果sfifo中的有效數(shù)據(jù)的個數(shù)接近819200,會使整個ad過程停止,。如果想重新采集,,必須重復(fù)2—3步,。
(4) 調(diào)用 zt8360a_closeirq函數(shù),停止采集過程,。
(5) 在程序退出前調(diào)用 zt8360a_closedevice函數(shù),。
3.3 pci8360a數(shù)據(jù)采集卡數(shù)據(jù)采集部分代碼
if(zt8360a_opendevice(m_cardno) <> 0) then
//初始化數(shù)據(jù)采集卡,返回0表示打開設(shè)備成功,,m_cardno為1
begin
showmessage(`打開設(shè)備失敗`);
exit;
end
else
begin
i:=zt8360a_getcardstatus(1); //采集卡狀態(tài)
if i<>0 then
begin
i:=zt8360a_getlasterr(); //得到當(dāng)前錯誤號,,為0表示無錯誤
showmessage(`錯誤號為:`+inttostr(i));
end;
getmem(data,sizeof(tsomearray)*8092); //讀數(shù)據(jù)
zt8360a_disablead(m_cardno); //禁止ad
i:=zt8360a_getcardstatus(1);
if i<>0 then
showmessage(`禁止ad失敗,錯誤號為:`+inttostr(i));
zt8360a_clearhfifo(m_cardno); //清硬件緩沖區(qū)
i:=zt8360a_getcardstatus(1);
if i<>0 then
i:=zt8360a_getlasterr();
showmessage(`清硬件緩沖區(qū)失敗,,錯誤號為:`+inttostr(i));
//showmessage(`hfifo`);
zt8360a_clearsfifo(m_cardno); //清驅(qū)動緩沖區(qū)
i:=zt8360a_getcardstatus(1);
if i<>0 then
i:=zt8360a_getlasterr();
showmessage(`清驅(qū)動緩沖區(qū)失敗,,錯誤號為:`+inttostr(i));
zt8360a_aiinit(m_cardno, 0, 1, 0, 0, 1, 625 ,1, 0, 0);
//設(shè)置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 基于單個人工神經(jīng)元的自適應(yīng)電力諧波檢測方法
基于單個人工神經(jīng)元的自適應(yīng)電力諧波檢測原理如圖2所示,,該方法能夠?qū)ζ娲?、偶次、特定次,、總諧波以及相位進行實時準(zhǔn)確的動態(tài)檢測,。假設(shè)實際系統(tǒng)中需要檢測的最高次諧波是n次。
(1) 檢測總諧波電流:只取sinωt和cosωt作為參考輸入,。人工神經(jīng)元學(xué)習(xí)完成之后,,系統(tǒng)的輸出z(t)即為總諧波電流。
(2) 檢測奇次諧波電流:取sinωt,、cosωt以及sin(2k+1)ωt,、cos(2k+1)
(3) ≤2k+1≤n,k為正整數(shù)) 等作為參考輸入,。人工神經(jīng)元學(xué)習(xí)完成之后
i2k+1(t) = w(2k+1)s·sin(2k+1)ωt + w(2k+1)c·cos(2k+1)ωt (1)
就是對應(yīng)的奇次諧波電流的值,。
(4) 檢測偶次諧波電流:取sinωt、cosωt以及sin2kωt,、cos2kωt(2≤2k≤n,,k為正整數(shù))等作為參考輸入。人工神經(jīng)元學(xué)習(xí)完成之后
i2k(t) = w2ks·sin2kωt + w2kc·cos2kωt (2)
就是對應(yīng)的偶次諧波電流的值,。
(5) 檢測特定次諧波和相位:取sinωt,、cosωt以及sinkωt、coskωt(k∈[2,n]且為正整數(shù))等作為參考輸入,。人工神經(jīng)元學(xué)習(xí)完成之后
ik(t) = wks·sinkωt + wkc·coskωt (3)
就是對應(yīng)的k次諧波的值,;wkc/wks就是k次諧波相角的正切值。
圖2 基于單個神經(jīng)元的電力諧波檢測原理圖
3.5 iplot控件的應(yīng)用
iplot控件是非常優(yōu)秀的控件,,能夠直觀實時顯示工業(yè)現(xiàn)場中的模擬信號,。它功能強大,即使在劃分?jǐn)?shù)據(jù)時也可以縮放,滾動,。x軸,,y軸和頻道數(shù)均無限制。對于不同通道信號采用顏色區(qū)分,,并用文字標(biāo)注,,方便觀察比較分析。能以.bmp,.emf,.jpg各種圖形格式保存信號曲線,,也可以打印輸出?,F(xiàn)以其中一路通道信號的顯示加以說明。
var
currcount:integer;
retcount:integer;
i:integer;
begin
//設(shè)置iocomp中iplt控件的參數(shù)
iplot.channel[0].titletext:= `u相電壓信號`; //設(shè)置通道標(biāo)題文字
iplt1.xaxis[0].min:=0; //設(shè)置u相電壓信號x軸的起始坐標(biāo)值
iplt1.xaxis[0].span:=2560; //設(shè)置x軸的坐標(biāo)域
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);
//得到驅(qū)動緩沖區(qū)(sfifo)中當(dāng)前有效數(shù)據(jù)的個數(shù)
if currcount > 0 then
begin
retcount := zt8360a_aisfifo(m_cardno, data, 8192);
//定時啟動ad或外觸發(fā)啟動ad時,,從驅(qū)動緩沖區(qū)中讀8192個數(shù)到緩沖區(qū)
for i:=0 to retcount do
begin
iplt1.channel[0].addxy(x,data^[i]); //圖形顯示
x:=x+1;
end;
end;
end;
3.6 線程的應(yīng)用和防止數(shù)據(jù)覆蓋
windows提供的多媒體定時器,它的最小時間精度只能達(dá)到1ms,。不能滿足實時數(shù)據(jù)采集的要求,。在本項目中,采集的電壓信號頻率為50hz,每個周期為0.02秒,。根據(jù)項目要求,,每個周期需采樣256個點,即每0.02/256=0.000078125秒讀一次,。因此需要使用線程,。另外,pci8360a的單通道采樣頻率最高可達(dá)500khz,,即每1/500000=0.000002秒采樣一次,。因此,可能出現(xiàn)數(shù)據(jù)覆蓋,,即還沒有處理的數(shù)據(jù)被新讀入的數(shù)據(jù)覆蓋,。為防止這種情況發(fā)生,需要創(chuàng)建緩存區(qū),。
4 結(jié)束語
在該項目的上位機軟件開發(fā)過程中,,數(shù)據(jù)采集是其它工作的前提。在數(shù)據(jù)采集中掌握pci8360a數(shù)據(jù)采集卡的的使用是非常重要的,,它有效的利用了工機控機高速處理能力,。在使用過程中要注意:未接信號的通道一定要接模擬地;為防止引入現(xiàn)場干擾,,不應(yīng)該使信號引腳懸空,,可以將不使用的信號引腳與模擬地短路;各選擇跳線均選出廠設(shè)置,。iocomp圖形控件的使用使得實驗的上位機界面更加美觀,。iplot控件顯示各路信號波形。ispectrumdisplay,ipiechart控件用于顯示各次諧波含有率,,iangularloggauge控件用于顯示基波功率,。為提高讀數(shù)據(jù)的速率,使用了線程,。動態(tài)鏈接庫和防覆蓋技術(shù)的應(yīng)用,,使得系統(tǒng)更為可靠。多種采集方式同時應(yīng)用,,便于比較多種方法各自的優(yōu)缺點,。