用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心解决方案电子通信

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

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 22:33:08
Modbus通信协议的软件设计主要为CRC-16校验码生成的实现方法。CRC-16校验码生成编写程序有两种方法:一种为计算法;另一种为查表法。上位机采用计算法。下面为CRC-16的计算过程:

(1)设置CRC寄存器,并给其赋初值FFFFHEX。

(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 CRC16CRC_Dataarray of ByteDATA_Leninteger word

var

CRC16LoCRC16Hibyte //CRC 寄存器

SaveLoSaveHibyte //CRC 中间寄存器

GLoGHibyte //生成多项式

iinteger //需校验数据的字节数

Flaginteger //移位的次数(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_Datai //各字节数据

与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=CRC16Lo256+CRC16Hi //CRC低字节在

前,高字节在后

end

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



上一页  [1] [2] 

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:20,828.13000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号