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

相关推荐

  • 多次质量累加

    有一工程需要把称重传感器每次采集的质量数值相加,约5至10次为一个累计和。请问程序怎样编写? 问题补充:料斗式电子秤 最佳答案 200PLC系统块里有个“输入模拟量滤波”你可以先参…

    SIMATIC S7-200 2020年10月31日
  • 如何用plc s200 实现时间段控制,类如从晚上7点到晚上12点。

    新手,求详细梯形图。 最佳答案 打开200编程软件,在“指令”–“时钟”下拖拽READ_RTC(读取系统时钟)或SET_RTC(设置系统时钟)指令放到编辑网络中,其中“T”管脚的…

    2017年6月27日
  • s700通信

    请教各位大哥:         USS通信了,还可以PID控制吗? 最佳答案 USS是PL…

    SIMATIC S7-200 2021年7月5日
  • ABZ增量型编码器如何与CPU224接线?

    我的编码器是DC24V 增量型的,有电源VCC GND,关键是ABZ里面,这个Z相是随意接一个输入点啊? 最佳答案 不是的。当你指定了高速计数器事件号,这个输入…

    2017年5月31日
  • 求助S7 200通讯问题

    大家好,我初学PLC,用S7 200CPU 224,刚开始还和PLC建立了连接,后来弄了几次,就不能连接了.但是当进行搜索时,转接器的TX RX灯有闪亮,PPI灯长亮.到底是什么问…

    SIMATIC S7-200 2021年7月5日
  • NETW/NETR 通讯

    想确认一下: 用向导做的NETW/NETR 通讯,可以用在几台PLC之间的通讯吗,CPU226,共7台,谢谢!!! 最佳答案 1 可以,1台做主,6台…

    SIMATIC S7-200 2021年7月5日
  • SWAP指令

    西门子S7-200有SWAP指令吗    就是移位指令 最佳答案 SWAP指令:是高低字节交换指令。用法与实例见上传的图片。 图片说明: &…

    2020年10月31日
  • 求教有关TC35的小问题

    请教诸位大师,如果采用文本模式发信息,在PLC暂存区输入AT命令中的双引号号时应该输入什么来代替?? 另外,PLC程序指令中有没有可能将实时数据转换为UNICODE码??…

    SIMATIC S7-200 2020年10月31日
  • 如何查看隐含访问?

    程序里有隐含访问,怎样查看?如何设置隐含访问? 最佳答案 有一种隐含访问你是看不到的,那就是指针寻址。特别是计算出来的地址指针。 提问者对于答案的评价:谢谢1

    SIMATIC S7-200 2020年10月31日
  • S200CUP224XP 的4个输入端一上电就接通是什么原回因?

    S200CUP224XP 的4个输入端一上电就接通是什么原回因? 问题补充:我没有接输入线,所有强制也取消,还是那样,不管上什么程序都一样啊,会不会是坏了 最佳答案 把这…

    SIMATIC S7-200 2020年10月31日