电工学习网

 找回密码
 立即注册
查看: 1795|回复: 0
打印 上一主题 下一主题

西门子S7-300/400的DB块指针寻址编程案例

[复制链接]
跳转到指定楼层
楼主
发表于 2020-12-23 21:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前不久,遇见多为网友同行发帖询问DB块内部指针寻址的原理和编程问题。抽空翻出十几年前的项目,找到合适的案例,特分享如下。案例有3方面的示范内容。
1,指针的计算和寻址编程;
2,循环指令的编程;
3,BCC的计算算法;

分享案例是用于通讯校验和BCC的计算,实际项目案例,经过运行验证。程序借用注意事项:

4,如果寻址的单元不同于案例,无论byte、word、dword,模仿案例的计算思路,修改即可。
5,求和注意循环次数对应的求和单元的长度。
6,案例代码如下:
FUNCTION "BCC Calculation" : VOID
TITLE =
VERSION : 0.1

VAR_INPUT
  DB_no : BLOCK_DB ;
  StartDBBno : INT ;
  Byte_Len : INT ;
END_VAR
VAR_OUTPUT
  BCC : BYTE ;
END_VAR
VAR_TEMP
  Loopcounter : BYTE ;
  XorWordSumLoByte : BYTE ;
  XorWordSum : WORD ;
END_VAR
BEGIN
NETWORK
TITLE =

      OPN   #DB_no;
      L     P#0.0;
      TAR1  ;
      L     #StartDBBno;
      DEC   1; //因为DBB(x)是DBW(x-1)的低字节
      L     P#1.0;
      *I    ;
      +AR1  ;
      L     0;
      T     #XorWordSum;
      L     #Byte_Len;
next: T     #LoopCounter;
      L     #XorWordSum;
      L     DBW [AR1,P#0.0];
      XOW   ;
      T     #XorWordSum;
      +AR1  P#1.0;
      L     #LoopCounter;
      LOOP  next;

      L     #XorWordSum;
      T     #XorWordSumLoByte;
      L     #XorWordSumLoByte;
      T     #BCC;
END_FUNCTION

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

电工学习网 ( )

GMT+8, 2024-5-21 11:23

Powered by © 2011-2022 www.diangon.com 版权所有 免责声明 不良信息举报

技术驱动未来! 电工学习网—专业电工基础知识电工技术学习网站。

栏目导航: 工控家园 | 三菱plc | 西门子plc | 欧姆龙plc | plc视频教程

快速回复 返回顶部 返回列表