分布式发电机励磁监控系统的设计
(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
用双微机松耦合实现了励磁控制微机与通信控制微机之间的数据交换,并通过通信控制微机完成与上位机之间的通信,将励磁调节器的任务进行分散,增强了装置的功能和可靠性。该系统已在国内多个中、小型水电站投入运行,运行稳定,得到用户的好评。