wlmissyou
级别: 探索解密
精华主题: 0
发帖数量: 62 个
工控威望: 165 点
下载积分: 1279 分
在线时间: 99(小时)
注册时间: 2017-06-11
最后登录: 2024-11-25
查看wlmissyou的 主题 / 回贴
楼主  发表于: 2020-09-13 14:27
FUNCTION_BLOCK "CRC"

{ S7_Optimized_Access := 'FALSE' }

VERSION : 0.1

VAR

DATA : Array[0..250] of Byte; // 待校验的数据

ByteIndex : Int; // 待校验数据的字节号索引号

CrcBitIndex : Int; // CRC校验表生成中所用的位索引号

CrcVariable : Word; // CRC校验用变量字

CrcByte { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} AT CrcVariable : Array[0..1] of Byte; // CRC校验用变量的高低字节

CrcCheckCode : Word; // 最终CRC校验码

CrcTable : Array[0..255] of Word; // CRC校验表

CrcTableIndex : Int; // CRC表的字索引号

END_VAR

BEGIN

//生成CRC校验表

IF "FirstScan" = TRUE THEN //第一次扫描时生成CRC表

FOR #CrcTableIndex := INT#0 TO INT#255 BY INT#1 DO

#CrcTable[#CrcTableIndex] := INT_TO_WORD(#CrcTableIndex);

FOR #CrcBitIndex := INT#0 TO INT#7 BY INT#1 DO

IF (#CrcTable[#CrcTableIndex] AND WORD#16#0001) = WORD#16#0001 THEN

#CrcTable[#CrcTableIndex] := SHR_WORD(IN := #CrcTable[#CrcTableIndex], N := int#1);

#CrcTable[#CrcTableIndex] := #CrcTable[#CrcTableIndex] XOR WORD#16#A001;

ELSE

#CrcTable[#CrcTableIndex] := SHR_WORD(IN := #CrcTable[#CrcTableIndex], N := int#1);

END_IF;

END_FOR;

END_FOR;

END_IF;

//CRC循环冗余校验查表法

#CrcVariable := WORD#16#FFFF; //CRC寄存器的初始化

FOR #ByteIndex := INT#0 TO INT#240 BY INT#1 DO //提取待校验的数据

#CrcTableIndex := BYTE_TO_INT((#DATA[#ByteIndex] AND BYTE#16#FF) XOR (#CrcByte[1] AND BYTE#16#FF)); //生成CRC校验表字的索引号

#CrcVariable := SHR_WORD(IN := #CrcVariable, N := INT#8) XOR #CrcTable[#CrcTableIndex]; //得到CRC校验变量

END_FOR;

#CrcCheckCode := ROR_WORD(IN := #CrcVariable, N := INT#8); //得到最终CRC校验码

//经测试,在CPU315-2 PN/DP中工作,此查表法仅为同环境下计算法的PLC循环时间的五分之一

//此文本复制到TXT,改扩展名为scl,导入源文件就可以,首次扫描脉冲需要创建一下

END_FUNCTION_BLOCK
[ 此帖被wlmissyou在2020-09-25 11:30重新编辑 ]
描述:修改附件扩展名为scl,即可导入到博图平台
附件: CRC查表法.txt (3 K) 下载次数:168
网站提示: 请不要用迅雷下载附件,容易出错
本帖最近评分记录:
  • 下载积分:+5(holdkcxyz) 感谢分享!
    chjjyc
    级别: 探索解密
    精华主题: 0
    发帖数量: 10 个
    工控威望: 102 点
    下载积分: 684 分
    在线时间: 7(小时)
    注册时间: 2016-11-02
    最后登录: 2023-04-24
    查看chjjyc的 主题 / 回贴
    1楼  发表于: 2020-09-14 08:55
    感谢楼主!
    李文强
    级别: 略有小成
    精华主题: 0
    发帖数量: 27 个
    工控威望: 228 点
    下载积分: 757 分
    在线时间: 31(小时)
    注册时间: 2018-05-11
    最后登录: 2024-07-27
    查看李文强的 主题 / 回贴
    2楼  发表于: 2020-09-14 10:28
    学习了
    cdxjfj
    问题总是很多
    级别: 略有小成
    精华主题: 0
    发帖数量: 130 个
    工控威望: 254 点
    下载积分: 842 分
    在线时间: 42(小时)
    注册时间: 2013-11-12
    最后登录: 2024-11-10
    查看cdxjfj的 主题 / 回贴
    3楼  发表于: 2020-10-25 10:18
    学习学习,谢谢楼主!
    贷款结束
    级别: 家园常客
    精华主题: 0
    发帖数量: 72 个
    工控威望: 544 点
    下载积分: 9308 分
    在线时间: 55(小时)
    注册时间: 2020-01-06
    最后登录: 2024-11-25
    查看贷款结束的 主题 / 回贴
    4楼  发表于: 2020-10-26 11:36
    感谢楼主分享