技术论坛

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

作者 主题
版主

经验值: 16187
发帖数: 6610
精华帖: 50
主题:【分享】S7-300/400的DB块指针寻址编程案例
精华帖精华帖星级3级 推荐帖


只看楼主 只看精华 楼主 2020-12-23 13:09:43

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



知其道,用其妙!
精华帖版主置评: 立足实际应用案例,简明、完整演示了DB内部指针寻址的一种计算和编程方式,程序经过运行验证。
分享帖版主置评: 常见问题的实际解决方法案例,DB内部单元指针寻址的一种计算和编程方式。简洁、清晰,程序经过运行验证。 (推荐人:东方红一红)
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1660036&b_id=4&s_id=0&num=16

奇侠

经验值: 9619
发帖数: 1550
精华帖: 14
回复:S7-300/400的DB块指针寻址编程案例
推荐帖


只看楼主 只看精华 1楼 2020-12-23 13:16:33

感谢分享,这个例程属于寄存器间接寻址的区域内寻址吧?要是深入讲一下更好了


 
以下网友喜欢您的帖子:

  
版主

经验值: 16187
发帖数: 6610
精华帖: 50
回复:S7-300/400的DB块指针寻址编程案例
推荐帖


只看楼主 只看精华 楼主 2楼 2020-12-23 13:20:42

@ weiyt,就是利用地址寄存器AR1/AR2,实现DB单元的指针寻址。


知其道,用其妙!
以下网友喜欢您的帖子:

  
侠圣

经验值: 3704
发帖数: 556
精华帖: 0
回复:S7-300/400的DB块指针寻址编程案例
推荐帖


只看楼主 只看精华 3楼 2020-12-23 21:35:14

感谢楼主分享,值得借鉴学习的好案例


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2054
发帖数: 384
精华帖: 2
回复:S7-300/400的DB块指针寻址编程案例


只看楼主 只看精华 4楼 2020-12-23 21:48:35

学习,收藏。感谢分享。


多学多用
以下网友喜欢您的帖子:

  
版主

经验值: 16187
发帖数: 6610
精华帖: 50
回复:S7-300/400的DB块指针寻址编程案例
推荐帖


只看楼主 只看精华 楼主 5楼 2020-12-24 11:00:01
以下是引用weiyt在2020-12-23 13:16:33的发言 >1楼

感谢分享,这个例程属于寄存器间接寻址的区域内寻址吧?要是深入讲一下更好了

感觉没有太多的东西可说。

AR1/AR2的原理和使用,STEP7或博途在线帮助里有详细说明。

指针寻址关注的要素就两点:一是基址,二是偏移量。

AR1/AR2存储的就是基址,偏移量就是[AR1,P#0.0]里的P#0.0。具体地址编码可以不关心,按系统要求去编码寻址即可。

具体应用中的基址和偏移量定义是不一样的,需要根据具体的数据结构特点及检索数据的方式来处理。案例只是给出了一种方式和思路。

充分理解需要自己上机测试,经过自己思考、预判、验证后,理解就生动鲜活了。


知其道,用其妙!
以下网友喜欢您的帖子:

  
至圣

经验值: 18407
发帖数: 2409
精华帖: 1
回复:S7-300/400的DB块指针寻址编程案例
推荐帖


只看楼主 只看精华 6楼 2020-12-24 13:21:19

十几年前的项目?楼主资深


 
以下网友喜欢您的帖子:

  
至圣

经验值: 18898
发帖数: 2108
精华帖: 0
回复:S7-300/400的DB块指针寻址编程案例
推荐帖


只看楼主 只看精华 7楼 2020-12-24 14:35:17

这个必须收藏起来


 
以下网友喜欢您的帖子:

  
奇侠

经验值: 7973
发帖数: 2355
精华帖: 73
回复:S7-300/400的DB块指针寻址编程案例


只看楼主 只看精华 8楼 2020-12-25 09:38:02

感谢东方版主分享,认真学习一下。


佛对我说:“你的痛苦来自于你的欲望,没有欲望也就没有痛苦!”
以下网友喜欢您的帖子:

  
游民

经验值: 72
发帖数: 9
精华帖: 0
回复:S7-300/400的DB块指针寻址编程案例


只看楼主 只看精华 9楼 2021-01-06 10:46:56


学习了,很不错


 
以下网友喜欢您的帖子:

  
游士

经验值: 174
发帖数: 25
精华帖: 0
回复:S7-300/400的DB块指针寻址编程案例


只看楼主 只看精华 11楼 2021-10-16 09:36:06

感谢楼主分享,但是有点深奥了,没有看懂什么意思


学习使我快乐
以下网友喜欢您的帖子:

  
游士

经验值: 262
发帖数: 24
精华帖: 0
回复:S7-300/400的DB块指针寻址编程案例


只看楼主 只看精华 12楼 2021-11-25 08:57:13


 学习学习!


有志者事竟成!
以下网友喜欢您的帖子:

  
至圣

经验值: 13377
发帖数: 644
精华帖: 7
回复:S7-300/400的DB块指针寻址编程案例


只看楼主 只看精华 13楼 2021-11-25 09:19:45
西门子资源中心就能下载到一份指针的案例集,文档内容对指针有很多说明.
菜腿骑菜车买菜
以下网友喜欢您的帖子:

  
奇侠

经验值: 7493
发帖数: 630
精华帖: 1
回复:S7-300/400的DB块指针寻址编程案例


只看楼主 只看精华 14楼 2021-11-25 10:46:46


收藏了,感谢版主分享。


 
以下网友喜欢您的帖子:

  
游士

经验值: 174
发帖数: 25
精华帖: 0
回复:S7-300/400的DB块指针寻址编程案例


只看楼主 只看精华 15楼 2021-12-22 09:34:07

这个太难了,有点深奥了


学习使我快乐
以下网友喜欢您的帖子:

  
奇侠

经验值: 8295
发帖数: 641
精华帖: 0
回复:S7-300/400的DB块指针寻址编程案例


只看楼主 只看精华 16楼 2021-12-23 07:43:07

学习了,感谢分享


努力向上
以下网友喜欢您的帖子:

  
至圣

经验值: 15532
发帖数: 1735
精华帖: 0
回复:S7-300/400的DB块指针寻址编程案例


只看楼主 只看精华 17楼 2021-12-23 09:50:34
以下是引用东方红一红在2020-12-23 13:09:43的发言 >楼主

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


感谢资深楼主分享,细品十几年前的项目学习了!


海纳百川,厚德务实!
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
S7-300/400的DB块指针寻址编程案例
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。