zesty

Forum Replies Created

Viewing 15 posts - 1 through 15 (of 339 total)
  • Author
    Posts
  • zesty
    zesty
    Moderator

    Ah, sorry. That scale option is only available in VR mode.

    zesty
    zesty
    Moderator

    I agree with you that it should work, and we should know how to make it work. I would recommend submitting a support ticket and report the issue. Please share the outcome if possible.

    in reply to: WorkTaskControl: Using Priority #15581
    zesty
    zesty
    Moderator

    @ockema and @kbqhs are you able to make it work now?

    @jouha With the second case of “HumanProcess:Works Process #4” does that happen in the beginning of simulation or after some time?

    • If the HumanProcess task from station 1 is received first, the Task Controller knows to wait or by the time it does number 2 in its logic, the task from station 4 would have already been received, thereby the resource is assigned the task at station 4?
    in reply to: Text Editor Tool #15579
    zesty
    zesty
    Moderator
    zesty
    zesty
    Moderator

    Good question. I don’t remember but can’t the Scale option be used to hide the floor? Anyway, if you don’t get a response, please submit a ticket/feature request about this.

    zesty
    zesty
    Moderator

    The guide is for version 1.3, so this must be something new in 1.4. I would assume you are correct in that it uses recorded camera animation during a simulation, thereby allowing you to playback the camera movements. But best if someone who knows for sure answers and/or update the guide.

    in reply to: WorkTaskControl: Using Priority #15463
    zesty
    zesty
    Moderator

    It’s been a while since I looked at the logic in the Task Controller, so others would know best. And I am not sure if it was only meant for Feed and Need type tasks.

    What I remember is tasks have to queue and buffer for a bit before the prioritization goes into effect and this is dependent on when a station (WP) sends the task request to the controller.

    The Task Controller checks if the request is prioritized. If yes, the request is added to a list, for instance a priority feed list of requests. Of course, the first time the Task Controller gets a task request, those priority lists are empty, so the first task request is executed if possible.

    Is the expected outcome the Human worker does the task at Works Process #13 when all of the other three stations are queuing? Unfortunately, I cannot help atm, but try setting the resource allocation property of the Task Controller to Least Utilized or something to that effect. Not sure if that property overrides the priority list.

    zesty
    zesty
    Moderator

    I would recommend you submit a support ticket. After using the add-on, did you save the component, clear the 3D world, and then build a new layout with that component and a robot to test if it works? Are you using 4.1.2?

    in reply to: Count robot movement beats #15039
    zesty
    zesty
    Moderator

    I would recommend you use the Post Processor add-on found on the forum along with a virtual controller for calculating the cycle times, e.g. Kuka OfficeLite. For example, use the add-on to export the robot program to a testable format, and then use a controller to measure cycle times.

    If you cannot do that… you can use API to try and calculate the motion time.

    Option 1

    The Robot Executor behavior of the robot should have a StatementHandler property, which you can use to the control the execution of statements. A StatementHandler is a Python Process Handler behavior. It has a script, which would allow you to calculate the time it takes to complete the routine.

    Option 2

    The Robot Executor in Python is vcExecutor, and it has a method for calling a routine in the robot program. So a simple test of comparing the simulation times before and after the call and completion of the routine could give you an idea.

    Option 3

    The Robot Controller in Python is vcRobotController, and it has a method for creating a motion interpolator and others for testing motion targets, but this is something you probably should not do in this case.

    Option 4

    A curve ball. I don’t remember, but I think the Print statement in a robot program does print the simulation time in the Output panel. Therefore, you could try to do option 2 via the GUI/Program Editor panel.

    Notes about Options 1-4

    It might not be accurate, but can serve as a rough idea/estimate. Be aware that you would have to implement a way to monitor motion statements and not other types in the routine. But if the goal is just to record the duration of a routine, you could create a script and run the routine several times to get a sample size and average time.

     

     

     

    in reply to: Selecting a Custom Icon for a Component #14980
    zesty
    zesty
    Moderator

    Good question. I don’t know if you are allowed to overwrite/avoid the application automatically saving the icon/preview image of the component when it is saved to file.

    For those who know, please share.

    in reply to: random work process #14978
    zesty
    zesty
    Moderator

    @prawit Please review the Works Tasks Reference Guide.

    #— Process A —#

    Need:103AA
    TransportOut:103AA:True
    Need:104AA
    TransportOut:104AA:True
    Need:105AA
    TransportOut:105AA:True

    #— Process B —#

    Need:103AA?104AA?105AA
    TransportOut::True

    Processes A and B are NOT the same. In Process A, the Need for 103AA must be done first because 103AA is the request of that Need task . In Process B, the Need task is conditional, so either 103AA, 104AA or 105AA is needed to complete that task.

    #— Process C —#

    Need:103AA,104AA,105AA
    TransportOut::True

    Process C is NOT the same as A nor B. In Process C, there is a list of needed products, so that Need task is not completed until ALL three requested items are delivered by a resource.

    #— Process D —#

    Need:103AA?104AA?105AA
    TransportOut::True
    <103AA>
    #insert tasks here
    <>
    <104AA>
    #insert tasks here
    <>
    <105AA>
    #insert tasks here
    <>

    Process D is the same as B, except conditional tags <> are used with the corresponding ProdIDs listed in the Need task. This means when the Need task is executed, if 104AA, for example, is delivered, the process will execute the tasks inside the <104AA> conditional tags. Think of it as a subprocess.

    The solution provided by @jouha is optimal for pseudo-randomness and also helps avoid the risks of using B and D.

    However, try this => Save a new version of your layout, and then try Process B. Is the result good?

    in reply to: How do I display the logo in a custom component? #14977
    zesty
    zesty
    Moderator

    In the Help file, go to ” Tasks > Modeling > Materials ” and review the topics on adding decals and textures.

    Option A

    If the logo is a geometry file, you could import it, and then copy and paste it in the machine, and then reposition the geometry.

    Option B

    The Add Decal tool creates a Geometry feature that acts as a container and placeholder for a logo. I don’t remember, but I think the placeholder can be assigned the material and all should be well; otherwise, just import the logo geometry, and then add it to the placeholder Geometry feature in the machine.

    Option C

    Assign the custom material, and then use the Add Texture tool to scale and resize the logo. I don’t remember, but I think you need to set the texture first, and then assign the material.

    Note: I would recommend you try option B and then C. However, save a backup of the machine!

    zesty
    zesty
    Moderator

    Please post in the relevant section of the forum, for example Python API or Connectivity. Announcements is for announcements such as release notes, surveys, etc.

    << robot.findBehavioursByType(VC_ROBOTCONTROLLER)[0] >> means you are using Python API to find a list of behaviors in the component calling the method that are a type of Robot Controller, and then you are referring to the first item in the returned list. A robot controller is used for controlling the robot, for example you can make motion targets and test them, get the base and tool data of the robot as well as its I/O.

    zesty
    zesty
    Moderator

    Please attach your layout, so others can help.

    I don’t know if 5.3 version of Works library allows a mobile robot to perform a HumanProcess task. The lesson and its layouts used 5.2 version. Does the layout used in the lesson work on your machine?

    1. Where does the robot go? That is, to which station? Check that the robot is not doing/assigned the task of bringing Cylinders to Works Process #4. Also, check the Works Tasks reference guide for latest info on Sync and HumanProcess tasks.
    2. Do you mean the buffer area with the four gray pillars? Teaching a location should be similar to how it is done at a Works Process component, but others would know better.

    Only insight I have is that the vehicle in the layout is not being told to wait. Instead, the vehicle is waiting for a task/job to do. So if the vehicle starts moving, it is because it has to do something, which is why I would want to know where the vehicle goes. If the vehicle goes to an Idle Location component, use some random text in the vehicle’s IdleLocation filter to avoid it going to those things. Last time I checked, the mobile robot should not go to an Idle Location used by human resources, but that might have changed with 5.3 update.

     

    in reply to: Picking part from conveyor with random position #14789
    zesty
    zesty
    Moderator

    Because the input is not a trigger and listener is not the same thing as a connection.

    vcBooleanSignalMap has an event that can be used to listen for port value change. vcHelpers.Robot does have a method that allows you to wait for an input port connected to a signal to have a defined value, and it is the same as using a Wait Binary Input Statement in robot program.

    A signal has a Connections property. And your script needs to be listed as a connection of that signal in order for the signal to be a trigger in the script. An input port is not a signal. So the expression in your triggerCondition returns a false value.

    You have a few options.

    Option 1 – Script behavior is added as connection to the signal connected to the input port, and then that signal is used as trigger NOT the port.

    Option 2 – Refactor and use vcBooleanSignalMap event to listen for port value change.

    Option 3 – Refactor and use the vcHelpers.Robot object to call the wait() method.

    Option 4 – Refactor and create a loop that checks the value of the signal connected to the input port at a certain hertz, thereby delaying the script.

    Personally, I would do option 3. I think there is a tutorial in academy that shows how to do option 2, but I don’t remember the lesson offhand.

Viewing 15 posts - 1 through 15 (of 339 total)