工业机器人交流会

  • 首页
  • 机器人
  • 账户
好记性不如烂笔头!
  1. 首页
  2. 机器人
  3. 正文

ABB机器人自动删除文件

2026年1月29日 42点热度 1人点赞 0条评论

实际的项目的施展过程中会产生大量的数据有用的没用的。有的需要显示,有的不需要。有时候甚至需要有弹出类似的MessageBox用户去选择然后才能进行程序的正常的运行,比如更换了产品类型。

有一种情况在项目的初期调试过程中需要记录数据。用于产品统计或者出问题后的数据分析。我们通常使用写文件的方法把数据写到硬盘里。

但这样的问题是文件越来越多,占用越来越大,而且示教器上删除文件的操作真的是繁琐到逆天,考虑到培训难度问题,以及最近的境外订单暴涨,想到和老外鸡同鸭讲,真的是一个头两个大,于是决定今天(20260129)抽时间研究一下自动删除的程序怎么写。


首先在《RAPID指令、函数和数据类型》(3HAC050917-010)这个说明书一番遨游下,成功找到相关的几个函数。

  • FileTimeDnum- 检索有关文件的时间信息
  • CTime- 将当前时间作为字符串来读取
  • CDate- 将当前日期作为字符串来读取
  • GetTime- 将当前时间作为一个数值来读取

因为FileTimeDnum的返回值是Unix时间戳,但是系统上没有有关于时间戳的另外的函数,所以最开始计划使用CTime和CDate读取到控制器的时间,用来计算Unix时间戳,不过直到我安装的RobotWare 6.15.08都没有现成函数,加上懒,就直接采用了创建文件--读取时间戳--删除文件的方式来获取当前的时间戳,毕竟读写了硬盘,在这个硬盘寿命也许比机器人本体的寿命更长的时代,虽说不必太过纠结,但或许在将来,我会实现根据系统计算时间戳的函数(先挖坑)。所以接下来不会讲解除了FileTimeDnum之外的其他函数。


FileTimeDnum- 检索有关文件的时间信息

根据上面的说明,可以写出下面这个函数。

    !-----------------------------------------------
    !程序功能:获取文件时间戳
    !参数:fileName:需要求时间戳的文件
    !返回值:文件的时间戳
    !-----------------------------------------------
    FUNC dnum ObtainTheFileTimestamp(string fileName)
        VAR dnum Timestamp;

        Timestamp:=FileTimeDnum(fileName);       !计算时间戳
        RETURN Timestamp;                        !返回计算到的时间戳
    ENDFUNC

上面的函数的参数是文件路径+文件名,所以我们还需要获取到文件夹里全部文件的名称,这里需要用到ReadDir以及OpenDir这两个函数还有RemoveFile指令,篇幅原因加上上面的函数和指令用法并不困难,所以这里略过,详情请看《RAPID指令、函数和数据类型》(3HAC050917-010)。

TPErase;                                                                                            !清屏
OpenDir dir1,filePath;                                                                              !打开需要清理的路径
WHILE ReadDir(dir1,fileName) DO                                                                     !循环读取文件名
    IF fileName<>"." AND fileName<>".." THEN                                                        !去除上级目录和当前目录
        IF ObtainTheFileTimestamp(filePath+fileName)<DeadlineTimestamp THEN                         !判断文件的时间戳是否小于截止时间戳
            RemoveFile filePath+fileName;                                                           !小于截止时间戳,删除
            TPWrite "RemoveFile : " + fileName;                                                     !写屏
        ELSE
            TPWrite "MaintainFile : " + fileName;                                                   !大于截止时间戳,保留,写屏
        ENDIF
    ENDIF
ENDWHILE
CloseDir dir1;                                                                                      !关闭路径

上面的两段代码就是这个模块的核心了,加上一些其他功能,最终的模块如下

MODULE AutoDeleteFiles(NOVIEW)
    ! @file AutoDeleteFiles.mod
    ! @brief 本模块实现自动删除文件
    ! @author JiangHao
    ! @date 2026-01-29
    ! @version 1.1
    !
    ! @details
    ! 本模块实现了自动计算文件生成时间,并且根据配置自动删除N天前的文件,以便于节省机器人内部空间,以及简化文件删除的流程
    ! 修改记录:
    ! - 2026-01-29: 初始版本创建。
    ! - 2026-01-29: 修改自动删除文件程序增加传入外部计算的时间戳
    ! @note
    ! - 时间戳计算网站:https://tool.lu/timestamp/
    ! - Uinx时间戳简介:Unix时间(也称为Unix时间戳)是从1970年1月1日00:00:00(UTC)开始所经过的秒数,不包括闰秒。它是一种用于表示时间点的标准方式,广泛应用于计算机系统和编程中。
    
    CONST string baseFilePath:="HOME:/BaXi/";                                                               !基础路径,指要自动删除文件的路径
    CONST dnum N_DaysAgo:=7;                                                                                !删除N天前的文件

    PROC main()
        !AutomaticallyDeleteFiles baseFilePath,N_DaysAgo;
        AutomaticallyDeleteFiles baseFilePath,N_DaysAgo\Timestamp:=1769687393;
    ENDPROC

    !-----------------------------------------------
    !程序功能:计算当前时间戳
    !参数:filePath:在该目录下创建文件,计算当前时间的时间戳
    !返回值:当前时间的时间戳
    !-----------------------------------------------
    FUNC dnum ObtainTheCurrentTimestamp(string filePath)
        VAR iodev logfile;
        VAR dnum Timestamp;


        Open filePath\File:="TimeCalculationFile.txt",logfile\Write;                                        !创建文件
        Close logfile;                                                                                      !关闭文件
        Timestamp:=ObtainTheFileTimestamp(filePath+"TimeCalculationFile.txt");                              !计算时间戳

        RemoveFile filePath+"TimeCalculationFile.txt";                                                      !删除文件
        RETURN Timestamp;                                                                                   !返回当前时间戳
    ENDFUNC

    !-----------------------------------------------
    !程序功能:获取文件时间戳
    !参数:fileName:需要求时间戳的文件
    !返回值:文件的时间戳
    !-----------------------------------------------
    FUNC dnum ObtainTheFileTimestamp(string fileName)
        VAR dnum Timestamp;

        Timestamp:=FileTimeDnum(fileName);                                                                  !计算时间戳
        RETURN Timestamp;                                                                                   !返回计算到的时间戳
    ENDFUNC

    !-----------------------------------------------
    !程序功能:计算N天前时间戳差值
    !参数:days:计算天数
    !返回值:时间戳差值
    !-----------------------------------------------
    FUNC dnum CalculateTimestamp_N_DaysAgo(dnum days)
        VAR dnum Timestamp;

        Timestamp:=days*24*60*60;                                                                           !计算差值
        RETURN Timestamp;                                                                                   !返回差值
    ENDFUNC

    !-----------------------------------------------
    !程序功能:自动删除文件
    !参数:filePath:删除该路径下days天前的文件;
    !参数:days:删除天数
    !参数:Timestamp:时间戳(可选参数),当不选择该参数时,会自动求当前时间戳,传入该参数时删除该参数的days天前的文件
    !返回值:无
    !-----------------------------------------------
    PROC AutomaticallyDeleteFiles(string filePath,dnum days,\dnum Timestamp)
        VAR dnum DeadlineTimestamp;                                                                         !截止时间戳
        VAR dir dir1;                                                                                       !文件目录结构
        VAR string fileName;                                                                                !读取到的文件名
        
        IF filePath = "HOME:" OR filePath = "HOME:/" THEN                                                   !判断是否根目录
            UIMsgBox \Header:="The path is illegal.",                                                       
                    "The path is illegal.Please do not select the root directory."
                    \Icon:=iconError;                                                                       !报错图标
            RETURN;
        ENDIF
        
        IF NOT strPart(filePath,strlen(filePath),1)="/" THEN                                                !判断结尾字符,防止拼接错误
            UIMsgBox \Header:="The path is illegal.",                                                       
                    "The path is illegal.Please ensure that the last character is '/'."
                    \Icon:=iconError;                                                                       !报错图标
            RETURN;
        ENDIF
        
        IF NOT IsFile(filePath) THEN                                                                        !判断路径存在
            UIMsgBox \Header:="The path does not exist.",""                                                 
                    \Icon:=iconError;                                                                       !报错图标
            RETURN;
        ENDIF

        IF Present(Timestamp) THEN
            DeadlineTimestamp:=Timestamp-CalculateTimestamp_N_DaysAgo(days);                                !计算截止传入时间戳N天前的时间戳
        ELSE
            DeadlineTimestamp:=ObtainTheCurrentTimestamp(filePath)-CalculateTimestamp_N_DaysAgo(days);      !计算截止现在N天前的时间戳
        ENDIF
        
        TPErase;                                                                                            !清屏
        OpenDir dir1,filePath;                                                                              !打开需要清理的路径
        WHILE ReadDir(dir1,fileName) DO                                                                     !循环读取文件名
            IF fileName<>"." AND fileName<>".." THEN                                                        !去除上级目录和当前目录
                IF ObtainTheFileTimestamp(filePath+fileName)<DeadlineTimestamp THEN                         !判断文件的时间戳是否小于截止时间戳
                    RemoveFile filePath+fileName;                                                           !小于截止时间戳,删除
                    TPWrite "RemoveFile : " + fileName;                                                     !写屏
                ELSE
                    TPWrite "MaintainFile : " + fileName;                                                   !大于截止时间戳,保留,写屏
                ENDIF
            ENDIF
        ENDWHILE
        CloseDir dir1;                                                                                      !关闭路径
    ENDPROC
ENDMODULE

模块文件可以点击这里下载

标签: ABB机器人
最后更新:2026年1月29日

jiang

这个人很懒,什么都没留下

点赞
< 上一篇

文章评论

取消回复

COPYRIGHT © 2020 工业机器人交流会. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS