1      免责声明

本使用手册及样例包目录内所包含文档、PLC程序、机床可执行程序(MPF、SPF、…)、电气图,可能与用户实际使用不同,用户可能需要先对例子程序做修改和调整,才能将其用于测试。本例程的作者和拥有者对于该例程的功能性和兼容性不负任何责任,使用该例程的风险完全由用户自行承担。由于它是免费的,所以不提供任何担保,错误纠正和热线支持,用户不必为此联系中国东方数控有限公司技术支持与服务部门。

对于在使用中发生的人员、财产损失本公司不承担任何责任,由使用者自行承担风险。

以上声明内容的最终解释权归中国东方数控有限公司所有,后续内容更新不做另行通知。

2      概述

在专用机床中很多都有特定的加工程序以及界面,而在用户侧往往需要加工同类型不同规格的零件,此时只需修改相应界面参数即可。但是每次切换零件都需要重新输入相匹配的参数,有没有一种方法可以将常用零件的工艺参数保存出来,需要用的时候再读取出来呢,答案是肯定的。本例分享下如何将界面参数保存读取的方法。

3      要求

3.1      硬件要求


硬件

工艺

PPU24x/NCU710

PPU26x/NCU720

PPU28x/NCU730

PPU28x.Advance

车床

铣床

磨床


3.2     
软件版本要求

         V4.7

3.3      其他要求

    

4      注意事项

4.1      注意事项一

本例只对保存参数,读取参数的相关语法做介绍,不针对所有界面语法。详细语法说明请在参考文献中查阅

 

5      调试或使用步骤

5.1      流程示意

    

  保存流程:

image.png


读取流程:

image.png


5.2      特殊语法介绍

1:FUNCTION_BODY:

属性

name= “函数体的名称”

parameter = “参数列表” (可选)

属性列出了需要的传输参数。参数相互之间以逗号分隔。

调用函数体时,函数调用中给定参数的值会复制到所列出的传递参数中。

return = “true” (可选)

如果属性设为 true,则创建局部变量 $return。将函数的返回值复制到其中,

在退出该函数时该值会继续传输给主调函数。

语法

<FUNCTION_BODY   name = "<function_name>" parameter = "<p1, p2,   p3>"

<LET name   = "tmp></LET>

<OP>   tmp = p1 </OP>

</FUNCTION_BODY>



 

2:FOR 循环

说明

for (初始化;测试;继续)指令

语法

<FOR>

<INIT>…</INIT>

<CONDITION>…</CONDITION>

<INCREMENT>…</INCREMENT>

</FOR>

按下列方式执行 For 循环:

1. 运用表达式 初始化 (INIT)。

2. 运用表达式 文本 (CONDITION) 作为布尔型表达式。如果值为假(false),则结束 For 循环。

3. 执行后续的指令。

4. 运用表达式 继续 (INCREMENT)..

 

 

注意

所有在 INIT、CONDITION 和 INCREMENT 分支中使用的变量都要在 FOR 循

环的外部创建。

 

3:doc.writetofile

该函数可以将一个字符串变量的内容写入指定文件中。文件名只能用小写字母。需要访问另一个目录中的文件时,可采用相对路径,即目录从 appl 或 dvm 开始

参数

progname - 文件名

str1 - 字符串

语法

<function   name="doc.writetofile" > progname, str1</function>

示例

<function   name="doc.writetofile">_T"n:\mpf\test.mpf", my_var   </function>

 

4:MSGBOX

指令会打开一个信息盒,其给分支的返回值可供使用

语法

<MSGBOX text="<Message>" caption="<caption>"   retvalue="<variablename>" type="<button   type>" />

属性

text         文本

caption    标题

retvalue    其中复制有返回值的变量名:

1 – OK

0 – CANCEL

type

应答可能:

BTN_OK”

BTN_CANCEL”

BTN_OKCANCEL”

如果对属性   "text" 或 "caption" 使用报警编号,则信息盒会显示为该编号所保存

的文本。

示例

<MSGBOX   text="保存参数组完成" caption="提示" retvalue="st2" type="BTN_OK"   />

 

 

 

5:IF语句

有条件的指令(IF, THEN, ELSE)标签 THEN 和 ELSE 包含在标签 IF 中。标签 IF 后跟有条件,而条件在标签 CONDITION 中执行。需要通过其他的指令处理来确定运算结果。如果函数结果为真,则执行 THEN 分支而跳过 ELSE 分支。如果函数结果为假,则解析器执行 ELSE 跳转。

语法

<IF>

<CONDITION> 条件 != 7 </CONDITION>

<THEN>

情况说明:条件满足

</THEN>

<ELSE>

情况说明:条件不满足

</ELSE>

</IF>

举例

<if>

            <condition> doext ==   1</condition>

         <then>

          <MSGBOX text="读取参数组完成" caption="读取参数完成"   retvalue="st2"

type="BTN_OK" />

</then>

<else>

        <MSGBOX text="无法找到相应名称数据组"   caption="读取参数错误" retvalue="st2"   type="BTN_OK" />

</else>

</if>

如果doext==1则弹出读取参数完成提示框,否则弹出读取参数错误提示框

 

 

 

6:doc.exist

如文件存在,则函数提供值 1。文件名只能用小写字母。需要访问另一个目录中的文件时,可采用相对路径,即目录从 appl 或 dvm 开始。

语法

<function name="doc.exist"   return="<int_var>" >progname </function>

参数

progname - 文件名

示例

<function   name="doc.exist" return="doext">filename</function>

 

7:readfromfile,string.find,string.left,string.trimrigh,string.delete,ftrans等语法说明,请参考SINUMERIK 840D sl基本软件和操作软件手册


5.3      保存参数程序结构与说明

1:在主标签xmldial.xml中定义所有界面标签,以及相应变量 

<?xml version="1.0" encoding="UTF-8"?>

 <DialogGui   type="1">

  <?include   src="f:\appl\Main.xml"?>

  <let name="st1"   type="string" />

  <let name="st2"   type="string" />

</DialogGui>

 

 

界面文件中包含main.xml标签

界面启动时定义字符串变量st1,st2



 

2:在main.xml标签中定义按键,以及按键调用

<menu name="main">

    <OPEN_FORM   name="main" />

    <softkey   position="1" type="user_controlled">

      <state   type="pressed" />

      <caption>倒角加工</caption>

        <navigation>main</navigation>

    </softkey>

             <softkey position="11"   type="user_controlled">

      <state   type="notpressed" />

      <caption>保存参数</caption>

     <function   name="paraset"></function>

     </softkey>

             <softkey position="9"   type="user_controlled">

     <state   type="notpressed" />

     <caption>读取参数</caption>

     <function   name="pararead"></function>

      </softkey>

  </menu>

 

 

 

 

 

定义按键 倒角加工,按键跳转至main.xml标签

 

定义按键 保存参数,按键调用函数体paraset,函数体定义在后面会说到

 

 

 

定义按键 读取参数,按键调用函数体pararead,函数体定义在后面会说到



 

3:定义界面显示文本

<form name="main">

  <paint>

    <text xpos="10"   color="#000000" ypos="100" font="1">X轴进刀位置</text>

    <text xpos="10"   color="#000000" ypos="125" font="1">X轴退刀位置</text>

    <text xpos="10"   color="#000000" ypos="150" font="1">Z轴起始偏移角</text>

    <text xpos="10"   color="#000000" ypos="175" font="1">XY轴安全位置</text>

    <text xpos="275"   color="#000000" ypos="300" font="1">变位系数</text>

    <text xpos="275"   color="#000000" ypos="325" font="1">齿顶高系数</text>

    <text xpos="275"   color="#000000" ypos="350" font="1">齿底高系数</text>

            <text   xpos="20" color="#000ff0" ypos="50"   font="2">齿轮参数组名称</text>

  </paint>

 

 

文本需定义在<paint>…</paint>之中

 

 



 

4:定义界面输入框

<init>

<caption>倒角中心 </caption>

 

 

<control name="InputField91" xpos="150"   ypos="50" height="16" width="100"   refvar="st1" hotlink="true" />

 

 

 

 

 

 

 

 

 

<control name="InputField1" xpos="150"   ypos="100" height="16" width="110"   refvar="nck/channel/parameter/r[0]" hotlink="true"   format="%10.3f" font="1" color_bk="#ffff80"   />

 

<control   name="InputField2" xpos="150" ypos="125"   height="16" width="110"   refvar="nck/channel/parameter/r[1]" hotlink="true"   format="%10.3f" font="1" color_bk="#ffff80"   />

 

<control   name="InputField3" xpos="150" ypos="150" height="16"   width="110" refvar="nck/channel/parameter/r[2]"   hotlink="true" format="%10.3f" font="1"   color_bk="#ffff80" />

 

<control   name="InputField4" xpos="150" ypos="175"   height="16" width="110"   refvar="nck/channel/parameter/r[3]" hotlink="true"   format="%10.3f" font="1" color_bk="#ffff80"   />

 

<control   name="InputField20" xpos="420" ypos="300"   height="16" width="110"   refvar="nck/channel/parameter/r[4]" hotlink="true"   format="%10.3f" font="1" color_bk="#ffff80"   />

 

<control   name="InputField21" xpos="420" ypos="325"   height="16" width="110"   refvar="nck/channel/parameter/r[5]" hotlink="true"   format="%10.3f" font="1" color_bk="#ffff80"   />

 

    <control   name="InputField22" xpos="420" ypos="350"   height="16" width="110"   refvar="nck/channel/parameter/r[6]" hotlink="true"   format="%10.3f" font="1" color_bk="#ffff80"   />

  </init>

  <timer />

  <focus_in />

  <edit_changed />

  <index_changed />

  <close />

  <key_evennt />

  <message />

</form>

 

定义界面标题 倒角中心

 

定义齿轮参数组名称输入框,变量st1是在xmldial.xml中定义的字符串 变量

 

 

 

 

 

定义输入框所关联的R变量,以及位置,颜色等

X轴进刀位置对应r[0].

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

固定结构



 

 

当完成第1,2,3,4步之后就可以显示出界面,如图所示:

image.png


5:定义保存函数体paraset,对应第1步中按键调用函数体

<function_body name="paraset">

<let name="filename"   type="string"></let>

<let name="doext" type="int">0</let>

<let name="filecont"   type="string"></let>

<let name="midcont"   type="string"></let>

<let name="paran" type="int">0</let>

<let name="paracnt" type="int">0</let>

<let name="readcont"   type="string"></let>

<let name="entindex" type="int">0</let>

<let name="substr" type="string"></let>

<let name="index"></let>

<let name="numbstr"   type="string"></let>

<let name="R_1" type="float"></let>

对应按键保存参数,调用函数体名称paraset

 

在函数体paraset定义变量,用于函数体计算

<print   name="filename"text="n:\mpf\para\%s.mpf">st1</print>

输出文件名称,以及文件路径

 

<for>

<init>

            <op>index=0</op>

</init>

            <condition>   index <=10</condition>

               <increment>

                    <op>index = index +   1</op>

                </increment>

            <op>R_1="Nck/Channel/Parameter/R[$index]"</op>

          <print   name="midcont" text="%f">R_1</print>

          <op>filecont   =filecont+midcont + _T"\\n"</op>

<function   name="doc.writetofile">filename,filecont</function>

</for>

 <MSGBOX text="保存参数组完成" caption="提示"   retvalue="st2" type="BTN_OK" />

</function_body>

循环结构:

1        初始化index为0

2   当index<=10时,将R[index]写入至定义路径文件中

 

 

 

 

结束循环后弹出保存完成对话框

 



 

6:定义读取函数体parasread,对应第1步中按键调用函数体

<function_body name="pararead">

<let name="filename"   type="string"></let>

<let name="filename-1"   type="string"></let>

<let name="doext" type="int">0</let>

<let name="filecont"   type="string"></let>

<let name="midcont"   type="string"></let>

<let name="paran" type="int">0</let>

<let name="paracnt" type="int">0</let>

<let name="readcont"   type="string"></let>

<let name="entindex" type="int">0</let>

<let name="substr" type="string"></let>

<let name="mindex" type="int"></let>

<let name="index"></let>

<let name="numbstr" type="string"></let>

<print name="filename"   text="n:\mpf\para\%s.mpf">"st1"</print>

<function name="doc.exist"   return="doext">filename</function>

对应按键读取参数,调用函数体名称pararead

 

在函数体pararead定义变量,用于函数体计算

 

 

 

 

 

 

 

 

 

<if>

            <condition>   doext == 1</condition>

         <then>

            <function name="doc.readfromfile"   return="readcont">filename</function>

              <for>

                            <init>

                                    <op>index=0</op>

                            </init>

                            <condition> index<= 10</condition>

                             <increment>

                                      <op>index = index + 1</op>

                             </increment>

            <function   name="string.find" return="entindex">readcont,   _T"\\n"</function>

            <function   name="string.left" return="substr">readcont,   entindex</function>

                        <function   name="string.trimright">substr</function>

                        <op>entindex   = entindex +1</op>

                        <function   name="string.delete">readcont,0,entindex</function>

        <type_cast   name="substr" type="float"/>

        <op>   "Nck/Channel/Parameter/R[$index]"= substr</op>

         <type_cast   name="ftrans" type="string"/>

          </for>

          <MSGBOX text="读取参数组完成" caption="读取参数完成"   retvalue="st2" type="BTN_OK" />

            </then>

            <else>

   <MSGBOX text="无法找到相应名称数据组"   caption="读取参数错误" retvalue="st2"   type="BTN_OK" />

            </else>

</if>

</function_body>

 

判断文件是否存在,若存在则doext为1,否则为0若文件存在,执行<then></then>中的循环字符串处理语句,完成后输出读取完成提示框

若不存在则执行<else></else>中语句输出读取失败提示框

 

 

 

 

 

 

 

 

文件不存在,输出错误提示框

 

 

 

 

 

 

5.4      功能演示

 例1保存参数演示:将界面参数保存至文件CHILUN1中,如图:

1:输入对应参数,如:X轴进刀位置11,输入齿轮参数组名称CHILUN1,INPUT键确认

image.png

 

2  点击屏幕右侧保存参数,保存完成后弹出提示框:保存参数完成,如图:

image.png

3  此时在零件程序目录会生成CHILUN1.MPF文件,对应界面中定义的文件路径"n:\mpf\para\%s.mpf"如图:

image.png 


 

保存的数值如下:

image.png


 例2读取参数演示将文件CHILUN2中的参数加载至变量中

1CHILUN2文件中数值如图

image.png

2: 在自定义界面 齿轮参数组名称中输入 CHILUN2,并按INPUT键确认

3:点击屏幕右侧读取参数按键,读取完成后弹出提示框:读取完成

image.pngimage.png

 

4 此时观察之前定义的参数已经改变,比如X轴进刀位置原先是0.读取成功后变为10.,读取完成

image.png

 

 

3读取不存在参数组演将文件CHILUN3(文件不存在)中的参数加载至变量

image.png

 

由于不存在CHILUN3文件,故读取失败,弹出读取失败提示框。如图:

image.png

 

 

 

 

 

6      参考文献

SINUMERIK 840D sl基本软件和操作软件


7      作者/联系人

Chen Jian

2020.10.30

8      版本信息

版本

日期

修改内容

V1.0

2020.10.30


V1.1

2020.10.31

完善可读性