An Idiot's guide to DispenseTool?

  • Morning, all. I'm in the middle of figuring out how to change a GM-spec SpotTool robot (v8.22) to do Dispense rather than welding, and set it up for a completely home-made dispenser (this is part of an R&D setup).


    Now, I have zero background in DispenseTool, but I've been reading the manual. I built a virtual duplicate of the existing robot in RoboGuide from a backup, and I've succeeded in activating the Dispense option. And the SS, SE, SS_PT, and SE_PT commands all show up when I try to create a test program. I've selected a Gear Meter option for the dispenser system type, as that seems closest to what I need.


    But I can't seem to get a GO speed output.


    To be clear: this "dispenser" i'm trying to set up is just going to need a GO for the TCP speed -- there's no Gun Open/Close signal, no error signals, no Volume or Style. So right now, my Dispenser I/O only has Flow Command assigned to anything, everything else is just *. I have a 2-point test program that starts with an SS, and ends with an SE, but when I run it, my GO never changes from zero, and I get a SEAL-268 Flow Rate Is zero (E1) message. I'm sure I must be overlooking something basic in the config.


    I'm also a little lost in how to actually write a dispensing program. It looks like, for the very simple programs I need to write, it should be as simple as SS and SE commands at the start and stop points, but the manual gets into some very confusing discussions of Job and Process programs, which I have never even heard of before (my Fanuc experience is limited to material handling applications). If I'm understanding the manual correctly, these only come into play for multiple dispensers on the same robot?


    So, is there a special trick to writing dispense programs, above and beyond programming SS and SE points?

  • DispenseTool has is quirks for sure and doesnt work perfectly in Roboguide.


    First you have to setup the dispenser in a controlled start menu.


    Then you setup a sealant schedule in the Data menu set to TCPP.


    Then set GO in the IO menu.


    SS command includes a schedule #, for example SS[1]. Can be used on its own but more commonly as part of a motion instruction.


    Also if you use any PR you must "lock preg" before starting.


    There is also a dispenser calibration that needs to be completed or at least set the system variable value.

  • Well, progress. Turns out that having a Flow Rate of 0 in the SL Schedule (which is under the Data menu, not the Setup menu) results in a 0 output. Who Knew? :icon_rolleyes:


    Now I'm trying to nail down how the output scales. Going by the manual, the Analog Output (in volts) should be the Schedule Flow Rate * Flow Type Scale Factor * Equipment Material Factor * Schedule Correction Factor * TCP Predicted Speed + Equipment Flow Rate Bias. There's no equation for using a GO rather than an AO, but the scaling should be the same.


    So, with the Schedule Flow Rate and Correction Factor both set to 1.0, a TCP velocity of 100mm/sec is giving me a GO value of 20. Changing the FR or CF works exactly as the equation shows. Changing the point speed to 1000mm/sec bumps up the GO to 200, as one would expect, and 2000mm/sec almost reaches 400, but the robot can't quite seem to reach 2000 within the distance of the move.


    So, for the moment, this looks like all I'll need. My "gear meter" is a smart motor that will take my GO via Ethernet/IP, so I'll just need to choose my Schedule Flow Rate to give me enough range and resolution, and program the motor to respond appropriately.


    I'm still trying to figure out if things like the Max Analog and the Calibration in the Dispense Setup are going to have an effect on what I'm trying to do here.

  • Also if you use any PR you must "lock preg" before starting.

    I've seen that before in some "canned" GM programs, along with UNLOCK PREG. What do they do?

    SS command includes a schedule #, for example SS[1]. Can be used on its own but more commonly as part of a motion instruction.

    Yeah, I shot myself in the foot for ~15min b/c I had the wrong schedule selected.

    There is also a dispenser calibration that needs to be completed or at least set the system variable value.

    You must have posted this literally while I was typing my update. :uglyhammer2:

    Right now, at least, I'm getting a reasonable GO value in RG, without doing any calibration or changing any system variables. And my calibration status in the Setup menu shows INCOMPLETE. I'm guessing this is something I'll probably need to fix on the real robot?

  • Going off memory, I think the GO max value is 2000. You can easily verify by switching from TCPP to volts and set to 10 volts (that would be max analog value) and see what the GO is.


    Lock PREG locks changing the value of all PRs. For sealant dispensing you must do that so it can "trust" the PR and use in it's look ahead calculation. If you don't it will set the flow output to a default value and ignore TCP speed. Of course remember to unlock. Best to lock just before SS and unlock right after SE and unlock at beginning of Main program.


    Calibration will affect the scaling. Usually I just skip calibrating and set the system variable instead. No matter what it will still not go beyond the max output value which I think is 2000.

  • Well, I finally got to deploy this onto the real robot.


    Learned the hard way: Menu>Test Cycle >Dispenser>Dispense Controller Mode needs to be Wet, or else the Flow Command output will always be 0.

    Also, this reset itself to Dry at least once while I was tinkering with other settings in the Dispense I/O and Sealer Schedule. So if you suddenly stop getting flow output, check this.


    My Flow Command is a 16-bit GO, but its output value appears to max out at 4090. Which seems a bit odd -- 4095 would be a maximum 12-bit value, which I could see, given how prevalent 12-bit analog outputs are. I'm not sure why it would stop at 4090, but it doesn't matter.


    But since my extruder motor needs values up to 65000, I need to do some scaling. Right now, I'm doing that by redirecting the Flow Command to a "dummy" GO (Rack 0, Slot 0), then in my BG program multiplying the Flow Command GO by a register value and setting the result onto the "real" GO mapped to the motor. Crude, but it seems to work, at least in first-pass testing. I still need to work out exactly the scaling I want, both in the Sealer Schedule, and in my multiplier register, to get the desired results.

  • Well, for my next trick-- er, question: Is it possible to switch between Seal Schedules on the fly? That is, something like:

    Code
    L P[1] SS[1]
    L P[2]
    L P[3] SS[2]
    L P[4]
    L P[5] SE

    Would that work, or would I have to use an SE in between the different SSs?

  • I believe you can...I did DispenseTool a few years ago and I believe I needed to switch Seal Schedules either around corners or for an "end" schedule (like welding).


    Also if it helps (maybe you already do this), from my experience last time I dispensed I laid down a layer of masking tape on my part where the sealant went. That way I could keep the part gripped up and everything and just tear off the masking tape and replace with new. Helped greatly for debugging/path creation.

  • Thanks!


    And, yeah, dispense-on-tape is an absolute lifesaver. Back when I had to do dozens (hundreds!) of test runs of urethane with only 4-5 windshields, we went through rolls of extra-wide masking tape like there was no tomorrow.

  • So, update: It works! Thanks for all the help, everyone.


    Still quite a bit of tuning to do, but the basic technology integration works: Using an SS point triggers the Seal Schedule to send the TCP speed to the GO that drives my smart motor in velocity mode. Since the Dispense GO maxes out at 4090 and the motor maxes out at 65000, I pass the Dispense GO through a multiplier in BGL (as mentioned previously) before setting the mapped GO.


    The motor speed changes with the TCP speed, and even without anticipation set up yet, it still manages to avoid piling in even the CNT 10 corners. Probably helps that we're only extruding at speeds under 100mm/sec.


    I did run into an ongoing issue with the Test Cycle setting itself to Dry -- it looks like this happens every time I jump lines in the program. Frustrating, but not fatal. Still, if there's any way to add a "Wait for Wet Mode" to my programs, that would be a nice improvement.

  • Hm... I don't see any in the Dispense I/O menu. Open Gun, Style, Complete, Fault Reset, Dispenser Fault, Dispenser Alert, and Remote Start. That's all this robot has.


    Would it be under a different menu tree?

  • I would bet there is a system variable for wet/dry. I'll take a look when I get a chance.


    I don't remember having that problem myself. It seemed to always stay how I set it and would always boot up in wet mode.

  • Q: Is it true that the built-in Dispense Output is limited to a max of 2000, regardless of other scaling, and that 2000 limit can't be tweaked?

    That would only yield a dispense motor speed of 3% for my setup.

    But we are going through a PLC analog output controlled by the robot GO through Ethernet/IP that has been configured as the Fanuc dispense flow output.

    So as a workaround, we can scale the 0 to 2000 output from Fanuc to the full analog voltage range that works with our dispense motor (directly in the analog output hardware scaling parameter).

Advertising from our partners