1     免责声明

本手册及样例包均为免费提供,仅供参考。所述版本、应用及案例可能与用户实际应用不符,请用户在使用前认真阅读相关使用说明,根据自身的应用环境及机床特点进行调整,并进行严格的测试,以规避可能存在的风险。对于在使用中发生的人员、财产等损失,由用户自行承担。

以上声明内容的最终解释权归西门子(中国)有限公司所有,后续内容更新恕不做另行通知。

2     概述

该功能利用交互式编程指令MMC,在零件程序中,调用预先编辑好的界面脚本文件,实现通过执行零件程序,修改驱动数据的目的,在实际使用中,需预先将需要修改的驱动数据作为脚本代码编辑好,且修改赋值等需要修改对应的脚本代码,因此,此功能使用并不灵活,适用于固定逻辑修改驱动数据的场合。

3     要求

3.1      硬件要求


硬件

工艺

PPU24x/NCU710

PPU26x/NCU720

PPU28x/NCU730

PPU28x.Advance

车床

铣床

磨床

-

3.2      软件版本要求

        程序调用脚本修改驱动数据,无选项要求

4     注意事项

4.1      注意事项

MMC指令调用交互界面修改驱动数据,可使用Easy xml或Run Myscreens语言编辑脚本,本文将介绍使用Easy xml的方法。

5     调试步骤

5.1     功能步骤

image.png

在窗体文件中将需要修改的参数按预定的方式、算法赋值给驱动数据的代码编辑好,然后在零件程序代码中,借助MMC指令(交互式调用),调用的对应的窗体菜单,窗体在加载时即可完成驱动数据的修改,并保存驱动数据的操作。

5.2     规划主程序,并驱动数据的修改需求

首先,需要根据实际的需求,规划修改驱动数据的零件程序,及驱动数据的修改需求,例如:


image.png

5.3     界面脚本编制

5.3.1          创建XML文件

界面脚本的格式同Easy XML相同,首先创建一个test.xml文件,名称推荐为不包含特殊字符的英文文件名,代码如下:

<DialogGui >

<!-- *************** 定义全局变量 *************** -->

<let name="drv_x" />

.......

<!-- *************** 定义菜单 *************** -->

<menu name = "func1">

.......

.......

</DialogGui>

5.3.2          定义菜单

每一个在零件程序中调用的MMC指令,可对应一组菜单定义,如实现功能相同可以重复调用,可使用R变量、GUD变量等作为参数传递。修改驱动数据的操作,定义在窗体的<init></init>间,即在窗体初始化时完成修改操作,举例说明如下:

image.png

image.png

5.4     在零件程序中调用脚本

在零件程序中完成脚本的调用,使用MMC指令实现。

MMC:交互式调用零件程序 (MMC) 窗口,通过预定义的子程序 MMC(...),可在操作界面上,如 SINUMERIK Operate,显示来源于数控程序的用户专用对话框。

MMC句法:MMC("<ADDRESS>,<COMMAND>,<FILE>,<DIALOG>","<QUIT>")

image.png

image.png


为实现调用章节5.3的xml文件定义的功能,在零件程序内执行MMC指令,例如:

image.png


执行程序后,执行N30指令时,将会触发调用界面文件test.xml的脚本菜单func1,并执行func1内定义的代码;

执行N200指令时,将会触发调用界面文件test.xml的脚本菜单func2,并执行func2内定义的代码。

在程序执行中,即可完成驱动数据修改、驱动数据保存的操作。

5.5     完成功能

将界面脚本的xml文件,拷贝至OEM\sinumerik\hmi\appl\,执行MPF程序,即可实现设定功能。

6     应用举例

本章节将以一个实际的应用 — 执行预定零件程序MPF,即可自动完成双向齿槽力矩补偿设定,进一步展示此功能。开发此应用的目的是,在大批量生产过程中,如需要使用齿槽力矩补偿功能,批量调试此功能,将会增加现场调试的难度,及整机的调试周期,再次情况下,使用此应用,在具有选项并激活补偿轴功能模块的情况下,只需运行学习程序MPF,即可完成设定轴的齿槽力矩补偿,无需值守操作。

6.1     应用设计框图

image.png

6.2     齿槽补偿主程序MPF设计

image.png

6.2.1          变量定义

在程序头,定义变量如下:

N1 DEF AXIS _AXVAR1 = X             ;X轴,不做只需删除X,空变量不执行该轴

N2 DEF AXIS _AXVAR2 = Y             ;Y轴,不做只需删除Y,空变量不执行该轴

N3 DEF AXIS _AXVAR3 = Z              ;Z轴,不做只需删除Z,空变量不执行该轴

N4 DEF INT _num = 7         ;补偿圈数定义,即5254[0]均值,建议5~8

N5 DEF REAL _LS_min, _Feed= 0.6    ;速度定义,螺距的百分比定义速度,建议0.4~0.8

运行前可根据需要对变量进行编辑

 

6.2.2          根据轴名称变量跳转

;****轴的组合包括:XYZXYXYZ,五种组合方式选择

N6 G290

N7 IF ((_AXVAR1==X) AND (_AXVAR2==Y) AND (_AXVAR3==Z)) GOTO _XYZ_COCO

N8 IF ((_AXVAR1==X) AND (_AXVAR2==Y) AND (_AXVAR3<>Z)) GOTO _XY_COCO

N9 IF ((_AXVAR1==X) AND (_AXVAR2<>Y) AND (_AXVAR3<>Z)) GOTO _X_COCO

N10 IF ((_AXVAR1<>X) AND (_AXVAR2==Y) AND (_AXVAR3<>Z)) GOTO _Y_COCO

N11 IF ((_AXVAR1<>X) AND (_AXVAR2<>Y) AND (_AXVAR3==Z)) GOTO _Z_COCO

N12 MSG("轴组合错误,只支持,XYZXYXYZ,五种选择")

N13 M00

N14 M30

根据轴变量的比较,判断是单独执行X、Y、Z轴的补偿,或是同时执行XY轴,或XYZ轴的补偿,进行跳转。如所有跳转条件皆不满足时,将会出现错误提示,并结束运行。

6.2.3          执行齿槽力矩补偿

此处以XYZ三轴同时进行的程序部分为例,程序如下:

image.png

image.png

其他跳转的程序部分同上述类似,请自行修改,或参考附件程序07_COCO_STUDY.MPF,限于篇幅,此处不做详细介绍。

6.2.4          设计脚本程序文件,coco_std.xml

image.png

1)    定义全局变量

<DialogGui >

<!-- ***************global var *************** -->

<let name="drv_x" />      <!-- **X轴模块编号变量 ** -->

<let name="drv_y" />      <!-- **Y轴模块编号变量 ** -->

<let name="drv_z" />      <!-- **Z轴模块编号变量 ** -->

<let name="p108_x" />   <!-- **X轴功能模块变量 ** -->

<let name="p108_y" />   <!-- **X轴功能模块变量 ** -->

<let name="p108_z" />   <!-- **X轴功能模块变量 ** -->


2)    菜单coco_xyz_set,XYZ轴,设置p5250.1=1,设置双向补偿

<!-- **xyz轴设置Coco双向补偿,5250 bit1=1 ,对应程序N24 **-->

<menu name = "coco_x_set">                        <!-- **菜单定义** -->

  <open_form name = "coco_x_setF" />       <!-- **打开窗体** -->

</menu>

<form name="coco_x_setF" width="1" height="1">    <!-- **窗体定义** -->

<init>                                                                     <!-- **窗体初始化** -->

  <caption> </caption>    <!-- **窗体名称** -->

  <DATA_ACCESS type = "true" />    

  <function name = "init_form" />     <!-- **取模块标号,及齿槽补偿功能模块的设定值,1:激活,0:未激活** -->

  <function name = "x_set" />   <!-- ** 调用函数体,设置X驱动,双向齿槽力矩补偿,p5250.1=1 ** -->

  <function name = "y_set" />   <!-- ** 调用函数体,设置Y驱动,双向齿槽力矩补偿,p5250.1=1 ** -->

  <function name = "z_set" />   <!-- ** 调用函数体,设置Z驱动,双向齿槽力矩补偿,p5250.1=1 ** -->

</init>

</form>

 

<FUNCTION_BODY name = "init_form"> 

 <!-- **取模块标号,及齿槽补偿功能模块的设定值,1:激活,0:未激活** -->

  <op>

              drv_x=$MA_CTRLOUT_MODULE_NR[0,AX1]      <!-- **X轴模块编号赋值** -->

      drv_y=$MA_CTRLOUT_MODULE_NR[0,AX2]      <!-- ** Y轴模块编号赋值** -->

      drv_z=$MA_CTRLOUT_MODULE_NR[0,AX3]      <!-- ** Z轴模块编号赋值** -->

      p108_x = ("drive/dc/p108[do$drv_x]" & 4194304) / 4194304    <!--X p108 bit22设定值 -->

      p108_y = ("drive/dc/p108[do$drv_y]" & 4194304) / 4194304    <!--Y p108 bit22设定值 -->

      p108_z = ("drive/dc/p108[do$drv_z]" & 4194304) / 4194304     <!--Z p108 bit22设定值 -->

  </op>

</FUNCTION_BODY>

 

<FUNCTION_BODY name = "x_set">   <!-- ** 函数体,设置X驱动,双向齿槽力矩补偿,p5250.1=1 ** -->

 <if>

          <condition>p108_x == 1</condition>             <!-- 如果Xp108.22=1,即齿槽补偿功能模块已激活 -->

          <then>

            <function name="ncfunc.bitset" refvar="drive/dc/p5250[DO$drv_x]" value="0" > 0 </function>

            <!-- 设置X p5250.0=0,齿槽补偿不生效 -->

            <function name="ncfunc.bitset" refvar="drive/dc/p5250[DO$drv_x]" value="1" > 1 </function>

            <!-- 设置X p5250.1=1,齿槽补偿与方向相关,即双向激活 -->

                   <while>

                           <condition> "drive/dc/p5250[DO$drv_x]" !=2 </condition>    

<!-- ** X p5250=2,继续执行** -->

                   </while>

            </then>

            <else>

                          <print text="%s">X轴齿槽转矩补偿功能未激活</print>  <!-- * p108.221,则提示错误信息* -->

            </else>

 </if>

</FUNCTION_BODY>

以上为设置齿槽补偿方向相关,并关闭齿槽补偿功能的脚本代码部分,被调用的函数体Y、Z轴设置同X类似,此处略过。


3)    菜单coco_xyz,XYZ轴,设置p5251.0=1,开始学习

<!-- 开始学习,xyz5251.0 = 1,对应程序N28 -->

<menu name = "coco_xyz">                   <!-- **菜单定义** -->

  <open_form name = "coco_xyzf" />   <!-- **打开窗体** -->

</menu>

<form name="coco_xyzf" width="1" height="1">   <!-- **窗体定义** -->

<init>

  <caption> </caption>

  <DATA_ACCESS type = "true" />

  <function name = "init_form" />    <!-- **取模块标号,及齿槽补偿功能模块设定值,1:激活,0:未激活** -->

  <function name = "x_start" />   <!-- ** 调用函数体,设置X驱动,齿槽补偿学习开始,p5251.0=1 ** -->

  <function name = "y_start" />   <!-- ** 调用函数体,设置Y驱动,齿槽补偿学习开始,p5251.0=1 ** -->

  <function name = "z_start" />   <!-- ** 调用函数体,设置Z驱动,齿槽补偿学习开始,p5251.0=1 ** -->

</init>

</form>

 

<FUNCTION_BODY name = "x_start">    <!-- **函数体定义** -->

 <if>

          <condition>p108_x == 1</condition>      <!-- 如果Xp108.22=1,即齿槽补偿功能模块已激活 -->

          <then>

                      <function name="ncfunc.bitset" refvar="drive/dc/p5251[DO$drv_x]" value="1" > 0 </function>

                     <!-- 设置X p5251.0=1,齿槽补偿学习开始 -->

                      <while>

                           <condition> "drive/dc/p5251[DO$drv_x]" !=1 </condition>   <!-- *X p5250=1,继续执行* -->

                      </while>

          </then>

          <else>

          <print text="%s">X轴齿槽转矩补偿功能未激活</print> <!-- * p108.221,则提示错误信息* -->

          </else>

 </if>

</FUNCTION_BODY>

以上为设置齿槽补偿学习开始的驱动参数设置脚本,被调用的函数体Y、Z轴设置同X类似,此处略过。


4)    菜单coco_xyz_done,XYZ轴,设置p5251.0=0,学习结束

<!-- xyzp5251 = 0 ,对应程序N33 -->

<menu name = "coco_xyz_done">                         <!-- **菜单定义** -->

  <open_form name = "coco_xyz_end" />             <!-- **打开窗体** -->

</menu>

<form name="coco_xyz_end" width="1" height="1">      <!-- **窗体定义** -->

<init>

  <caption> </caption>

  <DATA_ACCESS type = "true" />

  <function name = "init_form" />   <!-- **取模块标号,及齿槽补偿功能模块设定值,1:激活,0:未激活** -->

  <function name = "x_done" />    <!-- ** 调用函数体,设置X驱动,齿槽补偿学习结束,p5251.0=0 ** -->

  <function name = "y_done" />    <!-- ** 调用函数体,设置Y驱动,齿槽补偿学习结束,p5251.0=0 ** -->

  <function name = "z_done" />    <!-- ** 调用函数体,设置Z驱动,齿槽补偿学习结束,p5251.0=0 ** -->

</init>

</form>

 

<FUNCTION_BODY name = "x_done">    <!-- **函数体定义** -->

 <if>

          <condition>p108_x == 1</condition>   <!-- 如果Xp108.22=1,即齿槽补偿功能模块已激活 -->

          <then>

                       <data name = "drive/dc/p5251[DO$drv_x]">0</data>

                       <!-- 设置X p5251.0=1,齿槽补偿学习结束 -->

                       <while>

            <condition> "drive/dc/p5251[DO$drv_x]" !=0 </condition>  <!-- *X p5250=0,继续执行* -->

                       </while>

           </then>

           <else>

                                <print text="%s">X轴齿槽转矩补偿功能未激活</print>   <!-- * p108.221,则提示错误信息* -->

           </else>

 </if>

</FUNCTION_BODY>

以上为设置齿槽补偿学习结束的驱动参数设置脚本,被调用的函数体Y、Z轴设置同X类似,此处略过。


5)    菜单coco_xyz_act,XYZ轴,设置p5250.0=1,功能生效

<!-- xyzp5250.0 = 1 ,功能生效,对应程序N46 -->

<menu name = "coco_xyz_act">

  <open_form name = "coco_xyz_active" />

</menu>

<form name="coco_xyz_active" width="1" height="1">

<init>

  <caption> </caption>

  <DATA_ACCESS type = "true" />

  <function name = "init_form" />

  <function name = "x_act" />  <!-- ** 调用函数体,设置X驱动,齿槽补偿学习结束,p5251.0=0 ** -->

  <function name = "y_act" />  <!-- ** 调用函数体,设置Y驱动,齿槽补偿学习结束,p5251.0=0 ** -->

  <function name = "z_act" />  <!-- ** 调用函数体,设置Z驱动,齿槽补偿学习结束,p5251.0=0 ** -->

</init>

</form>

 

<FUNCTION_BODY name = "x_act">

 <if>

         <condition>p108_x == 1</condition>

         <then>

                 <function name="ncfunc.bitset" refvar="drive/dc/p5250[DO$drv_x]" value="1" > 0 </function>

                 <!-- 设置X p5250.0=1,齿槽补偿功能生效 -->

                 <while>

                       <condition> "drive/dc/p5251[DO$drv_x]" !=3 </condition>  <!-- *X p5250=0,继续执行* -->

                 </while>

          </then>

          <else>

                <print text="%s">X轴齿槽转矩补偿功能未激活</print>  <!-- * p108.221,则提示错误信息* -->

          </else>

 </if>

</FUNCTION_BODY>

以上为设置齿槽补偿功能生效的驱动参数设置脚本,被调用的函数体Y、Z轴设置同X类似,此处略过。


6)    菜单coco_xyz_save,XYZ轴,设置p971=1,保存驱动数据

<!-- xyz轴驱动参数保存,p971=1 对应程序N50 -->

<menu name = "coco_xyz_save">

  <open_form name = "coco_xyz_savef" />

</menu>

<form name="coco_xyz_savef" width="1" height="1">

<init>

  <caption> </caption>

  <DATA_ACCESS type = "true" />

  <function name = "init_form" />

  <function name = "x_save" />   <!-- ** 调用函数体,设置X驱动,驱动数据保存,p971=1   ** -->

  <function name = "y_save" />   <!-- ** 调用函数体,设置Y驱动,驱动数据保存,p971=1   ** -->

  <function name = "z_save" />   <!-- ** 调用函数体,设置Z驱动,驱动数据保存,p971=1   ** -->

</init>

</form>

 

<FUNCTION_BODY name = "x_save">

<data name = "drive/dc/p971[DO$drv_x]">1</data>

 <!-- * 设置驱动数据p971=1,当保存完成后,p971恢复为0* -->

    <while>

             <condition> "drive/dc/p971[DO$drv_x]" !=0 </condition>   <!-- *X p971=0,继续执行* -->

    </while>

</FUNCTION_BODY>

以上为设置驱动参数保存的脚本,被调用的函数体Y、Z轴设置同X类似,此处略过。

6.2.5          设置齿槽力矩补偿功能模块

在CU中设置对应驱动模块号的P108 bit22=1,保存后即可生效,此处不做详细介绍。

6.3     功能测试

将xml文件,拷贝至系统CF卡,OEM\sinumerik\hmi\appl\,执行MPF程序,即可实现自动完成齿槽力矩补偿学习并激活的无人值守过程。

至此,本应用实例介绍完毕。

7     参考文献

1.     SINUMERIK 840D sl/ 828D工作准备部分,08/2018

2.     SINUMERIK 840D sl Easy XML编程手册,08/2018

3.     SINAMICS S120/S150 参数手册,06/2020

4.     S120驱动功能 功能手册,06/2020

8     作者/联系人

Cao Peng

2021.10.13

9     版本信息

版本

日期

修改内容

V1.0

2021.10.13