APISynthesisResourcesTutorial
Synthesis Resources Tutorial
This four-part tutorial introduces you to the basic functionalities of the Synthesis API. You will learn how to use the API to connect to a Synthesis repository, create a new resource, update an existing resource and obtain calculated results from a model.
The Synthesis Platform uses repositories to store projects and analysis data. Projects, in turn, hold resources that contain various types of information that can be shared between analyses. Therefore, to create or update a resource in a Synthesis repository, we must begin by first connecting to the repository and then accessing the project that holds that resource.
Part 1: Connecting to a Synthesis Repository and Project
1. We'll start with the Repository
class, which provides several methods for connecting to standard or enterprise repositories. In this example, we will use the basic ConnectToRepository
method to create a simple application.
Create a new module and start with the following basic code for connecting to a standard Synthesis repository.
VBA|VB.NET 'Declare a new instance of the Repository class. Dim MyRepository As New Repository 'Specify the full path to the Synthesis repository. 'The following code assumes that a standard repository called "RSRepository1.rsr10" exists in the C drive. MyRepository.ConnectToRepository("C:\RSRepository1.rsr10")
2. Next, use the Project.SetCurrentProject
method to specify the current (or active) project by using the project's ID number. In this example, we'll first use the Project.GetAllProjects
method to get an array of all projects in the repository, and then use the ID number of the first project in the array to set it as the current project.
VBA|VB.NET 'Declare a new instance of the NameIdPair class. Dim ListofProjects() As NameIdPair 'Get a list of all projects in the repository. ListOfProjects = MyRepository.Project.GetAllProjects() 'Set the first available project as the current project. MyRepository.Project.SetCurrentProject(ListofProjects(0).ID) 'Display the name and ID number of the current project. Dim ProjectName As String Dim ProjectID As Integer ProjectName = MyRepository.Project.GetCurrentProject().Name ProjectID = MyRepository.Project.GetCurrentProject().ID MsgBox ("You are currently connected to: " & ProjectName & ", ID#" & ProjectID)
Any time you wish to switch to another project in the repository, you can always use the Project.SetCurrentProject
method to specify a new active project.
However, if you wish to access projects from another repository, you’ll first need to disconnect from the current repository by using the DisconnectFromRepository
method, and then use the ConnectToRepository
method again to connect to the desired repository.
VBA|VB.NET
'Disconnect from the Synthesis repository.
MyRepository.DisconnectFromRepository
Verify It Works
Let’s verify that our connections to the repository and project work.
Below is the code list for this example. On the Debug menu, click Start to run the application. A message box displays the name and ID number of the current project in the repository.
VBA|VB.NET Sub Main() 'Declare a new instance of the Repository class. Dim MyRepository As New Repository 'Specify the full path to the Synthesis repository. 'The following code assumes that a standard repository called "RSRepository1.rsr10" exists in the C drive. MyRepository.ConnectToRepository("C:\RSRepository1.rsr10") 'Declare a new instance of the NameIdPair class. Dim ListofProjects() As NameIdPair 'Get a list of all projects in the repository. ListOfProjects = MyRepository.Project.GetAllProjects() 'Set the first available project as the current project. MyRepository.Project.SetCurrentProject(ListofProjects(0).ID) 'Display the name and ID number of the current project. Dim ProjectName As String Dim ProjectID As Integer ProjectName = MyRepository.Project.GetCurrentProject().Name ProjectID = MyRepository.Project.GetCurrentProject().ID MsgBox ("You are currently connected to: " & ProjectName & ", ID#" & ProjectID) 'Disconnect from the Synthesis repository. MyRepository.DisconnectFromRepository End Sub
Reference Links
- Repository Class
- Repository.ConnectToRepository Method
- Repository.DisconnectFromRepository Method
- Repository.Project.GetAllProjects Method
- Repository.Project.SetCurrentProject Method
- Repository.Project.GetCurrentProject Method
- NameIdPair Class
Part 2: Creating a New Synthesis Resource
Now that we've learned how to connect to a repository and a project, let’s try adding a new model resource to the repository.
1. Create a new module and begin again by connecting to the Synthesis repository and project.
VBA|VB.NET 'Connect to the Synthesis repository and set project ID#1 as the current project. Dim MyRepository As New Repository MyRepository.ConnectToRepository("C:\RSRepository1.rsr10") MyRepository.Project.SetCurrentProject(1)
2. Use the cModel
class to create a 2-parameter Weibull reliability model with beta 1 and eta 100. Name the model, "MyNewModel."
For VBA, use the SetModel
method to define the model. For VB.NET, use the parameterized constructor to create and define the model.
VBA 'Declare a new instance of the cModel class. Dim Amodel As New cModel 'Define the model's properties. Dim ModelType As ModelTypeEnum Dim ModelCategory As ModelCategoryEnum Dim ModelName As String Dim ModelParams(1) As Double ModelType = ModelTypeEnum_Weibull2 ModelCategory = ModelCategoryEnum_Reliability ModelName = "MyNewModel" ModelParams(0) = 1 ModelParams(1) = 100 Call AModel.SetModel(ModelType, ModelCategory, ModelName, ModelParams)
VB.NET 'Declare a new instance of the cModel class. You can use an in-line parameter list to define the model. Dim AModel As New cModel(ModelTypeEnum.Weibull2, ModelCategoryEnum.Reliability, "MyNewModel", 1, 100)
3. Use the AddModel
method to save the new model to the repository.
VBA 'Add the new model to the current project. Call MyRepository.Model.AddModel(AModel)
VB.NET
'Add the new model to the current project.
MyRepository.Model.AddModel(AModel)
Verify It Works
Below are the VBA and VB.NET code lists for this example. On the Debug menu, click Start to run the application. Then in the Synthesis repository, open the project’s Resource Manager (Project > Synthesis> Resource Manager) and then select the Models page. A model named "MyNewModel" should be on the list. (You may need to click the Refresh or Show All command to update the display.)
VBA Sub Main() 'Connect to the Synthesis repository and set project ID#1 as the current project. Dim MyRepository As New Repository MyRepository.ConnectToRepository("C:\RSRepository1.rsr10") MyRepository.Project.SetCurrentProject(1) 'Declare a new instance of the cModel class. Dim Amodel As New cModel 'Define the model's properties. Dim ModelType As ModelTypeEnum Dim ModelCategory As ModelCategoryEnum Dim ModelName As String Dim ModelParams(1) As Double ModelType = ModelTypeEnum_Weibull2 ModelCategory = ModelCategoryEnum_Reliability ModelName = "MyNewModel" ModelParams(0) = 1 ModelParams(1) = 100 Call AModel.SetModel(ModelType, ModelCategory, ModelName, ModelParams) 'Add the new model to the current project. Call MyRepository.Model.AddModel(AModel) End Sub
VB.NET Sub Main() 'Connect to the Synthesis repository and set the first available project in the repository as the active project. Dim MyRepository As New Repository MyRepository.ConnectToRepository("C:\RSRepository1.rsr10") MyRepository.Project.SetCurrentProject(1) 'Declare a new instance of the cModel class. You can use an in-line parameter list to define the model. Dim AModel As New cModel(ModelTypeEnum.Weibull2, ModelCategoryEnum.Reliability, "MyNewModel", 1, 100) 'Add the new model to the current project. MyRepository.Model.AddModel(AModel) End Sub
Reference Links
- cModel Class
- cModel.SetModel Method
- cModel Constructor (VB.NET Only)
- ModelTypeEnum Enumeration
- ModelCategoryEnum Enumeration
- Repository.Model.AddModel Method
Part 3: Updating an Existing Resource
In this section, we'll update the properties of the model we've created in the previous section and also update its definition.
1. Create a new module and add code to connect to the Synthesis repository and project.
VBA|VB.NET 'Connect to the Synthesis repository and set project ID#1 as the current project. Dim MyRepository As New Repository MyRepository.ConnectToRepository("C:\RSRepository1.rsr10") MyRepository.Project.SetCurrentProject(1)
2. Next, use the GetModel
method to the retrieve the model (called "MyNewModel") from the repository. The following code assumes that the model's ID number is 21.
VBA 'Retrieve the model with ID# 21 from the repository. Dim Amodel As New cModel Set AModel = MyRepository.Model.GetModel(21)
VB.NET 'Retrieve the model with ID# 21 from the repository. Dim Amodel As New cModel AModel = MyRepository.Model.GetModel(21)
3. Let's update the model's properties. Use the following code to add a description and part number for the model.
VBA|VB.NET 'Add a description and part number for the model. Amodel.ItemDescription = "A specific type of light bulb." Amodel.ItemPartNumber = "PN5461"
Now let's update the model's definition by changing it's name to "MyNewModel_Updated" and the values of beta = 2 and eta = 150. Use the SetModel
method to define the model. In VB.NET, you can use an in-line parameter list to define the values of the parameters.
VBA 'Define a new model name and values for beta and eta. Dim ModelParams(1) As Double ModelParams(0) = 2 ModelParams(1) = 150 Call AModel.SetModel(ModelTypeEnum_Weibull2, ModelCategoryEnum_Reliability, "MyNewModel_Updated", ModelParams)
VB.NET 'Define a new model name and values for beta and eta. AModel.SetModel(ModelTypeEnum.Weibull2, ModelCategoryEnum.Reliability, "MyNewModel_Updated", New Double() {2, 150})
4. Use the UpdateModel
method to apply the changes to the model.
VBA 'Apply the changes to the model. Call MyRepository.Model.UpdateModel(AModel)
VB.NET
'Apply the changes to the model.
MyRepository.Model.UpdateModel(AModel)
Verify It Works
Below are the VBA and VB.NET code lists for this example. On the Debug menu, click Start to run the application, and then check the project's Resource Manager to verify that the model's name has been changed to "MyNewModel_Updated" and that beta = 2 and eta = 150.
VBA Sub Main() 'Connect to the Synthesis repository and set project ID#1 as the current project. Dim MyRepository As New Repository MyRepository.ConnectToRepository("C:\RSRepository1.rsr10") MyRepository.Project.SetCurrentProject(1) 'Retrieve the model with ID# 21 from the repository. Dim Amodel As New cModel Set AModel = MyRepository.Model.GetModel(21) 'Add a description and part number for the model. Amodel.ItemDescription = "A specific type of light bulb." Amodel.ItemPartNumber = "PN5461" 'Define a new model name and values for beta and eta. Dim ModelParams(1) As Double ModelParams(0) = 2 ModelParams(1) = 150 Call AModel.SetModel(ModelTypeEnum_Weibull2, ModelCategoryEnum_Reliability, "MyNewModel_Updated", ModelParams) 'Apply the changes to the model. Call MyRepository.Model.UpdateModel(AModel) End Sub
VB.NET Sub Main() 'Connect to a Synthesis repository and set the first available project in the repository as the active project. Dim MyRepository As New Repository MyRepository.ConnectToRepository("C:\RSRepository1.rsr10") MyRepository.Project.SetCurrentProject(1) 'Retrieve the model with ID# 21 from the repository. Dim Amodel As New cModel AModel = MyRepository.Model.GetModel(21) 'Add a description and part number for the model. Amodel.ItemDescription = "A specific type of light bulb." Amodel.ItemPartNumber = "PN5461" 'Define a new model name and values for beta and eta. AModel.SetModel(ModelTypeEnum.Weibull2, ModelCategoryEnum.Reliability, "MyNewModel_Updated", New Double() {2, 150}) 'Apply the changes to the model. MyRepository.Model.UpdateModel(AModel) End Sub
Reference Links
Part 4: Calculating Results from Models
Models are used by other Synthesis resources to represent the reliability of a task, the duration of a task, the expected cost of a repair, and many other characteristics. In this section, we'll learn how to obtain calculated results from models.
1. Create a new module, and then add code to retrieve the model that we've been working on in the previous sections (recall that the model's name is now "MyNewModel_Update"). The following code example assumes that the model's ID number is 21.
VBA 'Connect to the Synthesis repository and retrieve model ID#21. Dim MyRepository As New Repository MyRepository.ConnectToRepository("C:\RSRepository1.rsr10") MyRepository.Project.SetCurrentProject(1) Dim AModel As cModel Set AModel = MyRepository.Model.GetModel(21)
VB.NET 'Connect to the Synthesis repository and retrieve model ID#21. Dim MyRepository As New Repository MyRepository.ConnectToRepository("C:\RSRepository1.rsr10") MyRepository.Project.SetCurrentProject(1) Dim AModel As cModel AModel = MyRepository.Model.GetModel(21)
2. Use the Reliability
method to calculate for the reliability at 100 hrs and the MeanTime
method to return the mean time to failure.
VBA|VB.NET 'Calculate the model's reliability at time = 100 hrs and mean time. Dim Result1 As Double Dim Result2 As Double Result1 = AModel.Reliability(100) Result2 = AModel.MeanTime()
3. Let's add confidence bounds calculations to the results. Use the SetConfidenceLevel
method to specify 90% two-sided confidence bounds.
VBA 'Set the confidence level to 90% two-sided bounds. 'Declare a string variable for any errors found during this method. Dim ErrorMsg As String Call AModel.SetConfidenceLevel(0.9, ConfBoundsSides_TwoSidedBoth, False, ErrorMsg) 'Initiate new instances of the BoundsValues class. Dim BResult1 As BoundsValues Dim BResult2 As BoundsValues 'Calculate bounds for the reliability at 100 hrs and the mean time. Set BResult1 = AModel.Bounds_Reliability(100) Set BResult2 = AModel.Bounds_MeanTime() 'Display the output. MsgBox ("Reliability = " & Result1 & vbNewLine & _ "Upper Bound = " & BResult1.upper & vbNewLine & _ "Lower Bound = " & BResult1.lower & vbNewLine) MsgBox ("Mean Time = " & Result2 & vbNewLine & _ "Upper Bound = " & BResult2.upper & vbNewLine & _ "Lower Bound = " & BResult2.lower & vbNewLine)
VB.NET 'Set the confidence level to 90% two-sided bounds. 'Declare a string variable for any errors found during this method. Dim ErrorMsg As String AModel.SetConfidenceLevel(0.9, ConfBoundsSides.TwoSidedBoth, False, ErrorMsg) 'Initiate new instances of the BoundsValues class. Dim BResult1 As BoundsValues Dim BResult2 As BoundsValues 'Calculate bounds for the reliability at 100 hrs and the mean time. BResult1 = AModel.Bounds_Reliability(100) BResult2 = AModel.Bounds_MeanTime() 'Display the output. MsgBox ("Reliability = " & Result1 & vbNewLine & _ "Upper Bound = " & BResult1.upper & vbNewLine & _ "Lower Bound = " & BResult1.lower & vbNewLine) MsgBox ("Mean Time = " & Result2 & vbNewLine & _ "Upper Bound = " & BResult2.upper & vbNewLine & _ "Lower Bound = " & BResult2.lower & vbNewLine)
Verify It Works
Below are the VBA and VB.NET code lists for this example. You can experiment with the code by retrieving published models from the repository and then comparing the results obtained by the API with results obtained by the Quick Calculation Pad (QCP).
VBA Sub Main() 'Connect to the Synthesis repository and retrieve model ID#21. Dim MyRepository As New Repository MyRepository.ConnectToRepository("C:\RSRepository1.rsr10") MyRepository.Project.SetCurrentProject(1) Dim AModel As cModel Set AModel = MyRepository.Model.GetModel(21) 'Calculate the model's reliability at time = 100 hrs and mean time. Dim Result1 As Double Dim Result2 As Double Result1 = AModel.Reliability(100) Result2 = AModel.MeanTime() 'Set the confidence level to 90% two-sided bounds. 'Declare a string variable for any errors found during this method. Dim ErrorMsg As String Call AModel.SetConfidenceLevel(0.9, ConfBoundsSides_TwoSidedBoth, False, ErrorMsg) 'Initiate new instances of the BoundsValues class. Dim BResult1 As BoundsValues Dim BResult2 As BoundsValues 'Calculate bounds for the reliability at 100 hrs and the mean time. Set BResult1 = AModel.Bounds_Reliability(100) Set BResult2 = AModel.Bounds_MeanTime() 'Display the output. MsgBox ("Reliability = " & Result1 & vbNewLine & _ "Upper Bound = " & BResult1.upper & vbNewLine & _ "Lower Bound = " & BResult1.lower & vbNewLine) MsgBox ("Mean Time = " & Result2 & vbNewLine & _ "Upper Bound = " & BResult2.upper & vbNewLine & _ "Lower Bound = " & BResult2.lower & vbNewLine) End Sub
VB.NET Sub Main() 'Connect to the Synthesis repository and retrieve model ID#21. Dim MyRepository As New Repository MyRepository.ConnectToRepository("C:\RSRepository1.rsr10") MyRepository.Project.SetCurrentProject(1) Dim AModel As cModel AModel = MyRepository.Model.GetModel(21) 'Calculate the model's reliability at time = 100 hrs and mean time. Dim Result1 As Double Dim Result2 As Double Result1 = AModel.Reliability(100) Result2 = AModel.MeanTime() 'Set the confidence level to 90% two-sided bounds. 'Declare a string variable for any errors found during this method. Dim ErrorMsg As String AModel.SetConfidenceLevel(0.9, ConfBoundsSides.TwoSidedBoth, False, ErrorMsg) 'Initiate new instances of the BoundsValues class. Dim BResult1 As BoundsValues Dim BResult2 As BoundsValues 'Calculate bounds for the reliability at 100 hrs and the mean time. BResult1 = AModel.Bounds_Reliability(100) BResult2 = AModel.Bounds_MeanTime() 'Display the output. MsgBox ("Reliability = " & Result1 & vbNewLine & _ "Upper Bound = " & BResult1.upper & vbNewLine & _ "Lower Bound = " & BResult1.lower & vbNewLine) MsgBox ("Mean Time = " & Result2 & vbNewLine & _ "Upper Bound = " & BResult2.upper & vbNewLine & _ "Lower Bound = " & BResult2.lower & vbNewLine) End Sub