Advertising

Frame (or Base) in Block Language

  • I've been tasked with writing a short document on creating and updating existing block programs to new fixtures.


    I'm used to doing this in Fanucs by creating a user frame, selecting that frame, teaching the path, then updating the frame when the fixture moves. I've been reviewing the documentation, but I am at a loss on how to do this in block on a Kawasaki. It looks like the base is involved somehow, but I am not sure I am looking in the right area, and I am having trouble finding more information.


    Can frames be taught to block positions like they can to positions in a Fanuc, or do I have to use AS for this?

    Check out the Fanuc position converter I wrote here!

  • AD
  • In short, I think you may have a frustrating journey with this as Block programs contain Joint angles as the stored positions not transforms.


    There are of course areas to setup Base and Tool values in the Aux functions which then can be used in conjunction with the built in Program Conversion Option usually in Aux function 01 which then allow 'shifting' of these joint angles relative to the Base or Tool values.

    However these functions are just executable macro's, where you specify the program and step numbers for it to be applied on, it then executes the macro and recalculates the new joint angles and updates the Block steps accordingly with the new joint angles.


    Personally, I have never come across any form of 'User Frames' being able to be applied within the Block programming formats.

    This may well be a question best directed to Kawasaki.


    The positive side of this though, is that AS is very good at converting the Joint angles to transforms, but no automatic way.

    For instance contained on a Block step are the interpolation and joint angle values along with other elements:

    JOINT SPEED9 ACCU1 TIMER0 TOOL1 WORK0 CLAMP1 (OFF,0,0,O) 2 (OFF,0,0,O) OX= WX= #[3.5749,-9.737,-142.05,0,-47.688,-3.5796] ;


    Ignoring all the other elements except for the interpolation and joint angles, the AS equivalent of this is:

    JMOVE #PPOINT (3.5749,-9.737,-142.05,0,-47.688,-3.5796) ;


    By using the POINT command, you could convert this to the transform equivalent:

    POINT pos1 = #PPOINT (3.5749,-9.737,-142.05,0,-47.688,-3.5796)


    Other alternative conversions, you could insert a HERE command in between each Block step and then step the program through and create the transforms along the way.

    However, I don't see any 'fast track' options available.


    So I would direct this towards Kawasaki and see if there is a solution.

  • I figured it would be a long shot. AS it is then.


    One more question.


    When you hit record on a point that is something like JMOVE frame+point, is the controller smart enough to record only the point, or do you have subtract the frame out after touchup?

    Check out the Fanuc position converter I wrote here!

  • JMOVE frame+point


    Any compound instruction like your example, when using the POS MOD button on the step will rewrite the values of the furthermost location relative to the preceding location with the current position.

    In the above example, the values stored/taught will be relative to 'frame'.

    ie how far am I'm away from frame and assign those values to point - like an offset of frame.


    Just like JMOVE table+plate+food

    'Lift the table, place it somewhere else, and the plate and food follow it'

    'Move the food around the plate and it wont move the plate or the table'

    Sorry it's late for me, best analogy I can come up with...….

  • You've got it...……..:top:

    But in that case, in order to move to it, they do have to be predefined/taught already.

    As the compound instruction is 'Move to the result of the calculation'.

    Sometimes this is where the confusion comes in.


    Have a look Motouser thread post #7 FRAME in AS language


    He has written a very nice AS structure there to create user frames using compound iterations based on locations for the frame (including some offsets) they will teach/predefine elsewhere.

    The good thing about what they've done - it reads very easy in order to follow it if you know the AS behind it.

  • As you've posed the question:

    I've been tasked with writing a short document on creating and updating existing block programs to new fixtures.

    You have got my 'grey matter' tickling me regarding this in relation to an optional function called Data Transformation function (There is information to this in the E Controller Operations Manual).


    This function I have never used, nor have I have dedicated anytime to researching into it.

    But with your 'frame' referencing, it has got my thinking.


    Now I have not read too much into this option, but it relates to 'transforming' offline to online referencing a 4 point area and it does refer to offline CAD data from a simulator.

    Now if this is referring specifically to Kawasaki simulator (KROSET), it may well also be referring to the initial positional data being produced from a Block Program.

    If this is indeed the case, then I could see this as a feasible option to assist in converting current Block to transforms.


    I'm going to have a deeper look into this and see what I can find out further as you've started my 'grey matter' thinking and let you know.

  • I think that idea is bust, as it reads, it just looks like another function that recalculates the original Joint values in the Block Step, to applicable ones for the base 4 points selected.

    Resulting in a correct Joint angle postures again...…..;(

  • Thanks for looking into it. I ended up going with the HERE command to convert the program into poses, and then using the FRAME command to update the BASE. FRAME done before the HERE command of course.

    Check out the Fanuc position converter I wrote here!

  • Ah right, so you created the Userframe and applied it to the BASE and then used the HERE command.

    Sounds good.

    With AS there's many variations you could use, I would of left the Base as it was, setup the Userframe location and then used the following instead:

    POINT userframe+pos[x]=HERE

    However, the results would end up being the same as your method, just applied differently.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account
Sign up for a new account in our community. It's easy!
Register a new account
Sign in
Already have an account? Sign in here.
Sign in Now