技术论坛

 有一个信息校验的程序没有看明白,有没有大神帮忙分析一下的,谢谢

返回主题列表
作者 主题
剑心倾城
游士

经验值:184
发帖数:17
精华帖:0
楼主    2021-09-24 10:50:48
主题:有一个信息校验的程序没有看明白,有没有大神帮忙分析一下的,谢谢

DB_MODE_43 _DB74.pdf

FC_MODE_43 _FC14.pdf


DB_MODE_43 _DB74.pdf

FC_MODE_43 _FC14.pdf



      L     0

      T     #Checksum

      L     DINT#0

      T     #TEMP13

      CLR

      =     #Error

      AN    #Start

      SAVE

      BEC


 OPN   #DB_Mode_43

      CDB

      L     DW#16#85000000

      LAR2

      L     P##First_Sign

      LAR1

      L     0

      L W [ AR1 , P#0.0 ]

      ==I

      JZ    M002

      T     #TEMP10

      OPN DB [ #TEMP10]

M002: NOP 0

      L D [ AR1 , P#2.0 ]

      LAR1

      L     #Length

      L     1

      <I

      =     #Error

      JC    M001

      TAK

M003: T     #TEMP11

      L B [ AR1 , P#0.0 ]

      T     #TEMP14

      L     DW#16#85000000

      LAR2

      L     43

M004: T     #TEMP12

      L     #TEMP14

      L B [ AR2 , P#0.0 ]

      ==I

      JC    M005

      +AR2  P#1.0

      L     #TEMP12

      LOOP  M004

      SET

      =     #Error

      JU    M001

M005: TAR2

      L     DW#16#FFFFFF

      AD

      SRD   3

      L     #TEMP13

      +D

      T     #TEMP13

      +AR1  P#1.0

      L     #TEMP11

      LOOP  M003


 L     #TEMP13

      L     43

      MOD

      SLD   3

      L     DW#16#85000000

      OD

      LAR2

      L B [ AR2 , P#0.0 ]

      T     #Checksum

数据区DB91.DBB430是一个字符组,格式是XK1AAAABBBP,通过前11位数据计算第12位校验码。例如,计算得到AAAA数据是0.77,数据显示为:XK1+077+000(),然后计算最后括号内数据,带入计算是'L'也就是最终数据显示XK1+077+000L,

可不可以麻烦各位大神帮忙分析一下具体是怎样计算的,谢谢

附录:以下是DB块中内容,按照偏移位,从0-9,然后从A到Z.

ZEICHEN Struct 0.0 False True True True False

Z00 Char 0.0 '0' False True True True False

Z01 Char 1.0 '1' False True True True False

Z02 Char 2.0 '2' False True True True False

Z03 Char 3.0 '3' False True True True False

Z04 Char 4.0 '4' False True True True False

Z05 Char 5.0 '5' False True True True False

Z06 Char 6.0 '6' False True True True False

Z07 Char 7.0 '7' False True True True False

Z08 Char 8.0 '8' False True True True False

Z09 Char 9.0 '9' False True True True False

Z10 Char 10.0 'A' False True True True False

Z11 Char 11.0 'B' False True True True False

Z12 Char 12.0 'C' False True True True False

Z13 Char 13.0 'D' False True True True False

Z14 Char 14.0 'E' False True True True False

Z15 Char 15.0 'F' False True True True False

Z16 Char 16.0 'G' False True True True False

Z17 Char 17.0 'H' False True True True False

Z18 Char 18.0 'I' False True True True False

Z19 Char 19.0 'J' False True True True False

Z20 Char 20.0 'K' False True True True False

Z21 Char 21.0 'L' False True True True False

Z22 Char 22.0 'M' False True True True False

Z23 Char 23.0 'N' False True True True False

Z24 Char 24.0 'O' False True True True False

Z25 Char 25.0 'P' False True True True False

Z26 Char 26.0 'Q' False True True True False

Z27 Char 27.0 'R' False True True True False

Z28 Char 28.0 'S' False True True True False

Z29 Char 29.0 'T' False True True True False

Z30 Char 30.0 'U' False True True True False

Z31 Char 31.0 'V' False True True True False

Z32 Char 32.0 'W' False True True True False

Z33 Char 33.0 'X' False True True True False

Z34 Char 34.0 'Y' False True True True False

Z35 Char 35.0 'Z' False True True True False

Z36 Char 36.0 '-' False True True True False

Z37 Char 37.0 '.' False True True True False

Z38 Char 38.0 ' ' False True True True False

Z39 Char 39.0 '$$' False True True True False

Z40 Char 40.0 '/' False True True True False

Z41 Char 41.0 '+' False True True True False

Z42 Char 42.0 '%' False True True True False

Z43 Char 43.0 '#' False True True True False

Z44 Char 44.0 '&' False True True True False

Z45 Char 45.0 '*' False True True True False

Z46 Char 46.0 '=' False True True True False

RES Array[48..99] of Char 48.0 False True True True False


工控菜鸟,希望多向大家学习。
kenshinguo
侠圣

经验值:2627
发帖数:736
精华帖:3
2楼    2021-09-24 16:27:42
精华帖  主题:回复:有一个信息校验的程序没有看明白,有没有大神帮忙分析一下的,谢谢

 OPN   #DB_Mode_43      //打开DB74

 CDB                                 //DB74作为背景数据块DI74打开

 L   DW#16#85000000     //16#85代表DI,背景数据块的访问

LAR2                                 //ar2作为访问DI74的地址寄存器

 L     P##First_Sign           //p#db91.dbb430, 指针含6个字节信息,byte0-1代表DBNo=91,byte2代表数据区域类型16#84, byte3-5代表p#430.0

 LAR1

 L     0

L W [ AR1 , P#0.0 ]          //byte0-1,91

 ==I

JZ    M002

T     #TEMP10                  //temp10=91

 OPN DB [ #TEMP10]      //打开db91

M002: NOP 0

      L D [ AR1 , P#2.0 ]      //byte2-byte5, p#84代表指向DB块,本例中DB为91,byte3-5代表P#430.0

      LAR1                          //AR1存储待检验字符组的首地址

      L     #Length

      L     1

      <I

      =     #Error

      JC    M001

      TAK

M003: T     #TEMP11          //长度11,每循环减1,直到0

      L B [ AR1 , P#0.0 ]        //当前待检验字符

      T     #TEMP14

      L     DW#16#85000000

      LAR2

      L     43                          //43次循环,查找di74里面是否有匹配的字符

M004: T     #TEMP12

      L     #TEMP14              //当前待检验字符

      L B [ AR2 , P#0.0 ]        //di74里面的字符

      ==I

      JC    M005

      +AR2  P#1.0

      L     #TEMP12

      LOOP  M004

      SET

      =     #Error

      JU    M001

M005: TAR2                      //如果匹配,ar2是di74里面匹配字符的指针

      L     DW#16#FFFFFF   //16#00ffffff, 需要抹掉最高位的16#85

      AD

      SRD   3                        //指针右移3位,是该字符在DB块的绝对位置

      L     #TEMP13              //累加位置信息

      +D

      T     #TEMP13

      +AR1  P#1.0

      L     #TEMP11

      LOOP  M003


 L     #TEMP13                    //累加数值,你列举的例子里面累加值为150

      L     43

      MOD

      SLD   3                          //余数为21,转换成指针p#21.0

      L     DW#16#85000000 //通过16#85来指向DI,本例子中打开的背景数据块是74

      OD

      LAR2

      L B [ AR2 , P#0.0 ]          //db74.dbb21是‘L’

      T     #Checksum


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