wlmissyou
級(jí)別: 探索解密
精華主題: 0
發(fā)帖數(shù)量: 62 個(gè)
工控威望: 165 點(diǎn)
下載積分: 1285 分
在線(xiàn)時(shí)間: 105(小時(shí))
注冊(cè)時(shí)間: 2017-06-11
最后登錄: 2024-12-22
查看wlmissyou的 主題 / 回貼
樓主  發(fā)表于: 2020-09-13 14:27
FUNCTION_BLOCK "CRC"

{ S7_Optimized_Access := 'FALSE' }

VERSION : 0.1

VAR

DATA : Array[0..250] of Byte; // 待校驗(yàn)的數(shù)據(jù)

ByteIndex : Int; // 待校驗(yàn)數(shù)據(jù)的字節(jié)號(hào)索引號(hào)

CrcBitIndex : Int; // CRC校驗(yàn)表生成中所用的位索引號(hào)

CrcVariable : Word; // CRC校驗(yàn)用變量字

CrcByte { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} AT CrcVariable : Array[0..1] of Byte; // CRC校驗(yàn)用變量的高低字節(jié)

CrcCheckCode : Word; // 最終CRC校驗(yàn)碼

CrcTable : Array[0..255] of Word; // CRC校驗(yàn)表

CrcTableIndex : Int; // CRC表的字索引號(hào)

END_VAR

BEGIN

//生成CRC校驗(yàn)表

IF "FirstScan" = TRUE THEN //第一次掃描時(shí)生成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循環(huán)冗余校驗(yàn)查表法

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

FOR #ByteIndex := INT#0 TO INT#240 BY INT#1 DO //提取待校驗(yàn)的數(shù)據(jù)

#CrcTableIndex := BYTE_TO_INT((#DATA[#ByteIndex] AND BYTE#16#FF) XOR (#CrcByte[1] AND BYTE#16#FF)); //生成CRC校驗(yàn)表字的索引號(hào)

#CrcVariable := SHR_WORD(IN := #CrcVariable, N := INT#8) XOR #CrcTable[#CrcTableIndex]; //得到CRC校驗(yàn)變量

END_FOR;

#CrcCheckCode := ROR_WORD(IN := #CrcVariable, N := INT#8); //得到最終CRC校驗(yàn)碼

//經(jīng)測(cè)試,在CPU315-2 PN/DP中工作,此查表法僅為同環(huán)境下計(jì)算法的PLC循環(huán)時(shí)間的五分之一

//此文本復(fù)制到TXT,改擴(kuò)展名為scl,導(dǎo)入源文件就可以,首次掃描脈沖需要?jiǎng)?chuàng)建一下

END_FUNCTION_BLOCK
[ 此帖被wlmissyou在2020-09-25 11:30重新編輯 ]
描述:修改附件擴(kuò)展名為scl,即可導(dǎo)入到博圖平臺(tái)
附件: CRC查表法.txt (3 K) 下載次數(shù):173
網(wǎng)站提示: 請(qǐng)不要用迅雷下載附件,容易出錯(cuò)
本帖最近評(píng)分記錄:
  • 下載積分:+5(holdkcxyz) 感謝分享!
    chjjyc
    級(jí)別: 探索解密
    精華主題: 0
    發(fā)帖數(shù)量: 10 個(gè)
    工控威望: 102 點(diǎn)
    下載積分: 684 分
    在線(xiàn)時(shí)間: 7(小時(shí))
    注冊(cè)時(shí)間: 2016-11-02
    最后登錄: 2023-04-24
    查看chjjyc的 主題 / 回貼
    1樓  發(fā)表于: 2020-09-14 08:55
    感謝樓主!
    李文強(qiáng)
    級(jí)別: 略有小成
    精華主題: 0
    發(fā)帖數(shù)量: 27 個(gè)
    工控威望: 228 點(diǎn)
    下載積分: 757 分
    在線(xiàn)時(shí)間: 32(小時(shí))
    注冊(cè)時(shí)間: 2018-05-11
    最后登錄: 2024-12-16
    查看李文強(qiáng)的 主題 / 回貼
    2樓  發(fā)表于: 2020-09-14 10:28
    學(xué)習(xí)了
    cdxjfj
    問(wèn)題總是很多
    級(jí)別: 略有小成
    精華主題: 0
    發(fā)帖數(shù)量: 126 個(gè)
    工控威望: 254 點(diǎn)
    下載積分: 842 分
    在線(xiàn)時(shí)間: 42(小時(shí))
    注冊(cè)時(shí)間: 2013-11-12
    最后登錄: 2024-11-10
    查看cdxjfj的 主題 / 回貼
    3樓  發(fā)表于: 2020-10-25 10:18
    學(xué)習(xí)學(xué)習(xí),謝謝樓主!
    貸款結(jié)束
    級(jí)別: 家園?
    精華主題: 0
    發(fā)帖數(shù)量: 71 個(gè)
    工控威望: 544 點(diǎn)
    下載積分: 10078 分
    在線(xiàn)時(shí)間: 56(小時(shí))
    注冊(cè)時(shí)間: 2020-01-06
    最后登錄: 2024-12-21
    查看貸款結(jié)束的 主題 / 回貼
    4樓  發(fā)表于: 2020-10-26 11:36
    感謝樓主分享