How can one rig a Stirling engine? (Piston)
This is really not my area, but here is what I could come up with purely using constraints. I suppose you could use a similar setup with a rig by applying a equivalent constraints to the bones.



Parent an empty to the rotor $A$ at the correct arm tip position $B$.

Parent both arms $C$ and $D$ to $B$.

Correctly position both pistons $E$ and $F$. Add the same constraint setup to both consisting of (by this order):


One Limit Location constraint set to Local Space where you only limit both minimum and maximum $X$ and $Y$ to $0$
One Limit Distance constraint set to On Surface to $B$ and adjust the distance parameter to match the arm shaft length.


After setting up both constraints switch their order so the Limit Distance is before the Limit Location. This is so the Limit Location is set before and guarantees the pistons aren't inadvertently moved out of place.



After that proceed to add the same constraints to both arms in the form of one Track To pointing to the corresponding pistons $E$ or $F$.



If you animate rotation of the rotor you should end up with a setup similar to this:



Disclaimer: Due to unknown facts as Haunt_House points out there seem to be a slight lag/imprecision with the pistons moving slightly out of sync with the rest of the setup. This is likely due to limitations on the way Blender calculates constraints, solving the last one without guaranteeing the first one is still met.