This is an attempt of a 3d answer. I acknowledge and appreciate comments by KJO that made me realize that this is not really realistic and by Raaja that made me choose a perhaps more intuitive offset. ;-)
\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{tikz-3dplot}
\usetikzlibrary{3d,calc}
\begin{document}
\tdplotsetmaincoords{00}{00}
\foreach \Z in {1.5,3,...,30,28.5,27,...,3}
{\tdplotsetrotatedcoords{0}{\Z}{00}
\pgfmathsetmacro{\VernierLength}{\Z/2} % <- this is the length in mm you want to show
\begin{tikzpicture}[tdplot_rotated_coords,font=\sffamily]
% \begin{scope}[xshift=-5cm]
% \draw[-latex] (0,0,0) -- (1,0,0) node[pos=1.1]{$x$};
% \draw[-latex] (0,0,0) -- (0,1,0) node[pos=1.1]{$y$};
% \draw[-latex] (0,0,0) -- (0,0,1) node[pos=1.1]{$z$};
% \end{scope}
\path[tdplot_screen_coords,use as bounding box] (-3,-3) rectangle (5,3);
\path[tdplot_screen_coords] (5,3) node[anchor=north east]
{$\mathsf{L}=\VernierLength$};
\begin{scope}
\begin{scope}[canvas is yz plane at x=0]
\path (0,0) coordinate (M1);
\draw (180:1) arc(180:0:1);
\end{scope}
\begin{scope}[canvas is yz plane at x=1.5]
\path (0,0) coordinate (M2);
\draw let \p1=($(M2)-(M1)$),\n1={0*atan2(\y1,\x1)+atan2(1,1.5)/2.5} in
($(M1)+(-\n1/2:1)$) coordinate (TL) -- ($(M2)+(-\n1/2:2)$) coordinate (TR)
($(M1)+(180+\n1/2:1)$) coordinate (BL) -- ($(M2)+(180+\n1/2:2)$) coordinate (BR)
(BR) arc(180+\n1/2:-\n1/2:2);
\end{scope}
\begin{scope}
\draw plot[variable=\t,domain=0:360,smooth]
(-\VernierLength/10-0.5,{cos(\t)},{sin(\t)});
\draw[clip] plot[variable=\t,domain=0:180,smooth]
(-\VernierLength/10-0.5,{cos(\t)},{sin(\t)})
-- plot[variable=\t,domain=180:0,smooth]
(0,{cos(\t)},{sin(\t)}) -- cycle;
\draw[thick] (-\VernierLength/10,0,1) -- (0,0,1)
plot[variable=\t,domain=60:110,smooth]
(-\VernierLength/10,{cos(\t)},{sin(\t)});
\path let
\p1=($(-\VernierLength/10,{cos(120)},{sin(120)})-(-\VernierLength/10,{cos(110)},{sin(110)})$),
\n1={90+atan2(\y1,\x1)} in (-\VernierLength/10,{cos(120)},{sin(120)})
node[rotate=\n1,yscale={cos(30)},transform shape]{0};
\pgfmathtruncatemacro{\Xmax}{\VernierLength/2}
\ifnum\Xmax>0
\foreach \X in {1,...,\Xmax}
{\ifodd\X
\draw plot[variable=\t,domain=90:110,smooth]
(-\VernierLength/10+\X/5,{cos(\t)},{sin(\t)});
% \path let
% \p1=($(-\VernierLength/10+\X/5,{cos(120)},{sin(120)})-(-\VernierLength/10+\X/5,{cos(110)},{sin(110)})$),
% \n1={90+atan2(\y1,\x1)} in (-\VernierLength/10+\X/5,{cos(120)},{sin(120)})
% node[rotate=\n1,yscale={cos(30)},transform shape]{\X};
\else
\draw plot[variable=\t,domain=90:70,smooth]
(-\VernierLength/10+\X/5,{cos(\t)},{sin(\t)});
% \path let
% \p1=($(-\VernierLength/10+\X/5,{cos(60)},{sin(60)})-(-\VernierLength/10+\X/5,{cos(70)},{sin(70)})$),
% \n1={-90+atan2(\y1,\x1)} in (-\VernierLength/10+\X/5,{cos(60)},{sin(60)})
% node[rotate=\n1,yscale={cos(30)},transform shape]{\X};
\fi
}
\fi
\end{scope}
%
\begin{scope}[canvas is yz plane at x=3.5]
\path (0,0) coordinate (M3);
\draw (180:2) arc(180:0:2);
\draw ($(M2)+(0:2)$) -- ($(M3)+(0:2)$)
($(M2)+(180:2)$) -- ($(M3)+(180:2)$);
\end{scope}
\pgfmathtruncatemacro{\Offset}{180+10*\VernierLength*7.2-12.5*7.2}
\pgfmathtruncatemacro{\Xmin}{10*\VernierLength+1-12.5}
\pgfmathtruncatemacro{\Xmax}{\Xmin+23}
\foreach \X [evaluate=\X as \Y using {int(mod(\X,5))},
evaluate=\X as \LX using {int(mod(\X,50))}] in {\Xmin,...,\Xmax}
{\ifnum\Y=0
\draw[thin] let
\p1=($(0.6,{(1+0.4)*cos(\Offset-\X*7.2)},{(1+0.4)*sin(\Offset-\X*7.2)})-
(0,{cos(\Offset-\X*7.2)},{sin(\Offset-\X*7.2)})$),
\p2=($(0.6,{(1+0.4)*cos(\Offset-\X*7.2)},{(1+0.4)*sin(\Offset-\X*7.2)})-
(0.6,{(1+0.4)*cos(\Offset-\X*7.2+1)},{(1+0.4)*sin(\Offset-\X*7.2+1)})$),
\p3=($(0.6,{0},{(1+0.4)})-
(0.6,{(1+0.4)*cos(91)},{(1+0.4)*sin(91)})$),
\n1={atan2(\y1,\x1)},\n2={veclen(\x2,\y2)/veclen(\x3,\y3)} in
(0,{cos(\Offset-\X*7.2)},{sin(\Offset-\X*7.2)})
-- (0.6,{(1+0.4)*cos(\Offset-\X*7.2)},{(1+0.4)*sin(\Offset-\X*7.2)})
node[pos=1.5,rotate=\n1,yscale={\n2},transform shape]{\LX};
\else
\draw[thin] (0,{cos(\Offset-\X*7.2)},{sin(\Offset-\X*7.2)})
-- (0.3,{(1+0.2)*cos(\Offset-\X*7.2)},{(1+0.2)*sin(\Offset-\X*7.2)});
\fi}
\end{scope}
\end{tikzpicture}}
\end{document}

And here is a trick to draw the ticks. Call the point where the diagonal points intersect P. Then the ticks point to this point. Of course, in the end you want to remove the excess lines by clipping.
\documentclass[tikz,border=3.14mm]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[font=\sffamily]
\draw (0,0)--(-2,0) (0,-2)--(-2,-2);
\draw[thin] (0,0)--(0,-2);
\draw (0,0)coordinate (TL) --(1.5,1) coordinate (TR) --(3.5,1) ;
\draw (0,-2) coordinate (BL)--(1.5,-3) coordinate (BR) --(3.5,-3) ;
\draw[thin] (1.5,1)--(1.5,-3);
\draw (-2,-2) to[out=130,in=-130] (-2,-1) to[out=130,in=-130] (-2,0);
\draw[very thin] (-2,-1) to[out=50,in=-50] (-2,0);
\draw (3.5,1) to[out=-50,in=50] (3.5,-1) to[out=-50,in=50] (3.5,-3);
\draw[very thin] (3.5,-1) to[out=-130,in=130] (3.5,-3);
\path (intersection cs:first line={(TL)--(TR)}, second line={(BL)--(BR)})
coordinate (P);
\clip (TL) -- (TR) -- (BR) -- (BL) -- cycle;
\foreach \X [evaluate=\X as \Y using {int(mod(\X,5))}] in {1,...,17}
{\ifnum\Y=0
\draw[shorten >=-20pt] (P) -- (0,-2+\X/9) node[pos=1.65]{\X};
\else
\draw[shorten >=-7pt] (P) -- (0,-2+\X/9);
\fi }
\end{tikzpicture}
\end{document}
