Modbus从站协议库程序有解读过的吗?

谁解读了modbus从站协议库程序,能讲一下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

抄的  smarteye  的文章,原地址:
http://www.ad.siemens.com.cn/service/answer/solution.asp?Q_id=62988_1028.html

提问者对于答案的评价:
多谢费心了

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

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

相关推荐

  • s7-200,cup224cn,用的是SP6软件,怎么上传不了程序.

    想上传程序,可是上传不了,对西门子不是很了解,一直用的是欧姆龙的.请大师指点.QQ:154822223 问题补充:型号改了,可以接上PLC了。上传时,下面有几个选项,第一个不给选,…

    SIMATIC S7-200 2021年7月5日
  • 6ES7214-1BD23-0XB0和6ES7214-1BD23-0XB8有什么区别?

    如题,这2个模块有什么区别,官网上面6ES7214-1BD23-0XB0介绍很详细,6ES7214-1BD23-0XB8介绍很简单,没用过200PLC,求指教 最佳答案 6ES72…

    SIMATIC S7-200 2021年7月5日
  • 多台200的modbus通讯

    现场有5台200和几台仪表,想通过modbus通讯,现在不考虑仪表,5台200之间modbus通讯是否为一主四从?相互之间连接需要西门子的网络连接器么?若需要麻烦告诉我型号。用普通…

    SIMATIC S7-200 2017年8月15日
  • S7-200中的变量怎么和TD200进行连接

    S7-200中的变量如VW0,VW2等怎么在TD200中进行组态,具体怎么作法 最佳答案 首先提醒你的是,最好不要使用VW0,往往初学者最易出现的问题就是程序中使用了VW0。CPU…

    SIMATIC S7-200 2021年7月5日
  • S7200CPU,MODBUS通讯

    有一个S7200CPU,做modbus从站,要求主站读取从站VD100、VD104、VD108….十个实数值,请问在从站“INIT”指令中,MaxIQ=?,MaxAI=?,Ma…

    SIMATIC S7-200 2017年12月9日
  • MP277做主站带5个S7-200从站

    MP277做主站带5个S7-200从站,采用200控制器的PORT0,采用PPI通讯,触摸屏里的地址怎么写呢,比如MP277是1号站,其他的200系统分别为2,3,4,5,6号站。…

    SIMATIC S7-200 2020年10月31日
  • 实物接线问题

    EM231  (4路模拟量输入),实物规范接线应该注意些什么?怎么接? 最佳答案 讲解11:对于电压信号,按正、负极直接接入X+和X-;2:对于电流信号,将RX…

    2017年11月1日
  • S7-200以太网通讯生成的程序块ETH0_CTRL错误代码240

    S7-200以太网通讯生成的程序块ETH0_CTRL错误代码240 图片说明:    最佳答案 PLC->信息里看下CPU能识别到CP243-1模块吗?报…

    2017年5月31日
  • 通讯链接及程序

    224XP CN如何与威纶通6070IP和三台三菱变频器A700通讯,与变频器实现读写功能,触摸屏可以改写频率及监控电流大小,硬件上如何链接。程序这块如何编写,请各位大佬…

    SIMATIC S7-200 2021年7月5日
  • 怎样自学 s7200

    我高中毕业,从事电气装配和维修3年了,我现在在自学S7200编程,有时感到力不从心,知识面跟不上,问大家有什么好的建议和方法吗?谢谢了。 最佳答案 1、买一个cpu200,1500…

    SIMATIC S7-200 2021年7月4日