OK, I did some programming, and plotted the centre of mass over a cycle. Individual component centre of mass is rough guesstimates for now, I didn't bother to make exact numbers as they may well change. All I wanted to see if there was a symmetry. The black squares in the middle marks the centre of mass over the cycle. Looks pretty good if I got it all right, i simply took R=1/M*sum(r*m) where R is the overall centre of mass, M is the total mass, r is component position and m component mass.
This is what the code looks like in Matlab;
% MATLAB R2010b
figure(1);
hold;
syms v
nr_of_steps = 18; % number of positions to simulate for one revolution
axis_length = 130; % length of displayed piston axes [mm]
L=72; % length from chank shaft to wrist pin along the crank arm [mm]
ca_offset = 30; % crank arm centre of gravity, outwards from crank [mm]
p_offset = 3; % offset of piston CoG axially outwards from wrist pin centre [mm]
valve_pin=[1.95*2.5;-0.34*2.5]; % initial coordinates of the valve pin [mm]
% masses
m_valve=214.5; % [g]
m_valve_pin=3; % [g]
m_wrist_pin=22.6; % [g]
m_wrist_pin_bushings=3; % [g]
m_piston=206.4; % [g]
m_crank_arm=33; % [g]
m_crank=50; % [g]
m_crank_bushings=5; % [g]
m_total=m_valve+m_valve_pin+m_crank+3*(m_wrist_pin+m_piston+m_crank_arm+ ...
m_wrist_pin_bushings+m_crank_bushings);
% compute piston offset vectors;
p_offs_1 = [0;p_offset];
p_offs_2 = [cos(2/3*pi) -sin(2/3*pi);sin(2/3*pi) cos(2/3*pi)]*p_offs_1;
p_offs_3 = [cos(4/3*pi) -sin(4/3*pi);sin(4/3*pi) cos(4/3*pi)]*p_offs_1;
% plot diagram piston axes, 120 degrees angle to each other
plot([0 0],[0 axis_length],'-k')
plot([0 -axis_length*sin(2/3*pi)],[0 axis_length*cos(2/3*pi)],'-k')
plot([0 -axis_length*sin(4/3*pi)],[0 axis_length*cos(4/3*pi)],'-k')
% loop for each angular position:
for a=-pi:pi/(nr_of_steps/2):pi
A=[cos(a) -sin(a);sin(a) cos(a)]*[0;17]; % A = rotated crank shaft position
cg_c=A;
t=asin(A(1)/L); % angle from crank shaft to x=0 (top piston)
B=[cos(t) -sin(t);sin(t) cos(t)]*[0;L]; % rotate top crank arm in place
AB=[A(1)+B(1) A(2)+B(2)]; % AB = position of top wrist pin
plot(A(1),A(2),'bs')
cg_ca1=[A(1)+B(1)*(ca_offset/L);A(2)+B(2)*(ca_offset/L)];
plot(cg_ca1(1),cg_ca1(2),'rs')
plot([A(1) AB(1)],[A(2) AB(2)],'-r') % plot top crank arm from A to AB
cg_p1=[AB(1)+p_offs_1(1);AB(2)+p_offs_1(2)];
plot(cg_p1(1),cg_p1(2),'ks')
% valve mass centered around valve pin
cg_v=[cos(a) -sin(a);sin(a) cos(a)]*valve_pin;
plot(cg_v(1),cg_v(2),'-ys') % plot orbital valve indicator
% the top crank arm was the easy part, now we make a linear function of
% the other two piston axes, then solve the equation for angle where it
% intersects the wrist pin position of the crank arm. We get two
% solutions as we intersect at two positions, determine the correct one
% based on sign.
% tan(30deg)=y/x, tan(pi/6)=y/x, y=x*tan(pi/6)
% x=0:1:axis_length;
% plot(x,-x*tan(pi/6),'-c') % this is the right hand cylinder axis
% x=-axis_length:1:0;
% plot(x,x*tan(pi/6),'-m') % this is the left hand cylinder axis
% first solve equation, then evaluate expression, then remove imaginary
% component
g=real(eval(solve('L*sin(v)+A(2)=(L*cos(v)+A(1))*tan(pi/6)',v)));
% evaluate both answers to determine the correct one
v1=[cos(g(1)) -sin(g(1));sin(g(1)) cos(g(1))]*[L;0];
v2=[cos(g(2)) -sin(g(2));sin(g(2)) cos(g(2))]*[L;0];
if (v1(1)<0 && v1(2)<0) B=v1;
else B=v2;
end
cg_ca2=[A(1)+B(1)*(ca_offset/L);A(2)+B(2)*(ca_offset/L)];
plot(cg_ca2(1),cg_ca2(2),'ms')
plot([A(1) A(1)+B(1)],[A(2) A(2)+B(2)],'-m')
cg_p2=[A(1)+B(1)+p_offs_2(1);A(2)+B(2)+p_offs_2(2)];
plot(cg_p2(1),cg_p2(2),'ks')
g=real(eval(solve('L*sin(v)+A(2)=-(L*cos(v)+A(1))*tan(pi/6)',v)));
v1=[cos(g(1)) -sin(g(1));sin(g(1)) cos(g(1))]*[L;0];
v2=[cos(g(2)) -sin(g(2));sin(g(2)) cos(g(2))]*[L;0];
if (v1(1)>0 && v1(2)<0) B=v1;
else B=v2;
end
cg_ca3=[A(1)+B(1)*(ca_offset/L);A(2)+B(2)*(ca_offset/L)];
plot(cg_ca3(1),cg_ca3(2),'cs')
plot([A(1) A(1)+B(1)],[A(2) A(2)+B(2)],'-c')
cg_p3=[A(1)+B(1)+p_offs_3(1);A(2)+B(2)+p_offs_3(2)];
plot(cg_p3(1),cg_p3(2),'ks')
% Centre of mass R of a system of particles of total mass M is defined
% as their average of positions, r, weighted by their masses m.
R=1/m_total*(cg_v*(m_valve+m_valve_pin)+(cg_p1+cg_p2+cg_p3)* ...
(m_wrist_pin+m_wrist_pin_bushings+m_piston)+(cg_ca1+cg_ca2+cg_ca3)* ...
m_crank_arm+cg_c*(m_crank+3*m_crank_bushings));
plot(R(1),R(2),'ks')
end
axis equal
hold;