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}
