回复:s7-300编程传送参数达到近40个,可以用吗??

宁超

  • 帖子

    1009
  • 精华

    39
  • 被关注

    370

论坛等级:至圣

注册时间:2012-12-11

普通 普通 如何晋级?

发布于 2016-07-05 17:32:07

5楼

   采用楼上zhangli0的方法,可以实现。Data为pointer数据类型,从共享DB里开辟出一段内存来用于FC的运算和数据保存,程序开始时用这段DB来赋值,FC内的运算结果再写到这段DB里,周而复始。先赋值再使用的原则就满足了。


名称,数据类型,接口

data ,pointer, in_out

ar2save ,dword,temp

source,dword,temp

dataswap,struct,temp

dbnumber,int,temp


//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  

      TAR2                                 //Addressregister safe

      T     #AR2Save

      L     P##Data                       //Data source

      LAR1  

      L     B [AR1,P#6.0]              //data area type

      L     B#16#84                      //84h = datablock

      <>I   

      SAVE  

      BEC      

    //以上检查data接口是否有填写参数

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      L     W [AR1,P#4.0]               //DB Nummer

      T     #DB_Number   

      OPN   DB [#DB_Number]

      L     D [AR1,P#6.0]               //Bitaddresse

      L     DW#16#7FFFF

      AD    

      LAR1  

      T     #Source

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//DataSwap就是你要传递的参数部分,可以建立成Struct,在Temp区域      

 LAR2  P##DataSwap            

      L     DBD [AR1,P#0.0]

      T     LD [AR2,P#0.0]

      L     DBD [AR1,P#4.0]

      T     LD [AR2,P#4.0]  //程序开始时,先给赋值,如果实在很多,就使用loop吧

...

...

...

     //省略的是程序逻辑部分

      OPN   DB [#DB_Number]  //当程序逻辑功能结束时,将运算结果写回共享DB

      LAR1  #Source

      LAR2  P##DataSwap      L     LD [AR2,P#0.0]

      T     DBD [AR1,P#0.0]

      L     LD [AR2,P#4.0]

      T     DBD [AR1,P#4.0]

     ...

     ...

...

      L     #AR2Save

      LAR2  

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      SET   

      SAVE  

      BEU   


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

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