關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > 分布式發電機勵磁監控系統的設計

        分布式發電機勵磁監控系統的設計

        作者: 時間:2011-07-29 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/161737.htm

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

        (2)將全部數據的第一個8bit數據與16位CRC寄存器的低8位進行異或,并把結果存入CRC寄存器。

        (3)CRC寄存器整體向右移一位,MSB補零,移出并檢查LSB。

        (4)如果LSB為0,重復第三步;若LSB為1,CRC寄存器與多項式碼相異或。

        (5)重復第(3)與第(4)步直到8次移位全部完成。此時一個8bit數據處理完畢。

        (6)重復第(2)至第(5)步直到所有數據全部處理完畢。

        (7)最終CRC寄存器的內容即為CRC值。

        Delphi6.0環境下CRC-16實現的函數如下:

        function CRC16CRC_Dataarray of ByteDATA_Leninteger word

        var

        CRC16LoCRC16Hibyte //CRC 寄存器

        SaveLoSaveHibyte //CRC 中間寄存器

        GLoGHibyte //生成多項式

        iinteger //需校驗數據的字節數

        Flaginteger //移位的次數(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 //各字節數據

        begin

        CRC16Lo=CRC16Lo xor CRC_Datai //各字節數據

        與CRC寄存器進行異或

        for Flag=0 to 7 do

        begin

        SaveLo=CRC16Lo

        SaveHi=CRC16Hi

        CRC16Hi=CRC16Hi shr 1 //高字節右移一位

        CRC16Lo=CRC16Lo shr 1 //低字節右移一位

        if SaveHi and byte$01=byte$01 then

        //若高字節LSB為1,則低字節MSB置1

        CRC16Lo=CRC16Lo or byte$80

        if SaveLo and byte$01=byte$01 then

        //若低字節LSB為1,則與多項式碼進行異或

        begin

        CRC16Hi=CRC16Hi xor GHi

        CRC16Lo=CRC16Lo xor GLo

        end

        end

        end

        CRC16=CRC16Lo256+CRC16Hi //CRC低字節在

        前,高字節在后

        end

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


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 上虞市| 达拉特旗| 元阳县| 始兴县| 宁强县| 康马县| 津市市| 峨边| 阳朔县| 安国市| 英山县| 额敏县| 遂昌县| 晋宁县| 无极县| 台安县| 湛江市| 思南县| 三台县| 达日县| 印江| 镇原县| 皮山县| 西昌市| 隆德县| 天全县| 泰和县| 闸北区| 定州市| 石阡县| 平原县| 克什克腾旗| 安图县| 麦盖提县| 廉江市| 山阴县| 合川市| 张家口市| 秭归县| 嵩明县| 平罗县|