摘要:介紹了用分布式技術(shù)設(shè)計的發(fā)電機勵磁監(jiān)控系統(tǒng)。系統(tǒng)中勵磁調(diào)節(jié)器內(nèi)的雙微機采用松耦合并行通信方式進行數(shù)據(jù)交換,調(diào)節(jié)器中的勵磁控制微機經(jīng)由通信控制微機實現(xiàn)與上位PC機的通信。介紹了系統(tǒng)的構(gòu)成、通信方案、通信協(xié)議及軟件設(shè)計方法
發(fā)電機勵磁系統(tǒng)是采集發(fā)電機電壓和電流的變化及其它輸入信號,并根據(jù)控制準(zhǔn)則控制勵磁功率單元輸出勵磁電流(供給發(fā)電機轉(zhuǎn)子線圈)的系統(tǒng)。發(fā)電機勵磁系統(tǒng)對于維持電力系統(tǒng)的電壓水平、提高電力系統(tǒng)穩(wěn)定運行的能力、改善電力系統(tǒng)及發(fā)電機的運行條件等起到重要的作用。微機勵磁調(diào)節(jié)器是勵磁系統(tǒng)的核心元件,除了完成控制功能外,還要實現(xiàn)人機交互、遠方通信等功能。單微機難以實現(xiàn)所有功能,故采用雙微機設(shè)計勵磁調(diào)節(jié)器,并通過通信網(wǎng)絡(luò)構(gòu)建分布式發(fā)電機勵磁監(jiān)控系統(tǒng)。
1 硬件結(jié)構(gòu)
系統(tǒng)硬件結(jié)構(gòu)如圖1所示,其中,勵磁控制微機實現(xiàn)人機交互和勵磁電流控制,通信控制微機協(xié)調(diào)上位監(jiān)控PC機和勵磁控制微機的數(shù)據(jù)交換。
勵磁控制微機采用51單片機的應(yīng)用模式,由顯示、顯示召喚、按鍵、模擬量輸入、PID參數(shù)設(shè)置、看門狗電路、同步信號輸入、觸發(fā)脈沖輸出、滅磁接點輸入等單元組成。顯示單元采用外接6片串入并出移位寄存器芯片 74LS164驅(qū)動發(fā)光數(shù)碼管,顯示內(nèi)容由召喚顯示撥輪開關(guān)進行選擇,有巡回和召喚兩種顯示方式。外擴一片并行接口芯片8155,8155的A口與面板上的撥輪開關(guān)相連,用于召喚顯示;B口與八位地址開關(guān)相連,用于設(shè)定PID參數(shù);C口用于輸出觸發(fā)脈沖,脈沖經(jīng)達林頓管放大、脈沖變壓器隔離后接到主回路可控硅的觸發(fā)極。滅磁接點、按鍵接到單片機的I/O口線,按鍵主要有增勵、減勵、運行方式恒電壓/恒電流選擇等。同步信號經(jīng)隔離后接到單片機的INT1管腳。模擬量經(jīng)ADC0809 A/D轉(zhuǎn)換芯片接到單片機,采集的主要模擬量有發(fā)電機機端電壓、勵磁電流、發(fā)電機送出的無功電流、電壓給定值、勵磁電流給定值等。
通信控制微機由單片機、通信接口、波特率設(shè)置、地址編碼、RAM等單元組成。波特率設(shè)置、地址編碼用地址開關(guān)來實現(xiàn)。地址編碼用于設(shè)置本子站的地址碼,共有256個編碼。波特率有1200bps、2400bps、4800bps、9600bps等可選。外擴一片6264RAM用于存放通信中間數(shù)據(jù)。通信接口采用MAX1487實現(xiàn)RS485電平的轉(zhuǎn)換。
上位監(jiān)控PC機可采用IPC或PC機。操作系統(tǒng)為Windows98。PC機外接***研華公司的ADAM4520實現(xiàn)RS232/RS485的轉(zhuǎn)換。
2 雙微機通信方案的設(shè)計
雙微機數(shù)據(jù)交換有松耦合和緊耦合兩種方式。松耦合采用數(shù)據(jù)通信方式進行兩機數(shù)據(jù)交換,緊耦合采用共享數(shù)據(jù)存儲器方式進行兩機數(shù)據(jù)交換。本系統(tǒng)中勵磁控制微機與通信控制微機的數(shù)據(jù)交換方式為松耦合方式,通信協(xié)議自定義。在松耦合方式中可用的數(shù)據(jù)通信方式有串行異步通信、串行外設(shè)接口(SPI)、并行數(shù)據(jù)通信等,如圖2所示。
串行數(shù)據(jù)通信方式為一個字節(jié)的8個位(低位在前、高位在后)依次傳送,傳送速度慢。為了提高數(shù)據(jù)交換的速度,采用并行數(shù)據(jù)交換。并行數(shù)據(jù)交換與串行數(shù)據(jù)交換的一個區(qū)別是通信時雙微機要進行握手以保證數(shù)據(jù)可靠傳輸。下面以圖2(c)中的CPU1向CPU2傳送數(shù)據(jù)為例說明數(shù)據(jù)傳輸?shù)倪^程。P2.0為數(shù)據(jù)準(zhǔn)備好控制線,由CPU1控制;P2.1為數(shù)據(jù)已接收控制線,由CPU2控制。
CPU1發(fā)送數(shù)據(jù)的過程為:CPU1送數(shù)據(jù)到數(shù)據(jù)線前應(yīng)置P2.0為1,并判斷P2.1是否為1,為1則表示CPU2已做好接收數(shù)據(jù)的準(zhǔn)備,CPU1可以送數(shù)據(jù)到數(shù)據(jù)線;否則CPU1等待CPU2接收數(shù)據(jù)。CPU1送數(shù)據(jù)到數(shù)據(jù)線后置P2.0為0,這表示CPU1已送數(shù)據(jù)到數(shù)據(jù)線。然后判斷P2.1是否為0,若為0則表示CPU2已接收到CPU1傳送的數(shù)據(jù),CPU1可進行下一個數(shù)據(jù)的傳送;否則CPU1等待CPU2接收數(shù)據(jù)。
CPU2接收數(shù)據(jù)的過程為:在CPU2接收來自CPU1的數(shù)據(jù)前置P2.1為1,并判斷P2.0是否為0,為0表示CPU1已將數(shù)據(jù)送到數(shù)據(jù)線上,CPU2可從數(shù)據(jù)線上讀數(shù);否則CPU2等待CPU1發(fā)送數(shù)據(jù)。CPU2讀入數(shù)據(jù)后置P2.1為0,這表示CPU2已接收到數(shù)據(jù)。然后判斷P2.0是否為1,若為1則CPU2可準(zhǔn)備接收下一個數(shù)據(jù);否則CPU2等待。程序采用C51語言實現(xiàn),流程圖如圖3所示。
3 上位機與下位機之間的通信協(xié)議
通信控制微機與上位PC機之間的通信采用Modbus協(xié)議。Modbus協(xié)議是一種應(yīng)用于電子控制器上的協(xié)議,通過該協(xié)議,控制器之間以及控制器經(jīng)由網(wǎng)絡(luò)(例如以太網(wǎng))和其它設(shè)備之間可以通信,已成為一種通用的工業(yè)標(biāo)準(zhǔn)。Modbus協(xié)議有兩種傳輸模式:ASCII模式和RTU模式,本系統(tǒng)中采用RTU模式,使用RS485總線。通信格式為:數(shù)據(jù)幀共11位,1個起始位,8個數(shù)據(jù)位,兩個停止位,無奇偶校驗位;通信功能碼為:03H(召測),16H(設(shè)置);通信時對數(shù)據(jù)域進行CRC-16校驗,校驗只針對數(shù)據(jù)位,不包括起始位、停止位;校驗多項式為G(X)=X16+X12+X5+1;命令行格式為:地址碼+功能碼+數(shù)據(jù)域+CRC校驗。
上位PC機要監(jiān)測勵磁調(diào)節(jié)器的信息時發(fā)送:地址碼+功能碼(03H)+起始寄存器地址+寄存器個數(shù)+CRC校驗碼低字節(jié)+CRC校驗碼高字節(jié)。正常情況下,勵磁調(diào)節(jié)器回送:地址碼+功能碼(03H)+數(shù)據(jù)域字節(jié)數(shù)+第1個數(shù)據(jù)+第2個數(shù)據(jù)+......+第n個數(shù)據(jù)+CRC校驗碼低字節(jié)+CRC校驗碼高字節(jié)。出錯時,勵磁調(diào)節(jié)器回送:地址碼+功能碼(83H)+錯誤代碼(02H/06H)+CRC校驗碼低字節(jié)+CRC校驗碼高字節(jié),其中,錯誤代碼“02H”表示“非法數(shù)據(jù)位置”,“06H”表示“調(diào)節(jié)器正忙”。可讀取的勵磁調(diào)節(jié)器寄存器內(nèi)容如表1所示。
表1 可讀取的寄存器的內(nèi)容
數(shù)據(jù)地址 | 內(nèi) 容 |
00H 01H 02H 03H 04H 05H 06H |
機端電壓(Uc) 變換電阻后的電壓(Ut) 勵磁電流實際值(ILc) 電壓給定值(Ug) 勵磁電流給定值(ILg) 可控硅觸發(fā)角(a) 勵磁電流額定值(ILe) |
上位PC機要遠方控制勵磁系統(tǒng)時,需通過設(shè)置命令16H來實現(xiàn),發(fā)送:地址碼+功能碼(16H)+起始寄存器地址+寄存器個數(shù)(01H)+數(shù)據(jù)(1字節(jié))+CRC校驗碼低字節(jié)+CRC校驗碼高字節(jié),設(shè)置時一次只能設(shè)置一種參數(shù)。正常情況下,勵磁調(diào)節(jié)器回送:地址碼+功能碼(16H)+起始寄存器地址+寄存器個數(shù)(01H)+ CRC校驗碼低字節(jié)+CRC校驗碼高字節(jié)。出錯時,勵磁調(diào)節(jié)器回送:地址碼+功能碼(96H)+錯誤代碼(02H/03H)+CRC校驗碼低字節(jié)+CRC校驗碼高字節(jié),其中,錯誤代碼“02H”表示“非法數(shù)據(jù)位置”,“03H”表示“非法數(shù)據(jù)值”。可設(shè)置的勵磁調(diào)節(jié)器寄存器內(nèi)容如表2所示。
表2 可設(shè)置的寄存器的內(nèi)容
數(shù)據(jù)地址 | 內(nèi) 容 |
00H 01H 02H 03H 04H |
增勵 減勵 給定電壓 給定電流 恒電壓/電流控制 |
若上位PC機發(fā)送除03H和16H外的其它命令,勵磁調(diào)節(jié)器則將收到的功能碼邏輯或“80H”作為回送幀的功能碼,回送內(nèi)容為:地址碼+功能碼+錯誤代碼(01H)+CRC校驗碼低字節(jié)+CRC校驗碼高字節(jié)。
4 上位機的軟件設(shè)計
上位PC機完成人機交互、與勵磁調(diào)節(jié)器內(nèi)的通信控制微機進行通信等任務(wù)。其軟件用Delphi6.0設(shè)計,其中數(shù)據(jù)庫用Delphi6.0自帶的Paradox數(shù)據(jù)庫。人機交互功能主要有:對勵磁系統(tǒng)各重要參數(shù)(如勵磁電流、機端電壓、可控硅觸發(fā)角等)進行實時監(jiān)測,并可進行圖形化顯示、報表打印、事件順序記錄、越限報警;向勵磁調(diào)節(jié)器發(fā)送增勵、減勵等各種控制命令;操作人員可進行管理等。軟件的另一模塊為通信程序。利用Delphi設(shè)計串口通信程序一般有三種方法:一是利用Windows的通信API函數(shù);二是利用第三方提供的通信用動態(tài)鏈接庫;三是采用Microsoft或其它公司的通信OCX控件。本系統(tǒng)采用Microsoft公司的MSComm通信OCX控件來設(shè)計通信軟件。MSComm是VB中的OCX控件,使用前要將其添加到Delphi中,添加方法如下:選擇菜單“Component”下的子菜單“Import ActiveX Control”,在“Import ActiveX”頁內(nèi)選擇“Microsoft Comm Control”,點擊“Install”安裝。編程時應(yīng)注意其Input和Output屬性的數(shù)據(jù)類型為OleVariant,這與VB和VC不同。
Modbus通信協(xié)議的軟件設(shè)計主要為CRC-16校驗碼生成的實現(xiàn)方法。CRC-16校驗碼生成編寫程序有兩種方法:一種為計算法;另一種為查表法。上位機采用計算法。下面為CRC-16的計算過程:
(1)設(shè)置CRC寄存器,并給其賦初值FFFF?HEX?。
(2)將全部數(shù)據(jù)的第一個8bit數(shù)據(jù)與16位CRC寄存器的低8位進行異或,并把結(jié)果存入CRC寄存器。
(3)CRC寄存器整體向右移一位,MSB補零,移出并檢查LSB。
(4)如果LSB為0,重復(fù)第三步;若LSB為1,CRC寄存器與多項式碼相異或。
(5)重復(fù)第(3)與第(4)步?直到8次移位全部完成。此時一個8bit數(shù)據(jù)處理完畢。
(6)重復(fù)第(2)至第(5)步?直到所有數(shù)據(jù)全部處理完畢。
(7)最終CRC寄存器的內(nèi)容即為CRC值。
Delphi6.0環(huán)境下CRC-16實現(xiàn)的函數(shù)如下:
function CRC16?CRC_Data?array of Byte?DATA_Len?integer?? word?
var
CRC16Lo?CRC16Hi?byte? //CRC 寄存器
SaveLo?SaveHi?byte? //CRC 中間寄存器
GLo?GHi?byte? //生成多項式
i?integer? //需校驗數(shù)據(jù)的字節(jié)數(shù)
Flag?integer? //移位的次數(shù)(8次)
begin
CRC16Lo?=byte?$ff??
CRC16Hi?=byte?$ff?? //給CRC寄存器賦初值
$ffff(HEX)
GLo?=byte?$01??
GHi?=byte?$a0?? //多項式碼$a001(HEX)
for i?=0 to DATA_Len-1 do //各字節(jié)數(shù)據(jù)
begin
CRC16Lo?=CRC16Lo xor CRC_Data?i?? //各字節(jié)數(shù)據(jù)
與CRC寄存器進行異或
for Flag?=0 to 7 do
begin
SaveLo?=CRC16Lo?
SaveHi?=CRC16Hi?
CRC16Hi?=CRC16Hi shr 1? //高字節(jié)右移一位
CRC16Lo?=CRC16Lo shr 1? //低字節(jié)右移一位
if ?SaveHi and byte?$01??=byte?$01? then
//若高字節(jié)LSB為1,則低字節(jié)MSB置1
CRC16Lo?=CRC16Lo or byte?$80??
if ?SaveLo and byte?$01??=byte?$01? then
//若低字節(jié)LSB為1,則與多項式碼進行異或
begin
CRC16Hi?=CRC16Hi xor GHi?
CRC16Lo?=CRC16Lo xor GLo?
end?
end?
end?
CRC16?=CRC16Lo?256+CRC16Hi? //CRC低字節(jié)在
前,高字節(jié)在后
end?
用雙微機松耦合實現(xiàn)了勵磁控制微機與通信控制微機之間的數(shù)據(jù)交換,并通過通信控制微機完成與上位機之間的通信,將勵磁調(diào)節(jié)器的任務(wù)進行分散,增強了裝置的功能和可靠性。該系統(tǒng)已在國內(nèi)多個中、小型水電站投入運行,運行穩(wěn)定,得到用戶的好評。
評論
查看更多