spc_cll
级别: 略有小成
精华主题: 0
发帖数量: 103 个
工控威望: 323 点
下载积分: 923 分
在线时间: 32(小时)
注册时间: 2007-08-08
最后登录: 2020-09-10
查看spc_cll的 主题 / 回贴
楼主  发表于: 2010-04-20 13:10
今天终于把艾默生EC10通讯协议的校验函数给跟踪出来了,值得庆贺!!

贴出来大家分享,哈哈!!
=====DELPHI=============================
arEC10CRC:array[0..$1ff] of byte=(
        $000,$000,$021,$010,$042,$020,$063,$030,$084,$040,$0A5,$050,$0C6,$060,$0E7,$070
        ,$008,$081,$029,$091,$04A,$0A1,$06B,$0B1,$08C,$0C1,$0AD,$0D1,$0CE,$0E1,$0EF,$0F1
        ,$031,$012,$010,$002,$073,$032,$052,$022,$0B5,$052,$094,$042,$0F7,$072,$0D6,$062
        ,$039,$093,$018,$083,$07B,$0B3,$05A,$0A3,$0BD,$0D3,$09C,$0C3,$0FF,$0F3,$0DE,$0E3
        ,$062,$024,$043,$034,$020,$004,$001,$014,$0E6,$064,$0C7,$074,$0A4,$044,$085,$054
        ,$06A,$0A5,$04B,$0B5,$028,$085,$009,$095,$0EE,$0E5,$0CF,$0F5,$0AC,$0C5,$08D,$0D5
        ,$053,$036,$072,$026,$011,$016,$030,$006,$0D7,$076,$0F6,$066,$095,$056,$0B4,$046
        ,$05B,$0B7,$07A,$0A7,$019,$097,$038,$087,$0DF,$0F7,$0FE,$0E7,$09D,$0D7,$0BC,$0C7
        ,$0C4,$048,$0E5,$058,$086,$068,$0A7,$078,$040,$008,$061,$018,$002,$028,$023,$038
        ,$0CC,$0C9,$0ED,$0D9,$08E,$0E9,$0AF,$0F9,$048,$089,$069,$099,$00A,$0A9,$02B,$0B9
        ,$0F5,$05A,$0D4,$04A,$0B7,$07A,$096,$06A,$071,$01A,$050,$00A,$033,$03A,$012,$02A
        ,$0FD,$0DB,$0DC,$0CB,$0BF,$0FB,$09E,$0EB,$079,$09B,$058,$08B,$03B,$0BB,$01A,$0AB
        ,$0A6,$06C,$087,$07C,$0E4,$04C,$0C5,$05C,$022,$02C,$003,$03C,$060,$00C,$041,$01C
        ,$0AE,$0ED,$08F,$0FD,$0EC,$0CD,$0CD,$0DD,$02A,$0AD,$00B,$0BD,$068,$08D,$049,$09D
        ,$097,$07E,$0B6,$06E,$0D5,$05E,$0F4,$04E,$013,$03E,$032,$02E,$051,$01E,$070,$00E
        ,$09F,$0FF,$0BE,$0EF,$0DD,$0DF,$0FC,$0CF,$01B,$0BF,$03A,$0AF,$059,$09F,$078,$08F
        ,$088,$091,$0A9,$081,$0CA,$0B1,$0EB,$0A1,$00C,$0D1,$02D,$0C1,$04E,$0F1,$06F,$0E1
        ,$080,$010,$0A1,$000,$0C2,$030,$0E3,$020,$004,$050,$025,$040,$046,$070,$067,$060
        ,$0B9,$083,$098,$093,$0FB,$0A3,$0DA,$0B3,$03D,$0C3,$01C,$0D3,$07F,$0E3,$05E,$0F3
        ,$0B1,$002,$090,$012,$0F3,$022,$0D2,$032,$035,$042,$014,$052,$077,$062,$056,$072
        ,$0EA,$0B5,$0CB,$0A5,$0A8,$095,$089,$085,$06E,$0F5,$04F,$0E5,$02C,$0D5,$00D,$0C5
        ,$0E2,$034,$0C3,$024,$0A0,$014,$081,$004,$066,$074,$047,$064,$024,$054,$005,$044
        ,$0DB,$0A7,$0FA,$0B7,$099,$087,$0B8,$097,$05F,$0E7,$07E,$0F7,$01D,$0C7,$03C,$0D7
        ,$0D3,$026,$0F2,$036,$091,$006,$0B0,$016,$057,$066,$076,$076,$015,$046,$034,$056
        ,$04C,$0D9,$06D,$0C9,$00E,$0F9,$02F,$0E9,$0C8,$099,$0E9,$089,$08A,$0B9,$0AB,$0A9
        ,$044,$058,$065,$048,$006,$078,$027,$068,$0C0,$018,$0E1,$008,$082,$038,$0A3,$028
        ,$07D,$0CB,$05C,$0DB,$03F,$0EB,$01E,$0FB,$0F9,$08B,$0D8,$09B,$0BB,$0AB,$09A,$0BB
        ,$075,$04A,$054,$05A,$037,$06A,$016,$07A,$0F1,$00A,$0D0,$01A,$0B3,$02A,$092,$03A
        ,$02E,$0FD,$00F,$0ED,$06C,$0DD,$04D,$0CD,$0AA,$0BD,$08B,$0AD,$0E8,$09D,$0C9,$08D
        ,$026,$07C,$007,$06C,$064,$05C,$045,$04C,$0A2,$03C,$083,$02C,$0E0,$01C,$0C1,$00C
        ,$01F,$0EF,$03E,$0FF,$05D,$0CF,$07C,$0DF,$09B,$0AF,$0BA,$0BF,$0D9,$08F,$0F8,$09F
        ,$017,$06E,$036,$07E,$055,$04E,$074,$05E,$093,$02E,$0B2,$03E,$0D1,$00E,$0F0,$01E);


function EC10_CRC(var ar:TDatabyte;n:integer):word;
label xx1,xx2;
var chk:word;
begin
  if n<=0 then  begin
     Result:=0;
     exit;
  end;
  asm
      pushf
      pushad
      mov     esi,ar
      mov     esi,[esi]
      mov     edi, n
      xor     ecx, ecx
      xor     edx, edx
xx1:  mov     eax, ecx                                          
      cdq
      and     edx, $0FF
      add     eax, edx
      xor     edx, edx
      mov     dl, byte ptr [esi]
      sar     eax, 8
      xor     eax, edx
      xor     edx, edx
      and     ecx, $800000FF
      mov     dx, word ptr [arEC10CRC+eax*2]
      mov     eax, edx
      jns     xx2
      dec     ecx
      or      ecx, $0FFFFFF00
      inc     ecx
xx2:  shl     ecx, 8
      xor     ecx, eax
      inc     esi
      dec     edi
      jnz     xx1
      mov     ax, cx
      mov     chk,ax
      popad;
      popf
  end;
  Result:=chk;
end;
本帖最近评分记录:
  • 下载积分:+10(wsir123) 支持原创
  • 下载积分:+1(ykykkhor) 热心助人