crc校验如何做?

一组数据如何进行crc校验呢  如何做?

最佳答案

方法1:计算法
 主程序:OB1
 Network 1 

 LD     M0.0
 EU

 CALL   SBR0, AC0                   /
 INCB   VB0
 INCB   VB0

 XMT    发送接收缓冲区, 0

 Network 2 
 LD     M0.1
 EU
 CALL   SBR0, AC0
 AW<>   AC0, +0
 MOVB   1, AC0

 
 SBR_0:SBR0
 VAR_OUTPUT
 crc:INT;
 END_VAR
 VAR
 count:INT;
 ptr:DWORD;
 END_VAR
 BEGIN
 Network 1 
 // MOVW   AC0, *#ptr  用于发送,直接将CRC写入发送缓冲区,然后mmodbusBufr加2。
 // 
 LD     SM0.0
 MOVW   16#FFFF, AC0                
 BTI    VB0, LW2                   
 MOVD   &VB0, LD4                  
 INCD   LD4                         

 FOR    AC2, +1, LW2                
 XORB   *LD4, AC0                  

 FOR    AC1, +1, +8                
 SRW    AC0, 1                     
 LD     SM1.1                       
 XORW   16#A001, AC0                
 NEXT                               

 LD     SM0.0
 INCD   LD4                        
 NEXT                              

 Network 2 
 // MOVW   AC0, #crc  用于接收
 // 如果程序无须接收,则可删除这一行,删除crc这个OUT参数。
 // 
 // 
 // 
 // MOVW   AC0, *#ptr  用于发送
 // 直接将CRC写入发送缓冲区,然后mmodbusBufr加2。
 // 如果程序无须发送,则可删除这一行。
 LD     SM0.0                     
 SWAP   AC0                         
 MOVW   AC0, LW0                   
 MOVW   AC0, *LD4                  

 Network 3 // 网络标题
 // 网络注释
 END_SUBROUTINE_BLOCK
 INTERRUPT_BLOCK INT_0:INT0
 TITLE=中断程序注释
 BEGIN
 Network 1 // 网络标题
 // 网络注释
 END_INTERRUPT_BLOCK

 
 方法2:查表法
 ORGANIZATION_BLOCK 主程序:OB1
 TITLE=和方法1不同的是多了个初始化,简化了CRC计算过程,缩短了时间。
 // 调用方法和方法1一样
 BEGIN
 Network 1 // 网络标题
 // 初始化CRC表,需要512个字节。VB2256---------VB2767
 LD     SM0.1
 CALL   SBR0
 Network 2 // 网络标题
 // 发送
 LD     M0.0
 EU

 CALL   SBR1, AC0                   //AC0在此无用
 INCB   VB2000
 INCB   VB2000

 XMT    发送接收缓冲区, 0

 Network 3 
 // 接收完成后检查接收的数据对错,如果计算结果为0,则说明传输正确。
 LD     M0.1
 EU
 CALL   SBR1, AC0
 AW<>   AC0, +0
 MOVB   1, AC0

 END_ORGANIZATION_BLOCK
 SUBROUTINE_BLOCK SBR_0:SBR0
 TITLE=子程序注释
 VAR
 index1:INT;
 index2:INT;
 END_VAR
 BEGIN
 Network 1 
 LD     SM0.0                      
 MOVD   &VB2256, AC3                
 MOVD   +0, AC2                     

 FOR    LW0, +1, +256              
 MOVW   AC2, AC0                    
 FOR    LW2, +1, +8                
 SRW    AC0, 1                     
 Network 2 
 LD     SM1.1                      
 XORW   16#A001, AC0               
 Network 3 
 NEXT                             
 Network 4 
 LD     SM0.0                      
 MOVW   AC0, *AC3                   
 INCW   AC2                      
 +I     +2, AC3                    
 Network 5 
 NEXT                            
 Network 6 // 网络标题
 // 网络注释
 END_SUBROUTINE_BLOCK
 SUBROUTINE_BLOCK SBR_1:SBR1
 TITLE=子程序注释
 VAR_OUTPUT
 crc:INT;
 END_VAR
 VAR
 count:INT;
 ptr:DWORD;
 END_VAR
 BEGIN
 Network 1 

 LD     SM0.0                      
 BTI    VB2000, LW2                
 MOVD   &VB2000, LD4              
 INCD   LD4                       
 XORD   AC0, AC0                    
 MOVD   16#FFFF, AC2                

 FOR    AC1, +1, LW2                
 MOVB   *LD4, AC0                 
 XORW   AC2, AC0                   
 ANDW   16#FF, AC0                
 SLW    AC0, 1                      
 MOVD   &VB2256, AC3                
 +I     AC0, AC3                   
 SWAP   AC2                        
 ANDW   16#FF, AC2                  
 XORW   *AC3, AC2                   
 INCD   LD4                       
 Network 2 
 NEXT                              
 Network 3 
 LD     SM0.0                       
 SWAP   AC2                         
 MOVW   AC2, LW0                    
 MOVW   AC2, *LD4                  
 Network 4 // 网络标题
 // 网络注释
 END_SUBROUTINE_BLOCK
 INTERRUPT_BLOCK INT_0:INT0
 TITLE=中断程序注释
 BEGIN
 Network 1 // 网络标题
 // 网络注释
 END_INTERRUPT_BLOCK

 
 

提问者对于答案的评价:
xiexie

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc321374.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月5日 上午11:54
下一篇 2020年11月5日 上午11:54

相关推荐

  • 3台plc之间的通讯怎么搞

    现在有3台西门子S7-200的PLC,CPU型号都是224,这三台怎么通讯 最佳答案 如果集成485口没被使用,可以使用PPI网络,实现PPI通讯;也可以增加EM243-1,使用以…

    SIMATIC S7-200 2021年7月5日
  • 模拟量数字量都有几输入的

    我想用plc来检测气候,现在有五个模拟量,两个数字量传感器。如果用两em231和一个数字量有点浪费资源。请问有没有模拟和数字量集成的模块啊 最佳答案 我建议你这样用s7-200&n…

    SIMATIC S7-200 2020年11月1日
  • 报警 谢谢大家

    本人新手,试了好久没有做出来 ,所以求大家教教,比如我有几个报警,是200PLC,西门子触摸屏,我的这些报警需要在触摸屏显示出来,必须是在报警视图里显示出来,我做了好久,…

    SIMATIC S7-200 2020年10月31日
  • 单片机晶振辨认

    单片机电路板上有“JZ"  元件上有"V4000"也好像"N4000"字样 ,只有两个脚,和8088…

    SIMATIC S7-200 2020年11月1日
  • 数据纪录的问题

    有个西门子S7-200的问题想请教下大家啊:  我用STEP-7编程时,在数据记录向导存储一个电流信号,到我在 S7-200 Explorer 的存储卡里面找不…

    SIMATIC S7-200 2021年7月5日
  • S7200(CPU222)编译时出现警告:2756数据保持范围0对于选择的PLC类型非法

    S7200(CPU222)编译时出现警告:2756数据保持范围0对于选择的PLC类型非法,请教大侠是什么情况呀??? 最佳答案 在系统块——断电数据保持的范围0的地址范围超出了CP…

    SIMATIC S7-200 2020年11月1日
  • 食品包装机程序

    各位朋友,有做过食品包装机程序的 吗?用200PLC做的 ,有伺服控制,编码器,变频器,六个光电检测。我的 邮箱是:xzy.19830@163.com…

    SIMATIC S7-200 2021年7月5日
  • 位置向导里的参数问题

    西门子的S7-200,假如用位置向导有4个包络的话,则PTO0_RUN指令中,这个Profile参数是不是指的利用位置向导生成的包络的包络号,假如有4个包络,是不是可以变更为0-4…

    SIMATIC S7-200 2021年7月5日
  • 编程软件S7-200 SP6的

    请问谁有最新的S7-200的编程软件,SP6是最新的吗?我的邮箱是WWW.XHW0806@163.COM 谢谢! 最佳答案 文件很大,你有SP4的话直接下补丁,没有的话就…

    SIMATIC S7-200 2021年7月5日
  • 请问用EM231RTD模块采集的两路温度有偏差,需要先标定吗

    用的PT1000,两个PT1000都摆在桌子上,但是两个温度能差0.2度,这种情况该怎么解决?是否需要标定。如果需要该怎么标定?PLC用的s7-200CN,CPU224XP。谢谢大…

    2017年11月6日