關(guān) 閉

新聞中心

EEPW首頁 > 工控自動化 > 設(shè)計應(yīng)用 > 分布式發(fā)電機勵磁監(jiān)控系統(tǒng)的設(shè)計

分布式發(fā)電機勵磁監(jiān)控系統(tǒng)的設(shè)計

作者: 時間:2011-07-29 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://butianyuan.cn/article/161737.htm

(1)設(shè)置CRC寄存器,并給其賦初值FFFFHEX。

(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 CRC16CRC_Dataarray of ByteDATA_Leninteger word

var

CRC16LoCRC16Hibyte //CRC 寄存器

SaveLoSaveHibyte //CRC 中間寄存器

GLoGHibyte //生成多項式

iinteger //需校驗數(shù)據(jù)的字節(jié)數(shù)

Flaginteger //移位的次數(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_Datai //各字節(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=CRC16Lo256+CRC16Hi //CRC低字節(jié)在

前,高字節(jié)在后

end

用雙微機松耦合實現(xiàn)了控制微機與通信控制微機之間的數(shù)據(jù)交換,并通過通信控制微機完成與上位機之間的通信,將調(diào)節(jié)器的任務(wù)進行分散,增強了裝置的功能和可靠性。該系統(tǒng)已在國內(nèi)多個中、小型水電站投入運行,運行穩(wěn)定,得到用戶的好評。


上一頁 1 2 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉