请问哪位有PLC的crc校验程序

请问哪位有PLC的CRC校验程序啊,就是现代电气控制及PLC应用技术书上的那一个也行,现在时间紧,没时间自己敲。麻烦晓得的大哥大姐帮一个忙。

问题补充:
我QQ605711338,麻烦加我qq发给我嘛。谢谢

最佳答案

方法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

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

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

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

相关推荐

  • plc的地址设置

    我想做一屏多机,不知道怎样设置plc地址,哪位师父教教我,谢谢! 最佳答案 1、PLC地址在S7200的编程软件里的“系统块”下的“通讯端口”下可以设定PLC的通讯地址!&nbsp…

    SIMATIC S7-200 2021年7月4日
  • 关于动态地址指针的问题

    有一个编程的问题,地址指针&vbxxx需要动态指定,比如说当我堆栈的长度为100字的时候,地址指针为&vb300,当堆栈的长度为200字的时候,地址指针为&…

    2021年7月5日
  • 用U盘拷贝840DSL上的plc程序

    如果用U盘拷贝840DSL上的plc程序,依什么格式拷贝能在电脑上看到这个程序呢? 问题补充:我是在840DSL系统上拷贝出来的! 最佳答案 拷贝出来的是二进制格式吧,不能打开的。…

    SIMATIC S7-200 2018年12月9日
  • opc服务器与组态王通讯

    组态王做客户端与pc access连接时,能读到数据,但写不了,不知道怎么回事?变量都是读写的。一开始设的整形变量,组态王opc测试时,发现添加变量进行测试,全变浮点型了…

    SIMATIC S7-200 2020年11月1日
  • S7-200与PC远距离通信的解决方法

    原有一套控制系统,3台S7-200 226和一台上位机通过PC/PPI电缆连接,上位软件是MCGS,现要把上位机移到500米外的地方,怎么解决通信问题?直接延长通信线可以…

    SIMATIC S7-200 2021年7月5日
  • S7 200自适应pid恒温控制

    我使用S7 200的PID自适应数字量输出方式控制固态继电器的通断,进而控制加热器,是不是PID功能我只要给一个实际温度反馈,不需要太关注控制对象就行了嘛?那怎么保证温度…

    SIMATIC S7-200 2017年5月29日
  • SM0.6计算方法

    在200的CPU中,SM0.6用在计数器前,请问SM0.6用在计数器前是怎么样算计数值的?请大家帮忙。 问题补充:如果计数器的PV为2000,那SM0.6让计数器怎么样计数?计数值…

    SIMATIC S7-200 2020年11月1日
  • 模拟量输出用MODBUS什么命令发出控制

    我用CPU226加载一个EM232控制模拟量输出使用modbus协议控制,使用哪个命令,控制地址是多少(modbus地址)控制电压电流数值怎么表示 最佳答案 用MOVE指令。址址是…

    SIMATIC S7-200 2017年7月30日
  • POS指令的相详细说明

    为什么我的V4.0 STEP 7 MicroWIN SP6里没有POS指令.我已经下载了指令库可是里面没有.我想学习着个指令 问题补充:我说…

    SIMATIC S7-200 2021年7月5日
  • 自由口通讯RCV不终止?

    1. 一台电脑监控程序及状态表,另一台电脑用串口调试助手监控串口数据。电脑,电缆,串口等都没有问题。2. 手册上的自由口通讯例程已经做通的。3. 我现…

    SIMATIC S7-200 2020年11月1日