Question about the UserDefined struct
 
            I'm working with the PC SDK version 5.08 and I tried to get the C# userdefined read and write example to work.
What I noticed is that the UserDefined struct requires a RapidDataType and you need a connection to the controller for it. With other structures like Num or RobTarget you don't need a RapidDataType and no connection to the controller.
My question is: Why does the UserDefined struct need a RapidDataType and a connection to the controller?
Comments
- 
            I haven't used this, but it would seem that, since a RECORD type can be any combination of other types (for instance nums AND strings AND bools), you need to get retrieve a reference to the particular RECORD type you are trying to access so that your app will know how to allocate space for it and access its individual elements, of which it has no prior knowledge.Russell Drown0
- 
            Did you get the example to work? In the RunData struct the constructor of the UserDefined struct gets called with one string as argument, but this constructor doesn't exist. Did anyone succeed in makeing the example work? 0
- 
            I tested this today and it is not necessary to do it the way it is shown in the RAB sample. Basically all you need to do is is obtain a RapidData reference to your item of interest then cast it to UserDefined, and then interact with it. To write to it, you must get mastership of the controller. Below is a sample. To use this sample, do the following: 1. Create a recod type called "myRec" in the user module of T_ROB1, and then create an instance called "Test1" RECORD myRec 
 num X;
 string Y;
 ENDRECORDVar myRec Test1; 2. Run this code in your app. It requires a controller object called ctrl, and the method WriteMessage is something I use to write to a text box, you can write it to the debug window for simplicity. Dim rd As RapidData 
 Dim ms As Mastership
 Dim ud As UserDefinedTry 
 If ctrl.OperatingMode = ControllerOperatingMode.Auto Then
 'In auto, so get mastership and write data
 ms = Mastership.Request(ctrl.Rapid)
 If ms Is Nothing Then
 Throw New Exception("MastershipFailed")
 End If
 ms.ReleaseOnDispose = True
 rd = ctrl.Rapid.GetRapidData("T_ROB1", "user", "Test1")
 'Cast it to UserDefined type
 ud = DirectCast(rd.Value, UserDefined)
 'display the current values
 WriteMessage("Component [0] is: " & ud.Components(0).ToString)
 WriteMessage("Component [1] is: " & ud.Components(1).ToString)
 'update the values
 ud.Components(0).FillFro mString("1")
 ud.Components(1).FillFro mString("test")
 'now write the data back to the controller
 rd.Value = ud
 'display the updated values
 WriteMessage("Component [0] is: " & ud.Components(0).ToString)
 WriteMessage("Component [1] is: " & ud.Components(1).ToString)End If 
 Catch ex As Exception
 WriteMessage("Exception: " & ex.ToString)
 Finally
 If Not rd Is Nothing Then
 rd.Dispose()
 rd = Nothing
 End If
 If Not ms Is Nothing Then
 ms.Dispose()
 ms = Nothing
 End If
 End TryYou can look in the RAPID Data Viewer to verify that the values are updated. Russell Drown0
Categories
- All Categories
- 5.6K RobotStudio
- 401 UpFeed
- 21 Tutorials
- 15 RobotApps
- 306 PowerPacs
- 407 RobotStudio S4
- 1.8K Developer Tools
- 250 ScreenMaker
- 2.9K Robot Controller
- 363 IRC5
- 80 OmniCore
- 8 RCS (Realistic Controller Simulation)
- 853 RAPID Programming
- 30 AppStudio
- 4 RobotStudio AR Viewer
- 19 Wizard Easy Programming
- 110 Collaborative Robots
- 5 Job listings
