SINUMERIK 828D加工程序监控与自动数据存储

已锁定

工控一阳指King

  • 帖子

    185
  • 精华

    2
  • 被关注

    13

论坛等级:侠士

注册时间:2010-08-13

白金 白金 如何晋级?

SINUMERIK 828D加工程序监控与自动数据存储

4791

12

2021-05-02 20:42:48

调试存档是SINUMERIK 840Dsl/828D数控系统的一个重要的数据备份文件,拥有一个机床最新运行状态的调试存档文件对于机床的使用、维修和维护将会起到事半功倍的作用与效果。本贴将讨论,当添加或更新加工程序时,如何通过NC程序来监控加工程序的变化,在SINUMERIK 828D上实现自动数据存储功能,确保调试存档文件始终与机床最新的运行状态保持一致。

1.     全局变量定义

图1

如图1所示的定义目录中的MGUD.DEF文件可以用来定义全局变量,如果路径中没有MGUD.DEF文件,选择新建,并在随后的图2所示对话框中选择MGUD后确认,打开程序编辑器,如果MGUD.DEF文件已经存在,选择打开直接打开程序编辑器,将下列加粗的两行代码添加到M30之前。关闭程序编辑器,两次选择确定以默认设置完成和激活全局变量定义。

图2

DEF NCK INT PROG_COUNT

DEF NCK STRING[128] PROG_INFO[64]

M30  

此处定义了一个整型全局变量PROG_COUNT,和一个长度128字符,包括64个元素的字符串型全局变量数组PROG_INFO,读者可以根据实际需要更改变量长度和数组长度(元素个数)。PROG_COUNT将用于计数当前正在运行的循环所包含的加工程序(包括主程序和子程序)总数,PROG_INFO将用于保存当前被执行的每个加工程序的基本信息。

2.     编写子程序PROG_INFO.SPF

PROG_INFO.SPF用于读取正在被执行的加工程序的基本信息。它会判断当前正在执行的程序是否为主程序,如果是主程序,先将PROG_COUNT赋值0,将其基本信息保存到PROG_INFO[0]中。PROG_INFO.SPF每次被调用,PROG_COUNT自动加1。这样,主程序中所调用的全部子程序的基本信息就会按被调用的顺序依次保存到从PROG_INFO[1]到PROG_INFO[PROG_COUNT]的变量中。本贴旨在讨论如何实现该功能,因此,并未考虑同一个子程序被重复调用多次的情况,读者可以根据实际情况,自行添加相应代码,避免PROG_INFO数组和PROG_CMP.SPF子程序生成的程序清单文件中,一个子程序出现多条记录的情况。

PROG_INFO.SPF子程序在图3所示的制造商循环目录中创建,便于将子程序定义为M代码。

图3

完整的代码如下:

; 本子程序用于读取正在执行的子程序基本信息

; Kenyon

; 2020-10-31

;   Version V1

DEF   STRING[80] CUR_PROGPATH

DEF   STRING[16] CUR_PROG

DEF   STRING[32] FINFO

DEF   INT ERR

IF   $P_STACK==1

PROG_COUNT=0

ENDIF

CUR_PROGPATH=$P_PATH[$P_STACK-1]

CUR_PROG   =$P_PROG[$P_STACK-1]

FILEINFO(ERR,   CUR_PROGPATH<<CUR_PROG,FINFO)

PROG_INFO[PROG_COUNT]   = CUR_PROGPATH<<CUR_PROG<<FINFO

PROG_COUNT=PROG_COUNT+1

G90G1F300

RET

3.     编写子程序PROG_CMP.SPF

PROG_CMP.SPF首先检查主程序所在目录中的程序清单文件<主程序名>_LOG.SPF是否存在,如果文件不存在,直接跳转到标签UPDATELOG处,创建程序清单文件<主程序名>_LOG.SPF,这就意味着正在执行的程序是新添加到系统中并首次执行。如果<主程序名>_LOG.SPF文件已经存在,那么逐行读取文件内容,并和相应的PROG_INFO[_N]进行比较,判断程序是否已更新,如果程序没有更新过,无须更新程序清单文件,也不需要进行数据存储,直接返回主程序。否则,跳转到标签UPDATELOG处,更新程序清单文件<主程序名>_LOG.SPF。在创建和更新程序清单文件后,通过NCK输出 $A_OUT[1]=1来触发自动数据存储。

PROG_CMP.SPF子程序同样在图3所示的制造商循环目录中创建。完整代码如下:

; 本子程序用于判断正在加工的程序是否是新程序或者也被更新过

; Kenyon

; 2020-10-31

;   Version V1

DEF   INT _N

DEF   INT ERR

DEF   STRING[100] FNAME

DEF   STRING[255] RESULT[1]

$A_OUT[1]=0

;检查程序记录文件是否存在

FNAME=SUBSTR(PROG_INFO[0],0,STRLEN(PROG_INFO[0])-36)<<"_LOG_SPF"

IF ISFILE(FNAME)==0   GOTO UPDATELOG

;比较判断程序是否更新过。

FOR   _N=0 TO PROG_COUNT-1

READ(ERR,FNAME,_N+1,1,RESULT)

IF   PROG_INFO[_N]<>RESULT[0] GOTO UPDATELOG

ENDFOR

RET

;更新程序记录

UPDATELOG:

DELETE(ERR,FNAME)

FOR   _N=0 TO PROG_COUNT-1

WRITE(ERR,FNAME,PROG_INFO[_N])

ENDFOR

$A_OUT[1]=1

RET

4.     定义M代码

为了便于加工程序的编辑和阅读,将上述子程序PROG_INFO.SPF和PROG_CMP.SPF定义成M代码。M代码的定义可通过修改通用机床数据10715和10716来完成,此处设置10715[6]=80,10715[7]=81,10716[6]=PROG_INFO,10716[7]=PROG_CMP。即M80对应子程序PROG_INFO,M81对应子程序PROG_CMP。读者也可以按照实际情况定义为其它M代码。修改完机床通用数据后,需进行一次NCK的po复位后M代码才会生效。

5.     将M代码添加到加工程序

为了读取加工程序的基本信息,需在所有加工程序(包括主程序和子程序)中调用M80。加工循环完成后,需要在主程序的末尾M30之前调用M81来监控是否添加或更新了加工程序,进而判断是否需要进行自动数据存储。

6.     自动数据存储

在PLC中添加图4所示的程序。当PLC检测到DB2900.DBX4.0 = 1($A_OUT[1] = 1)时,在循环结束后延时20ms(当系统处于运行状态时,不能执行数据存储)启动数据存储的PI服务,自动执行数据存储。从而保证了每次添加或更新加工程序时,调试存档备份都会自动被更新。

图4

7.     编写测试程序

在图5所示的工件目录下创建一个PROG_MONITOR的工件目录,包括一个主程序PROG_0.MPF和9个完全一样的子程序PROG_X.SPF(X=1~9)。

图5

主程序先调用M80将其基本信息读取到PROG_INFO[0]变量中,然后依次调用9个子程序,最后调用M81来监控是否添加或更新了加工程序,并根据情况判断是否自动执行数据存储。主程序完整代码如下:

; 本子程序仅用于测试目的

; Kenyon

; 2020-10-31

;   Version V1

M80

CALL   "PROG_1.SPF"

CALL   "PROG_2.SPF"

CALL   "PROG_3.SPF"

CALL   "PROG_4.SPF"

CALL   "PROG_5.SPF"

CALL   "PROG_6.SPF"

CALL   "PROG_7.SPF"

CALL   "PROG_8.SPF"

CALL   "PROG_9.SPF"

M81

M30

子程序PROG_X.SPF(X=1到9)除了调用M80将程序基本信息读取到PROG_INOF[X]变量中之外,无其它实质性的加工内容,只是为了测试该功能而设计的代码,并无它用。完整代码如下:

; 本子程序仅用于测试目的

; Kenyon

; 2020-10-31

;   Version V1

M80

; 在此处添加加工内容的代码

RET

8.     测试程序清单文件的生成与更新

执行一次图5所示的主程序PROG_0.MPF,系统会自动在图5所示的目录中创建一个程序清单文件PROG_0_LOG.SPF。该文件依次记录了主程序和9个子程序的基本信息,包括路径、程序名、文件权限、最后修改日期和时间,如果6所示。

图6

接下来对PROG_9.SPF进行如下修改:

; 本子程序仅用于测试目的

; Kenyon

; 2020-10-31

;   Version V1

R20=5

M80

RET

再次执行PROG_0.MPF,可以看到,PROG_0_LOG.SPF文件中记录的PROG_9.SPF的最后修改时间已经更新过。

测试表明,程序清单的生成和更新成功实现。

9.     测试数据存储是否成功

执行完PROG_0.MPF程序后,等1分钟,待数据存储完成后,机床关机重新上电,当屏幕上显示“Press SELECT key to enter startup menu”时,按一下PPU面板上的SELECT键,并在接下来的对话框中选择“Reload saved user data”从CF卡上加载调试存档,启动机床后,PROG_MONITOR工件目录依然存在于程序管理器中,并且PROG_9.SPF已经是修改过的最新状态。这说明在执行PROG_0.MPF时进行过数据存储,因为如果没有进行过数据存储,从CF卡加载数据后应该是没有新增加的PROG_MONITOR工件目录的。

在不修改程序的情况下,将R50变量的值修改为100,再执行一次PROG_0.MPF,重复上述操作,机床启动后,R50的值变回原来的0。这说明了如果没有加工程序的更新或添加,在执行PROG_0.MPF时,是不会进行数据存储的。

测试结果表明,自动数据存储功能成功实现,达到预期效果。

10.  对循环时间的影响分析

上述测试中,PROG_0.MPF调用了9个子程序,加上PROG_0.MPF自身,一共对10个加工程序进行了监控,前面测试程序清单更新时,故意修改了PROG_9.SPF,其目的是让系统比对完10个程序后再更新程序清单文件。这样PROG_0.MPF的运行时间为10个程序比对和更新程序清单的总时间。结果显示,在需要更新程序清单文件的情况下,PROG_0.MPF运行时间约1秒,所以添加此功能基本不会增加循环时间,不会降低机床的生产效率。

11.  总结

运用上述方法,在完成M代码定义和PLC程序修改后,只需在加工程序相应部位添加M80和M81代码,机床就可以在添加和更新加工程序时,自动进行数据存储。确保调试存档始终与机床最后一次加工循环时的状态保持一致。因此,在机床出现异常需要从CF加载调试存档时,无须再进行程序编辑、校验和试运行等繁琐的工作,节省了时间和精力,大大提高了工作效率,最大化了调试存档数据备份的作用。对于需要频繁添加或者更新加工程序的通用机床,特别是习惯通过修改加工程序来进行刀补的应用场合,该方法值得推广和全面实施。并且,在进行适当的修改后,该方法还可以很容易地运用到SINUMERIK 840D sl系统上。

最后,限于笔者自身的技术水平,难免存在错误或者疏漏,文中不可避免词不达意的地方,还请读者见谅。

 

                                                                                                              Kenyon

                                                                                                         2020年10月31日

 

参考文献:SINUMERIK 840D sl/ 828D工作准备部分编程手册 数控软件 适用于 版本 4.8 SP3 08/2018

                简明调试手册 适用于 SINUMERIK 828D / 828D BASIC V04.07 SP3 07.2016

SINUMERIK 828D加工程序监控与自动数据存储 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SINUMERIK

共有24755条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

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