请问哪位有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日
下一篇 2020年11月1日

相关推荐

  • 用uss通信s7-200和mm440的问题

    硬件图怎样画呢?接线图原理图?怎样表示200上的通信口和485线?还有,uss_int里的波特率是不是就用pc和plc通信时的波特率? 问题补充:另外,我的plc和电脑不是pc/p…

    SIMATIC S7-200 2020年10月31日
  • s7-200查表法的用法

    查表法指令我感觉有点奇怪,找表格中符合PTN规则的数值,如果用等于的话,那为什么不能直接就用PTN这个数值呢,还有就是我需要有两个数据来确定一个数值,类似与二元函数,这个怎么填表呢…

    SIMATIC S7-200 2021年7月5日
  • 这段西门子200和三菱自由口通信的程序哪里错了?

    我已经通信程序已梯形图的格式发到下面的论坛,这是链接。大家帮忙看一下哪里有问题http://www.gongkong.com/webpage/forum/201005/201005…

    SIMATIC S7-200 2020年11月1日
  • 828D调试咨询

    先有一台828d系统要调试,只有一个进给轴Z轴和一个模拟主轴(变频器),请问以下这些参数如何设置:20050、20070、20080,谢谢! 最佳答案 N20050 $M…

    SIMATIC S7-200 2021年7月5日
  • TD400C+S7200CN+TP277-6 如何连接

    能不能只占用一个CPU上的通信口,将两个屏(TD400C、TP277-6 )连起来,请大家指点! 问题补充:如何连接,请指点 最佳答案 一个口可以连3个HMI 提问者对于…

    SIMATIC S7-200 2021年7月5日
  • PID和读系统时间的问题

    S7-200中,系统时钟的读用READ_REC,写用SET_RTC,是不是在两个块中"T"处填的地址VB多少,程序运行时候就会自动进行读写系统时钟了呢?这个问题…

    SIMATIC S7-200 2021年7月5日
  • 利用S7-200输出端子实现数据通讯

    一个系统需要的通讯超过S7-200的通讯口数量,请问能否利用输出端子实现通讯功能?如何实现? 最佳答案 如果用输出端子那就是硬件连接了,这个只能一个点一个点的传送数据或者是连续的Q…

    SIMATIC S7-200 2020年11月1日
  • 请问S7-200SMART用上升沿处理1S一个的脉冲会丢失或者误差大吗?

    有个流量计是1L输出一个脉冲,通过脉冲统计累积流量,流量计的瞬时流量小于1L/S,想请教一下1S一个的脉冲能否不用高速计数器而用上升沿累加的形式来接收处理会不会有什么问题,还有上升…

    SIMATIC S7-200 2021年7月5日
  • S7-200smart 以太网通信问题咨询

    intouch怎么通过以太网怎么直接连接S7-200smart,smart的固件版本是V2.3 ,根据西门子的官方资料说v2.1以上版本是支持tcp/ip通信的但是我在i…

    SIMATIC S7-200 2021年7月5日
  • S7-200VD存储区累加问题

    我用VD存储区进行累加计算,当VD存储区的值累加到2048就不正常了,在2048以下任何数值都可以正常累加,当数值达到2048以上就不能正常累加了。附件有监控图片!请问是那里出了问…

    SIMATIC S7-200 2017年8月18日