hexagon logo

Auto Archive Freebie!

Hi All,

Here's my script for archiving programs.

Copy it to notepad and save it as AUTOARCHIVE.BAS

NOTE / WARNING -- This script first saves the program with the current measurement data in it, then takes a copy of the file to archive.


'JON WOOD - 2013 - AUTOMETTECH LTD (UK) www.automettech.com

Sub main()


'========= SETTINGS =================

'Root save directory For archive
Dim archivePath
archivePath = "C:\CMM\Archive\AutoArchive"

'This is the Name of a PC-Dmis ASSIGNMENT - If it exist the value it holds will be used In the file Name
'of the archived program (i.e. can be a serial number, Or order number etc)

Dim myUID
myUID = "UID"

'NOTE! - File Name will be In the following format...
'SaveDirectory\Program Name\ProgramName_UniqueID_DateTime.prg

'i.e. C:\CMM Files\Part Program Run Instances Archive\123456-01\123456-01_abc123_20140824104232.prg

'Where...
'archivePath = "C:\CMM Files\Part Program Run Instances Archive"
'Part program = 123456-01.prg
'Serial Number / Unique Id = abc123
'DateTime = 24/08/2014 10:42:32


'===========End OF SETTINGS==========

'Create objects
Dim pcapp As Object
Set pcapp = createobject("pcdlrn.application")

Dim pcpart As Object
Set pcpart = pcapp.activepartprogram

'Save existing program
pcpart.save

'Get the current program path
Dim source_path
source_path = pcpart.fullname

'Get program Name (without file extension)
Dim progname
progname = left(pcpart.Name,len(pcpart.Name)-4)

'Create File System Object For file operations
Dim fso As Object
Set fso = createobject("scripting.filesystemobject")

'Check main archive directory And program specific directories exist
Dim ofolder As Object

If Not fso.folderexists(archivepath) Then
Set ofolder = fso.createfolder(archivepath)
End If

If Not fso.folderexists(archivepath & "\" & progname) Then
Set ofolder = fso.createfolder(archivepath & "\" & progname)
End If

'Get a UID If present
Dim uniqueid
uniqueid=""

Dim myvar As Object
Set myvar = pcpart.getvariablevalue(myUID)

If Not myVar is Nothing Then
uniqueid= myvar.stringvalue
'MsgBox(uniqueid)
End If

'Genrate the destination (save) path
dest_path = archivepath & "\" & progname & "\" & progname & "_" & uniqueid & "_" & format(now(),"YYYYMMDDHHNNSS") & ".prg"
'MsgBox(dest_path)


'Save the file
fso.copyfile source_path, dest_path


'Tidy up
Set fso = Nothing
Set pcpart = Nothing
Set pcapp = Nothing


End Sub

[CODE]


Usage in part program...

[CODE]


ASSIGN/UID="abc123"


CS5        =SCRIPT/FILENAME= C:\CMM FILES\SUBROUTINES\AUTOARCHIVE.BAS
            FUNCTION/Main,SHOW=YES,,
            STARTSCRIPT/
            ENDSCRIPT/

Parents
  • Question on this. Is there a way to get DMIS to save the program when it is done executing without a special nomenclature. I want it to basically do a "CRTL + S" when the execution is finished.

    Here is the problem. We have been running lights out and every now and then we come in the next morning and the computer has restarted with out the program being saved. Last night, we lost 5 hours of CMM run time due to this. All of our programs are on our network then transferred to the local C drive and ran from there so a simple save when the program is done (overwrite itself on the C drive) is ok because we always have the master program on the network.
Reply
  • Question on this. Is there a way to get DMIS to save the program when it is done executing without a special nomenclature. I want it to basically do a "CRTL + S" when the execution is finished.

    Here is the problem. We have been running lights out and every now and then we come in the next morning and the computer has restarted with out the program being saved. Last night, we lost 5 hours of CMM run time due to this. All of our programs are on our network then transferred to the local C drive and ran from there so a simple save when the program is done (overwrite itself on the C drive) is ok because we always have the master program on the network.
Children
No Data