Help with Keyframe Animation

Question regarding model steam engine animation using Keyframe Animation 2.1. A few years ago I became interested in modelling a steam engine using Sketchup. Then later animating the steam engine with Keyframe Animation. I would reposition (move, revolve, etc) and ‘record’ every 120 deg. The connections were good at 0, 120, and 240 deg members. However when moving between these positions, connections would separate to varying degrees. I later learned that by nesting the moving members these issues could be improved.

So before getting back into attempting to animate the entire model, I wanted to get the process down with a few simple parts. I have a “link” model which constitutes a fixed bearing block (red), a crankshaft throw (green), a connecting rod (yellow) and piston (pink). The connecting rod is nested under the crankshaft throw, the piston is nested under the connecting rod.

I initially position everything at TDC (0 deg) centreline, The crankshaft throw and connecting rod are pointing straight up, the piston is at its highest position. I then ‘record’, then add a new view for the next position. (For this example I am making the first rotation to 90 deg vs 120 deg.)

I then ‘rotate’ the crankshaft throw, rod and piston ‘nest’ to 90 deg. Then rotate the connecting rod (upper end) and piston ‘nest’ back to 0 deg centreline, then ‘rotate’ the piston back to its vertical position. I then ‘record’ this position in the second view.

When I run the animation the connections are always valid at 0 deg and 90 deg (i.e. the piston is on centreline. However when moving between the two values (0 deg and 90 deg) the piston moves off centreline. If the piston were in a cylinder this would not be desirable!

I have attached a drawing showing the crankshaft throw passing through 45 degrees. It is obvious that the piston has moved off centreline. It seems to me that this is caused by the upper end of the connecting rod not staying on centerline during rotation. I welcome any thoughts and/or suggestions how this situation can be overcome. And yes, maybe I should learn MSPhysics!!