Synchronize to station and RAPID
This document provides information on how to synchronize paths and data to both a RAPID controller and a station. The method uses RsTask, RsPathProcedure, and RsDataDeclaration objects as parameters to perform these synchronizations.
Solution
The example below shows how to synchronize a path to the RAPID controller using SyncPathProcedureAsync(string, SyncDirection, List<SyncLogMessage>).
- If successful, it logs a success message.
- If unsuccessful, it logs a failure message.
if (await task.SyncPathProcedureAsync($"{path.ModuleName}/{path.Name}", SyncDirection.ToController, new List<SyncLogMessage>())) { Logger.AddMessage(new LogMessage($"Synchronising path {path.Name} to controller succeded!")); } else { Logger.AddMessage(new LogMessage($"Synchronising path {path.Name} to controller failed!")); }This code snippet attempts to synchronize a path to the station. The only change from the previous step is the parameter
SyncDirection.if (await task.SyncPathProcedureAsync($"{path.ModuleName}/{path.Name}", SyncDirection.ToStation, new List<SyncLogMessage>())) { Logger.AddMessage(new LogMessage($"Synchronising path {path.Name} to station succeded!")); } else { Logger.AddMessage(new LogMessage($"Synchronising path {path.Name} to station failed!")); }Using SyncDataAsync(string, SyncDirection, List<SyncLogMessage>), other metadata (such as string, int) and data declarations (such as targets, work objects) can be synchronized.
try { await task.SyncDataAsync($"{data.ModuleName}/{data.Name}", SyncDirection.ToController, new List<SyncLogMessage>()); Logger.AddMessage(new LogMessage($"Synchronising data {data.Name} to controller succeded!")); } catch { Logger.AddMessage(new LogMessage($"Synchronising data {data.Name} to controller failed!")); }
Example
This example provides information about synchronizing paths and data to both a RAPID controller and a station.
private static async Task SyncToRapidAndStation(RsPathProcedure path, RsDataDeclaration data, RsTask task)
{
Project.UndoContext.BeginUndoStep("Synchronize");
try
{
// Attempt to synchronize the path to the RAPID controller.
if (await task.SyncPathProcedureAsync($"{path.ModuleName}/{path.Name}", SyncDirection.ToController, new List<SyncLogMessage>()))
{
Logger.AddMessage(new LogMessage($"Synchronising path {path.Name} to controller succeded!"));
}
else
{
Logger.AddMessage(new LogMessage($"Synchronising path {path.Name} to controller failed!"));
}
// Attempt to synchronize the path to the station.
if (await task.SyncPathProcedureAsync($"{path.ModuleName}/{path.Name}", SyncDirection.ToStation, new List<SyncLogMessage>()))
{
Logger.AddMessage(new LogMessage($"Synchronising path {path.Name} to station succeded!"));
}
else
{
Logger.AddMessage(new LogMessage($"Synchronising path {path.Name} to station failed!"));
}
// Attempt to synchronize the data to the RAPID controller.
try
{
await task.SyncDataAsync($"{data.ModuleName}/{data.Name}", SyncDirection.ToController, new List<SyncLogMessage>());
Logger.AddMessage(new LogMessage($"Synchronising data {data.Name} to controller succeded!"));
}
catch
{
Logger.AddMessage(new LogMessage($"Synchronising data {data.Name} to controller failed!"));
}
}
catch
{
Project.UndoContext.CancelUndoStep(CancelUndoStepType.Rollback);
throw;
}
finally
{
Project.UndoContext.EndUndoStep();
}
}
Required Namespaces
ABB.Robotics.RobotStudio.Stations