关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > 分布式发电机励磁监控系统的设计

分布式发电机励磁监控系统的设计

作者:时间:2011-07-29来源:网络收藏

本文引用地址:http://www.eepw.com.cn/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 下一页

评论


相关推荐

技术专区

关闭