Tuesday, May 24, 2011

How do you clear history in CATIA?


If you are a regular user of CATIA V5 like I am then you may have run across this error: "operation cannot be completed because part is already in session. Please close the session to complete the operation." This error may occur because of a scenario like this:

I open a Product that contains Part A, Part B, and Part C. I open Part D, modify it, and close it. According to the Desk, Link, and Windows open, the only thing now open is Product with Part A, Part B, and Part C. I go to insert an existing part into the Product, and browse to Part D. The error message above pops up.


How do I close the session without having to completely close and reopen CATIA? There is way to clear the memory cache without having to restart. It is called "Clear History." To find the clear history icon follow these instructions:

  • Right click on a toolbars
  • Select "Customize"
  • Click on tab "Commands"
  • Click "All commands" in left frame
  • Drag´n drop the Command "Clear History" in right frame, to some toolbars.
The icon looks like a grey gear with a green check mark in front of it. I think that if you have nothing open in your Catia, the icon will be grayed out. If you open one document the icon will be available. Hopefully this helps eliminate some aggravation.

Tuesday, May 17, 2011

Theo Jansen Mechanism Matlab Code


I shared my m-code for the Theo Jansen mechanism awhile ago (LINK) but one of our readers recently created his own version of the program and offered to share it with us. Truong Duc Binh says:


"I programed for two legs and now I am making a computer interface with it, user can input parameters for Jansen walking machine. I divide this window form to two modes, you can simulate with constant alpha, or variable alpha."

Here is the complete m-code:

clear all

%Init link's length
L1=286;
L2=100;
L3=400;
L4=275;
L5=400;
L6=295;
L7=285;
L8=275;
L9=400;
L10=290;
L11=400;
L12=280;
L13=80;

alphaMax = pi/36; % 5 degree
alphaStep = pi/36/2; % 5/2 degree
alpha = -alphaStep;
k=3;

%To get the video:
mov=avifile('CoCau4KhauBanLe.avi','COMPRESSION','Cinepak');% None
for (a =1:1:(k+1))
    if a <= (k+1-rem(k+1,2))/2
        alpha = alpha + alphaStep;
    else
        alpha = alpha - alphaStep;
    end
    if alpha > alphaMax
        alpha = alphaMax;
    end
    if alpha<(-alphaMax)
        alpha = (-alphaMax);
    end
    for theta=0:pi/20:2*pi
    %for theta=0:(-pi/20):(-2*pi) % Quay cung chieu kim dong ho

    % Calculate angles:
    theta2 = pi - theta;
    theta3 = pi - theta + alpha;
    ssquared=(L2)^2+(L1)^2-(2*L1*L2*cos(theta3));
    s=sqrt(ssquared);
    beta=asin((L2*sin(theta3))/s);
    psi=acos(((L3^2)+(s^2)-(L4^2))/(2*L3*s));
    BCO2 = acos(((L5)^2+(L6)^2 - (L4)^2)/(2*L5*L6));
    CBO2 = acos(((L5)^2+(L4)^2 - (L6)^2)/(2*L5*L4));
    lambda=acos(((L4)^2+s^2-(L3)^2)/(2*(L4)*s));
    gamma = lambda - (BCO2 + CBO2)+ alpha + beta;
    O2AD = acos(((L9)^2+ssquared-(L8)^2)/(2*(L9)*s));
    omega = O2AD + alpha + beta;
    AO2D = acos(((L8)^2+ssquared-(L9)^2)/(2*(L8)*s));
    CO2D = pi - gamma - AO2D;
    CDsquared = (L6)^2+(L8)^2-2*L6*L8*cos(CO2D);
    CD = sqrt(CDsquared);
    O2CD = asin(L8*sin(CO2D)/CD);
    tempE = gamma - O2CD;
    CDE = acos(((L10)^2+CDsquared-(L7)^2)/(2*(L10)*CD));
    angleE = tempE + CDE;
    DEF = acos(((L10)^2+(L11)^2 - (L12)^2)/(2*L10*L11));
    tempF = DEF - angleE;
    DFE = acos(((L12)^2+(L11)^2 - (L10)^2)/(2*L12*L11));
    angleF = pi - tempF - DFE;

    %Find the points:
    O1=[0,0];
    O2=[-L1*cos(alpha),-L1*sin(alpha)];
    A=[L2*cos(theta) L2*sin(theta)];
    B=[A(1)-L3*cos(psi-alpha-beta) A(2)+L3*sin(psi-alpha-beta)];
    C=[O2(1)-L6*cos(gamma) O2(2)-L6*sin(gamma)];
    D=[A(1)-L9*cos(omega) A(2)-L9*sin(omega)];
    E=[D(1)-L10*cos(angleE) D(2)-L10*sin(angleE)];
    F=[D(1)-L12*cos(angleF) D(2)-L12*sin(angleF)];
    G=[F(1)-L13*cos(angleF) F(2)-L13*sin(angleF)];

    %************************LEFT********************************
    plot ([O1(1),A(1)],[O1(2),A(2)],'g','linewidth',3)
    hold on
    plot ([O2(1),O1(1)],[O2(2),O1(2)],'black','linewidth',3)
    plot ([A(1),B(1)],[A(2),B(2)],'b','linewidth',3)
    plot ([O2(1),B(1)],[O2(2),B(2)],'r','linewidth',3)
    plot ([O2(1),C(1)],[O2(2),C(2)],'r','linewidth',3)
    plot ([B(1),C(1)],[B(2),C(2)],'r','linewidth',3)
    plot ([O2(1),D(1)],[O2(2),D(2)],'b','linewidth',3)
    plot ([A(1),D(1)],[A(2),D(2)],'b','linewidth',3)
    plot ([C(1),E(1)],[C(2),E(2)],'b','linewidth',3)
    plot ([D(1),E(1)],[D(2),E(2)],'r','linewidth',3)
    plot ([D(1),F(1)],[D(2),F(2)],'r','linewidth',3)
    plot ([E(1),F(1)],[E(2),F(2)],'r','linewidth',3)
    plot ([G(1),F(1)],[G(2),F(2)],'b','linewidth',3)
    Gx(a)=G(1);
    Gy(a)=G(2);

    %*************************RIGHT******************************
    theta4 = theta + alpha;
    s2squared=(L2)^2+(L1)^2-(2*L1*L2*cos(theta4));
    s2=sqrt(s2squared);
    beta2=asin((L2*sin(theta4))/s2);
    angle2=acos(((L3^2)+((s2)^2)-(L4^2))/(2*L3*(s2)));
    B1C1O3 = acos(((L5)^2+(L6)^2 - (L4)^2)/(2*L5*L6));
    C1B1O3 = acos(((L5)^2+(L4)^2 - (L6)^2)/(2*L5*L4));
    lambda2=acos(((L4)^2+(s2)^2-(L3)^2)/(2*(L4)*(s2)));
    gamma2 = lambda2 - (B1C1O3 + C1B1O3)+ alpha + beta2;
    O3A1D1 = acos(((L9)^2+s2squared-(L8)^2)/(2*(L9)*(s2)));
    omega2 = O3A1D1 + alpha + beta2;
    A1O3D1 = acos(((L8)^2+s2squared-(L9)^2)/(2*(L8)*(s2)));
    C1O3D1 = 2*pi - A1O3D1 - lambda2 - (pi - B1C1O3 - C1B1O3);
    C1D1squared = (L6)^2+(L8)^2-2*L6*L8*cos(C1O3D1);
    C1D1 = sqrt(C1D1squared);
    O3C1D1 = asin(L8*sin(C1O3D1)/(C1D1));
    tempE2 = gamma2 - O3C1D1;
    C1D1E1 = acos(((L10)^2+C1D1squared-(L7)^2)/(2*(L10)*(C1D1)));
    angleE2 = tempE2 + C1D1E1;
    D1E1F1 = acos(((L10)^2+(L11)^2 - (L12)^2)/(2*L10*L11));
    tempF2 = D1E1F1 - angleE2;
    D1F1E1 = acos(((L12)^2+(L11)^2 - (L10)^2)/(2*L12*L11));
    angleF2 = tempF2 + D1F1E1;

    %Find the points:
    O3=[L1*cos(alpha),-L1*sin(alpha)];%
    B1=[A(1)+L3*cos(angle2-alpha-beta2) A(2)+L3*sin(angle2-alpha-beta2)];%
    C1=[O3(1)+L6*cos(gamma2) O3(2)-L6*sin(gamma2)];
    D1=[A(1)+L9*cos(omega2) A(2)-L9*sin(omega2)];
    E1=[D1(1)+L10*cos(angleE2) D1(2)-L10*sin(angleE2)];
    F1=[D1(1)-L12*cos(angleF2) D1(2)-L12*sin(angleF2)];
    G1=[F1(1)-L13*cos(angleF2) F1(2)-L13*sin(angleF2)];

    plot ([O3(1),O1(1)],[O3(2),O1(2)],'black','linewidth',3)
    plot ([A(1),B1(1)],[A(2),B1(2)],'b','linewidth',3)
    plot ([O3(1),B1(1)],[O3(2),B1(2)],'r','linewidth',3)
    plot ([O3(1),C1(1)],[O3(2),C1(2)],'r','linewidth',3)
    plot ([B1(1),C1(1)],[B1(2),C1(2)],'r','linewidth',3)
    plot ([O3(1),D1(1)],[O3(2),D1(2)],'b','linewidth',3)
    plot ([A(1),D1(1)],[A(2),D1(2)],'b','linewidth',3)
    plot ([C1(1),E1(1)],[C1(2),E1(2)],'b','linewidth',3)
    plot ([D1(1),E1(1)],[D1(2),E1(2)],'r','linewidth',3)
    plot ([D1(1),F1(1)],[D1(2),F1(2)],'r','linewidth',3)
    plot ([E1(1),F1(1)],[E1(2),F1(2)],'r','linewidth',3)
    plot ([G1(1),F1(1)],[G1(2),F1(2)],'b','linewidth',3)
    G1x(a)=G1(1);
    G1y(a)=G1(2);
   
    plot(Gx,Gy)
    plot(G1x,G1y)
  
    %************************************************************
    axis([-800 800 -800 400])
    hold off
    a=a+1;
    pause(.01)
    M=getframe;
    mov=addframe(mov,M);
    end
end
mov=close(mov);


Thanks again to Truong Duc Binh!

Wednesday, May 4, 2011

Keyboard Shortcuts for 3D Via Composer

Here are a couple of nice Windows keyboard shortcuts for Dassault's 3D Via Composer.

Short Cut | Result

Tab: creates temporary ghost image of the element underneath the pointer

Shift+Tab: reverses tab key action

K: Permenently hides the elements that are displayed as ghost images by the tab key

T: hides or shows collaborative elements

Crtl+T: show all elements

Crtl+I: Inverts the current selection

Crtl+D: Render Digger

Crtl+A: Select all elements

F2: rename marker in the timeline

Monday, May 2, 2011

Common G-Codes for CNC Programming

G00

Rapid positioning

On 2- or 3-axis moves, G00 (unlike G01) traditionally does not necessarily move in a single straight line between start point and end point. It moves each axis at its max speed until its vector is achieved. Shorter vector usually finishes first (given similar axis speeds). This matters because it may yield a dog-leg or hockey-stick motion, which the programmer needs to consider depending on what obstacles are nearby, to avoid a crash. Some machines offer interpolated rapids as a feature for ease of programming (safe to assume a straight line).

G01

Linear interpolation

The most common workhorse code for feeding during a cut. The program specs the start and end points, and the control automatically calculates (interpolates) the intermediate points to pass through that will yield a straight line (hence "linear"). The control then calculates the angular velocities at which to turn the axis leadscrews. The computer performs thousands of calculations per second. Actual machining takes place with given feed on linear path.

G02

Circular interpolation, clockwise

Cannot start G41 or G42 in G02 or G03 modes. Must already be compensated in earlier G01 block.

G03

Circular interpolation, counterclockwise

Cannot start G41 or G42 in G02 or G03 modes. Must already be compensated in earlier G01 block.

G04

Dwell

Takes an address for dwell period (may be X, U, or P)

G05 P10000

High-precision contour control (HPCC)

Uses a deep look-ahead buffer and simulation processing to provide better axis movement acceleration and deceleration during contour milling

G05.1 Q1.

Ai Nano contour control

Uses a deep look-ahead buffer and simulation processing to provide better axis movement acceleration and deceleration during contour milling

G07

Imaginary axis designation


 

G09

Exact stop check


 

G10

Programmable data input


 

G11

Data write cancel


 

G12

Full-circle interpolation, clockwise

Fixed cycle for ease of programming 360° circular interpolation with blend-radius lead-in and lead-out. Not standard on Fanuc controls.

G13

Full-circle interpolation, counterclockwise

Fixed cycle for ease of programming 360° circular interpolation with blend-radius lead-in and lead-out. Not standard on Fanuc controls.

G17

XY plane selection


 

G18

ZX plane selection

On most CNC lathes (built 1960s to 2000s), ZX is the only available plane, so no G17 to G19 codes are used. This is now changing as the era begins in which live tooling, multitask/multifunction, and mill-turn/turn-mill gradually become the "new normal". But the simpler, traditional form factor will probably not disappear—just move over to make room for the newer configurations. See also V address.

G19

YZ plane selection


 

G20

Programming in inches

Somewhat uncommon except in USA and (to lesser extent) Canada and UK. However, in the global marketplace, competence with both G20 and G21 always stands some chance of being necessary at any time. The usual minimum increment in G20 is one ten-thousandth of an inch (0.0001"), which is a larger distance than the usual minimum increment in G21 (one thousandth of a millimeter, .001 mm, that is, one micrometre). This physical difference sometimes favors G21 programming.

G21

Programming in millimeters (mm)

Prevalent worldwide. However, in the global marketplace, competence with both G20 and G21 always stands some chance of being necessary at any time.

G28

Return to home position (machine zero, aka machine reference point)

Takes X Y Z addresses which define the intermediate point that the tool tip will pass through on its way home to machine zero. They are in terms of part zero (aka program zero), NOT machine zero.

G30

Return to secondary home position (machine zero, aka machine reference point)

Takes a P address specifying which machine zero point is desired, if the machine has several secondary points (P1 to P4). Takes X Y Z addresses which define the intermediate point that the tool tip will pass through on its way home to machine zero. They are in terms of part zero (aka program zero), NOT machine zero.

G31

Skip function (used for probes and tool length measurement systems)


 

G32

Single-point threading, longhand style (if not using a cycle, e.g., G76)

Similar to G01 linear interpolation, except with automatic spindle synchronization for single-point threading.

G33

Constant-pitch threading


 

G33

Single-point threading, longhand style (if not using a cycle, e.g., G76)

Some lathe controls assign this mode to G33 rather than G32.

G34

Variable-pitch threading


 

G40

Tool radius compensation off

Cancels G41 or G42.

G41

Tool radius compensation left

Milling: Given righthand-helix cutter and M03 spindle direction, G41 corresponds to climb milling (down milling). Takes an address (D or H) that calls an offset register value for radius.

G42

Tool radius compensation right

Similar corollary info as for G41. Given righthand-helix cutter and M03 spindle direction, G42 corresponds to conventional milling (up milling).

G43

Tool height offset compensation negative

Takes an address, usually H, to call the tool length offset register value. The value is negative because it will be added to the gauge line position. G43 is the commonly used version (vs G44).

G44

Tool height offset compensation positive

Takes an address, usually H, to call the tool length offset register value. The value is positive because it will be subtracted from the gauge line position. G44 is the seldom-used version (vs G43).

G45

Axis offset single increase


 

G46

Axis offset single decrease


 

G47

Axis offset double increase


 

G48

Axis offset double decrease


 

G49

Tool length offset compensation cancel

Cancels G43 or G44.

G50

Define the maximum spindle speed

Takes an S address integer which is interpreted as rpm. Without this feature, G96 mode (CSS) would rev the spindle to "wide open throttle" when closely approaching the axis of rotation.

G50

Scaling function cancel


 

G50

Position register (programming of vector from part zero to tool tip)

Position register is one of the original methods to relate the part (program) coordinate system to the tool position, which indirectly relates it to the machine coordinate system, the only position the control really "knows". Not commonly programmed anymore because G54 to G59 (WCSs) are a better, newer method. Called via G50 for turning, G92 for milling. Those G addresses also have alternate meanings (which see). Position register can still be useful for datum shift programming.

G52

Local coordinate system (LCS)

Temporarily shifts program zero to a new location. This simplifies programming in some cases.

G53

Machine coordinate system

Takes absolute coordinates (X,Y,Z,A,B,C) with reference to machine zero rather than program zero. Can be helpful for tool changes. Nonmodal and absolute only. Subsequent blocks are interpreted as "back to G54" even if it is not explicitly programmed.

G54 to G59

Work coordinate systems (WCSs)

Have largely replaced position register (G50 and G92). Each tuple of axis offsets relates program zero directly to machine zero. Standard is 6 tuples (G54 to G59), with optional extensibility to 48 more via G54.1 P1 to P48.

G54.1 P1 to P48

Extended work coordinate systems

Up to 48 more WCSs besides the 6 provided as standard by G54 to G59. Note floating-point extension of G-code data type (formerly all integers). Other examples have also evolved (e.g., G84.2). Modern controls have the hardware to handle it.

G70

Fixed cycle, multiple repetitive cycle, for finishing (including contours)


 

G71

Fixed cycle, multiple repetitive cycle, for roughing (Z-axis emphasis)


 

G72

Fixed cycle, multiple repetitive cycle, for roughing (X-axis emphasis)


 

G73

Fixed cycle, multiple repetitive cycle, for roughing, with pattern repetition


 

G73

Peck drilling cycle for milling - high-speed (NO full retraction from pecks)

Retracts only as far as a clearance increment (system parameter). For when chipbreaking is the main concern, but chip clogging of flutes is not.

G74

Peck drilling cycle for turning


 

G74

Tapping cycle for milling, lefthand thread, M04 spindle direction


 

G75

Peck grooving cycle for turning


 

G76

Fine boring cycle for milling


 

G76

Threading cycle for turning, multiple repetitive cycle


 

G80

Cancel canned cycle

Milling: Cancels all cycles such as G73, G83, G88, etc. Z-axis returns either to Z-initial level or R-level, as programmed (G98 or G99, respectively).

G81

Simple drilling cycle

No dwell built in

G82

Drilling cycle with dwell

Dwells at hole bottom (Z-depth) for the number of milliseconds specified by the P address. Good for when hole bottom finish matters.

G83

Peck drilling cycle (full retraction from pecks)

Returns to R-level after each peck. Good for clearing flutes of chips.

G84

Tapping cycle, righthand thread, M03 spindle direction


 

G84.2

Tapping cycle, righthand thread, M03 spindle direction, rigid toolholder


 

G90

Absolute programming

Positioning defined with reference to part zero.

G90

Fixed cycle, simple cycle, for roughing (Z-axis emphasis)

When not serving for absolute programming (above)

G91

Incremental programming

Positioning defined with reference to previous position.

G92

Position register (programming of vector from part zero to tool tip)

Same corollary info as at G50 position register.

G92

Threading cycle, simple cycle


 

G94

Feedrate per minute

On group type A lathes, feedrate per minute is G98.

G94

Fixed cycle, simple cycle, for roughing (X-axis emphasis)

When not serving for feedrate per minute (above)

G95

Feedrate per revolution

On group type A lathes, feedrate per revolution is G99.

G96

Constant surface speed (CSS)

Varies spindle speed automatically to achieve a constant surface speed. See speeds and feeds. Takes an S address integer, which is interpreted as sfm in G20 mode or as m/min in G21 mode.

G97

Constant spindle speed

Takes an S address integer, which is interpreted as rev/min (rpm). The default speed mode per system parameter if no mode is programmed.

G98

Return to initial Z level in canned cycle


 

G98

Feedrate per minute (group type A)

Feedrate per minute is G94 on group type B.

G99

Return to R level in canned cycle


 

G99

Feedrate per revolution (group type A)

Feedrate per revolution is G95 on group type B.