{"application":{"id":"4","applicationInfo":{"name":"start_program_10_14","robotType":"UR5","createdDate":1783506839768,"lastModifiedDate":1783513956888,"defaultProgramId":null},"applicationContent":{"sourceConfig":{"labelMap":{},"analogDomainMap":{},"presets":{}},"activeOperatorScreen":"ur-operator-screen-default","smartSkills":[{"name":"Align to Plane","enabled":true,"type":"ur-align-to-plane","parameters":{"radius":0.05,"push_force":20,"n_plane_points":3,"max_distance":0.25,"velocity_slow":0.001,"velocity_search":0.035,"velocity_move":0.1,"acceleration":0.1}},{"name":"Align Z to Nearest Axis","enabled":true,"type":"ur-align-z-to-nearest-axis"},{"name":"Center","enabled":true,"type":"ur-center","parameters":{"push_force":10,"velocity_move":0.05,"acc_move":0.2,"max_radius_search":0.05,"num_fingers":3}},{"name":"Freedrive","enabled":true,"type":"ur-freedrive","version":"1.0.0","recordingFrequency":50,"recordingSignals":["timestamp","target_q","actual_TCP_pose","tcp_offset"]},{"name":"Move into Contact","enabled":true,"type":"ur-move-into-contact","parameters":{"force":10,"velocity":0.05,"acceleration":0.2,"max_distance":0.25,"retract":0},"version":"1.0.0"},{"name":"Retract","enabled":true,"type":"ur-retract","parameters":{"distance":0.1,"acceleration":0.4,"velocity":0.1},"version":"1.0.0"},{"name":"Put into Box","enabled":false,"type":"ur-put-in-box","version":"1.0.0"},{"name":"Custom","enabled":false,"type":"ur-custom-smart-skill","parameters":{"includePreamble":true,"includeModules":false},"version":"1.0.0"},{"name":"Home","enabled":true,"type":"ur-position","version":"1.1.2","parameters":{"actualWaypoint":{"frame":"base","pose":{"position":[0.0007234911264933834,-0.2333977082004337,1.0803476302965433],"orientation":[-0.0030465488234298825,2.219299153348662,-2.220820782887323]},"qNear":{"base":0,"shoulder":-1.5707963249999999,"elbow":0,"wrist1":-1.5707963249999999,"wrist2":0,"wrist3":0}},"variable":{"name":"Home","reference":false,"type":"$$Variable","valueType":"waypoint","id":"7622345a-0e52-2cf8-0ff6-3a6568b1e03a","_IDENTIFIER":"VariableDeclaration"}}}],"safety":{"settings":{"io":{"automaticModeSafeguardResetInput":{"name":"automaticModeSafeguardResetInput","valueA":255,"valueB":255},"automaticModeSafeguardStopInput":{"name":"automaticModeSafeguardStopInput","valueA":255,"valueB":255},"emergencyStopInput":{"name":"emergencyStopInput","valueA":255,"valueB":255},"notReducedModeOutput":{"name":"notReducedModeOutput","ossdEnabled":false,"valueA":255,"valueB":255},"operationalModeInput":{"name":"operationalModeInput","valueA":255,"valueB":255},"reducedModeInput":{"name":"reducedModeInput","valueA":255,"valueB":255},"reducedModeOutput":{"name":"reducedModeOutput","ossdEnabled":false,"valueA":255,"valueB":255},"robotMovingOutput":{"name":"robotMovingOutput","ossdEnabled":false,"valueA":255,"valueB":255},"robotNotStoppingOutput":{"name":"robotNotStoppingOutput","ossdEnabled":false,"valueA":255,"valueB":255},"safeHomeOutput":{"name":"safeHomeOutput","ossdEnabled":false,"valueA":255,"valueB":255},"safeguardResetInput":{"name":"safeguardResetInput","valueA":0,"valueB":1},"systemEmergencyStoppedOutput":{"name":"systemEmergencyStoppedOutput","ossdEnabled":false,"valueA":255,"valueB":255},"threePositionSwitchInput":{"name":"threePositionSwitchInput","valueA":255,"valueB":255},"freedriveEnabledInput":{"name":"freedriveEnabledInput","valueA":255,"valueB":255},"threePositionEnablingStopOutput":{"name":"threePositionEnablingStopOutput","ossdEnabled":false,"valueA":255,"valueB":255},"notThreePositionEnablingStopOutput":{"name":"notThreePositionEnablingStopOutput","ossdEnabled":false,"valueA":255,"valueB":255}},"major":5,"minor":14,"normalJointPositions":{"base":{"maximum":6.33555,"maximumJointPosition":0.05235988,"maximumRevolutionCounter":1,"minimum":-6.33555,"minimumJointPosition":6.2308254,"minimumRevolutionCounter":-2,"unlimited":false},"elbow":{"maximum":6.33555,"maximumJointPosition":0.05235988,"maximumRevolutionCounter":1,"minimum":-6.33555,"minimumJointPosition":6.2308254,"minimumRevolutionCounter":-2,"unlimited":false},"shoulder":{"maximum":6.33555,"maximumJointPosition":0.05235988,"maximumRevolutionCounter":1,"minimum":-6.33555,"minimumJointPosition":6.2308254,"minimumRevolutionCounter":-2,"unlimited":false},"wrist1":{"maximum":6.33555,"maximumJointPosition":0.05235988,"maximumRevolutionCounter":1,"minimum":-6.33555,"minimumJointPosition":6.2308254,"minimumRevolutionCounter":-2,"unlimited":false},"wrist2":{"maximum":6.33555,"maximumJointPosition":0.05235988,"maximumRevolutionCounter":1,"minimum":-6.33555,"minimumJointPosition":6.2308254,"minimumRevolutionCounter":-2,"unlimited":false},"wrist3":{"maximum":6.33555,"maximumJointPosition":0.05235988,"maximumRevolutionCounter":1,"minimum":-6.33555,"minimumJointPosition":6.2308254,"minimumRevolutionCounter":-2,"unlimited":false}},"normalJointSpeeds":{"base":3.3415926,"shoulder":3.3415926,"elbow":3.3415926,"wrist1":3.3415926,"wrist2":3.3415926,"wrist3":3.3415926},"normalRobotLimits":{"elbowForce":150,"elbowSpeed":1.5,"momentum":25,"power":300,"stoppingDistance":0.5,"stoppingTime":0.4,"toolForce":150,"toolSpeed":1.5},"reducedJointPositions":{"base":{"maximum":6.33555,"maximumJointPosition":0.05235988,"maximumRevolutionCounter":1,"minimum":-6.33555,"minimumJointPosition":6.2308254,"minimumRevolutionCounter":-2,"unlimited":false},"elbow":{"maximum":6.33555,"maximumJointPosition":0.05235988,"maximumRevolutionCounter":1,"minimum":-6.33555,"minimumJointPosition":6.2308254,"minimumRevolutionCounter":-2,"unlimited":false},"shoulder":{"maximum":6.33555,"maximumJointPosition":0.05235988,"maximumRevolutionCounter":1,"minimum":-6.33555,"minimumJointPosition":6.2308254,"minimumRevolutionCounter":-2,"unlimited":false},"wrist1":{"maximum":6.33555,"maximumJointPosition":0.05235988,"maximumRevolutionCounter":1,"minimum":-6.33555,"minimumJointPosition":6.2308254,"minimumRevolutionCounter":-2,"unlimited":false},"wrist2":{"maximum":6.33555,"maximumJointPosition":0.05235988,"maximumRevolutionCounter":1,"minimum":-6.33555,"minimumJointPosition":6.2308254,"minimumRevolutionCounter":-2,"unlimited":false},"wrist3":{"maximum":6.33555,"maximumJointPosition":0.05235988,"maximumRevolutionCounter":1,"minimum":-6.33555,"minimumJointPosition":6.2308254,"minimumRevolutionCounter":-2,"unlimited":false}},"reducedJointSpeeds":{"base":3.3415926,"shoulder":3.3415926,"elbow":3.3415926,"wrist1":3.3415926,"wrist2":3.3415926,"wrist3":3.3415926},"reducedRobotLimits":{"elbowForce":120,"elbowSpeed":0.75,"momentum":10,"power":200,"stoppingDistance":0.3,"stoppingTime":0.3,"toolForce":120,"toolSpeed":0.75},"safetyHardware":{"injectionMoldingMachineInterface":"NONE","teachPendant":"NORMAL"},"safetyPlanes":{"planes":[{"id":"e89dd1d0-8efc-4749-b0a3-344328a0068e","name":"UNDEFINED","safetyPlane":{"normalModePlane":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"reducedModePlane":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"reducedModeTriggerPlane":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"restrictsElbow":false,"restrictsToolFlange":true},"tilt":0,"offset":0,"rotation":0,"restriction":"disabled"},{"id":"6ba29c2a-46e6-ba6e-ec90-930ca7d111c7","name":"UNDEFINED","safetyPlane":{"normalModePlane":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"reducedModePlane":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"reducedModeTriggerPlane":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"restrictsElbow":false,"restrictsToolFlange":true},"tilt":0,"offset":0,"rotation":0,"restriction":"disabled"},{"id":"ce57234c-10e1-a66d-29d6-362597da08b9","name":"UNDEFINED","safetyPlane":{"normalModePlane":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"reducedModePlane":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"reducedModeTriggerPlane":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"restrictsElbow":false,"restrictsToolFlange":true},"tilt":0,"offset":0,"rotation":0,"restriction":"disabled"},{"id":"6e05ab52-f94a-730c-cfdb-95c1265aab42","name":"UNDEFINED","safetyPlane":{"normalModePlane":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"reducedModePlane":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"reducedModeTriggerPlane":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"restrictsElbow":false,"restrictsToolFlange":true},"tilt":0,"offset":0,"rotation":0,"restriction":"disabled"},{"id":"04ebb37f-7bda-efaf-39fb-e6b4f85c12f2","name":"UNDEFINED","safetyPlane":{"normalModePlane":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"reducedModePlane":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"reducedModeTriggerPlane":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"restrictsElbow":false,"restrictsToolFlange":true},"tilt":0,"offset":0,"rotation":0,"restriction":"disabled"},{"id":"c25d0554-96c4-1f9a-dc72-9e48870c924f","name":"UNDEFINED","safetyPlane":{"normalModePlane":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"reducedModePlane":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"reducedModeTriggerPlane":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"restrictsElbow":false,"restrictsToolFlange":true},"tilt":0,"offset":0,"rotation":0,"restriction":"disabled"},{"id":"a82b8c7b-595b-32af-118c-a9f4a079bb3c","name":"UNDEFINED","safetyPlane":{"normalModePlane":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"reducedModePlane":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"reducedModeTriggerPlane":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"restrictsElbow":false,"restrictsToolFlange":true},"tilt":0,"offset":0,"rotation":0,"restriction":"disabled"},{"id":"276c328c-5058-f36e-b117-2a230e67e94a","name":"UNDEFINED","safetyPlane":{"normalModePlane":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"reducedModePlane":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"reducedModeTriggerPlane":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"restrictsElbow":false,"restrictsToolFlange":true},"tilt":0,"offset":0,"rotation":0,"restriction":"disabled"}],"ioSafetyPlanes":[{"id":"3c588faf-c35b-f291-c687-aba03a8613be","name":"UNDEFINED","ioSafetyPlane":{"triggerOutput":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"triggerSafeguard":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"restrictsElbow":false,"restrictsToolFlange":true,"inputConfiguration":{"name":"UNDEFINED","valueA":255,"valueB":255},"outputConfiguration":{"name":"UNDEFINED","ossdEnabled":false,"valueA":255,"valueB":255}},"tilt":0,"offset":0,"rotation":0,"trigger":"disabled"},{"id":"b911facc-69b8-e42d-76ed-3c8e386b43dd","name":"UNDEFINED","ioSafetyPlane":{"triggerOutput":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"triggerSafeguard":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"restrictsElbow":false,"restrictsToolFlange":true,"inputConfiguration":{"name":"UNDEFINED","valueA":255,"valueB":255},"outputConfiguration":{"name":"UNDEFINED","ossdEnabled":false,"valueA":255,"valueB":255}},"tilt":0,"offset":0,"rotation":0,"trigger":"disabled"},{"id":"cb6cacbc-37ae-83df-c79a-72455758d3e3","name":"UNDEFINED","ioSafetyPlane":{"triggerOutput":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"triggerSafeguard":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"restrictsElbow":false,"restrictsToolFlange":true,"inputConfiguration":{"name":"UNDEFINED","valueA":255,"valueB":255},"outputConfiguration":{"name":"UNDEFINED","ossdEnabled":false,"valueA":255,"valueB":255}},"tilt":0,"offset":0,"rotation":0,"trigger":"disabled"},{"id":"ff45458a-3580-39d7-7a07-59eda63d378f","name":"UNDEFINED","ioSafetyPlane":{"triggerOutput":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"triggerSafeguard":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"restrictsElbow":false,"restrictsToolFlange":true,"inputConfiguration":{"name":"UNDEFINED","valueA":255,"valueB":255},"outputConfiguration":{"name":"UNDEFINED","ossdEnabled":false,"valueA":255,"valueB":255}},"tilt":0,"offset":0,"rotation":0,"trigger":"disabled"},{"id":"a7ead258-c386-d799-6b9f-4e9b48884243","name":"UNDEFINED","ioSafetyPlane":{"triggerOutput":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"triggerSafeguard":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"restrictsElbow":false,"restrictsToolFlange":true,"inputConfiguration":{"name":"UNDEFINED","valueA":255,"valueB":255},"outputConfiguration":{"name":"UNDEFINED","ossdEnabled":false,"valueA":255,"valueB":255}},"tilt":0,"offset":0,"rotation":0,"trigger":"disabled"},{"id":"2a1bf9b9-cb64-e1bc-1481-3aaf69be6a03","name":"UNDEFINED","ioSafetyPlane":{"triggerOutput":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"triggerSafeguard":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"restrictsElbow":false,"restrictsToolFlange":true,"inputConfiguration":{"name":"UNDEFINED","valueA":255,"valueB":255},"outputConfiguration":{"name":"UNDEFINED","ossdEnabled":false,"valueA":255,"valueB":255}},"tilt":0,"offset":0,"rotation":0,"trigger":"disabled"},{"id":"dbffeead-a848-d30f-c85c-f96d425e14f6","name":"UNDEFINED","ioSafetyPlane":{"triggerOutput":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"triggerSafeguard":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"restrictsElbow":false,"restrictsToolFlange":true,"inputConfiguration":{"name":"UNDEFINED","valueA":255,"valueB":255},"outputConfiguration":{"name":"UNDEFINED","ossdEnabled":false,"valueA":255,"valueB":255}},"tilt":0,"offset":0,"rotation":0,"trigger":"disabled"},{"id":"76b63824-55a2-538b-b861-df918ea1c783","name":"UNDEFINED","ioSafetyPlane":{"triggerOutput":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"triggerSafeguard":{"distance":0,"vector":{"x":0,"y":0,"z":0}},"restrictsElbow":false,"restrictsToolFlange":true,"inputConfiguration":{"name":"UNDEFINED","valueA":255,"valueB":255},"outputConfiguration":{"name":"UNDEFINED","ossdEnabled":false,"valueA":255,"valueB":255}},"tilt":0,"offset":0,"rotation":0,"trigger":"disabled"}]},"safetySafeHome":{"base":-1,"elbow":-1,"shoulder":-1,"wrist1":-1,"wrist2":-1,"wrist3":-1,"enabled":false},"safetyAPIParameters":{"numberOfClients":0,"clients":[]},"safetyFieldbusses":{"enablePROFIsafe":false,"sourceAddressPROFIsafe":0,"destAddressPROFIsafe":0,"modeControlPROFIsafe":false},"threePosition":{"allowManualHighSpeed":true,"useTeachPendantAs3PE":false},"toolDirection":{"limitDeviation":6.2831855,"limitDirection":{"x":0,"y":0,"z":1},"limitRestriction":"DISABLED","tcp":{"id":"toolFlangeTcpId","name":"Tool_flange"},"toolPan":0,"toolTilt":0,"limitTilt":0,"limitRotation":0},"toolPositions":{"toolPositions":[{"name":"Tool Flange","center":{"x":0,"y":0,"z":0},"radius":0,"definition":2},{"name":"UNDEFINED","center":{"x":0,"y":0,"z":0},"radius":0,"definition":0},{"name":"UNDEFINED","center":{"x":0,"y":0,"z":0},"radius":0,"definition":0}]},"normalWristClamp":{"enableWristClampPosition":"LIMIT_ENABLED","enableWristClampTorque":"LIMIT_ENABLED"},"reducedWristClamp":{"enableWristClampPosition":"LIMIT_ENABLED","enableWristClampTorque":"LIMIT_ENABLED"}},"crc":"2850523693","confirmed":true},"operatorScreens":[{"type":"ur-operator-screen-default","version":"0.0.2","parameters":{"status":[{"initialValue":false,"description":"main program heartbeat","variable":{"name":"heartbeat","reference":false,"type":"$$Variable","valueType":"boolean","id":"dbf385dd-092e-8aeb-de8b-7c37139e255e","_IDENTIFIER":"VariableDeclaration"}}],"configuration":[]}}],"applicationContributions":{"ur-mounting":{"type":"ur-mounting","version":"0.0.1","mounting":{"baseAngle":{"value":0,"unit":"deg"},"tiltAngle":{"value":0,"unit":"deg"}}},"ur-frames":{"type":"ur-frames","version":"0.0.7","framesList":[{"name":"base","nameVariable":{"name":"base","reference":false,"type":"$$Variable","valueType":"frame","id":"583d3a7d-b103-aff9-502d-73d459fc2a0e","_IDENTIFIER":"VariableDeclaration"},"parent":"world","pose":{"position":[0,0,0],"orientation":[0,0,0]}},{"name":"tcp","nameVariable":{"name":"tcp","reference":false,"type":"$$Variable","valueType":"frame","id":"1debc310-2146-1b93-ebf3-6e257bfdd2da","_IDENTIFIER":"VariableDeclaration"},"parent":"flange","pose":{"position":[0,0,0],"orientation":[0,0,0]}},{"name":"world","nameVariable":{"name":"world","reference":false,"type":"$$Variable","valueType":"frame","id":"ddca5ccc-8f81-8461-2a8f-935321f2bf01","_IDENTIFIER":"VariableDeclaration"},"pose":{"position":[0,0,0],"orientation":[0,0,0]}},{"name":"flange","nameVariable":{"name":"flange","reference":false,"type":"$$Variable","valueType":"frame","id":"a284652e-3e38-9434-2e20-eae9dd10bd79","_IDENTIFIER":"VariableDeclaration"},"parent":"base","pose":{"position":[0,0,0],"orientation":[0,0,0]}}]},"ur-grid-pattern":{"type":"ur-grid-pattern","version":"0.0.3","grids":[{"grid":{"name":"grid","reference":false,"type":"$$Variable","valueType":"grid","id":"af733917-cce3-4b11-fb24-7e6677ff572e","_IDENTIFIER":"VariableDeclaration"},"waypoint":{"name":"grid_iterator","reference":false,"type":"$$Variable","valueType":"waypoint","id":"68ebd02e-0a2d-ad92-c6de-c677a19dddf0","_IDENTIFIER":"VariableDeclaration"},"corners":[null,null,null,null],"numRows":4,"numColumns":5}]},"ur-end-effector":{"type":"ur-end-effector","version":"0.0.2","endEffectors":[{"id":"ff024c69-09b0-7f9a-4337-82a774fe7b8f","name":"Robot","payload":{"weight":{"value":0,"unit":"kg"}},"cog":{"cx":{"value":0,"unit":"m"},"cy":{"value":0,"unit":"m"},"cz":{"value":0,"unit":"m"}},"inertia":{"Ixx":{"value":0,"unit":"kg*m^2"},"Iyy":{"value":0,"unit":"kg*m^2"},"Izz":{"value":0,"unit":"kg*m^2"},"Ixy":{"value":0,"unit":"kg*m^2"},"Ixz":{"value":0,"unit":"kg*m^2"},"Iyz":{"value":0,"unit":"kg*m^2"}},"useCustomInertia":false,"tcps":[{"id":"9d2f3820-89cc-9b9d-0d28-d03387086ed9","name":"Tool_flange","x":{"value":0,"unit":"m"},"y":{"value":0,"unit":"m"},"z":{"value":0,"unit":"m"},"rx":{"value":0,"unit":"rad"},"ry":{"value":0,"unit":"rad"},"rz":{"value":0,"unit":"rad"}}]}],"defaultTcp":{"endEffectorId":"ff024c69-09b0-7f9a-4337-82a774fe7b8f","tcpId":"9d2f3820-89cc-9b9d-0d28-d03387086ed9"}},"ur-motion-profiles":{"type":"ur-motion-profiles","version":"0.0.1","moveProfiles":{"joint":[{"isDefault":false,"profile":{"name":"Joint_fast","reference":false,"type":"$$Variable","valueType":"profile","id":"66cc9640-9626-20a9-b6be-e75938fdf603","_IDENTIFIER":"VariableDeclaration"},"parameters":{"speedType":"OptiMove","speed":{"entity":{"value":1.0471975511965976,"unit":"rad/s"},"selectedType":"VALUE","value":1.0471975511965976},"acceleration":{"entity":{"value":1.3962634015954636,"unit":"rad/s^2"},"selectedType":"VALUE","value":1.3962634015954636},"optiMoveSpeed":{"entity":{"value":50,"unit":"%"},"selectedType":"VALUE","value":50},"optiMoveAcceleration":{"entity":{"value":25,"unit":"%"},"selectedType":"VALUE","value":25}}},{"isDefault":true,"profile":{"name":"Joint_slow","reference":false,"type":"$$Variable","valueType":"profile","id":"0e781f7a-4120-999b-9eb9-c25c1dc8d0c8","_IDENTIFIER":"VariableDeclaration"},"parameters":{"speedType":"OptiMove","speed":{"entity":{"value":1.0471975511965976,"unit":"rad/s"},"selectedType":"VALUE","value":1.0471975511965976},"acceleration":{"entity":{"value":1.3962634015954636,"unit":"rad/s^2"},"selectedType":"VALUE","value":1.3962634015954636},"optiMoveSpeed":{"entity":{"value":20,"unit":"%"},"selectedType":"VALUE","value":20},"optiMoveAcceleration":{"entity":{"value":4,"unit":"%"},"selectedType":"VALUE","value":4}}}],"linear":[{"isDefault":false,"profile":{"name":"Linear_fast","reference":false,"type":"$$Variable","valueType":"profile","id":"2faf9dcd-a026-b177-e610-2044e80f9d1a","_IDENTIFIER":"VariableDeclaration"},"parameters":{"speedType":"OptiMove","speed":{"entity":{"value":0.25,"unit":"m/s"},"selectedType":"VALUE","value":0.25},"acceleration":{"entity":{"value":1.2,"unit":"m/s^2"},"selectedType":"VALUE","value":1.2},"optiMoveSpeed":{"entity":{"value":50,"unit":"%"},"selectedType":"VALUE","value":50},"optiMoveAcceleration":{"entity":{"value":25,"unit":"%"},"selectedType":"VALUE","value":25}}},{"isDefault":true,"profile":{"name":"Linear_slow","reference":false,"type":"$$Variable","valueType":"profile","id":"f9fc918f-21e5-f43d-8029-5ab979f2ce28","_IDENTIFIER":"VariableDeclaration"},"parameters":{"speedType":"OptiMove","speed":{"entity":{"value":0.25,"unit":"m/s"},"selectedType":"VALUE","value":0.25},"acceleration":{"entity":{"value":1.2,"unit":"m/s^2"},"selectedType":"VALUE","value":1.2},"optiMoveSpeed":{"entity":{"value":20,"unit":"%"},"selectedType":"VALUE","value":20},"optiMoveAcceleration":{"entity":{"value":4,"unit":"%"},"selectedType":"VALUE","value":4}}}],"process":[{"isDefault":true,"profile":{"name":"Process","reference":false,"type":"$$Variable","valueType":"profile","id":"854474bd-bfb7-9f87-49da-48a03f2d574c","_IDENTIFIER":"VariableDeclaration"},"parameters":{"speedType":"Classic","speed":{"entity":{"value":0.25,"unit":"m/s"},"selectedType":"VALUE","value":0.25},"acceleration":{"entity":{"value":1.2,"unit":"m/s^2"},"selectedType":"VALUE","value":1.2}}}]}},"ur-smart-skills":{"type":"ur-smart-skills","version":"0.0.3","preamble":"# Start of Forces\n###\n# Transforms the force and torque values along the axes of the given pose\n# @param pose pose Any valid pose, defaults to base, the x, y, and z values are ignored\n# @return array 6D force torque vector with [Fx, Fy, Fz, Mx, My, Mz] aligned to pose in N and Nm respectively\n###\ndef get_tcp_wrench_in_frame(pose = p[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]):\n    # we are only interested in the rotation of pose, set translations to zero\n    local target_pose = pose\n    target_pose[0] = 0\n    target_pose[1] = 0\n    target_pose[2] = 0\n    # the conversion needs to happen as poses, so we need to convert back and forth a bit\n    local force = get_tcp_force()\n    local force_vector_as_pose = p[force[0], force[1], force[2], 0, 0, 0]\n    local torque_vector_as_pose = p[force[3], force[4], force[5], 0, 0, 0]\n    local transformed_force_as_pose = pose_trans(pose_inv(target_pose), force_vector_as_pose)\n    local transformed_torque_as_pose = pose_trans(pose_inv(target_pose), torque_vector_as_pose)\n    return [transformed_force_as_pose[0], transformed_force_as_pose[1], transformed_force_as_pose[2], transformed_torque_as_pose[0], transformed_torque_as_pose[1], transformed_torque_as_pose[2]]\nend\n###\n# See documentation for @link:get_tcp_wrench_in_frame()\n# @return forces and torques measured in TCP frame\n###\ndef get_tcp_wrench():\n    return get_tcp_wrench_in_frame(get_target_tcp_pose())\nend\n###\n# Projects the measured TCP force along the axis given\n# @param axis array 3D vector\n###\ndef project_tcp_force(axis):\n    local wrench = get_tcp_wrench()\n    local force = [wrench[0], wrench[1], wrench[2]]\n    return dot(force, axis)\nend\n# End of Forces\n# Start of Math\n# Definitions of constants\nglobal PI = acos(-1)\n###\n# Calculates the cross product between to 3D vectors\n# @param v1 array 3D vector\n# @param v2 array 3D vector\n###\ndef cross(v1, v2):\n    if length(v1) != length(v2):\n        popup(str_cat(\"For computing the cross product, the two vectors must have the same length. Provided lengths: \", [length(v1), length(v2)]), error=True, blocking=True)\n        return -1\n    end\n    if length(v1) != 3:\n        popup(str_cat(\"For computing the cross product, the two vectors must have length 3. Provided lengths: \", [length(v1), length(v2)]), error=True, blocking=True)\n        return -1\n    end\n    local cross = [0.0, 0.0, 0.0]\n    local i = 0\n    while i < 3:\n        local j = (i + 1) % 3 # The next index in a cyclic order\n        local k = (i + 2) % 3 # The next next index in a cyclic order\n        cross[i] = v1[j] * v2[k] - v1[k] * v2[j]\n        i = i + 1\n    end\n    return cross\nend\n###\n# Calculates the dot product between to n-dimensional vectors\n# @param v1 array nD vector\n# @param v2 array nD vector\n###\ndef dot(v1, v2):\n    if length(v1) != length(v2):\n        popup(str_cat(\"For computing the dot product, the two vectors must have the same length. Provided lengths: \", [length(v1), length(v2)]), error=True, blocking=True)\n        return -1\n    end\n    local result = 0\n    local i = 0\n    while i < length(v1):\n        result = result + (v1[i] * v2[i])\n        i = i + 1\n    end\n    return result\nend\n###\n# Return the larger number of a and b\n# @param a number a\n# @param b number b\n###\ndef max(a, b):\n    if a > b:\n        return a\n    end\n    return b\nend\n###\n# Find the maximum value in a list. The list must be of non-zero length and contain numbers\n# @param list array list\n###\ndef list_max(list):\n    local length = get_list_length(list)\n    if  length == 0:\n        popup(\"Getting the maximum of an empty list is impossible in list_max().\", error = True, blocking = True)\n        halt\n    end\n    local i = 0\n    local max = list[0]\n    while i < length:\n        if list[i] > max:\n            max = list[i]\n        end\n        i = i + 1\n        sync_at_multiple(i, 30)\n    end\n    return max\nend\ndef sync_at_multiple(i, n):\n    local tmp = i / n\n    if tmp == floor(tmp):\n        sync()\n    end\nend\n# End of Math\n# Start of Move Helper\nur_move_until_force_distance = 0.1\nur_move_until_force_direction = [0, 0, 1]\nur_move_until_force_velocity = 0.1\nur_move_until_force_acceleration = 0.2\ndef ur_move_tcp_direction(distance, direction, velocity, acceleration, blend_radius):\n    local current_pose = get_target_tcp_pose()\n    local movement = normalize(direction) * distance\n    local target_pose = pose_trans(current_pose, p[movement[0], movement[1], movement[2], 0, 0, 0])\n    movel(target_pose, a = 0.2, v = velocity, r = blend_radius)\nend\nthread ur_move_until_force_thread():\n    ur_move_tcp_direction(ur_move_until_force_distance, ur_move_until_force_direction, ur_move_until_force_velocity, ur_move_until_force_acceleration, 0)\n    popup(\"No contact detected.\", title = \"No Contact\", warning = False, error = True, blocking = False)\n    halt\nend\n###\n# Moves the robot in the TCP direction specified until a contact point is reached *or*\n# the robot reaches the maximum distance allowed specified by the distance parameter.\n# @param distance number The maximum distance the robot is allowed to travel in the direction specified\n# @param direction array 3D vector determining the move direction of the TCP\n# @param velocity number Velocity of the robot\n# @param acceleration number Acceleration of the robot\n# @param stop_force number Maximum search radius\n###\ndef ur_move_until_force(distance = 0.1, direction = [0, 0, 1], velocity = 0.1, acceleration = 0.2, stop_force = 20):\n    ur_move_until_force_distance = distance\n    ur_move_until_force_direction = direction\n    ur_move_until_force_velocity = velocity\n    ur_move_until_force_acceleration = acceleration\n    \n    thrd = run ur_move_until_force_thread()\n    while - project_tcp_force(direction) < stop_force:\n        sync()\n    end\n    kill thrd\n    local actual_pose = get_actual_tcp_pose()\n    stopl(1.0)\n    return actual_pose\nend\ndef ur_get_joint_speeds_before_offset(previous_q, time):\n    local current_q = get_joint_positions()\n    local delta_q = current_q - previous_q\n    return delta_q / time\nend\ndef ur_path_move(end_q, v, rampdown=False):\n    # Calculate distance to target\n    local start_q = get_joint_positions()\n    local delta_q = end_q - start_q\n    local positive_delta_q = [norm(delta_q[0]), norm(delta_q[1]), norm(delta_q[2]), norm(delta_q[3]), norm(delta_q[4]), norm(delta_q[5])]\n    # Calculate time to move based on desired velocity\n    local t = list_max(positive_delta_q) / v\n    servoj(end_q , 0, 0, t, lookahead_time=0.1, gain=500)\n    if(rampdown):\n        while(norm(ur_get_joint_speeds_before_offset(start_q, t)) > 0.0001):\n            t = max(t, 0.001)\n            start_q = get_joint_positions()\n            servoj(end_q , 0, 0, t)\n        end\n    end\nend\n# End of Move Helper"},"ur-application-variables":{"type":"ur-application-variables","version":"0.0.1","variables":{"welder_state":{"variable":{"name":"welder_state","reference":false,"type":"$$Variable","valueType":"string","id":"979fb546-d623-a454-aebb-12b0bd06a85e","_IDENTIFIER":"VariableDeclaration"},"value":"Welding interrupted"}}},"ur-urconnect-application":{"type":"ur-urconnect-application","version":"1.0.0"}},"sidebarItems":[{"type":"ur-global-variables","version":"1.0.0","disabled":{"master":false,"automaticMode":false,"remoteMode":true}},{"type":"ur-log-messages-sidebar","version":"0.0.1","disabled":{"master":false,"automaticMode":false,"remoteMode":true}}],"logicPrograms":{"395b37c7-c41b-a6c0-b2a8-14d8ccf94a54":{"id":"395b37c7-c41b-a6c0-b2a8-14d8ccf94a54","programContent":{"children":[{"children":[],"contributedNode":{"type":"ur-modules","version":"0.0.1","allowsChildren":true,"lockChildren":false},"guid":"5f8867ec-c815-bf15-719e-ad8333e11b6b","parentId":"fc2ba7ab-7ba4-a041-19ec-271124f0e475","programType":"logic"},{"children":[{"children":[{"children":[{"children":[],"contributedNode":{"type":"ur-script","version":"0.0.1","parameters":{"name":"","expression":"textmsg(\"Robot is not in Remote Control mode\")","valid":true}},"guid":"2ca2e4e8-9231-d0d5-4eba-f41317aa1f80","parentId":"dd8428e7-d7d6-a7e1-ff35-731f4526b976","programLabel":"textmsg(\"Robot is not in Remote Control mode\")","programType":"logic"},{"children":[],"contributedNode":{"type":"ur-wait","version":"0.0.4","parameters":{"type":"time","time":{"entity":{"value":3,"unit":"s"},"selectedType":"VALUE","value":3}}},"guid":"b4f405e8-582d-4df6-f737-e0d52db35948","parentId":"dd8428e7-d7d6-a7e1-ff35-731f4526b976","programLabel":[{"type":"secondary","value":"3 s"}],"programType":"logic"}],"contributedNode":{"type":"ur-loop","version":"0.0.2","allowsChildren":true,"parameters":{"type":"expression","expression":{"selectedType":"EXPRESSION","value":"control_api_handle.is_control_allowed() == False "},"xtimes":1}},"guid":"dd8428e7-d7d6-a7e1-ff35-731f4526b976","parentId":"a144ca54-4eaa-729e-6c59-db2a535b6e4c","programLabel":[{"type":"secondary","translationKey":"program-node-label.loop.while","interpolateParams":{"expression":"control_api_handle.is_control_allowed() == False "}}],"programType":"logic"},{"children":[],"contributedNode":{"type":"ur-assignment","version":"0.0.3","allowsChildren":false,"parameters":{"variable":{"entity":{"name":"program_state","reference":false,"type":"$$Variable","valueType":"integer","id":"36d1abfe-115b-f068-23ee-63982d5c7d0d","_IDENTIFIER":"VariableDeclaration","declaredByID":"f1fa10e9-1307-028c-f47c-10ebbf6a98ed"},"selectedType":"EXPRESSION","value":"control_api_handle.robot_program_state()"},"valueType":"integer","waypointType":"teach"}},"guid":"f1fa10e9-1307-028c-f47c-10ebbf6a98ed","parentId":"a144ca54-4eaa-729e-6c59-db2a535b6e4c","programLabel":[{"type":"primary","value":"program_state:"},{"type":"secondary","value":"control_api_handle.robot_program_state()"}],"programType":"logic"},{"children":[],"contributedNode":{"type":"ur-assignment","version":"0.0.3","allowsChildren":false,"parameters":{"variable":{"entity":{"name":"robot_state","reference":false,"type":"$$Variable","valueType":"integer","id":"cfe26932-bbbe-3077-d133-7d5c0cd71f54","_IDENTIFIER":"VariableDeclaration","declaredByID":"c75db643-9aff-df06-fb04-a6f7e76e25ac"},"selectedType":"EXPRESSION","value":"control_api_handle.robot_program_state()"},"valueType":"integer","waypointType":"teach"}},"guid":"c75db643-9aff-df06-fb04-a6f7e76e25ac","parentId":"a144ca54-4eaa-729e-6c59-db2a535b6e4c","programLabel":[{"type":"primary","value":"robot_state:"},{"type":"secondary","value":"control_api_handle.robot_program_state()"}],"programType":"logic"},{"children":[],"contributedNode":{"type":"ur-wait","version":"0.0.4","parameters":{"type":"time","time":{"entity":{"value":0.5,"unit":"s"},"selectedType":"VALUE","value":0.5}}},"guid":"63a98cd5-fdac-4f7f-e617-45f7917ddb29","parentId":"a144ca54-4eaa-729e-6c59-db2a535b6e4c","programLabel":[{"type":"secondary","value":"0.5 s"}],"programType":"logic"}],"contributedNode":{"type":"ur-function","version":"0.0.2","allowsChildren":true,"parameters":{"isAsync":true,"function":{"name":"monitor_thread","id":"8e9629e0-e9ce-1ccb-3961-5dbb4e5381e0","_IDENTIFIER":"FunctionDeclaration","reference":false,"type":"$$Function","declaredByID":"a144ca54-4eaa-729e-6c59-db2a535b6e4c"},"isLooping":true}},"guid":"a144ca54-4eaa-729e-6c59-db2a535b6e4c","parentId":"eb827e12-73da-82ea-f438-66952b0458bd","programType":"logic","programLabel":[{"type":"primary","translationKey":"program-node-label.single-value","interpolateParams":{"value":"monitor_thread"}}]}],"contributedNode":{"type":"ur-functions","version":"0.0.1","allowsChildren":true,"lockChildren":false},"guid":"eb827e12-73da-82ea-f438-66952b0458bd","parentId":"fc2ba7ab-7ba4-a041-19ec-271124f0e475","programType":"logic"},{"children":[{"children":[],"contributedNode":{"type":"ur-assignment","version":"0.0.3","allowsChildren":false,"parameters":{"variable":{"entity":{"name":"control_api_handle","reference":false,"type":"$$Variable","valueType":"array","id":"7a7483d6-b139-a2ed-865b-02ea1aaf95f9","_IDENTIFIER":"VariableDeclaration","declaredByID":"dd7f9ad2-9573-5b6b-f590-249c9fc75b5c"},"selectedType":"EXPRESSION","value":"control_api_factory(\"simulated_hmi\")"},"valueType":"array","waypointType":"teach"}},"guid":"dd7f9ad2-9573-5b6b-f590-249c9fc75b5c","parentId":"9e3365ee-18ef-c23c-ada4-243648825ac3","programLabel":[{"type":"primary","value":"control_api_handle:"},{"type":"secondary","value":"control_api_factory(\"simulated_hmi\")"}],"programType":"logic"},{"children":[],"contributedNode":{"type":"ur-assignment","version":"0.0.3","allowsChildren":false,"parameters":{"variable":{"entity":{"name":"reqested_state","id":"36c04bbc-aa25-e531-83d3-76a7ca18469f","valueType":"string","_IDENTIFIER":"VariableDeclaration","reference":false,"type":"$$Variable","declaredByID":"483ef34a-d4ca-782c-53d5-0c50dc2c93d5"},"selectedType":"VALUE","value":"\"power on\""},"valueType":"string","waypointType":"teach"}},"guid":"483ef34a-d4ca-782c-53d5-0c50dc2c93d5","parentId":"9e3365ee-18ef-c23c-ada4-243648825ac3","programLabel":[{"type":"primary","value":"reqested_state:"},{"type":"secondary","value":"\"power on\""}],"programType":"logic"},{"children":[],"contributedNode":{"type":"ur-thread","version":"0.0.1","allowsChildren":false,"parameters":{"selectedModule":{"name":"","reference":true,"type":"$$Module"},"selectedThread":{"type":"$$Function","declaredByID":"a144ca54-4eaa-729e-6c59-db2a535b6e4c","name":"monitor_thread","reference":true},"selectedAction":"Run"}},"guid":"27aca350-d3a5-f8e3-2098-c1141b55c78d","parentId":"9e3365ee-18ef-c23c-ada4-243648825ac3","programLabel":[{"type":"primary","translationKey":"program-node-label.single-value","interpolateParams":{"value":"monitor_thread"}},{"type":"secondary","translationKey":"program-node-label.single-value","interpolateParams":{"value":"Run"}}],"programType":"logic"}],"contributedNode":{"type":"ur-before-start","version":"0.0.1","allowsChildren":true},"guid":"9e3365ee-18ef-c23c-ada4-243648825ac3","parentId":"fc2ba7ab-7ba4-a041-19ec-271124f0e475","programType":"logic"},{"children":[{"children":[],"contributedNode":{"type":"ur-comment","version":"0.0.1","parameters":{"comment":"NOTE: Control API error handling missing for simplicity."}},"guid":"ac357463-37f7-eced-ae97-571c3a4e5b0b","parentId":"402af48d-3383-f492-003e-d07d24ac4bf7","programLabel":[{"type":"secondary","value":"NOTE: Control API error handling missing for simplicity."}],"programType":"logic"},{"children":[{"children":[],"contributedNode":{"type":"ur-control-action","version":"0.0.1","lockChildren":false,"allowsChildren":false,"parameters":{"controlAction":"PowerOn"}},"guid":"e16b1afa-aec7-0e46-8675-9b5b540e2bcd","parentId":"3cb4b4b8-fc52-a48b-931a-6e57df3a730f","programLabel":[{"type":"secondary","translationKey":"presenter.control-action.option.power_on"}],"programType":"logic"},{"children":[],"contributedNode":{"type":"ur-control-action","version":"0.0.1","lockChildren":false,"allowsChildren":false,"parameters":{"controlAction":"ReleaseBrakes"}},"guid":"df1103cf-d4cc-386d-10fc-72aeaa21c63e","parentId":"3cb4b4b8-fc52-a48b-931a-6e57df3a730f","programLabel":[{"type":"secondary","translationKey":"presenter.control-action.option.release_brakes"}],"programType":"logic"},{"children":[{"children":[],"contributedNode":{"type":"ur-script","version":"0.0.1","parameters":{"name":"","expression":"textmsg(\"ERROR: Robot Arm not in 'running' state. Retrying...\")","valid":true}},"guid":"682a7cce-4ea2-cf25-e1cb-17715eacd67b","parentId":"8bcd9120-8d40-174d-4bd1-be20ee9bcbef","programLabel":"textmsg(\"ERROR: Robot Arm not in 'running' state. Retrying...\")","programType":"logic"},{"children":[],"contributedNode":{"type":"ur-wait","version":"0.0.4","parameters":{"type":"time","time":{"entity":{"value":5,"unit":"s"},"selectedType":"VALUE","value":5}}},"guid":"ffbaee0c-ea62-dbfe-0854-fc5dc138d844","parentId":"8bcd9120-8d40-174d-4bd1-be20ee9bcbef","programLabel":[{"type":"secondary","value":"5 s"}],"programType":"logic"}],"contributedNode":{"type":"ur-if","version":"0.0.3","allowsChildren":true,"parameters":{"expression":{"_IDENTIFIER":"Expression","expression":"control_api_handle.robot_mode() != 7"}}},"guid":"8bcd9120-8d40-174d-4bd1-be20ee9bcbef","parentId":"3cb4b4b8-fc52-a48b-931a-6e57df3a730f","programLabel":[{"type":"secondary","value":"control_api_handle.robot_mode() != 7"}],"programType":"logic"},{"children":[{"children":[],"contributedNode":{"type":"ur-assignment","version":"0.0.3","allowsChildren":false,"parameters":{"variable":{"entity":{"id":"36c04bbc-aa25-e531-83d3-76a7ca18469f","_IDENTIFIER":"VariableReference"},"selectedType":"VALUE","value":"\"play program\""},"valueType":"string","waypointType":"teach"}},"guid":"24106c93-58f5-37c5-e76d-c1a1ae9eaf1d","parentId":"cab7a8c0-a85f-d796-5a4d-62be9760c8aa","programLabel":[{"type":"primary","value":"reqested_state:"},{"type":"secondary","value":"\"play program\""}],"programType":"logic"},{"children":[],"contributedNode":{"type":"ur-wait","version":"0.0.4","parameters":{"type":"time","time":{"entity":{"value":3,"unit":"s"},"selectedType":"VALUE","value":3}}},"guid":"2ac3ce08-badb-b66e-b1ea-53ccde272832","parentId":"cab7a8c0-a85f-d796-5a4d-62be9760c8aa","programLabel":[{"type":"secondary","value":"3 s"}],"programType":"logic"}],"contributedNode":{"type":"ur-else","version":"0.0.1","allowsChildren":true,"parameters":{}},"guid":"cab7a8c0-a85f-d796-5a4d-62be9760c8aa","parentId":"3cb4b4b8-fc52-a48b-931a-6e57df3a730f","programLabel":"","programType":"logic"}],"contributedNode":{"type":"ur-if","version":"0.0.3","allowsChildren":true,"parameters":{"expression":{"_IDENTIFIER":"Expression","expression":"reqested_state == \"power on\""}}},"guid":"3cb4b4b8-fc52-a48b-931a-6e57df3a730f","parentId":"402af48d-3383-f492-003e-d07d24ac4bf7","programLabel":[{"type":"secondary","value":"reqested_state == \"power on\""}],"programType":"logic"},{"children":[{"children":[],"contributedNode":{"type":"ur-control-action","version":"0.0.1","lockChildren":false,"allowsChildren":false,"parameters":{"controlAction":"PowerOff"}},"guid":"bbb6eeae-5e87-2d0a-542e-de011c1971b2","parentId":"c63bcb5e-28d5-0700-8595-f98b6e89fcfd","programLabel":[{"type":"secondary","translationKey":"presenter.control-action.option.power_off"}],"programType":"logic"},{"children":[{"children":[],"contributedNode":{"type":"ur-script","version":"0.0.1","parameters":{"name":"","expression":"textmsg(\"ERROR: Robot Arm not in 'powered off' state. Retrying...\")","valid":true}},"guid":"09f62cec-b0ca-600d-4458-f3ecee2efee0","parentId":"6cf53a31-9a2e-f39e-4bd5-4c0e4b408bcd","programLabel":"textmsg(\"ERROR: Robot Arm not in 'powered off' state. Retrying...\")","programType":"logic"},{"children":[],"contributedNode":{"type":"ur-wait","version":"0.0.4","parameters":{"type":"time","time":{"entity":{"value":5,"unit":"s"},"selectedType":"VALUE","value":5}}},"guid":"8fe51642-4ac1-6e12-17c6-f84f77a24ab4","parentId":"6cf53a31-9a2e-f39e-4bd5-4c0e4b408bcd","programLabel":[{"type":"secondary","value":"5 s"}],"programType":"logic"}],"contributedNode":{"type":"ur-if","version":"0.0.3","allowsChildren":true,"parameters":{"expression":{"_IDENTIFIER":"Expression","expression":"control_api_handle.robot_mode() != 3"}}},"guid":"6cf53a31-9a2e-f39e-4bd5-4c0e4b408bcd","parentId":"c63bcb5e-28d5-0700-8595-f98b6e89fcfd","programLabel":[{"type":"secondary","value":"control_api_handle.robot_mode() != 3"}],"programType":"logic"},{"children":[{"children":[],"contributedNode":{"type":"ur-assignment","version":"0.0.3","allowsChildren":false,"parameters":{"variable":{"entity":{"id":"36c04bbc-aa25-e531-83d3-76a7ca18469f","_IDENTIFIER":"VariableReference"},"selectedType":"VALUE","value":"\"power on\""},"valueType":"string","waypointType":"teach"}},"guid":"c2ef64fb-d49e-ffcc-b5dc-b050352c21cc","parentId":"7e43abd5-c862-c857-0c63-a31f4f1a9b1f","programLabel":[{"type":"primary","value":"reqested_state:"},{"type":"secondary","value":"\"power on\""}],"programType":"logic"},{"children":[],"contributedNode":{"type":"ur-wait","version":"0.0.4","parameters":{"type":"time","time":{"entity":{"value":3,"unit":"s"},"selectedType":"VALUE","value":3}}},"guid":"20222416-c852-9a17-52a0-95352eae817b","parentId":"7e43abd5-c862-c857-0c63-a31f4f1a9b1f","programLabel":[{"type":"secondary","value":"3 s"}],"programType":"logic"}],"contributedNode":{"type":"ur-else","version":"0.0.1","allowsChildren":true,"parameters":{}},"guid":"7e43abd5-c862-c857-0c63-a31f4f1a9b1f","parentId":"c63bcb5e-28d5-0700-8595-f98b6e89fcfd","programLabel":"","programType":"logic"}],"contributedNode":{"type":"ur-if","version":"0.0.3","allowsChildren":true,"parameters":{"expression":{"_IDENTIFIER":"Expression","expression":"reqested_state == \"power off\""}},"isSuppressed":false},"guid":"c63bcb5e-28d5-0700-8595-f98b6e89fcfd","parentId":"402af48d-3383-f492-003e-d07d24ac4bf7","programLabel":[{"type":"secondary","value":"reqested_state == \"power off\""}],"programType":"logic"},{"children":[{"children":[],"contributedNode":{"type":"ur-control-action","version":"0.0.1","lockChildren":false,"allowsChildren":false,"parameters":{"controlAction":"StartProgram"}},"guid":"5fecbdd6-cff3-6b35-9743-1a5420bd6795","parentId":"c312fa96-3dcd-5507-a9f9-abbbb5fbf642","programLabel":[{"type":"secondary","translationKey":"presenter.control-action.option.start_program"}],"programType":"logic"},{"children":[{"children":[],"contributedNode":{"type":"ur-script","version":"0.0.1","parameters":{"name":"","expression":"textmsg(\"ERROR: Program not in 'playing' state. Retrying...\")","valid":true}},"guid":"772315a4-0b89-1282-9306-817c7395d19e","parentId":"c25220de-1058-622c-22f9-da30828f7e9c","programLabel":"textmsg(\"ERROR: Program not in 'playing' state. Retrying...\")","programType":"logic"},{"children":[],"contributedNode":{"type":"ur-wait","version":"0.0.4","parameters":{"type":"time","time":{"entity":{"value":5,"unit":"s"},"selectedType":"VALUE","value":5}}},"guid":"196c4c7d-177b-1956-7c3c-5eed2aa88df5","parentId":"c25220de-1058-622c-22f9-da30828f7e9c","programLabel":[{"type":"secondary","value":"5 s"}],"programType":"logic"}],"contributedNode":{"type":"ur-if","version":"0.0.3","allowsChildren":true,"parameters":{"expression":{"_IDENTIFIER":"Expression","expression":"control_api_handle.robot_program_state() != 2"}}},"guid":"c25220de-1058-622c-22f9-da30828f7e9c","parentId":"c312fa96-3dcd-5507-a9f9-abbbb5fbf642","programLabel":[{"type":"secondary","value":"control_api_handle.robot_program_state() != 2"}],"programType":"logic"},{"children":[{"children":[],"contributedNode":{"type":"ur-assignment","version":"0.0.3","allowsChildren":false,"parameters":{"variable":{"entity":{"id":"36c04bbc-aa25-e531-83d3-76a7ca18469f","_IDENTIFIER":"VariableReference"},"selectedType":"VALUE","value":"\"pause program\""},"valueType":"string","waypointType":"teach"}},"guid":"982e57ba-6c23-0956-78f4-48cafefee286","parentId":"de4800cb-40cc-8e41-5cb7-071e9f9d7382","programLabel":[{"type":"primary","value":"reqested_state:"},{"type":"secondary","value":"\"pause program\""}],"programType":"logic"},{"children":[],"contributedNode":{"type":"ur-wait","version":"0.0.4","parameters":{"type":"time","time":{"entity":{"value":5,"unit":"s"},"selectedType":"VALUE","value":5}}},"guid":"a7fd2a03-e803-9399-7ab0-cbaa2a1819a7","parentId":"de4800cb-40cc-8e41-5cb7-071e9f9d7382","programLabel":[{"type":"secondary","value":"5 s"}],"programType":"logic"}],"contributedNode":{"type":"ur-else","version":"0.0.1","allowsChildren":true,"parameters":{}},"guid":"de4800cb-40cc-8e41-5cb7-071e9f9d7382","parentId":"c312fa96-3dcd-5507-a9f9-abbbb5fbf642","programLabel":"","programType":"logic"}],"contributedNode":{"type":"ur-if","version":"0.0.3","allowsChildren":true,"parameters":{"expression":{"_IDENTIFIER":"Expression","expression":"reqested_state == \"play program\""}},"isSuppressed":false},"guid":"c312fa96-3dcd-5507-a9f9-abbbb5fbf642","parentId":"402af48d-3383-f492-003e-d07d24ac4bf7","programLabel":[{"type":"secondary","value":"reqested_state == \"play program\""}],"programType":"logic"},{"children":[{"children":[],"contributedNode":{"type":"ur-control-action","version":"0.0.1","lockChildren":false,"allowsChildren":false,"parameters":{"controlAction":"PauseProgram"}},"guid":"917dfc4b-1f8b-1310-6ca6-156888e68897","parentId":"e61389f1-f32e-2ecb-6b67-778aa1c2a5ec","programLabel":[{"type":"secondary","translationKey":"presenter.control-action.option.pause_program"}],"programType":"logic"},{"children":[{"children":[],"contributedNode":{"type":"ur-script","version":"0.0.1","parameters":{"name":"","expression":"textmsg(\"ERROR: Program not in 'paused' state. Retrying...\")","valid":true}},"guid":"d2754648-b347-b4db-3566-d30e18a714ef","parentId":"484b94c6-b79c-6e70-86f8-11096356412b","programLabel":"textmsg(\"ERROR: Program not in 'paused' state. Retrying...\")","programType":"logic"},{"children":[],"contributedNode":{"type":"ur-wait","version":"0.0.4","parameters":{"type":"time","time":{"entity":{"value":5,"unit":"s"},"selectedType":"VALUE","value":5}}},"guid":"3ca8120d-dc38-b839-aa3b-da2c76261d57","parentId":"484b94c6-b79c-6e70-86f8-11096356412b","programLabel":[{"type":"secondary","value":"5 s"}],"programType":"logic"}],"contributedNode":{"type":"ur-if","version":"0.0.3","allowsChildren":true,"parameters":{"expression":{"_IDENTIFIER":"Expression","expression":"control_api_handle.robot_program_state() != 4"}}},"guid":"484b94c6-b79c-6e70-86f8-11096356412b","parentId":"e61389f1-f32e-2ecb-6b67-778aa1c2a5ec","programLabel":[{"type":"secondary","value":"control_api_handle.robot_program_state() != 4"}],"programType":"logic"},{"children":[{"children":[],"contributedNode":{"type":"ur-assignment","version":"0.0.3","allowsChildren":false,"parameters":{"variable":{"entity":{"id":"36c04bbc-aa25-e531-83d3-76a7ca18469f","_IDENTIFIER":"VariableReference"},"selectedType":"VALUE","value":"\"stop program\""},"valueType":"string","waypointType":"teach"}},"guid":"2791a774-8503-e5b1-e84c-cd830b3ec09e","parentId":"738b72ab-bcdd-2578-e0d7-1d1bd54b29cd","programLabel":[{"type":"primary","value":"reqested_state:"},{"type":"secondary","value":"\"stop program\""}],"programType":"logic"},{"children":[],"contributedNode":{"type":"ur-wait","version":"0.0.4","parameters":{"type":"time","time":{"entity":{"value":3,"unit":"s"},"selectedType":"VALUE","value":3}}},"guid":"22ad86f0-e2eb-00f1-b027-686242e3e660","parentId":"738b72ab-bcdd-2578-e0d7-1d1bd54b29cd","programLabel":[{"type":"secondary","value":"3 s"}],"programType":"logic"}],"contributedNode":{"type":"ur-else","version":"0.0.1","allowsChildren":true,"parameters":{}},"guid":"738b72ab-bcdd-2578-e0d7-1d1bd54b29cd","parentId":"e61389f1-f32e-2ecb-6b67-778aa1c2a5ec","programLabel":"","programType":"logic"}],"contributedNode":{"type":"ur-if","version":"0.0.3","allowsChildren":true,"parameters":{"expression":{"_IDENTIFIER":"Expression","expression":"reqested_state == \"pause program\""}},"isSuppressed":false},"guid":"e61389f1-f32e-2ecb-6b67-778aa1c2a5ec","parentId":"402af48d-3383-f492-003e-d07d24ac4bf7","programLabel":[{"type":"secondary","value":"reqested_state == \"pause program\""}],"programType":"logic"},{"children":[{"children":[],"contributedNode":{"type":"ur-control-action","version":"0.0.1","lockChildren":false,"allowsChildren":false,"parameters":{"controlAction":"StopProgram"}},"guid":"bcec6ed0-7b7f-e81b-309a-06dd703d651b","parentId":"225ac4e1-4f65-f2b2-fb23-43df23424052","programLabel":[{"type":"secondary","translationKey":"presenter.control-action.option.stop_program"}],"programType":"logic"},{"children":[{"children":[],"contributedNode":{"type":"ur-script","version":"0.0.1","parameters":{"name":"","expression":"textmsg(\"ERROR: Program not in 'stopped' state. Retrying...\")","valid":true}},"guid":"3f3bf106-7214-6528-3d6a-659c2081d800","parentId":"c3e8e417-643e-fd59-929f-e816579e6509","programLabel":"textmsg(\"ERROR: Program not in 'stopped' state. Retrying...\")","programType":"logic"},{"children":[],"contributedNode":{"type":"ur-wait","version":"0.0.4","parameters":{"type":"time","time":{"entity":{"value":5,"unit":"s"},"selectedType":"VALUE","value":5}}},"guid":"5485c1c0-6471-4802-1b6a-2f1ce40e62ab","parentId":"c3e8e417-643e-fd59-929f-e816579e6509","programLabel":[{"type":"secondary","value":"5 s"}],"programType":"logic"}],"contributedNode":{"type":"ur-if","version":"0.0.3","allowsChildren":true,"parameters":{"expression":{"_IDENTIFIER":"Expression","expression":"control_api_handle.robot_program_state() != 1"}}},"guid":"c3e8e417-643e-fd59-929f-e816579e6509","parentId":"225ac4e1-4f65-f2b2-fb23-43df23424052","programLabel":[{"type":"secondary","value":"control_api_handle.robot_program_state() != 1"}],"programType":"logic"},{"children":[{"children":[],"contributedNode":{"type":"ur-assignment","version":"0.0.3","allowsChildren":false,"parameters":{"variable":{"entity":{"id":"36c04bbc-aa25-e531-83d3-76a7ca18469f","_IDENTIFIER":"VariableReference"},"selectedType":"VALUE","value":"\"power off\""},"valueType":"string","waypointType":"teach"}},"guid":"39b253d3-7e46-ac39-5021-6e7cce189262","parentId":"c6f6a88d-0b60-c156-493b-30975453eec4","programLabel":[{"type":"primary","value":"reqested_state:"},{"type":"secondary","value":"\"power off\""}],"programType":"logic"},{"children":[],"contributedNode":{"type":"ur-wait","version":"0.0.4","parameters":{"type":"time","time":{"entity":{"value":3,"unit":"s"},"selectedType":"VALUE","value":3}}},"guid":"b2cd5e0e-0139-1fcf-7731-48c898ac03fb","parentId":"c6f6a88d-0b60-c156-493b-30975453eec4","programLabel":[{"type":"secondary","value":"3 s"}],"programType":"logic"}],"contributedNode":{"type":"ur-else","version":"0.0.1","allowsChildren":true,"parameters":{}},"guid":"c6f6a88d-0b60-c156-493b-30975453eec4","parentId":"225ac4e1-4f65-f2b2-fb23-43df23424052","programLabel":"","programType":"logic"}],"contributedNode":{"type":"ur-if","version":"0.0.3","allowsChildren":true,"parameters":{"expression":{"_IDENTIFIER":"Expression","expression":"reqested_state == \"stop program\""}},"isSuppressed":false},"guid":"225ac4e1-4f65-f2b2-fb23-43df23424052","parentId":"402af48d-3383-f492-003e-d07d24ac4bf7","programLabel":[{"type":"secondary","value":"reqested_state == \"stop program\""}],"programType":"logic"},{"children":[],"contributedNode":{"type":"ur-script","version":"0.0.1","parameters":{"name":"","expression":"sync()","valid":true}},"guid":"507842e5-43d3-09e7-9f80-d02d7c4e6a7e","parentId":"402af48d-3383-f492-003e-d07d24ac4bf7","programLabel":"sync()","programType":"logic"}],"contributedNode":{"type":"ur-logic-program","version":"0.0.1","allowsChildren":true,"parameters":{"logicProgram":{"name":"Logic_Program","reference":false,"type":"$$LogicProgram","declaredByID":"402af48d-3383-f492-003e-d07d24ac4bf7"}}},"guid":"402af48d-3383-f492-003e-d07d24ac4bf7","parentId":"fc2ba7ab-7ba4-a041-19ec-271124f0e475","programType":"logic"}],"contributedNode":{"type":"ur-logic-programs","version":"0.0.1","allowsChildren":true,"lockChildren":true,"parameters":{"name":"","symbolHistory":{"variables":[{"name":"reqested_state","valueType":"string","programNodeMetadata":{"programNodeId":"483ef34a-d4ca-782c-53d5-0c50dc2c93d5","isSuppressed":false},"reference":{"id":"36c04bbc-aa25-e531-83d3-76a7ca18469f","_IDENTIFIER":"VariableReference"}},{"name":"control_api_handle","valueType":"array","programNodeMetadata":{"programNodeId":"dd7f9ad2-9573-5b6b-f590-249c9fc75b5c","isSuppressed":false},"reference":{"id":"7a7483d6-b139-a2ed-865b-02ea1aaf95f9","_IDENTIFIER":"VariableReference"}},{"name":"program_state","valueType":"integer","programNodeMetadata":{"programNodeId":"f1fa10e9-1307-028c-f47c-10ebbf6a98ed","isSuppressed":false},"reference":{"id":"36d1abfe-115b-f068-23ee-63982d5c7d0d","_IDENTIFIER":"VariableReference"}},{"name":"robot_state","valueType":"integer","programNodeMetadata":{"programNodeId":"c75db643-9aff-df06-fb04-a6f7e76e25ac","isSuppressed":false},"reference":{"id":"cfe26932-bbbe-3077-d133-7d5c0cd71f54","_IDENTIFIER":"VariableReference"}},{"name":"base","valueType":"frame","reference":{"id":"583d3a7d-b103-aff9-502d-73d459fc2a0e","_IDENTIFIER":"VariableReference"}},{"name":"tcp","valueType":"frame","reference":{"id":"1debc310-2146-1b93-ebf3-6e257bfdd2da","_IDENTIFIER":"VariableReference"}},{"name":"world","valueType":"frame","reference":{"id":"ddca5ccc-8f81-8461-2a8f-935321f2bf01","_IDENTIFIER":"VariableReference"}},{"name":"flange","valueType":"frame","reference":{"id":"a284652e-3e38-9434-2e20-eae9dd10bd79","_IDENTIFIER":"VariableReference"}},{"name":"grid","valueType":"grid","reference":{"id":"af733917-cce3-4b11-fb24-7e6677ff572e","_IDENTIFIER":"VariableReference"}},{"name":"grid_iterator","valueType":"waypoint","reference":{"id":"68ebd02e-0a2d-ad92-c6de-c677a19dddf0","_IDENTIFIER":"VariableReference"}},{"name":"Joint_fast","valueType":"profile","reference":{"id":"66cc9640-9626-20a9-b6be-e75938fdf603","_IDENTIFIER":"VariableReference"}},{"name":"Joint_slow","valueType":"profile","reference":{"id":"0e781f7a-4120-999b-9eb9-c25c1dc8d0c8","_IDENTIFIER":"VariableReference"}},{"name":"Linear_fast","valueType":"profile","reference":{"id":"2faf9dcd-a026-b177-e610-2044e80f9d1a","_IDENTIFIER":"VariableReference"}},{"name":"Linear_slow","valueType":"profile","reference":{"id":"f9fc918f-21e5-f43d-8029-5ab979f2ce28","_IDENTIFIER":"VariableReference"}},{"name":"Process","valueType":"profile","reference":{"id":"854474bd-bfb7-9f87-49da-48a03f2d574c","_IDENTIFIER":"VariableReference"}},{"name":"welder_state","valueType":"string","reference":{"id":"979fb546-d623-a454-aebb-12b0bd06a85e","_IDENTIFIER":"VariableReference"}},{"name":"heartbeat","valueType":"boolean","reference":{"id":"dbf385dd-092e-8aeb-de8b-7c37139e255e","_IDENTIFIER":"VariableReference"}},{"name":"Home","valueType":"waypoint","reference":{"id":"7622345a-0e52-2cf8-0ff6-3a6568b1e03a","_IDENTIFIER":"VariableReference"}},{"name":"var","valueType":"integer","programNodeMetadata":{"programNodeId":"982e57ba-6c23-0956-78f4-48cafefee286","isSuppressed":false},"reference":{"id":"194c677f-bc0c-5e58-b39b-9b7bb2e6e1e8","_IDENTIFIER":"VariableReference"}},{"name":"prev_play_input","valueType":"boolean","programNodeMetadata":{"programNodeId":"f60922fc-4d01-b6c1-e81f-e820eaa52155","isSuppressed":false},"reference":{"id":"7fb9f317-9b91-b254-7647-dcb75b65f114","_IDENTIFIER":"VariableReference"}},{"name":"prev_pause_input","valueType":"boolean","programNodeMetadata":{"programNodeId":"56282953-5ebf-15aa-bada-c0190b731a71","isSuppressed":false},"reference":{"id":"52691feb-ee1c-5c5f-0d65-675253157360","_IDENTIFIER":"VariableReference"}},{"name":"prev_stop_input","valueType":"boolean","programNodeMetadata":{"programNodeId":"77592c44-c953-7b2a-efe8-fdbddb7ecec8","isSuppressed":false},"reference":{"id":"62d84488-d52d-b837-f502-771159cbd605","_IDENTIFIER":"VariableReference"}},{"name":"prev_power_off_input","valueType":"boolean","programNodeMetadata":{"programNodeId":"fb996af1-3690-2552-3e6e-d630996c87b2","isSuppressed":false},"reference":{"id":"6ee2b558-5fa8-f3b5-030e-11a10ed59ae6","_IDENTIFIER":"VariableReference"}},{"name":"prev_power_off_input_1","valueType":"boolean","programNodeMetadata":{"programNodeId":"5ce49634-f77a-b580-5354-398548e01dbe","isSuppressed":false},"reference":{"id":"2a22b2a3-bf3c-2bd2-a25e-8a151d26c9a0","_IDENTIFIER":"VariableReference"}},{"name":"prev_stop_input_1","valueType":"boolean","programNodeMetadata":{"programNodeId":"60a0cbbb-c77b-4c34-95be-14375458c622","isSuppressed":false},"reference":{"id":"b0cdb3ca-0666-d092-292e-4f95776ffc82","_IDENTIFIER":"VariableReference"}},{"name":"prev_pause_input_1","valueType":"boolean","programNodeMetadata":{"programNodeId":"1f5d3af7-4ec1-d406-6660-ed0abf87929a","isSuppressed":false},"reference":{"id":"17b4b16e-b27e-1485-430c-69654d61c5e2","_IDENTIFIER":"VariableReference"}},{"name":"power_on_result","valueType":"integer","programNodeMetadata":{"programNodeId":"21500d58-1ec5-9afa-4edb-0d8aeb5544e3","isSuppressed":false},"reference":{"id":"4e6a0869-d93f-3c39-bf31-6a6a2e99f456","_IDENTIFIER":"VariableReference"}},{"name":"break_release_result","valueType":"integer","programNodeMetadata":{"programNodeId":"cb77735a-b0ac-a7d6-8cd0-eab1df7dce2f","isSuppressed":false},"reference":{"id":"55501e2c-8fa4-1591-7894-4c274df0d000","_IDENTIFIER":"VariableReference"}},{"name":"program_play_result","valueType":"integer","programNodeMetadata":{"programNodeId":"a0f508a9-bff5-17e8-42b7-f0f3ca167363","isSuppressed":false},"reference":{"id":"8f329464-5b47-7f22-fa4a-a6b3e4a7412e","_IDENTIFIER":"VariableReference"}},{"name":"program_stop_result","valueType":"integer","programNodeMetadata":{"programNodeId":"5d9aef84-e6cc-e11e-33b4-f1f35b14c2a3","isSuppressed":false},"reference":{"id":"7f8323b2-8cdf-48a7-059d-11d41559d97b","_IDENTIFIER":"VariableReference"}},{"name":"prev_trigger_input_1","valueType":"boolean","programNodeMetadata":{"programNodeId":"69ea4e1b-a6d7-5c4c-26a3-737f7b6ccc4d","isSuppressed":false},"reference":{"id":"2a697e93-1946-55b0-5c2c-b0f897af96d4","_IDENTIFIER":"VariableReference"}},{"name":"arc_enabled","valueType":"boolean","programNodeMetadata":{"programNodeId":"2ab69e3a-3364-bfd5-08f2-27d8ee921cc9","isSuppressed":false},"reference":{"id":"de3cd022-a771-db56-9873-1a807460abf5","_IDENTIFIER":"VariableReference"}},{"name":"n","valueType":"integer","programNodeMetadata":{"programNodeId":"96ab1122-0ee9-d155-6b86-01b0140a41f7","isSuppressed":false},"reference":{"id":"2815654f-0b59-dc87-34d8-41c71ad67445","_IDENTIFIER":"VariableReference"}},{"name":"gp_float_0_10","valueType":"array","programNodeMetadata":{"programNodeId":"8c83d6e3-ead6-a76d-3cd6-6b693040dee2","isSuppressed":false},"reference":{"id":"fa6550ee-eee9-497d-e769-0a2a4d641e5c","_IDENTIFIER":"VariableReference"}},{"name":"gp_int_0_10","valueType":"array","programNodeMetadata":{"programNodeId":"3d7b298c-5521-4645-a419-c505b713f275","isSuppressed":false},"reference":{"id":"e6a281ed-df52-d43d-29e6-b42c85ebc53b","_IDENTIFIER":"VariableReference"}},{"name":"item_counter","valueType":"integer","reference":{"id":"c3a49a83-3bb9-b10e-054d-ad17b7c54c0a","_IDENTIFIER":"VariableReference"}},{"name":"Loop","valueType":"integer","programNodeMetadata":{"programNodeId":"1b5c23d3-fb8f-ee49-61a9-9933191f7dab","isSuppressed":false},"reference":{"id":"fa673fc3-b37d-68c2-4425-3a157012522b","_IDENTIFIER":"VariableReference"}},{"name":"last_sensor_state","valueType":"boolean","programNodeMetadata":{"programNodeId":"83bc959b-5b7f-7bab-729e-8e0aba6b1154","isSuppressed":false},"reference":{"id":"20174ed1-e311-e40f-6ba1-03e932b25148","_IDENTIFIER":"VariableReference"}},{"name":"lights","valueType":"array","programNodeMetadata":{"programNodeId":"3101b26c-fdc7-888e-aa34-f5773d99a08c","isSuppressed":false},"reference":{"id":"81e077ca-33a4-6ba6-4180-2429fc69c239","_IDENTIFIER":"VariableReference"}},{"name":"light","valueType":"array","programNodeMetadata":{"programNodeId":"98671d76-e74d-70da-c25f-fe9e7e94ba8e","isSuppressed":false},"reference":{"id":"441febb0-40f9-5a25-6c3d-066958f94a8f","_IDENTIFIER":"VariableReference"}},{"name":"t","valueType":"integer","programNodeMetadata":{"programNodeId":"d7dafcfa-8d05-2b98-c093-588c55cc9268","isSuppressed":false},"reference":{"id":"9d47aebd-13b7-7064-dacf-93a0c556c781","_IDENTIFIER":"VariableReference"}},{"name":"safety_status","valueType":"integer","programNodeMetadata":{"programNodeId":"a94a5123-da0e-5158-4caa-ef74f5a8bfe4","isSuppressed":false},"reference":{"id":"c7206784-9ac6-e7c1-f49c-b71eec5869fb","_IDENTIFIER":"VariableReference"}},{"name":"program_status","valueType":"integer","programNodeMetadata":{"programNodeId":"3cbccb98-9300-76fa-1ced-b06ee7b0602f","isSuppressed":false},"reference":{"id":"2ce28a03-6fd0-a810-f1c7-69020112d061","_IDENTIFIER":"VariableReference"}},{"name":"robot_mode","valueType":"integer","programNodeMetadata":{"programNodeId":"a309ac46-c9ad-65dc-70d2-733583976052","isSuppressed":false},"reference":{"id":"4e3afb0f-8029-9660-c50d-bcbe0fc0cb31","_IDENTIFIER":"VariableReference"}},{"name":"status_text","valueType":"string","programNodeMetadata":{"programNodeId":"0d66d687-fa5d-1d85-9f84-f30e1808526b","isSuppressed":false},"reference":{"id":"edf72e83-a4cd-830a-8fdd-998ad6444c0c","_IDENTIFIER":"VariableReference"}},{"name":"blink_timestamp_s","valueType":"array","programNodeMetadata":{"programNodeId":"69aecf70-8d04-f46e-3573-8a87bded46b4","isSuppressed":false},"reference":{"id":"4411d232-83ef-393c-dc43-d9bdccd1aa4f","_IDENTIFIER":"VariableReference"}},{"name":"blink_duration_s","valueType":"array","programNodeMetadata":{"programNodeId":"327f178e-ee44-aa50-205d-048c208aeb1a","isSuppressed":false},"reference":{"id":"10a5c2c2-d635-1521-f7f3-c6d5bfeb9cb3","_IDENTIFIER":"VariableReference"}},{"name":"color","valueType":"array","programNodeMetadata":{"programNodeId":"3101b26c-fdc7-888e-aa34-f5773d99a08c","isSuppressed":false},"reference":{"id":"df0dee3c-64d2-8ece-00b8-0dfd889d6cdf","_IDENTIFIER":"VariableReference"}}],"functions":[{"name":"monitor_thread","programNodeMetadata":{"programNodeId":"a144ca54-4eaa-729e-6c59-db2a535b6e4c","isSuppressed":false,"isThread":true},"moduleMetadata":{},"reference":{"id":"8e9629e0-e9ce-1ccb-3961-5dbb4e5381e0","_IDENTIFIER":"FunctionReference"}},{"name":"monitor_gp_reg","programNodeMetadata":{"programNodeId":"096ab48a-2994-9285-c6a1-8f91c33aae20","isSuppressed":false,"isThread":true},"moduleMetadata":{},"reference":{"id":"28a5b85a-06ce-dd0e-c9cd-4b6e064fc358","_IDENTIFIER":"FunctionReference"}},{"name":"light_tower_thread","programNodeMetadata":{"programNodeId":"b873e83a-365f-32ba-322f-c79ee8e93d03","isSuppressed":false,"isThread":true},"moduleMetadata":{},"reference":{"id":"68c3a3ef-ca87-2e39-091a-18fe7bd4790d","_IDENTIFIER":"FunctionReference"}},{"name":"get_timestamp_s","programNodeMetadata":{"programNodeId":"4fff03fc-16a6-56a1-c1d4-6db2920455a7","isSuppressed":false,"isThread":false},"moduleMetadata":{},"reference":{"id":"a93b0218-9c47-fcfe-0c7f-8a7f9b90bb69","_IDENTIFIER":"FunctionReference"}},{"name":"reset_lights","programNodeMetadata":{"programNodeId":"a92213f0-35ae-48f4-424a-fe752110cc28","isSuppressed":false,"isThread":false},"moduleMetadata":{},"reference":{"id":"87aee5e7-62b6-cb54-748a-0aafc1a79be3","_IDENTIFIER":"FunctionReference"}},{"name":"robot_status_thread","programNodeMetadata":{"programNodeId":"d82a0c0d-9002-4b6a-0b36-16f26d192843","isSuppressed":false,"isThread":true},"moduleMetadata":{},"reference":{"id":"f3f6996b-25f6-b658-fbb6-012acfc3ef82","_IDENTIFIER":"FunctionReference"}}],"modules":[{"name":"application","reference":{"id":"application-module-id","_IDENTIFIER":"ModuleReference"}},{"name":"Module","programNodeMetadata":{"programNodeId":"ba245961-f8d4-0e7b-8c55-855903c84966","isSuppressed":false},"reference":{"id":"565930d1-03f8-e869-d4a6-acdff84f060a","_IDENTIFIER":"ModuleReference"}}]}}},"guid":"fc2ba7ab-7ba4-a041-19ec-271124f0e475","programType":"logic"},"programInformation":{"name":"Logic_Program","description":"","programState":"FINAL","functionsBlockShown":false,"createdDate":0,"lastSavedDate":0,"lastModifiedDate":0},"urscript":{"script":"$ 1 \"ur-logic-programs\"\n$ 2 \"ur-modules\"\n$ 3 \"ur-functions\"\n$ 4 \"ur-function\"\nthread monitor_thread():\n  while (True):\n    $ 5 \"ur-loop\"\n    while (control_api_handle.is_control_allowed() == False ):\n      $ 6 \"ur-script\"\n      textmsg(\"Robot is not in Remote Control mode\")\n      $ 7 \"ur-wait\"\n      sleep(3)\n    end\n    $ 8 \"ur-assignment\"\n    global program_state = control_api_handle.robot_program_state()\n    $ 9 \"ur-assignment\"\n    global robot_state = control_api_handle.robot_program_state()\n    $ 10 \"ur-wait\"\n    sleep(0.5)\nend\nend\n$ 11 \"ur-before-start\"\n$ 12 \"ur-assignment\"\nglobal control_api_handle = control_api_factory(\"simulated_hmi\")\n$ 13 \"ur-assignment\"\nglobal reqested_state = \"power on\"\n$ 14 \"ur-thread\"\nmonitor_thread_handler = run monitor_thread()\n$ 15 \"ur-logic-program\"\nwhile (True):\n  $ 16 \"ur-comment\"\n  $ 17 \"ur-if\"\n  if (reqested_state == \"power on\"):\n    $ 18 \"ur-control-action\"\n    handle = control_api_factory()\n    status = handle.arm_power_on()\n    $ 19 \"ur-control-action\"\n    handle = control_api_factory()\n    status = handle.arm_brake_release()\n    $ 20 \"ur-if\"\n    if (control_api_handle.robot_mode() != 7):\n      $ 21 \"ur-script\"\n      textmsg(\"ERROR: Robot Arm not in 'running' state. Retrying...\")\n      $ 22 \"ur-wait\"\n      sleep(5)\n    $ 23 \"ur-else\"\n    else:\n      $ 24 \"ur-assignment\"\n      reqested_state = \"play program\"\n      $ 25 \"ur-wait\"\n      sleep(3)\n    end\n  end\n  $ 26 \"ur-if\"\n  if (reqested_state == \"power off\"):\n    $ 27 \"ur-control-action\"\n    handle = control_api_factory()\n    status = handle.arm_power_off()\n    $ 28 \"ur-if\"\n    if (control_api_handle.robot_mode() != 3):\n      $ 29 \"ur-script\"\n      textmsg(\"ERROR: Robot Arm not in 'powered off' state. Retrying...\")\n      $ 30 \"ur-wait\"\n      sleep(5)\n    $ 31 \"ur-else\"\n    else:\n      $ 32 \"ur-assignment\"\n      reqested_state = \"power on\"\n      $ 33 \"ur-wait\"\n      sleep(3)\n    end\n  end\n  $ 34 \"ur-if\"\n  if (reqested_state == \"play program\"):\n    $ 35 \"ur-control-action\"\n    handle = control_api_factory()\n    status = handle.program_start()\n    $ 36 \"ur-if\"\n    if (control_api_handle.robot_program_state() != 2):\n      $ 37 \"ur-script\"\n      textmsg(\"ERROR: Program not in 'playing' state. Retrying...\")\n      $ 38 \"ur-wait\"\n      sleep(5)\n    $ 39 \"ur-else\"\n    else:\n      $ 40 \"ur-assignment\"\n      reqested_state = \"pause program\"\n      $ 41 \"ur-wait\"\n      sleep(5)\n    end\n  end\n  $ 42 \"ur-if\"\n  if (reqested_state == \"pause program\"):\n    $ 43 \"ur-control-action\"\n    handle = control_api_factory()\n    status = handle.program_pause()\n    $ 44 \"ur-if\"\n    if (control_api_handle.robot_program_state() != 4):\n      $ 45 \"ur-script\"\n      textmsg(\"ERROR: Program not in 'paused' state. Retrying...\")\n      $ 46 \"ur-wait\"\n      sleep(5)\n    $ 47 \"ur-else\"\n    else:\n      $ 48 \"ur-assignment\"\n      reqested_state = \"stop program\"\n      $ 49 \"ur-wait\"\n      sleep(3)\n    end\n  end\n  $ 50 \"ur-if\"\n  if (reqested_state == \"stop program\"):\n    $ 51 \"ur-control-action\"\n    handle = control_api_factory()\n    status = handle.program_stop()\n    $ 52 \"ur-if\"\n    if (control_api_handle.robot_program_state() != 1):\n      $ 53 \"ur-script\"\n      textmsg(\"ERROR: Program not in 'stopped' state. Retrying...\")\n      $ 54 \"ur-wait\"\n      sleep(5)\n    $ 55 \"ur-else\"\n    else:\n      $ 56 \"ur-assignment\"\n      reqested_state = \"power off\"\n      $ 57 \"ur-wait\"\n      sleep(3)\n    end\n  end\n  $ 58 \"ur-script\"\n  sync()\nend","nodeIDList":["00000000-0000-0000-0000-000000000000","fc2ba7ab-7ba4-a041-19ec-271124f0e475","5f8867ec-c815-bf15-719e-ad8333e11b6b","eb827e12-73da-82ea-f438-66952b0458bd","a144ca54-4eaa-729e-6c59-db2a535b6e4c","dd8428e7-d7d6-a7e1-ff35-731f4526b976","2ca2e4e8-9231-d0d5-4eba-f41317aa1f80","b4f405e8-582d-4df6-f737-e0d52db35948","f1fa10e9-1307-028c-f47c-10ebbf6a98ed","c75db643-9aff-df06-fb04-a6f7e76e25ac","63a98cd5-fdac-4f7f-e617-45f7917ddb29","9e3365ee-18ef-c23c-ada4-243648825ac3","dd7f9ad2-9573-5b6b-f590-249c9fc75b5c","483ef34a-d4ca-782c-53d5-0c50dc2c93d5","27aca350-d3a5-f8e3-2098-c1141b55c78d","402af48d-3383-f492-003e-d07d24ac4bf7","ac357463-37f7-eced-ae97-571c3a4e5b0b","3cb4b4b8-fc52-a48b-931a-6e57df3a730f","e16b1afa-aec7-0e46-8675-9b5b540e2bcd","df1103cf-d4cc-386d-10fc-72aeaa21c63e","8bcd9120-8d40-174d-4bd1-be20ee9bcbef","682a7cce-4ea2-cf25-e1cb-17715eacd67b","ffbaee0c-ea62-dbfe-0854-fc5dc138d844","cab7a8c0-a85f-d796-5a4d-62be9760c8aa","24106c93-58f5-37c5-e76d-c1a1ae9eaf1d","2ac3ce08-badb-b66e-b1ea-53ccde272832","c63bcb5e-28d5-0700-8595-f98b6e89fcfd","bbb6eeae-5e87-2d0a-542e-de011c1971b2","6cf53a31-9a2e-f39e-4bd5-4c0e4b408bcd","09f62cec-b0ca-600d-4458-f3ecee2efee0","8fe51642-4ac1-6e12-17c6-f84f77a24ab4","7e43abd5-c862-c857-0c63-a31f4f1a9b1f","c2ef64fb-d49e-ffcc-b5dc-b050352c21cc","20222416-c852-9a17-52a0-95352eae817b","c312fa96-3dcd-5507-a9f9-abbbb5fbf642","5fecbdd6-cff3-6b35-9743-1a5420bd6795","c25220de-1058-622c-22f9-da30828f7e9c","772315a4-0b89-1282-9306-817c7395d19e","196c4c7d-177b-1956-7c3c-5eed2aa88df5","de4800cb-40cc-8e41-5cb7-071e9f9d7382","982e57ba-6c23-0956-78f4-48cafefee286","a7fd2a03-e803-9399-7ab0-cbaa2a1819a7","e61389f1-f32e-2ecb-6b67-778aa1c2a5ec","917dfc4b-1f8b-1310-6ca6-156888e68897","484b94c6-b79c-6e70-86f8-11096356412b","d2754648-b347-b4db-3566-d30e18a714ef","3ca8120d-dc38-b839-aa3b-da2c76261d57","738b72ab-bcdd-2578-e0d7-1d1bd54b29cd","2791a774-8503-e5b1-e84c-cd830b3ec09e","22ad86f0-e2eb-00f1-b027-686242e3e660","225ac4e1-4f65-f2b2-fb23-43df23424052","bcec6ed0-7b7f-e81b-309a-06dd703d651b","c3e8e417-643e-fd59-929f-e816579e6509","3f3bf106-7214-6528-3d6a-659c2081d800","5485c1c0-6471-4802-1b6a-2f1ce40e62ab","c6f6a88d-0b60-c156-493b-30975453eec4","39b253d3-7e46-ac39-5021-6e7cce189262","b2cd5e0e-0139-1fcf-7731-48c898ac03fb","507842e5-43d3-09e7-9f80-d02d7c4e6a7e"]},"autoPlayOptions":{"type":"ALWAYS"}}},"sourcesNodes":{"robot":{"groupId":"robot","version":"1.0.0.","sources":[{"sourceID":"ur-wired-io","signals":[{"signalID":"DI 0","direction":"IN","valueType":"BOOLEAN"},{"signalID":"DI 1","direction":"IN","valueType":"BOOLEAN"},{"signalID":"DI 2","direction":"IN","valueType":"BOOLEAN"},{"signalID":"DI 3","direction":"IN","valueType":"BOOLEAN"},{"signalID":"DI 4","direction":"IN","valueType":"BOOLEAN"},{"signalID":"DI 5","direction":"IN","valueType":"BOOLEAN"},{"signalID":"DI 6","direction":"IN","valueType":"BOOLEAN"},{"signalID":"DI 7","direction":"IN","valueType":"BOOLEAN"},{"signalID":"DO 0","direction":"OUT","valueType":"BOOLEAN"},{"signalID":"DO 1","direction":"OUT","valueType":"BOOLEAN"},{"signalID":"DO 2","direction":"OUT","valueType":"BOOLEAN"},{"signalID":"DO 3","direction":"OUT","valueType":"BOOLEAN"},{"signalID":"DO 4","direction":"OUT","valueType":"BOOLEAN"},{"signalID":"DO 5","direction":"OUT","valueType":"BOOLEAN"},{"signalID":"DO 6","direction":"OUT","valueType":"BOOLEAN"},{"signalID":"DO 7","direction":"OUT","valueType":"BOOLEAN"},{"signalID":"CI 0","direction":"IN","valueType":"BOOLEAN"},{"signalID":"CI 1","direction":"IN","valueType":"BOOLEAN"},{"signalID":"CI 2","direction":"IN","valueType":"BOOLEAN"},{"signalID":"CI 3","direction":"IN","valueType":"BOOLEAN"},{"signalID":"CI 4","direction":"IN","valueType":"BOOLEAN"},{"signalID":"CI 5","direction":"IN","valueType":"BOOLEAN"},{"signalID":"CI 6","direction":"IN","valueType":"BOOLEAN"},{"signalID":"CI 7","direction":"IN","valueType":"BOOLEAN"},{"signalID":"CO 0","direction":"OUT","valueType":"BOOLEAN"},{"signalID":"CO 1","direction":"OUT","valueType":"BOOLEAN"},{"signalID":"CO 2","direction":"OUT","valueType":"BOOLEAN"},{"signalID":"CO 3","direction":"OUT","valueType":"BOOLEAN"},{"signalID":"CO 4","direction":"OUT","valueType":"BOOLEAN"},{"signalID":"CO 5","direction":"OUT","valueType":"BOOLEAN"},{"signalID":"CO 6","direction":"OUT","valueType":"BOOLEAN"},{"signalID":"CO 7","direction":"OUT","valueType":"BOOLEAN"},{"signalID":"AI 0","direction":"IN","valueType":"FLOAT"},{"signalID":"AI 1","direction":"IN","valueType":"FLOAT"},{"signalID":"AO 0","direction":"OUT","valueType":"FLOAT"},{"signalID":"AO 1","direction":"OUT","valueType":"FLOAT"}],"webSocketURL":"/sources/wired-io"},{"sourceID":"ur-tool-io","signals":[{"signalID":"DI 0","direction":"IN","valueType":"BOOLEAN"},{"signalID":"DI 1","direction":"IN","valueType":"BOOLEAN"},{"signalID":"DO 0","direction":"OUT","valueType":"BOOLEAN"},{"signalID":"DO 1","direction":"OUT","valueType":"BOOLEAN"},{"signalID":"AI 0","direction":"IN","valueType":"FLOAT"},{"signalID":"AI 1","direction":"IN","valueType":"FLOAT"}],"webSocketURL":"/sources/tool-io"}],"isDynamic":false},"ur-modbus":{"groupId":"ur-modbus","isDynamic":true,"version":"1.0.0","sources":[]},"ur-robot-io":{"type":"ur-robot-io","groupId":"ur-robot-io","isDynamic":false,"version":"1.0.3","sources":[{"sourceID":"ur-robot-wired-io","name":"Wired I/O","signals":[{"direction":"IN","signalID":"DI 0","valueType":"BOOLEAN"},{"direction":"IN","signalID":"DI 1","valueType":"BOOLEAN"},{"direction":"IN","signalID":"DI 2","valueType":"BOOLEAN"},{"direction":"IN","signalID":"DI 3","valueType":"BOOLEAN"},{"direction":"IN","signalID":"DI 4","valueType":"BOOLEAN"},{"direction":"IN","signalID":"DI 5","valueType":"BOOLEAN"},{"direction":"IN","signalID":"DI 6","valueType":"BOOLEAN"},{"direction":"IN","signalID":"DI 7","valueType":"BOOLEAN"},{"direction":"OUT","signalID":"DO 0","valueType":"BOOLEAN"},{"direction":"OUT","signalID":"DO 1","valueType":"BOOLEAN"},{"direction":"OUT","signalID":"DO 2","valueType":"BOOLEAN"},{"direction":"OUT","signalID":"DO 3","valueType":"BOOLEAN"},{"direction":"OUT","signalID":"DO 4","valueType":"BOOLEAN"},{"direction":"OUT","signalID":"DO 5","valueType":"BOOLEAN"},{"direction":"OUT","signalID":"DO 6","valueType":"BOOLEAN"},{"direction":"OUT","signalID":"DO 7","valueType":"BOOLEAN"},{"direction":"IN","signalID":"CI 0","valueType":"BOOLEAN"},{"direction":"IN","signalID":"CI 1","valueType":"BOOLEAN"},{"direction":"IN","signalID":"CI 2","valueType":"BOOLEAN"},{"direction":"IN","signalID":"CI 3","valueType":"BOOLEAN"},{"direction":"IN","signalID":"CI 4","valueType":"BOOLEAN"},{"direction":"IN","signalID":"CI 5","valueType":"BOOLEAN"},{"direction":"IN","signalID":"CI 6","valueType":"BOOLEAN"},{"direction":"IN","signalID":"CI 7","valueType":"BOOLEAN"},{"direction":"OUT","signalID":"CO 0","valueType":"BOOLEAN","name":"sensor_input (CO 0)"},{"direction":"OUT","signalID":"CO 1","valueType":"BOOLEAN"},{"direction":"OUT","signalID":"CO 2","valueType":"BOOLEAN"},{"direction":"OUT","signalID":"CO 3","valueType":"BOOLEAN"},{"direction":"OUT","signalID":"CO 4","valueType":"BOOLEAN"},{"direction":"OUT","signalID":"CO 5","valueType":"BOOLEAN"},{"direction":"OUT","signalID":"CO 6","valueType":"BOOLEAN"},{"direction":"OUT","signalID":"CO 7","valueType":"BOOLEAN"},{"direction":"IN","signalID":"AI 0","valueType":"FLOAT"},{"direction":"IN","signalID":"AI 1","valueType":"FLOAT"},{"direction":"OUT","signalID":"AO 0","valueType":"FLOAT"},{"direction":"OUT","signalID":"AO 1","valueType":"FLOAT"}]},{"sourceID":"ur-robot-tool-io","name":"Tool I/O","signals":[{"direction":"IN","signalID":"DI 0","valueType":"BOOLEAN"},{"direction":"IN","signalID":"DI 1","valueType":"BOOLEAN"},{"direction":"IN","signalID":"AI 0","valueType":"FLOAT"},{"direction":"IN","signalID":"AI 1","valueType":"FLOAT"},{"direction":"OUT","signalID":"DO 0","valueType":"BOOLEAN"},{"direction":"OUT","signalID":"DO 1","valueType":"BOOLEAN"}]}],"parameters":{"sourceConfig":{"labelMap":{"ur-robot-wired-io":{"CI 4":"","CO 0":"sensor_input"}},"analogDomainMap":{},"presets":{},"toolOutput":{"dualPinPower":false,"voltage":{"value":0,"unit":"V"},"powerOutput":{"DO 0":1,"DO 1":1}}},"migrateSourceConfigDone":true}},"universalrobots-ethernetip-frontend":{"type":"universalrobots-ethernetip-frontend","version":"1.0.0","programAction":"IGNORE","enabled":false,"groupId":"universalrobots-ethernetip-frontend","sources":[{"sourceID":"frontend-source","name":"EtherNet/IP","signals":[]}],"isDynamic":false},"universalrobots-profinet-frontend-profinet":{"version":"1.0.0","groupId":"universalrobots-profinet-frontend-profinet","sources":[{"sourceID":"ur-profinet-source","name":"Profinet","signals":[]}],"isDynamic":false,"enabled":false,"robotIoModule":"IGNORE","registerModule1":"IGNORE","registerModule2":"IGNORE"}}},"urscript":{"script":"set_safety_mode_transition_hardness(1)\nreset_world_model()\nset_input_actions_to_default()\nset_analog_outputdomain(0,0)\nset_analog_outputdomain(1,0)\nset_standard_analog_input_domain(0,0)\nset_standard_analog_input_domain(1,0)\nset_tool_output_mode(0)\nset_tool_voltage(0)\nset_tool_digital_output_mode(0,1)\nset_tool_digital_output_mode(1,1)\nset_tool_analog_input_domain(0,0)\nset_tool_analog_input_domain(1,0)\nset_gravity([0, 0, 9.82])\nlocal existingBaseParent = get_frame_parent(\"base\")\nlocal basePose = get_pose(\"base\", existingBaseParent)\nbasePose[3] = 0\nbasePose[4] = 0\nbasePose[5] = 0\nmove_frame(\"base\", basePose, existingBaseParent)\nglobal base = \"base\"\nglobal tcp = \"tcp\"\nglobal world = \"world\"\nglobal flange = \"flange\"\nset_target_payload(0, [0, 0, 0], [0, 0, 0, 0, 0, 0])\nset_tcp(p[0, 0, 0, 0, 0, 0], \"Tool_flange\")\n# Start of Forces\n###\n# Transforms the force and torque values along the axes of the given pose\n# @param pose pose Any valid pose, defaults to base, the x, y, and z values are ignored\n# @return array 6D force torque vector with [Fx, Fy, Fz, Mx, My, Mz] aligned to pose in N and Nm respectively\n###\ndef get_tcp_wrench_in_frame(pose = p[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]):\n    # we are only interested in the rotation of pose, set translations to zero\n    local target_pose = pose\n    target_pose[0] = 0\n    target_pose[1] = 0\n    target_pose[2] = 0\n    # the conversion needs to happen as poses, so we need to convert back and forth a bit\n    local force = get_tcp_force()\n    local force_vector_as_pose = p[force[0], force[1], force[2], 0, 0, 0]\n    local torque_vector_as_pose = p[force[3], force[4], force[5], 0, 0, 0]\n    local transformed_force_as_pose = pose_trans(pose_inv(target_pose), force_vector_as_pose)\n    local transformed_torque_as_pose = pose_trans(pose_inv(target_pose), torque_vector_as_pose)\n    return [transformed_force_as_pose[0], transformed_force_as_pose[1], transformed_force_as_pose[2], transformed_torque_as_pose[0], transformed_torque_as_pose[1], transformed_torque_as_pose[2]]\nend\n###\n# See documentation for @link:get_tcp_wrench_in_frame()\n# @return forces and torques measured in TCP frame\n###\ndef get_tcp_wrench():\n    return get_tcp_wrench_in_frame(get_target_tcp_pose())\nend\n###\n# Projects the measured TCP force along the axis given\n# @param axis array 3D vector\n###\ndef project_tcp_force(axis):\n    local wrench = get_tcp_wrench()\n    local force = [wrench[0], wrench[1], wrench[2]]\n    return dot(force, axis)\nend\n# End of Forces\n# Start of Math\n# Definitions of constants\nglobal PI = acos(-1)\n###\n# Calculates the cross product between to 3D vectors\n# @param v1 array 3D vector\n# @param v2 array 3D vector\n###\ndef cross(v1, v2):\n    if length(v1) != length(v2):\n        popup(str_cat(\"For computing the cross product, the two vectors must have the same length. Provided lengths: \", [length(v1), length(v2)]), error=True, blocking=True)\n        return -1\n    end\n    if length(v1) != 3:\n        popup(str_cat(\"For computing the cross product, the two vectors must have length 3. Provided lengths: \", [length(v1), length(v2)]), error=True, blocking=True)\n        return -1\n    end\n    local cross = [0.0, 0.0, 0.0]\n    local i = 0\n    while i < 3:\n        local j = (i + 1) % 3 # The next index in a cyclic order\n        local k = (i + 2) % 3 # The next next index in a cyclic order\n        cross[i] = v1[j] * v2[k] - v1[k] * v2[j]\n        i = i + 1\n    end\n    return cross\nend\n###\n# Calculates the dot product between to n-dimensional vectors\n# @param v1 array nD vector\n# @param v2 array nD vector\n###\ndef dot(v1, v2):\n    if length(v1) != length(v2):\n        popup(str_cat(\"For computing the dot product, the two vectors must have the same length. Provided lengths: \", [length(v1), length(v2)]), error=True, blocking=True)\n        return -1\n    end\n    local result = 0\n    local i = 0\n    while i < length(v1):\n        result = result + (v1[i] * v2[i])\n        i = i + 1\n    end\n    return result\nend\n###\n# Return the larger number of a and b\n# @param a number a\n# @param b number b\n###\ndef max(a, b):\n    if a > b:\n        return a\n    end\n    return b\nend\n###\n# Find the maximum value in a list. The list must be of non-zero length and contain numbers\n# @param list array list\n###\ndef list_max(list):\n    local length = get_list_length(list)\n    if  length == 0:\n        popup(\"Getting the maximum of an empty list is impossible in list_max().\", error = True, blocking = True)\n        halt\n    end\n    local i = 0\n    local max = list[0]\n    while i < length:\n        if list[i] > max:\n            max = list[i]\n        end\n        i = i + 1\n        sync_at_multiple(i, 30)\n    end\n    return max\nend\ndef sync_at_multiple(i, n):\n    local tmp = i / n\n    if tmp == floor(tmp):\n        sync()\n    end\nend\n# End of Math\n# Start of Move Helper\nur_move_until_force_distance = 0.1\nur_move_until_force_direction = [0, 0, 1]\nur_move_until_force_velocity = 0.1\nur_move_until_force_acceleration = 0.2\ndef ur_move_tcp_direction(distance, direction, velocity, acceleration, blend_radius):\n    local current_pose = get_target_tcp_pose()\n    local movement = normalize(direction) * distance\n    local target_pose = pose_trans(current_pose, p[movement[0], movement[1], movement[2], 0, 0, 0])\n    movel(target_pose, a = 0.2, v = velocity, r = blend_radius)\nend\nthread ur_move_until_force_thread():\n    ur_move_tcp_direction(ur_move_until_force_distance, ur_move_until_force_direction, ur_move_until_force_velocity, ur_move_until_force_acceleration, 0)\n    popup(\"No contact detected.\", title = \"No Contact\", warning = False, error = True, blocking = False)\n    halt\nend\n###\n# Moves the robot in the TCP direction specified until a contact point is reached *or*\n# the robot reaches the maximum distance allowed specified by the distance parameter.\n# @param distance number The maximum distance the robot is allowed to travel in the direction specified\n# @param direction array 3D vector determining the move direction of the TCP\n# @param velocity number Velocity of the robot\n# @param acceleration number Acceleration of the robot\n# @param stop_force number Maximum search radius\n###\ndef ur_move_until_force(distance = 0.1, direction = [0, 0, 1], velocity = 0.1, acceleration = 0.2, stop_force = 20):\n    ur_move_until_force_distance = distance\n    ur_move_until_force_direction = direction\n    ur_move_until_force_velocity = velocity\n    ur_move_until_force_acceleration = acceleration\n    \n    thrd = run ur_move_until_force_thread()\n    while - project_tcp_force(direction) < stop_force:\n        sync()\n    end\n    kill thrd\n    local actual_pose = get_actual_tcp_pose()\n    stopl(1.0)\n    return actual_pose\nend\ndef ur_get_joint_speeds_before_offset(previous_q, time):\n    local current_q = get_joint_positions()\n    local delta_q = current_q - previous_q\n    return delta_q / time\nend\ndef ur_path_move(end_q, v, rampdown=False):\n    # Calculate distance to target\n    local start_q = get_joint_positions()\n    local delta_q = end_q - start_q\n    local positive_delta_q = [norm(delta_q[0]), norm(delta_q[1]), norm(delta_q[2]), norm(delta_q[3]), norm(delta_q[4]), norm(delta_q[5])]\n    # Calculate time to move based on desired velocity\n    local t = list_max(positive_delta_q) / v\n    servoj(end_q , 0, 0, t, lookahead_time=0.1, gain=500)\n    if(rampdown):\n        while(norm(ur_get_joint_speeds_before_offset(start_q, t)) > 0.0001):\n            t = max(t, 0.001)\n            start_q = get_joint_positions()\n            servoj(end_q , 0, 0, t)\n        end\n    end\nend\n# End of Move Helper\nshared welder_state\nmyurRPC = rpc_factory(\"xmlrpc\",\"http://servicegateway/universal-robots/urconnect/urconnect-telemetry/xmlrpc/\")\nglobal heartbeat = False\n# Waypoint variable for Home smart skill\nglobal Home = struct(p=p[0.0007234911264933834, -0.2333977082004337, 1.0803476302965433, -0.0030465488234298825, 2.219299153348662, -2.220820782887323], frame=\"base\", q=[0, -1.5707963249999999, 0, -1.5707963249999999, 0, 0])\n# Start of Align to Plane\n###\n# Align to plane will touch up a plane by moving the robot into contact with the table or part in several locations to determine its orientation. Afterwards the robot will orient its tool to the plane.\n# @param radius number Radius [m] of the circle within the plane will be touched up\n# @param push_force number How hard to robot pushed against the plane\n# @param n_plane_points number Number of points that the robot uses to compute the plane\n# @param max_distance number Maximum distance that the robot searches\n# @param velocity_slow number Velocity when pressing downwards\n# @param velocity_search number Velocity used when approaching the touch up point\n# @param velocity_move number Velocity used in freespace\n# @param acceleration number Acceleration of the robot\n# @param direction array 3D vector determining the direction of the TCP for touching up the plane\n###\ndef ur_align_to_plane(radius = 0.05, push_force = 20, n_plane_points = 3, max_distance = 0.25, velocity_slow = 0.001, velocity_search = 0.035, velocity_move = 0.10, acceleration = 0.1, direction = [0, 0, 1]):\n    local angle = 2 * PI / n_plane_points\n    local start_pos = get_target_tcp_pose()\n    local retract_distance = -0.015\n    ur_move_tcp_direction(retract_distance, direction, velocity_move, acceleration, 0)\n    sleep(0.25)\n    zero_ftsensor()\n    local cnt = 0\n    local t_base_target = get_target_tcp_pose()\n    local mean_point = [0.0, 0.0, 0.0]\n    local A = [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]]\n    local b = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]\n    while cnt < n_plane_points:\n        local new_pos = pose_trans(t_base_target, p[cos(angle * cnt) * radius, sin(angle * cnt) * radius, 0.0, 0.0, 0.0, 0.0])\n        local blend_radius = norm(point_dist(get_actual_tcp_pose(), new_pos))/5\n        movel(new_pos, a = acceleration, v = velocity_move, r = blend_radius)\n        ur_move_until_force(max_distance + norm(retract_distance), direction, velocity_search, acceleration, push_force)\n        local movement = normalize(direction * -1) * 0.0005\n        local target_pose = pose_trans(get_actual_tcp_pose(), p[movement[0], movement[1], movement[2], 0, 0, 0])\n        movel(target_pose)\n        sleep(0.2)\n        ur_move_until_force(max_distance + norm(retract_distance), direction, velocity_slow, acceleration, push_force)\n        sleep(0.2)\n        while (not is_steady()):\n            sync()\n        end\n        local poked_point = get_target_tcp_pose()\n        poked_point = pose_trans(inv(t_base_target), poked_point)\n        A[cnt, 0] = poked_point[0]\n        A[cnt, 1] = poked_point[1]\n        A[cnt, 2] = 1.0\n        b[cnt] = poked_point[2]\n        mean_point = mean_point + [poked_point[0], poked_point[1], poked_point[2]]\n        movel(new_pos, a = 0.2, v = velocity_move, r = blend_radius)\n        cnt = cnt + 1\n    end\n    mean_point = mean_point / n_plane_points\n    cnt = 0\n    while cnt < n_plane_points:\n        local cntj = 0\n        while cntj < 2:\n            A[cnt, cntj] = A[cnt, cntj] - mean_point[cntj]\n            cntj = cntj + 1\n        end\n        b[cnt] = b[cnt] - mean_point[2]\n        cnt = cnt + 1\n    end\n    local x1 = inv(transpose(A) * A) * transpose(A) * b\n    local x = normalize([x1[0], x1[1], -1])\n    local d = dot(mean_point, x)\n    local dval = dot(direction, x)\n    if dval < 0:\n        x = -x\n        dval = -dval\n    end\n    local eaa = [0.0, 0.0, 0.0]\n    local EPSILON = 1e-10\n    if norm(dval - 1) < EPSILON:\n        # if the projection is close to 1 then the angle between the vectors are almost 0 and we cannot\n        # reliably determine the perpendicular axis.\n        # A good approximation is therefore just to set the EAA equal to 0.\n        eaa = [0.0, 0.0, 0.0]\n    else:\n        local axis = cross(direction, x)\n        local eaa = normalize(axis) * acos(dval)\n    end\n    local t_base_target_aligned = pose_trans(t_base_target, p[0, 0, 0, eaa[0], eaa[1], eaa[2]])\n    movel(t_base_target_aligned, a = 0.2, v = velocity_move)\nend\n# End of Align to Plane\n# Start of Align Z to Nearest Axis\n###\n# Aligns the TCP Z axis to the nearest axis of the given frame\n# @param frame_id string frame_id to lookup frame\n###\ndef ur_align_z_to_nearest_axis(frame_id = \"world\"):\n    ###\n    # Given a reference frame as input this function returns a struct with the nearest\n    # pose which aligns the z-axis of the robot TCP with the z-axis of the given reference frame.\n    # The pose is in the reference of the given frame.\n    # @param frame bool frame\n    # @returns struct pose, distance, referencePose\n    ###\n    def get_aligned_z_pose(frame):\n        local actualPose = get_actual_tcp_pose()\n        local actualPoseInFrame = pose_trans(pose_inv(frame), actualPose)\n        # Create rotation vector and convert that to RPY representation\n        local actualRotInFrame = [actualPoseInFrame[3], actualPoseInFrame[4], actualPoseInFrame[5]]\n        local actRPY = rotvec2rpy(actualRotInFrame)\n        # Set RX and RY to 0 and convert back to rotation vector\n        local alignedRot = rpy2rotvec([0, 0, actRPY[2]])\n        local alignedRotFlipped = rpy2rotvec([PI, 0, actRPY[2]])\n        local zUpPose = actualPoseInFrame\n        zUpPose[3] = alignedRot[0]\n        zUpPose[4] = alignedRot[1]\n        zUpPose[5] = alignedRot[2]\n        zUpStruct = struct(pose = zUpPose, distance=pose_dist(actualPoseInFrame, zUpPose), referencePose=frame)\n        local zDownPose = actualPoseInFrame\n        zDownPose[3] = alignedRotFlipped[0]\n        zDownPose[4] = alignedRotFlipped[1]\n        zDownPose[5] = alignedRotFlipped[2]\n        local zDownStruct = struct(pose = zDownPose, distance=pose_dist(actualPoseInFrame, zDownPose), referencePose=frame)\n        # Return the solution which is closer to the current robot pose\n        if (zDownStruct.distance > zUpStruct.distance):\n            return zUpStruct\n        else:\n            return zDownStruct\n        end\n    end\n    local frame = get_pose(frame_id)\n    # Rotate the given frame so that Z can be align to X-Y-Z respectively \n    local rotZtoX = rpy2rotvec([0,0.5*PI,0])\n    local rotZtoY = rpy2rotvec([0.5*PI,0,0])\n    local rotZtoZ = rpy2rotvec([0,0,0])\n    # Get aligned poses for each of the rotated frames\n    local structAlignedToX = get_aligned_z_pose(pose_trans(frame, p[0,0,0,rotZtoX[0],rotZtoX[1],rotZtoX[2]]))\n    structAlignedToY = get_aligned_z_pose(pose_trans(frame, p[0,0,0,rotZtoY[0],rotZtoY[1],rotZtoY[2]]))\n    structAlignedToZ = get_aligned_z_pose(pose_trans(frame, p[0,0,0,rotZtoZ[0],rotZtoZ[1],rotZtoZ[2]]))\n    # Find the nearest alignement\n    local structAligned = structAlignedToZ\n    if(structAligned.distance > structAlignedToX.distance):\n        structAligned = structAlignedToX    \n    end\n    if(structAligned.distance > structAlignedToY.distance):\n        structAligned = structAlignedToY    \n    end\n    # Move the robot to the aligned pose\n    movel(pose_trans(get_actual_tcp_pose(), p[0,0,0.00001,0,0,0]), v = 0.1)\n    movel(pose_trans(structAligned.referencePose, structAligned.pose ), v = 0.1)\nend\n# End of Align Z to Nearest Axis\n# Start of Center to Object\n###\n# Centers to an object by touching the externals of it. It works well for fixtured or heavy parts.\n# @param push_force number Force the robot uses to determine if a contact has been achieved\n# @param velocity_move number Velocity in freespace\n# @param velocity_search number First move is used then search\n# @param acc_move number Acceleration in freespace\n# @param max_radius_search number Maximum search radius\n# @param num_fingers number Number of fingers that the gripper has\n###\ndef ur_center_to_object(push_force = 10, velocity_move = 0.10, velocity_search = 0.01, acc_move = 0.2, max_radius_search = 0.05, num_fingers = 3):\n    def compute_circle_center(p_list):\n        # Compute the circle center by circular regression\n        # Source: https://math.stackexchange.com/questions/2898295/how-to-quickly-fit-a-circle-by-given-random-arc-points\n        local itr = 0\n        local x = 0\n        local y = 1\n    \n        local m1 = [[0,0,0],[0,0,0],[0,0,0]]\n        local m2 = [[0,0],[0,0],[0,0]]\n        local m3 = [[0],[0],[0]]\n    \n        while(itr < get_list_length(p_list)):\n            local p = p_list[itr]\n    \n            if(p_list[itr] == p[0,0,0,0,0,0]):\n                break\n            end\n    \n            m1[0,0] = m1[0,0] + (p[x]*p[x])\n            m1[0,1] = m1[0,1] + (p[x]*p[y])\n            m1[0,2] = m1[0,2] + (p[x])\n    \n            m1[1,0] = m1[1,0] + (p[x]*p[y])\n            m1[1,1] = m1[1,1] + (p[y]*p[y])\n            m1[1,2] = m1[1,2] + (p[y])\n    \n            m1[2,0] = m1[2,0] + (p[x])\n            m1[2,1] = m1[2,1] + (p[y])\n    \n            m2[0,0] = m2[0,0] + (pow(p[x], 3))\n            m2[0,1] = m2[0,1] + (p[x] * pow(p[y], 2))\n    \n            m2[1,0] = m2[1,0] + (pow(p[y], 3))\n            m2[1,1] = m2[1,1] + (pow(p[x], 2) * p[y])\n    \n            m2[2,0] = m2[2,0] + (pow(p[x], 2))\n            m2[2,1] = m2[2,1] + (pow(p[y], 2))\n    \n            itr = itr +1\n        end\n    \n        if(itr < 2):\n            return p[0,0,0,0,0,0]\n        elif(itr > get_list_length(p_list)):\n            return p[0,0,0,0,0,0]\n        end\n    \n        m1[0,0] = 2 * m1[0,0]\n        m1[0,1] = 2 * m1[0,1]\n        m1[1,0] = 2 * m1[1,0]\n        m1[1,1] = 2 * m1[1,1]\n        m1[2,0] = 2 * m1[2,0]\n        m1[2,1] = 2 * m1[2,1]\n        m1[2,2] = itr\n        m3[0,0] = m2[0,0] + m2[0,1]\n        m3[1,0] = m2[1,0] + m2[1,1]\n        m3[2,0] = m2[2,0] + m2[2,1]\n    \n        local center = inv(m1) * m3\n    \n        return p[center[0,0], center[1,0],0,0,0,0]\n    end\n    \n    def sanity_checked_move(p_org, p_new, max_diff, acc, vel):\n        if (pose_dist(p_org, p_new) > max_diff):\n            movel(p_org, a = acc, v = vel)\n            popup(\"New pose is too far away from original. Returning to original\", title = \"Failed\", warning = False, error = True, blocking = True)\n        else:\n            movel(p_new, a = acc, v = vel)\n        end\n    end\n    # Start by zeroing the FT sensor\n    sleep(0.25)\n    zero_ftsensor()\n    local p_start = get_actual_tcp_pose()\n    local p0 = p[0,0,0,0,0,0]\n    local DIR_X = [1, 0, 0]\n    if (num_fingers == 2):\n        local dir_list = [DIR_X, -DIR_X, DIR_X, -DIR_X]\n        local start_offset = [p[0,0,0,0,0,0], p[0,0,0,0,0,0], p[0,0,0,0,0,0.35], p[0,0,0,0,0,0.35]]\n        local p_list = [p0, p0, p0, p0]\n    elif (num_fingers == 3):\n        local DIR_P1 = DIR_X\n        local DIR_P2 = [-1 / 2, sqrt(3.0) / 2.0, 0]\n        local DIR_P3 = [-1 / 2, -sqrt(3.0) / 2.0, 0]\n        local dir_list = [DIR_P1, DIR_P2, DIR_P3, DIR_P1, DIR_P2, DIR_P3]\n        local start_offset = [p[0,0,0,0,0,0], p[0,0,0,0,0,0], p[0,0,0,0,0,0], p[0,0,0,0,0,0.35], p[0,0,0,0,0,0.35], p[0,0,0,0,0,0.35]]\n        local p_list = [p0, p0, p0, p0, p0, p0]\n    else:\n        popup(\"Number of fingers not supported\")\n        halt\n    end\n    # Loop through directions\n    local it = 0\n    local dir_list_size = size(dir_list)\n    local dir_list_length = dir_list_size[0]\n    while(it < dir_list_length):\n        # Move to starting position if more than 3 positions is stored then calculate a new starting position\n        if(it < 3):\n            movel(pose_trans(p_start, start_offset[it]), a = acc_move, v = velocity_move)\n        else:\n            local p_start_temp = pose_trans(pose_trans(p_start, compute_circle_center(p_list)), start_offset[it])\n            local p_start_w_offset = pose_trans(p_start, start_offset[it])\n            sanity_checked_move(p_start_w_offset, p_start_temp, max_radius_search, acc_move, velocity_move)\n        end\n        local p_start_temp = get_actual_tcp_pose()\n        # Move into contact and store contact point\n        sleep(0.1)\n        local contact_point = ur_move_until_force(distance = max_radius_search, direction = [dir_list[it, 0], dir_list[it, 1], dir_list[it, 2]], velocity = velocity_search, acceleration = acc_move, stop_force = push_force)\n        \n        local dir = [dir_list[it, 0], dir_list[it, 1], dir_list[it, 2]]\n        dir = normalize(dir) * 0.05\n        contact_point = pose_trans(contact_point, p[dir[0], dir[1], dir[2], 0, 0, 0])\n        p_list[it] = pose_trans(pose_inv(p_start), contact_point)\n        # Move out of contact\n        movel(p_start_temp, a = acc_move, v = velocity_move)\n        it = it + 1\n    end\n    # Find circle center based on n stored  points\n    local center_offset_xy = compute_circle_center(p_list)\n    local p_center = pose_trans(p_start, center_offset_xy)\n    \n    # Move the robot to the center if it can\n    sanity_checked_move(p_start, p_center, max_radius_search, acc_move, velocity_move)\nend\n# End of Center to Object\n# Start of Move Into Contact\n###\n# Moves the robot into contact in the TCP direction set\n# @param force number Force that determines when a contact has been achieved\n# @param velocity number Velocity of the robot\n# @param acceleration number Acceleration of the robot\n# @param max_distance number Maximum distance that the robot searches\n# @param velocity_search number velocity_search\n# @param retract number Retract distance after a contact has been found\n# @param move_tcp_dir array TCP direction (3D vector)\n# @param zero_ft_on_start bool Determines if the force-torque sensor should be zeroed on start\n###\ndef ur_move_into_contact(force = 10, velocity = 0.05, acceleration = 0.1, max_distance = 0.25, retract = 0.0, move_tcp_dir = [0, 0, 1], zero_ft_on_start = True):\n    # Zero the force torque sensor\n    if (zero_ft_on_start):\n        sleep(0.25)\n        zero_ftsensor()\n    end\n    # Move the robot\n    ur_move_until_force(max_distance, move_tcp_dir, velocity, acceleration, force)\n    # If a retract distance is set, move the robot back to that position\n    if (retract != 0):\n        # Compute position offset from TCP direction and retract distance\n        local position = normalize(move_tcp_dir) * retract\n        movel(pose_trans(get_actual_tcp_pose(), p[position[0], position[1], position[2], 0, 0, 0]))\n    end\nend\n# End of Move Into Contact\n# Start of Retract\n###\n# Retract in the TCP direction set\n# @param distance number Retraction distance\n# @param direction array TCP direction to move in (3D vector)\n# @param acceleration number Acceleration used by the robot\n# @param velocity number Velocity used by the robot\n###\ndef ur_retract(distance = -0.1, direction = [0, 0, 1], acceleration = 0.4, velocity = 0.1):\n    local movement = normalize(direction) * distance\n    movel(pose_trans(get_actual_tcp_pose(), p[movement[0], movement[1], movement[2], 0, 0, 0]), a = acceleration, v = velocity)\nend\n# End of Retract","nodeIDList":[]}},"program":{"id":"4","programContent":{"guid":"9f9879f5-92b4-daee-6177-51e013ab65d1","contributedNode":{"type":"ur-program","version":"0.0.3","allowsChildren":true,"lockChildren":true,"parameters":{"name":"start_program_10_14","symbolHistory":{"variables":[{"name":"base","valueType":"frame","reference":{"id":"583d3a7d-b103-aff9-502d-73d459fc2a0e","_IDENTIFIER":"VariableReference"}},{"name":"tcp","valueType":"frame","reference":{"id":"1debc310-2146-1b93-ebf3-6e257bfdd2da","_IDENTIFIER":"VariableReference"}},{"name":"world","valueType":"frame","reference":{"id":"ddca5ccc-8f81-8461-2a8f-935321f2bf01","_IDENTIFIER":"VariableReference"}},{"name":"flange","valueType":"frame","reference":{"id":"a284652e-3e38-9434-2e20-eae9dd10bd79","_IDENTIFIER":"VariableReference"}},{"name":"grid","valueType":"grid","reference":{"id":"af733917-cce3-4b11-fb24-7e6677ff572e","_IDENTIFIER":"VariableReference"}},{"name":"grid_iterator","valueType":"waypoint","reference":{"id":"68ebd02e-0a2d-ad92-c6de-c677a19dddf0","_IDENTIFIER":"VariableReference"}},{"name":"Joint_fast","valueType":"profile","reference":{"id":"66cc9640-9626-20a9-b6be-e75938fdf603","_IDENTIFIER":"VariableReference"}},{"name":"Joint_slow","valueType":"profile","reference":{"id":"0e781f7a-4120-999b-9eb9-c25c1dc8d0c8","_IDENTIFIER":"VariableReference"}},{"name":"Linear_fast","valueType":"profile","reference":{"id":"2faf9dcd-a026-b177-e610-2044e80f9d1a","_IDENTIFIER":"VariableReference"}},{"name":"Linear_slow","valueType":"profile","reference":{"id":"f9fc918f-21e5-f43d-8029-5ab979f2ce28","_IDENTIFIER":"VariableReference"}},{"name":"Process","valueType":"profile","reference":{"id":"854474bd-bfb7-9f87-49da-48a03f2d574c","_IDENTIFIER":"VariableReference"}},{"name":"welder_state","valueType":"string","reference":{"id":"979fb546-d623-a454-aebb-12b0bd06a85e","_IDENTIFIER":"VariableReference"}},{"name":"heartbeat","valueType":"boolean","reference":{"id":"dbf385dd-092e-8aeb-de8b-7c37139e255e","_IDENTIFIER":"VariableReference"}},{"name":"Home","valueType":"waypoint","reference":{"id":"7622345a-0e52-2cf8-0ff6-3a6568b1e03a","_IDENTIFIER":"VariableReference"}},{"name":"var","valueType":"integer","programNodeMetadata":{"programNodeId":"06fbdbce-2831-0e2f-670e-be9ec877d18b","isSuppressed":false},"reference":{"id":"0b5d01f7-a4aa-caeb-f901-8fa516424466","_IDENTIFIER":"VariableReference"}},{"name":"status","valueType":"integer","reference":{"id":"a2e6e002-4faa-3474-da48-90e87e912051","_IDENTIFIER":"VariableReference"}}],"functions":[{"name":"Function","programNodeMetadata":{"programNodeId":"a6f1a36d-d80f-5a64-bd35-03e3f29b89cc","isSuppressed":false,"isThread":false},"moduleMetadata":{},"reference":{"id":"4561ac00-b383-96bd-d0f1-9fa82ad49a94","_IDENTIFIER":"FunctionReference"}}],"modules":[{"name":"application","reference":{"id":"application-module-id","_IDENTIFIER":"ModuleReference"}}]}}},"children":[{"children":[],"contributedNode":{"type":"ur-modules","version":"0.0.1","allowsChildren":true,"lockChildren":false},"guid":"a487325d-d62c-a3a9-0cb9-de7203537ff9","parentId":"9f9879f5-92b4-daee-6177-51e013ab65d1"},{"children":[],"contributedNode":{"type":"ur-functions","version":"0.0.1","allowsChildren":true,"lockChildren":false},"guid":"6e93920c-270e-5966-205f-231ab102667e","parentId":"9f9879f5-92b4-daee-6177-51e013ab65d1"},{"children":[],"contributedNode":{"type":"ur-before-start","version":"0.0.1","allowsChildren":true},"guid":"f76ff1f5-f742-cfd1-ef0a-5bf712251e1e","parentId":"9f9879f5-92b4-daee-6177-51e013ab65d1"},{"children":[],"contributedNode":{"type":"ur-configuration","version":"0.0.1","allowsChildren":true,"parameters":{}},"guid":"0458cfa1-8b9c-3e2f-a849-37a5c6c16d87","parentId":"9f9879f5-92b4-daee-6177-51e013ab65d1"},{"children":[],"contributedNode":{"type":"ur-status","version":"0.0.1","allowsChildren":true,"parameters":{}},"guid":"d44a78f5-2f20-0c07-4330-253092997d80","parentId":"9f9879f5-92b4-daee-6177-51e013ab65d1"},{"children":[{"children":[],"contributedNode":{"type":"ur-assignment","version":"0.0.3","allowsChildren":false,"parameters":{"variable":{"entity":{"id":"dbf385dd-092e-8aeb-de8b-7c37139e255e","_IDENTIFIER":"VariableReference"},"selectedType":"EXPRESSION","value":"not heartbeat "},"valueType":"boolean","waypointType":"teach"}},"guid":"06fbdbce-2831-0e2f-670e-be9ec877d18b","parentId":"aee284ad-4dde-7ae3-6560-529fe3977de2","programLabel":[{"type":"primary","value":"heartbeat:"},{"type":"secondary","value":"not heartbeat "}]},{"children":[],"contributedNode":{"type":"ur-wait","version":"0.0.4","parameters":{"type":"time","time":{"entity":{"value":0.5,"unit":"s"},"selectedType":"VALUE","value":0.5}}},"guid":"18688a44-7cd8-b7c1-ebb7-f2cd1a1760e6","parentId":"aee284ad-4dde-7ae3-6560-529fe3977de2","programLabel":[{"type":"secondary","value":"0.5 s"}]}],"contributedNode":{"type":"ur-code","version":"0.0.1","allowsChildren":true,"lockChildren":false,"parameters":{"loopForever":true}},"guid":"aee284ad-4dde-7ae3-6560-529fe3977de2","parentId":"9f9879f5-92b4-daee-6177-51e013ab65d1","programLabel":[{"type":"secondary","translationKey":"program-node-label.code.looping"},{"type":"secondary","translationKey":"program-node-label.code.enabled"},{"type":"secondary","translationKey":"program-node-label.code.current_position"}]}]},"programInformation":{"name":"start_program_10_14","description":"","createdDate":1783506839789,"lastSavedDate":1783513910266,"lastModifiedDate":null,"programState":"FINAL","functionsBlockShown":false},"urscript":{"script":"$ 1 \"ur-program\"\n$ 2 \"ur-modules\"\n$ 3 \"ur-functions\"\n$ 4 \"ur-before-start\"\n$ 5 \"ur-code\"\nwhile (True):\n  $ 6 \"ur-assignment\"\n  heartbeat = not heartbeat\n  $ 7 \"ur-wait\"\n  sleep(0.5)\nend","nodeIDList":["00000000-0000-0000-0000-000000000000","9f9879f5-92b4-daee-6177-51e013ab65d1","a487325d-d62c-a3a9-0cb9-de7203537ff9","6e93920c-270e-5966-205f-231ab102667e","f76ff1f5-f742-cfd1-ef0a-5bf712251e1e","aee284ad-4dde-7ae3-6560-529fe3977de2","06fbdbce-2831-0e2f-670e-be9ec877d18b","18688a44-7cd8-b7c1-ebb7-f2cd1a1760e6"]}}}