S7-300几句话编程不信的话可以试一下。有能解释原因的就更好了 点击:648 | 回复:2



北环路

    
  • 精华:1帖
  • 求助:0帖
  • 帖子:12帖 | 121回
  • 年度积分:0
  • 历史总积分:242
  • 注册:2006年8月16日
发表于:2010-05-27 20:58:21
楼主
在FC1块里调用另一个FC2块,

FC1根据以下两种方法赋值如下内容:

CALL FC2:

AD1=DB1.DBW10


或者方法2:

OPN DB1

CALL FC2

AD1=DBW10(注意此时区别)

FC2内容:

L #AD1

L 1

+I

T #AD1
(注意此时的输入型可以用在这里的输出,实际使用表明这点)



在调用时有个IN型输入变量暂叫AD1,此时赋值有两种:方法1,DB1.DBW10送给这个AD1;

方法2或者在调用FC块之前,用语句打开OPN DB1,然后在使用DBW10送给这个AD1。此时得到的结果是不一样的。

前者DB1.DBW内容不变。后者内容+1循环。



yuanle

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 10208回
  • 年度积分:2747
  • 历史总积分:48332
  • 注册:2005年4月22日
发表于:2010-05-27 21:48:05
1楼
個人認為:

    OPN指令啟用DB時,實際CPU是對DB寄存器(當然,也可以OPN DI1,AD=DIW10,此時CPU對DI寄存器)進行操作,也就是傳遞給IN的不是DBW的值,而是DB寄存器的地址,相當於傳遞了ANY指針,每執行一次OPN,就要重寫一次DB。

    而使用絕對地址,相當於引用了DB的值,而不是地址。

    而FC的IN端,根據IEC61131,則是只讀的,因此使用絕對地址不能更改數據塊的值。

   當使用FB,並將AD建立在IN_OUT上,就可以使用絕對地址,此時,背景DB相當於實現了DI寄存器的功能。

  以上僅為個人的劣見,望指正。

Good Luck~
  

北环路

  • 精华:1帖
  • 求助:0帖
  • 帖子:12帖 | 121回
  • 年度积分:0
  • 历史总积分:242
  • 注册:2006年8月16日
发表于:2010-05-31 19:15:32
2楼
回复内容:
对:yuanle 关于個人認為:

    OPN指令啟用DB時,實際CPU是對DB寄存器(當然,也可以OPN DI1,AD=DIW10,此時CPU對DI寄存器)進行操作,也就是傳遞給IN的不是DBW的值,而是DB寄存器的地址,相當於傳遞了ANY指針,每執行一次OPN,就要重寫一次DB。

    而使用絕對地址,相當於引用了DB的值,而不是地址。

    而FC的IN端,根據IEC61131,則是只讀的,因此使用絕對地址不能更改數據塊的值。

   當使用FB,並將AD建立在IN_OUT上,就可以使用絕對地址,此時,背景DB相當於實現了DI寄存器的功能。

  以上僅為個人的劣見,望指正。

Good Luck~
  
内容的回复:

谢谢你的辛苦回答:1.DB(DI)的寄存器功能如何实现,按您说的这里有两种方式:通过OPN DB,还有就是FB里建立IN_OUT类型。问还有其他常用的使用场合吗?这里有点难懂,都是自己在琢磨。恳请指导。

热门招聘
相关主题

官方公众号

智造工程师