海泰克人机:求助LRC校验怎么用ADP的宏命令来写。 点击:853 | 回复:3



dzh229563157dzh

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 6回
  • 年度积分:0
  • 历史总积分:14
  • 注册:2007年12月04日
发表于:2008-02-20 16:56:00
楼主
 首先祝大家新年快乐,财运发发。
各位高手,本人是个菜鸟一小只,各位帮帮忙哦,谢谢!
某命令串为":010200000001FC" 
  其16进制为“3A   30   31   30   32   30   30   30   30   30   30   30   31   46   43   0D   0A”。其中第一个为起始符,2-13为数据,14-15即“FC”为LRC校验码,有人能写一个取得校验位的宏吗? 
下边有一段用C写的程序 

        将帧的内容,除去头代码,用十六进制表示,求和,模FF,然后取补码,以ASCII码表示即可。 
  例如:ASCII帧 
     3A   30   31   30   32   30   30   30   30   30   30   30   31   46   43   0D   0A 
  将校验内容用十六进制表示为: 
     00   01   00   02   00   00   00   00   00   00   00   01   
  将以上数值用十六进制求和,模FF: 
     00+01+00+02+00+00+00+00+00+00+00+01=04=0000   0100 
  取反:1111   1011 
  加1:   1111   1100 
  十六进制变换:F   C 
  ASCII码:46   43 
  LRC就是这样算出来的 

这里有一段用C写的程序,有谁能用ADP的宏命令写吗? 
        static   unsigned   char   LRC(auchMsg,usDataLen) 
   
  unsigned   char   *auchMsg   ;   /*   要进行计算的消息   */ 
   
  unsigned   short   usDataLen   ;   /*   LRC   要处理的字节的数量*/ 
   
  {   unsigned   char   uchLRC   =   0   ;   /*   LRC   字节初始化   */ 
   
  while   (usDataLen--)   /*   传送消息   */   
   
  uchLRC   +=   *auchMsg++   ;   /*   累加*/   
   
  return   ((unsigned   char)(-((char_uchLRC)))   ; 
   
  }



一点意见

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 895回
  • 年度积分:0
  • 历史总积分:1187
  • 注册:2002年7月29日
发表于:2008-02-21 10:11:00
1楼
如果是台达,在宏指令里有专有的计算LRC校验的指令,HITECH可能也有

福娃贝贝

  • 精华:1帖
  • 求助:0帖
  • 帖子:3帖 | 286回
  • 年度积分:2
  • 历史总积分:545
  • 注册:2005年11月15日
发表于:2008-02-21 11:47:00
2楼
HITECH里面的宏指令也能实现这个功能,只要是简单的用ADD加一下就可以(十六进制)

牛牛不牛

  • 精华:2帖
  • 求助:0帖
  • 帖子:50帖 | 459回
  • 年度积分:0
  • 历史总积分:856
  • 注册:2006年5月07日
发表于:2008-03-26 10:39:00
3楼
这样比CRC简单多了,实现起来比较容易

热门招聘
相关主题

官方公众号

智造工程师