S4Backup [WebWare SDK]
I'm trying to perform a backup of a robot using a Helper control and the S4Backup method.
The manual says the following:
This method is used create a backup of the robot controller files. It saves system parameters and modules in a new directory on a memory device.
On a memory device: Does this mean that I can perform the backup directly to my PC? Or do I have to do the backup on the robot?
I've tried both, but I get the error -5108 General error for log. in either case.
In Interlink Configuration I've configured the robot for standard backup. What am I doing wrong?
Comments
-
The memory device in this case is the memory device on the robot (flashdisk/harddrive). The directory you enter as a string value when calling the method, will be therefore be created on the robot.
If you want to transfer files from the robot to/from a PC, there are other methods that can be used, such as S4FileCopy.
In order to help you with the -5108 error you are experiencing, it would be helpful if you could provide the following information:
1. Which WebWare SDK build version, for instance 3.02.0317, is in use?
2. Are you using long file names on the robot (longer than 8+3 characters) ?
3. What are your settings for the following Interlink Configuration properties:
a. Alias name
b. TCP/IP node and IP address
c. Profile name
d. Please send screenshots/info of all tabs in the profile editor.
4. Describe the configuration of robot, i.e. BaseWare version, software options, robot type, etc.
5. If possible, send some code.
______________________________
Anders Dannberg
ABB Automation Technologies
Support Engineer - WebWare Team0 -
The problem is solved, I used the path HOME:/BACKUP instead of the complete search path.
Two more questions though:
1. Is there a built in way to get to know the system name for the current machine in order to be able to generate a complete search path?
2. Is there a built in way to copy a directory including all of it's subdirs?
0 -
Q1:
I think that the ControlID property of the Helper control will return the current system name.
Q2:
There is no support in the RAP protocol for directory recursion, so the user must implement their own recursion method. One approach is to build a collection using the values returned from successive calls to the S4Dir method of the Helper control.
Russell Drown0 -
Backup and directory structure.
I'm struggling a bit with recursion here. Trying to build the complete directory structure on local PC which is identical with the backup last run on the robot. I understand that I should use the S4Dir method in recursion but I just can't get it to work. It just falls out when it reaches the first bottom in the filetree (syspar), where it should back up.
Would appreciate some samles on this.
/S
0 -
I am assuming you want to accomplish this using the Helper control (and not the FileManager control, which automatically displays and let you browse robot systems, including subdirectories).
Unfortunately, the S4Dir method does not support directory recursion.
This means you would have to implement this in your code. One solution would be using S4Dir and S4Dirlist.To simply list the directories in the hd0a/temp folder:
===========================================intResult = Helper1.S4Dir("/hd0a/", " emp", 0, 3, lngResult)
For i = 0 To Helper1.DirListCount - 1
MsgBox (Helper1.DirList(i))
Next
' ... add code here that allows you to select a directory
' ... then you would have to set the Helper1.S4Dir properties
to the newly selected directoryname, and re-list the
directories here. Obviously you would probably want to handle
this in functions or similar, to manage your code.
===========================================
______________________________
Anders Dannberg
ABB Automation Technologies
Support Engineer0 -
You say s4dir doesn't support recursion.. hmmmm.. so I can't do things like ....(using c#)? Which doesn't work
private void CopyBackupToPC(string strDir)
{
//remove device from dirstrDir = strDir.Substring(5,strDir.Length - 5);
AddDirectory(strDir);
}
private void AddDirectory(string strDir)
{
int intResultID_A = 0; short shRetval_A;
shRetval_A = AxHelper1.S4Dir("/hd0a/",strDir,0,3,ref intResultID_A);
if(shRetval_A == 0)
{
//the first two directories is "." and ".." so start at index 2
for(short i = 2; i < AxHelper1.DirListCount -1; i++)
{
string strPath = "/Blaa/Backup/RobOne" + strDir + "/" + AxHelper1.get_DirList(i) + "/";
shRetval_A = AxHelper1.S4MkDir("C:", strPath,3,ref intResultID_A);
if(AxHelper1.FileListCount > 0)
{
AddFiles(strDir + "/" + AxHelper1.get_DirList(i)+ "/");
}
AddDirectory(strDir + "/" + AxHelper1.get_DirList(i));
}
}
}0 -
S4Dir will not retrieve a complete directory structure of all subdirectories. It will however return a list of the directories for a selected path (set by S4Dir). You would have to create a function and/or loop, until you have retrieved all subdirectories based on your starting path.
I don't have code samples for this functionality right now. Time allowing, we could perhaps create such a sample project and post here.
Maybe someone else out there has already created one and would like to share it?
______________________________
Anders Dannberg
ABB Automation Technologies
Support Engineer0 -
I took a simple but inelegant approach to this by using the collection object. Someone could take this pseudocode and simplify it and post it if they would like; I just did enough with this to get it working for what I needed.
What I do first is use S4Dir to get the properties of the root of my target. Once I know how many directories there are, I loop through and add the root folders to the collection (I assume that there are no files in the root):
If dirCount > 0 then
For i = 0 to dirCount -1
Add Helper.DirList(i) to the collection
Next i
End If
Next, I build the root directory structure on the PC for each item in the collection, and at the same time copy any files I find in these dirs to the PC as well.
If CollectionCount > 0 Then //if any are found create them on the pc<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
For i = 1 To CollectionCount //collections are 1-based
MkLocalDir(the current Dir Name) //create the dir
call S4Dir to get the file count for the current dir
If intFileCount > 0 Then // there are files present
For j = 0 To intFileCount - 1
Copy each file to PC
Next j
End If
Next i
End If
Next, I go through and build the sub directories by operating on the topmost item in the collection until there are no more items left (I am adding sub-dirs to the end of the collection and deleting the topmost item at the end of this loop)
While CollectionCount > 0 //as long as there are items left in the collection
Get the name of the first item in the collection
call S4Dir on this item to get its dir count
If intDirCount > 0 Then //if it has sub-dirs
For each sub-dir in the current dir
add the sub-dir to the end of the collection
MkLocalDir(the current sub-dir Name)
call S4Dir to get the file count for the current sub-dir
If intFileCount > 0 Then //there are files present
For j = 0 To intFileCount - 1
Copy each file to PC
Next j
End If
Next sub-dir
Remove the first item in the collection
End If
End While
RussD38392,7000578704Russell Drown0
Categories
- All Categories
- 5.5K RobotStudio
- 395 UpFeed
- 18 Tutorials
- 13 RobotApps
- 297 PowerPacs
- 405 RobotStudio S4
- 1.8K Developer Tools
- 249 ScreenMaker
- 2.7K Robot Controller
- 310 IRC5
- 59 OmniCore
- 7 RCS (Realistic Controller Simulation)
- 785 RAPID Programming
- AppStudio
- 3 RobotStudio AR Viewer
- 18 Wizard Easy Programming
- 105 Collaborative Robots
- 4 Job listings