wlmissyou
級(jí)別: 探索解密
|
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)分記錄: |