技术论坛

simotion伺服控制实例

作者 主题
新手

经验值: 43
发帖数: 1
精华帖: 0
主题:【求助】simotion伺服控制实例


只看楼主 楼主 2019-03-12 09:07:04

哪位可以提供scout中st编写的伺服控制实例,初次接触想找一个实例学习一下。如有请发邮箱18553207992@163.com


 
以下网友喜欢您的帖子:

  
重要声明:

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

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

侠圣

经验值: 2044
发帖数: 626
精华帖: 1
回复:simotion伺服控制实例


只看楼主 1楼 2019-04-17 15:14:33

下面的Axismove是我写的最简单的例子,可以参考  


 PROGRAM AxisMove

        //input x [1\2\3\4\5\6\7\8\29] select the axis

        //booncestart=1 active the axis then set home 0

        //setvalue mubiaoposition=100.0,then boOnceFinish=1,the axis start position

        //boOnceFinish falldown trig,then stop and inactive the axis

        

        VAR_TEMP

            

            myRetDINT : DINT;

        END_VAR

        

        VAR 

            fe1, fe2          : F_TRIG;

            re1, re2          : R_TRIG;

            

            myRetBool         : ARRAY[0..7] OF BOOL;

            

            arrayPositionAxis : ARRAY[1..29] OF posAxis;

        END_VAR

        

            arrayPositionAxis[1]  := IndexConveyor;

            arrayPositionAxis[2]  := IndexConveyor;

            arrayPositionAxis[3]  := IndexConveyor;

            arrayPositionAxis[4]  := IndexConveyor;

            arrayPositionAxis[5]  := IndexConveyor;

            arrayPositionAxis[6]  := IndexConveyor;

            arrayPositionAxis[7]  := IndexConveyor;

            arrayPositionAxis[8]  := IndexConveyor;

            arrayPositionAxis[9]  := QuickConveyor;

            arrayPositionAxis[10]  := PressConveyor1;

            arrayPositionAxis[11]  := PressConveyor2;

        

     IF xx >= 1 AND xx<= 11 AND boOnceStart THEN

         IF arrayPositionAxis[xx].control = INACTIVE THEN //轴是否已激活

    

        myRetDINT :=

    _enableaxis(

        axis := arrayPositionAxis[xx] 

        // ,enablemode := ALL

        // ,servocontrolmode := ACTIVE

        // ,servocommandtoactualmode := INACTIVE

        // ,nextcommand := IMMEDIATELY

        // ,commandid := (0,0)

        // ,forcecontrolmode := INACTIVE

        // ,stwbitset := 0

        // ,movingmode := DO_NOT_CHANGE

); 

         END_IF;

         re1( clk := arrayPositionAxis[xx].control = ACTIVE); 

     

        

         IF re1.q THEN //轴是否已激活


myRetDINT :=

    _homing(

        axis := arrayPositionAxis[xx]

         ,homingmode := DIRECT_HOMING

         ,homepositiontype := DIRECT

        // ,homeposition := 0.0

        // ,velocitytype := USER_DEFAULT

        // ,velocity := 100.0

        // ,positiveacceltype := USER_DEFAULT

        // ,positiveaccel := 100.0

        // ,negativeacceltype := USER_DEFAULT

        // ,negativeaccel := 100.0

        // ,positiveaccelstartjerktype := USER_DEFAULT

        // ,positiveaccelstartjerk := 100.0

        // ,positiveaccelendjerktype := USER_DEFAULT

        // ,positiveaccelendjerk := 100.0

        // ,negativeaccelstartjerktype := USER_DEFAULT

        // ,negativeaccelstartjerk := 100.0

        // ,negativeaccelendjerktype := USER_DEFAULT

        // ,negativeaccelendjerk := 100.0

        // ,velocityprofile := USER_DEFAULT

        // ,mergemode := SEQUENTIAL

        // ,nextcommand := IMMEDIATELY

        // ,commandid := (0,0)

);

         END_IF;

         IF arrayPositionAxis[xx].control = ACTIVE AND 

            arrayPositionAxis[xx].positioningstate.homed = yes AND

            boOnceFinish THEN //轴已激活,已归零,启动定位


myRetDINT :=

    _pos(

        axis := arrayPositionAxis[xx]

        // ,direction := USER_DEFAULT

        // ,positioningmode := ABSOLUTE//relative

        ,position := mubiaoposition

        // ,velocitytype := USER_DEFAULT

        // ,velocity := 100.0

        // ,positiveacceltype := USER_DEFAULT

        // ,positiveaccel := 100.0

        // ,negativeacceltype := USER_DEFAULT

        // ,negativeaccel := 100.0

        // ,positiveaccelstartjerktype := USER_DEFAULT

        // ,positiveaccelstartjerk := 100.0

        // ,positiveaccelendjerktype := USER_DEFAULT

        // ,positiveaccelendjerk := 100.0

        // ,negativeaccelstartjerktype := USER_DEFAULT

        // ,negativeaccelstartjerk := 100.0

        // ,negativeaccelendjerktype := USER_DEFAULT

        // ,negativeaccelendjerk := 100.0

        // ,velocityprofile := USER_DEFAULT

        // ,blendingmode := USER_DEFAULT

        // ,mergemode := SEQUENTIAL

        // ,nextcommand := IMMEDIATELY

        // ,commandid := (0,0)

);

         END_IF;

    fe1( clk := boOnceFinish);    

    

IF  arrayPositionAxis[xx].control = ACTIVE AND 

    arrayPositionAxis[xx].motionstatedata.motionstate = STANDSTILL AND 

    fe1.q THEN

myRetDINT := _stop(axis := arrayPositionAxis[xx], stopmode := STOP_AND_ABORT );

myRetDINT := _disableaxis(axis := arrayPositionAxis[xx], disablemode := ALL );

boOnceStart :=FALSE;

END_IF;


END_IF;

     ;   

    END_PROGRAM



 
以下网友喜欢您的帖子:

  
游侠

经验值: 410
发帖数: 68
精华帖: 0
回复:simotion伺服控制实例


只看楼主 2楼 2019-08-16 15:11:30

西门子的全球资源中心里在应用样例中搜索SIMOTION ,选择英文网页,不过大部分的库都是加密的,如果你们有西门子的技术支持,可以找他们要旋切刀的Demo,这个里面功能部分是坐在库里面的,里面包含了Pos Move enable disable enablecamming disablecamming 等指令的应用,这个库是没有加密的。

或者你有旧版Souct 安装包的话(4.3或4.4),在安装包里也能找到这个库。


 
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
simotion伺服控制实例
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。