技术论坛

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

返回主题列表
作者 主题
东方红一红
版主

经验值:16129
发帖数:6594
精华帖:50
楼主    2020-12-23 13:09:43
主题:S7-300/400的DB块指针寻址编程案例 精华帖 

前不久,遇见多为网友同行发帖询问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


知其道,用其妙!
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。