回复:crc校验

eq

  • 帖子

    6
  • 精华

    1
  • 被关注

    0

论坛等级:游民

注册时间:2005-07-23

普通 普通 如何晋级?

发布于 2014-06-20 19:59:01

2楼

自己搞定了,分享一下

FUNCTION "CRC校验" : Void
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
db_no : DInt; // 数据块号
db_offset : DInt; // 数据块起始位置
length : Int; // 字节个数
END_VAR

VAR_OUTPUT
low_crc : Byte;
high_crc : Byte;
END_VAR

VAR_TEMP
i : Int;
j : Int;
data_value : Byte; // 需要发送的数据字节
crc_value : Word;
flag : Word;
END_VAR


BEGIN
#crc_value:=16#ffff;//预置CRC寄存器
FOR #j:=0 TO (#length-1) BY 1 DO
#data_value:=PEEK(area:=b#16#84, dbNumber:=#db_no, byteOffset:=(#j+#db_offset));//第一个8位二进制数据
#crc_value:= #data_value XOR #crc_value;// 把第一个8位二进制数据(既通讯信息帧的第一个字节)与CRC寄存器相异或
FOR #i:= 0 TO 7 BY 1 DO
IF (#crc_value AND 16#0001)=0 THEN//移出位为0,把CRC寄存器的内容右移一位
#crc_value:=SHR(IN:=#crc_value ,N:=1);
ELSIF (#crc_value AND 16#0001)=1 THEN//移出位为1,CRC寄存器与多项式A001进行异或,再右移一位
#crc_value:=SHR(IN:=(#crc_value),N:=1)XOR 16#a001;
END_IF;
END_FOR;
END_FOR;
#low_crc:=WORD_TO_BYTE(#crc_value AND 16#00ff);
#high_crc:=WORD_TO_BYTE(SWAP(#crc_value AND 16#ff00));

END_FUNCTION
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15726条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。