working on document
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
\usepackage{hyperref}
|
||||
\usepackage{amsmath}
|
||||
\renewcommand{\deg}{$^\circ$}
|
||||
\usepackage[section]{placeins} %place images in section
|
||||
|
||||
\title{Tuning/modeling fast stages of ESB-MX}
|
||||
\author{Thierry Zamofing}
|
||||
@@ -42,15 +43,12 @@ This is set in the gpasciiCommander templates:
|
||||
PwmSf=15134.8909 # =.95*16384. PMAC3-style DSPGATE3 ASIC is being used for the output,
|
||||
the counter moves between +/- 16384. PwmSf is typically set to 95% of 16384
|
||||
\end{verbatim}
|
||||
Nerverless the documentation is confusing. Therefore PwmSf will measure to convert idCmd bits values to idVolts bits at a DC value.
|
||||
|
||||
In steady state an idMeas=... results in idVolts=...
|
||||
(TO BE DONE)\\
|
||||
Nerverless the documentation is confusing. Therefore PwmSf will be measured to convert idCmd bits values to idVolts bits in section \ref{sec:measCurStep}
|
||||
|
||||
The Parker stages are configured to contCur=800mA ,peakCur=2400mA. Specs of the D11 stage are 0.8Amp RMS (producing 4N force) and 2.4Amp RMS peak.\\
|
||||
It should be save to set 0.92Amp DC and 2.8Amp DC.
|
||||
|
||||
\subsection{Measure Current Step}
|
||||
\subsection{Measure Current Step}\label{sec:measCurStep}
|
||||
\verb|MXTuning.py –mode 1| $\rightarrow$ \verb|identifyFxFyStage.m|\\
|
||||
|
||||
\includegraphics[scale=.5]{../matlab/figures/currstep_1.eps}
|
||||
@@ -64,6 +62,27 @@ The loop parameters are:\\
|
||||
IiGain=5, IpfGain=8, IpbGain=8
|
||||
|
||||
|
||||
In steady state an idCmd=idMeas=406. results in aprox. idVolts=7400\\
|
||||
This has been measured precisly from gathered data \verb|chirp_all_1a.npz|
|
||||
at frequencies from 10 to 220 Hz.
|
||||
The images have been generated with
|
||||
\verb|./MXTuning.py --dir MXTuning/19_01_29 --mode 128|.\\
|
||||
|
||||
The overall aplification $iqCmd \rightarrow iqVolts$ is approx. 18.2.
|
||||
|
||||
\begin{figure}[h!]
|
||||
\includegraphics[scale=.45]{../python/MXTuning/19_01_29/img/iqCmd_TF0.eps}
|
||||
\includegraphics[scale=.45]{../python/MXTuning/19_01_29/img/iqCmd_TF1.eps}
|
||||
\caption{IqCmd->IqMeas of motor 1 (bode same for both motors)}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[h!]
|
||||
\includegraphics[scale=.45]{../python/MXTuning/19_01_29/img/iqCmd_TF2.eps}
|
||||
\includegraphics[scale=.45]{../python/MXTuning/19_01_29/img/iqCmd_TF3.eps}
|
||||
\caption{IqCmd->IqVolts of motor 1 (bode same for both motors)}
|
||||
\end{figure}
|
||||
|
||||
\FloatBarrier
|
||||
\subsection{Measure Open Loop}
|
||||
|
||||
The frequency response has been measured with chirps at different amplitudes and frequency regions. The yellow line is averaged measurement data. The black line is the approximated model. The diagram shows \verb|curr_bits| (ca.1mA) to \verb|ActPos| (in um) transfer function.\\
|
||||
@@ -74,6 +93,7 @@ The images have been generated with
|
||||
\includegraphics[scale=.45]{../python/MXTuning/19_01_29/img/bode_model_plot0.eps}
|
||||
\includegraphics[scale=.45]{../python/MXTuning/19_01_29/img/bode_model_plot2.eps}
|
||||
\caption{open loop of motor 1 and 2}
|
||||
\label{fig:mot_open}
|
||||
\end{figure}
|
||||
|
||||
|
||||
@@ -130,8 +150,9 @@ The parameters for that sweep is:\\
|
||||
|
||||
\begin{figure}[h!]
|
||||
\includegraphics[scale=.45]{../python/MXTuning/19_01_29/img/chirp_all_2b0.eps}
|
||||
\includegraphics[scale=.45]{../python/MXTuning/19_01_29/img/chirp_all_2b1.eps}
|
||||
\includegraphics[scale=.45]{../python/MXTuning/19_01_29/img/chirp_all_2b1.eps}
|
||||
\caption{DesPos->ActPos of motor 2}
|
||||
\label{fig:mot1_chirp}
|
||||
\end{figure}
|
||||
|
||||
|
||||
@@ -139,6 +160,7 @@ The parameters for that sweep is:\\
|
||||
\includegraphics[scale=.45]{../python/MXTuning/19_01_29/img/chirp_all_1b2.eps}
|
||||
\includegraphics[scale=.45]{../python/MXTuning/19_01_29/img/chirp_all_1b3.eps}
|
||||
\caption{DesPos->IqCmd of motor 1}
|
||||
\label{fig:mot2_chirp}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[h!]
|
||||
@@ -147,10 +169,9 @@ The parameters for that sweep is:\\
|
||||
\caption{DesPos->IqCmd of motor 2}
|
||||
\end{figure}
|
||||
|
||||
|
||||
Moving 5um with frequencies from 10 to 220Hz\\
|
||||
$\rightarrow$ at frequencies above 200 Hz, the current increses up to 2 amps, and the the following error kicks in\\
|
||||
$\rightarrow$ The response becomes bad above 15Hz (about 3dB)\\
|
||||
$\rightarrow$ The closed loop response becomes bad above 20Hz (motor 1 ca. -10\%, motor 2 +5\% )\\
|
||||
$\rightarrow$ Moving 1um at 1kHz seems to consume a current of about 2 amps.\\
|
||||
|
||||
|
||||
@@ -214,6 +235,18 @@ d=1\\
|
||||
\end{aligned}
|
||||
\]
|
||||
|
||||
To use real values we have to consider: The values
|
||||
$IiGain=5, IpfGain=8, IpbGain=8$ for the Deltatau are in z-domain.\\
|
||||
Therefore for the continous domain they have to be scaled:
|
||||
$Ii=IiGain/ts \quad Ipf=IpfGain \quad Ipb=IpbGain$ with $ts=50\mu s$ (20kHz)\\
|
||||
|
||||
The overall aplification $iqCmd \rightarrow iqVolts$ measured in section {sec:measCurStep} is approx. 18.2.
|
||||
|
||||
The resistance of the stage is 8.8 $\Omega$\\
|
||||
The inductance of the stage is 2.4 mH.\\
|
||||
|
||||
It seems that this works only in the discrete space. s.a. \verb|current_loop.slx|.\\
|
||||
Therefore the only approach is to use the transfer function as approximated in section \ref{sec:measCurStep}.
|
||||
|
||||
\subsection{Mechanical model}
|
||||
|
||||
@@ -340,22 +373,229 @@ U=R\cdot I \qquad P=U \cdot I \quad \rightarrow \quad P=R \cdot I^2\\
|
||||
at a constant current of 0.92A we have $ 8.8 \cdot 0.92^2 = 7.44 $W the resulting force will be:\\
|
||||
$1.46N \cdot \sqrt{7.44} = 3.98 N$
|
||||
|
||||
|
||||
\subsection{identification of stages}
|
||||
|
||||
The goal is to build an optimal state space model of the plant with following input and output taps:
|
||||
|
||||
\begin{figure}[h!]
|
||||
\center
|
||||
\includegraphics[scale=.7]{model4.eps}
|
||||
\caption{model taps}
|
||||
\end{figure}
|
||||
|
||||
|
||||
\verb|full_bode_mot[1|2].mat| is generated from \verb|MXTuning.py| in function \verb|bode_model_plot()|. It contains the bode data of real measurements and approximated transfer functions.
|
||||
|
||||
\verb|identifyFxFyStage.m| reads the python data \verb|full_bode_mot[1|2].mat| and build motor objects with transfer functions and state space models.
|
||||
|
||||
The approximated transfer functions can be tweaked and edited with: e.g. \verb|controlSystemDesigner('bode',1,mot1.tf_xx)| to enhance the model.
|
||||
The full transfer function is then split in individual parts that are put back into \verb|MXTuning.py|.\\
|
||||
|
||||
the transfer functions for each two motors are separated in:\\
|
||||
|
||||
\begin{tabular}{|l|l|l|l|}
|
||||
\hline
|
||||
key & description & motor1 (fy) & motor2 (fx) \\
|
||||
\hline
|
||||
tfc & curren loop tf & f=694 ? 1389 , d=0.75 & same \\
|
||||
tf1 & \vtop{\hbox{\strut main mechanical tf} \hbox{\strut with -40dB/dec }}
|
||||
& mag=6dB f=7.96Hz d=0.6 & mag=12dB f=3.34 d=0.4 \\
|
||||
tf2 & mechanical resonance tf & f=[197,199] d=[0.02,0.02] & f=[55|61] d=[0.2|0.2] \\
|
||||
tf3 & mechanical resonance tf & & f=[128|137] d=[0.05|0.05] \\
|
||||
tf4 & mechanical resonance tf & & f=[410|417] d=[0.015|0.015] \\
|
||||
tf5 & mechanical resonance tf & & f=[230|233] d=[0.04|0.04] \\
|
||||
\hline
|
||||
\end{tabular}
|
||||
|
||||
\vspace{1pc}
|
||||
The black line on figure \ref{fig:mot_open} shows the concatenate transfer function.
|
||||
\vspace{1pc}
|
||||
|
||||
\fbox{\parbox[t]{15cm}{The current loop frequency from the MATLAB identification looks different than the used one. Matlab identifies $w_0=8727rad/sec = f0=1389Hz$ but to match the bode plot a value of half frequency need to be taken:$f_0=694$.}}
|
||||
\vspace{1pc}
|
||||
|
||||
The motor objects contains also 'state space models' of different complexity. From the best approach to the most simlified model.
|
||||
|
||||
As first approach the tf function is just converted to the ss space and the ss matrices are glued together.
|
||||
|
||||
The matlab models are:\\
|
||||
|
||||
\begin{tabular}{ll}
|
||||
\texttt{ssPlt:} & best approach of the plant with mechanics, resonance, current loop etc.\\
|
||||
\texttt{ssMdl\_c1:} & model without resonance (only current and main mechanical)\\
|
||||
\texttt{ssMdl\_12:} & model without current loop, with one resonance (main mechanical + first resonance)\\
|
||||
\texttt{ssMdl\_1:} & model without current loop, no resonance (only main mechanical)\\
|
||||
\end{tabular}
|
||||
|
||||
|
||||
\section{Simulink/MATLAB simulations}
|
||||
|
||||
It has to be checked if the model matches the real stage. Therefore simulations in MATLAB have been done to validate the identification process of the stages.
|
||||
|
||||
TODO: describe the identification process to get a model out of the bode plots. identifyFxFyStage.m\\
|
||||
\subsection{chirp sine closed loop with simulink model}
|
||||
|
||||
Simulink simulation \verb|stage_closed_loop.slx| with \verb|ServoDeltaTau_z G(z)| showed similar response
|
||||
Therefore the model seems good enough
|
||||
To compare the measurements with the model following lines were executed in MATLAB
|
||||
\begin{verbatim}
|
||||
clear;clear global;close all;
|
||||
mot=cell(2,1);
|
||||
[mot{1},mot{2}]=identifyFxFyStage();
|
||||
for k =1:2
|
||||
[pb]=simFxFyStage(mot{k});sim('stage_closed_loop');
|
||||
f=figure(); h=plot(desPos_actPos.Time,desPos_actPos.Data,'g');
|
||||
set(h(1), 'color', 'b'); set(h(2), 'color', [0 0.5 0]);
|
||||
print(f,sprintf('figures/sim_cl_DTGz_%d',mot{k}.id),'-depsc');
|
||||
end
|
||||
\end{verbatim}
|
||||
|
||||
The Simulink model \verb|stage_closed_loop| contains various controller blocks. as \verb|PID G(s)|, \verb|PID G(z)|, \verb|ServoDeltaTau_z G(s)| and \verb|ServoDeltaTau_z G(z)|.
|
||||
|
||||
With the controller block \verb|ServoDeltaTau_z G(z)| the real measurements can be compared with the simulated model.
|
||||
Figures \ref{fig:mot_chirp_sim} showed similar response as the real stages (Figures \ref{fig:mot1_chirp}, \ref{fig:mot2_chirp}). Therefore the model matches the real stage well.
|
||||
|
||||
|
||||
\begin{figure}[h!]
|
||||
\center
|
||||
|
||||
\includegraphics[scale=.45]{../matlab/figures/sim_cl_DTGz.png}
|
||||
\includegraphics[scale=.65]{../matlab/figures/sim_cl_DTGz_1.eps}
|
||||
\includegraphics[scale=.65]{../matlab/figures/sim_cl_DTGz_2.eps}
|
||||
\caption{Motor 1 sim Motor 2 sim}
|
||||
\label{fig:mot_chirp_sim}
|
||||
\end{figure}
|
||||
|
||||
|
||||
The model can be used to imrove the controller in MATLAB/simulink.
|
||||
|
||||
Improvement of the regulation with a simple PID loop and with prefilters did not improve the regulation quality.\\
|
||||
Therefore for better regulation quality more sophisticated controllers as state controllers will be tested.
|
||||
|
||||
\subsection{State Space Controller with Observer}
|
||||
|
||||
\verb|(s.a. http://ctms.engin.umich.edu/CTMS/index.php?example=Introduction§ion=ControlStateSpace)|
|
||||
|
||||
A standard PID controller uses feedback to detect errors between the desired position and the actual position and applies corrective commands to compensate for those errors. Although PID control is the most common type of industrial controller, it does have limitations.
|
||||
The idea of a state space controller with observer is to have a model of the plant which follows all internal states of the real plant. All these internal states of the model can then be used states to build an optimal controller.
|
||||
opposite to the PID cpntroller which is a ‘black-box design’, the state space controller with observer is a ‘white box design’
|
||||
|
||||
To implement a state space controller with observer the model has to be observable and controllable. The full model as used above is not controllable due to the various resonance frequencies. Therefore for the state space controller a simplified model without the resonance frequencies is used.
|
||||
Following lines are used to build the state space controller
|
||||
|
||||
\begin{figure}[h!]
|
||||
\centering
|
||||
\includegraphics[scale=.75]{observer_statefeedback.png}
|
||||
\caption{observer controller}
|
||||
\end{figure}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
\begin{verbatim}
|
||||
clear;clear global;close all;
|
||||
[mot{1},mot{2}]=identifyFxFyStage();
|
||||
for k =1:2
|
||||
close all;[ssc]=StateSpaceControlDesign(mot{k});sim('observer');
|
||||
f=figure();
|
||||
h=plot(desPos_actPos.Time,desPos_actPos.Data,'g');
|
||||
set(h(1), 'color', 'b');
|
||||
set(h(2), 'color', [0 0.5 0]);
|
||||
print(f,sprintf('figures/sim_cl_DTGz_%d',mot{k}.id),'-depsc');
|
||||
end
|
||||
|
||||
close all;[ssc]=StateSpaceControlDesign(mot2);sim('observer');
|
||||
|
||||
close all;[ssc]=StateSpaceControlDesign(mot1);sim('observer');
|
||||
[pb]=simFxFyStage(mot2);sim('stage_closed_loop');
|
||||
close all;[ssc]=StateSpaceControlDesign(mot2);sim('observer');
|
||||
|
||||
\end{verbatim}
|
||||
|
||||
|
||||
|
||||
|
||||
This plot displays bode diagrams of motor 2. The used model for the controller is the blue line, which contains the current loop model and the mechanical model.
|
||||
|
||||
The state space controller is calculated by pole placement on the observer model and on the closed loop system
|
||||
|
||||
Now the controller must be implemented on deltatau to check the performance on the real stage.
|
||||
|
||||
\subsection{Implementing state space controller on Deltatau}
|
||||
|
||||
In MATLAB the function StateSpaceControlDesign() MATLAB produces files /tmp/ssc[1|2].mat.
|
||||
The driver code can be generated with: MXTuning.py –mode 8
|
||||
|
||||
Finally the real time servo code for the DeltaTau has to be compiled with:
|
||||
\verb|/epics_ioc_modules/ESB_MX/python/usr_code$ make|
|
||||
|
||||
|
||||
The system was simulated with 5kHz servo loop frequency
|
||||
Higher servo loop frequency does not help, because a continious state space controller behaves not relevantly better than a sampled state space controller at 5kHz.
|
||||
|
||||
|
||||
Model of the stage instead of measuring transfer function
|
||||
|
||||
\textbf{Overview of code}\\
|
||||
|
||||
\vspace{1pc}
|
||||
|
||||
\begin{tabular}{ll}
|
||||
\texttt{identifyFxFyStage.m}& read python data and build motor objects. plot bode\\
|
||||
\texttt{simFxFyStage.m}& build a pb structure which contains current (Jan 2019) Powerbrick controller settings\\
|
||||
\texttt{StateSpaceControlDesign.m}& design a discrete observer for Fx,Fy stages\\
|
||||
\end{tabular}
|
||||
|
||||
|
||||
|
||||
\newpage
|
||||
\section{SCRATCH}
|
||||
|
||||
\begin{verbatim}
|
||||
clear;
|
||||
clear global;
|
||||
close all;
|
||||
[mot1,mot2]=identifyFxFyStage();
|
||||
[pb]=simFxFyStage(mot1);sim('stage_closed_loop');
|
||||
close all;[ssc]=StateSpaceControlDesign(mot1);sim('observer');
|
||||
[pb]=simFxFyStage(mot2);sim('stage_closed_loop');
|
||||
close all;[ssc]=StateSpaceControlDesign(mot2);sim('observer');
|
||||
|
||||
mögliche tf:
|
||||
iqCmd---->iqMeas
|
||||
iqVolts-->iqMeas
|
||||
iqMeas--->actPos
|
||||
|
||||
identifyFxFyStage.m
|
||||
controlSystemDesigner('bode',1,mot1.tf_py); % <<<<<<<<< This opens a transferfunction that can be edited
|
||||
\end{verbatim}
|
||||
|
||||
\begin{figure}[h!]
|
||||
\center
|
||||
\framebox[5cm]{\vtop{\vspace{2cm}\hbox{INSERT GRAPHICS}\vspace{2cm}}}
|
||||
\framebox[5cm]{\vtop{\vspace{2cm}\hbox{INSERT GRAPHICS}\vspace{2cm}}}
|
||||
%\includegraphics[scale=.7]{model4.eps}
|
||||
\caption{Motor 1 sim Motor 2 sim}
|
||||
\end{figure}
|
||||
|
||||
|
||||
|
||||
\newpage
|
||||
\section{shapepath}
|
||||
\begin{verbatim}
|
||||
Add section shapepath:
|
||||
----------------------
|
||||
TODO:
|
||||
trajectory generation: trajectory.py
|
||||
images of spiral motion:
|
||||
with pvt motion ->
|
||||
with pvt0 motion ->
|
||||
with ift motion ->
|
||||
|
||||
TODO:
|
||||
timing of motion
|
||||
\end{verbatim}
|
||||
|
||||
|
||||
\newpage
|
||||
\section{HelicalScan coordinates}
|
||||
|
||||
|
||||
@@ -484,11 +484,11 @@
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.9795908"
|
||||
inkscape:cx="236.80936"
|
||||
inkscape:cy="676.66651"
|
||||
inkscape:zoom="3.9591816"
|
||||
inkscape:cx="214.19855"
|
||||
inkscape:cy="140.433"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="g4662"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:snap-grids="false"
|
||||
inkscape:snap-nodes="true"
|
||||
@@ -535,7 +535,7 @@
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
@@ -544,7 +544,8 @@
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
id="g4751">
|
||||
id="g4751"
|
||||
transform="translate(-115.97567,-159.20536)">
|
||||
<g
|
||||
transform="translate(167.1835,537.94393)"
|
||||
id="g5494">
|
||||
@@ -561,7 +562,7 @@
|
||||
inkscape:connector-curvature="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="161.62982"
|
||||
y="163.64703"
|
||||
id="text5500"
|
||||
@@ -570,11 +571,11 @@
|
||||
id="tspan5502"
|
||||
x="161.62982"
|
||||
y="163.64703">k<tspan
|
||||
style="font-size:64.99999762%;baseline-shift:sub;-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:64.99999762%;font-family:sans-serif;-inkscape-font-specification:sans-serif;baseline-shift:sub"
|
||||
id="tspan5504">2</tspan></tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="162.25244"
|
||||
y="223.88326"
|
||||
id="text5506"
|
||||
@@ -583,7 +584,7 @@
|
||||
id="tspan5508"
|
||||
x="162.25244"
|
||||
y="223.88326">d<tspan
|
||||
style="font-size:64.99999762%;baseline-shift:sub;-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:64.99999762%;font-family:sans-serif;-inkscape-font-specification:sans-serif;baseline-shift:sub"
|
||||
id="tspan5510">2</tspan></tspan></text>
|
||||
</g>
|
||||
<g
|
||||
@@ -602,7 +603,7 @@
|
||||
inkscape:connector-curvature="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="161.62982"
|
||||
y="163.64703"
|
||||
id="text5518"
|
||||
@@ -611,11 +612,11 @@
|
||||
id="tspan5520"
|
||||
x="161.62982"
|
||||
y="163.64703">k<tspan
|
||||
style="font-size:64.99999762%;baseline-shift:sub;-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:64.99999762%;font-family:sans-serif;-inkscape-font-specification:sans-serif;baseline-shift:sub"
|
||||
id="tspan5522">3</tspan></tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="162.25244"
|
||||
y="223.88326"
|
||||
id="text5524"
|
||||
@@ -624,7 +625,7 @@
|
||||
id="tspan5526"
|
||||
x="162.25244"
|
||||
y="223.88326">d<tspan
|
||||
style="font-size:64.99999762%;baseline-shift:sub;-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:64.99999762%;font-family:sans-serif;-inkscape-font-specification:sans-serif;baseline-shift:sub"
|
||||
id="tspan5528">3</tspan></tspan></text>
|
||||
</g>
|
||||
<g
|
||||
@@ -643,7 +644,7 @@
|
||||
inkscape:connector-curvature="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="161.62982"
|
||||
y="163.64703"
|
||||
id="text5536"
|
||||
@@ -652,11 +653,11 @@
|
||||
id="tspan5538"
|
||||
x="161.62982"
|
||||
y="163.64703">k<tspan
|
||||
style="font-size:64.99999762%;baseline-shift:sub;-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:64.99999762%;font-family:sans-serif;-inkscape-font-specification:sans-serif;baseline-shift:sub"
|
||||
id="tspan5540">4</tspan></tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="162.25244"
|
||||
y="223.88326"
|
||||
id="text5542"
|
||||
@@ -665,7 +666,7 @@
|
||||
id="tspan5544"
|
||||
x="162.25244"
|
||||
y="223.88326">d<tspan
|
||||
style="font-size:64.99999762%;baseline-shift:sub;-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:64.99999762%;font-family:sans-serif;-inkscape-font-specification:sans-serif;baseline-shift:sub"
|
||||
id="tspan5546">4</tspan></tspan></text>
|
||||
</g>
|
||||
<g
|
||||
@@ -684,7 +685,7 @@
|
||||
inkscape:connector-curvature="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="161.62982"
|
||||
y="163.64703"
|
||||
id="text4179"
|
||||
@@ -693,11 +694,11 @@
|
||||
id="tspan4181"
|
||||
x="161.62982"
|
||||
y="163.64703">k<tspan
|
||||
style="font-size:64.99999762%;baseline-shift:sub;-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:64.99999762%;font-family:sans-serif;-inkscape-font-specification:sans-serif;baseline-shift:sub"
|
||||
id="tspan4183">1</tspan></tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="162.25244"
|
||||
y="223.88326"
|
||||
id="text4185"
|
||||
@@ -706,7 +707,7 @@
|
||||
id="tspan4187"
|
||||
x="162.25244"
|
||||
y="223.88326">d<tspan
|
||||
style="font-size:64.99999762%;baseline-shift:sub;-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:64.99999762%;font-family:sans-serif;-inkscape-font-specification:sans-serif;baseline-shift:sub"
|
||||
id="tspan4189">1</tspan></tspan></text>
|
||||
</g>
|
||||
<path
|
||||
@@ -857,7 +858,7 @@
|
||||
id="path4969"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.99921262;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:1.99842525,0.99921262;stroke-dashoffset:0"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.99921262;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.99842525, 0.99921262;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 392.94434,726.17106 0,284.71454"
|
||||
id="path4971"
|
||||
inkscape:connector-curvature="0"
|
||||
@@ -875,7 +876,7 @@
|
||||
sodipodi:role="line">F</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="208.95726"
|
||||
y="978.75311"
|
||||
id="text4983"
|
||||
@@ -884,7 +885,7 @@
|
||||
id="tspan4985"
|
||||
x="208.95726"
|
||||
y="978.75311">x<tspan
|
||||
style="font-size:64.99999762%;baseline-shift:sub;-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:64.99999762%;font-family:sans-serif;-inkscape-font-specification:sans-serif;baseline-shift:sub"
|
||||
id="tspan4987">1</tspan></tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
@@ -921,7 +922,8 @@
|
||||
x="261.1651"
|
||||
y="384.76447" /></text>
|
||||
<g
|
||||
id="g4662">
|
||||
id="g3751"
|
||||
transform="translate(-76.164766,-80.012455)">
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.99921262;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#arrowSimple-3)"
|
||||
d="m 180.6988,251.497 39.37564,10e-6"
|
||||
@@ -996,7 +998,7 @@
|
||||
y="303.33737" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="227.16205"
|
||||
y="255.63519"
|
||||
id="text4477"
|
||||
@@ -1005,11 +1007,11 @@
|
||||
id="tspan4479"
|
||||
x="227.16205"
|
||||
y="255.63519">Ipf<tspan
|
||||
style="font-size:64.99999762%;baseline-shift:sub;-inkscape-font-specification:sans-serif;font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:64.99999762%;font-family:sans-serif;-inkscape-font-specification:sans-serif;baseline-shift:sub"
|
||||
id="tspan4481" /></tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="226.29077"
|
||||
y="325.74106"
|
||||
id="text4485"
|
||||
@@ -1020,7 +1022,7 @@
|
||||
y="325.74106">1/s</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="306.96725"
|
||||
y="326.66757"
|
||||
id="text4493"
|
||||
@@ -1031,7 +1033,7 @@
|
||||
y="326.66757">Ii</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="384.99814"
|
||||
y="348.06015"
|
||||
id="text4501"
|
||||
@@ -1042,7 +1044,7 @@
|
||||
y="348.06015">Ipb</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="416.43161"
|
||||
y="255.63519"
|
||||
id="text4509"
|
||||
@@ -1147,7 +1149,7 @@
|
||||
id="text4581"
|
||||
y="230.09137"
|
||||
x="522.22412"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
y="230.09137"
|
||||
x="522.22412"
|
||||
@@ -1162,7 +1164,7 @@
|
||||
y="383.08676" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="527.82147"
|
||||
y="405.22519"
|
||||
id="text4485-6"
|
||||
@@ -1228,7 +1230,7 @@
|
||||
id="text4624"
|
||||
y="531.07703"
|
||||
x="224.67343"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
y="531.07703"
|
||||
x="224.67343"
|
||||
@@ -1239,7 +1241,7 @@
|
||||
id="text4632"
|
||||
y="530.15051"
|
||||
x="300.31821"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
y="530.15051"
|
||||
x="300.31821"
|
||||
@@ -1250,7 +1252,7 @@
|
||||
id="text4640"
|
||||
y="530.15051"
|
||||
x="396.31726"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
y="530.15051"
|
||||
x="396.31726"
|
||||
@@ -1261,7 +1263,7 @@
|
||||
id="text4648"
|
||||
y="530.15051"
|
||||
x="487.76007"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
y="530.15051"
|
||||
x="487.76007"
|
||||
@@ -1280,7 +1282,7 @@
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.99921262;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#arrowSimple-3)" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="436.84088"
|
||||
y="395.54733"
|
||||
id="text4455-3"
|
||||
@@ -1331,7 +1333,7 @@
|
||||
id="text4568"
|
||||
y="573.43542"
|
||||
x="343.26251"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
y="573.43542"
|
||||
x="343.26251"
|
||||
@@ -1342,7 +1344,7 @@
|
||||
id="text4572"
|
||||
y="518.54041"
|
||||
x="267.64017"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
y="518.54041"
|
||||
x="267.64017"
|
||||
@@ -1350,7 +1352,7 @@
|
||||
sodipodi:role="line">F</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="356.84125"
|
||||
y="517.17444"
|
||||
id="text4580"
|
||||
@@ -1361,7 +1363,7 @@
|
||||
y="517.17444">x</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="448.99844"
|
||||
y="517.17444"
|
||||
id="text4584"
|
||||
@@ -1372,7 +1374,7 @@
|
||||
y="517.17444">x</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="530.4397"
|
||||
y="517.8147"
|
||||
id="text4588"
|
||||
@@ -1386,7 +1388,7 @@
|
||||
id="text4576"
|
||||
y="517.17444"
|
||||
x="530.4397"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
y="517.17444"
|
||||
x="530.4397"
|
||||
@@ -1495,7 +1497,8 @@
|
||||
y="272.87753">-</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
id="g4644">
|
||||
id="g4644"
|
||||
transform="translate(-17.784359,-38.086449)">
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 145.27559,62.985622 10.62992,0 c 0,0 -0.18891,-10.773258 3.54331,-10.629922 4.86622,0.186888 5.21509,14.173229 3.54331,14.173229 -1.67178,0 -1.3265,-14.173232 3.54331,-14.173229 4.86981,4e-6 5.16418,14.173229 3.5433,14.173229 -1.62088,0 -1.3265,-14.17323 3.54331,-14.173229 4.86981,2e-6 5.54957,14.173228 3.54331,14.173229 -2.00626,10e-7 -1.32292,-13.986341 3.5433,-14.173229 3.73222,-0.143335 3.54331,10.629922 3.54331,10.629922 l 10.62992,0"
|
||||
@@ -1549,7 +1552,7 @@
|
||||
id="text4427"
|
||||
y="52.155495"
|
||||
x="82.340248"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
y="52.155495"
|
||||
x="82.340248"
|
||||
@@ -1560,7 +1563,7 @@
|
||||
id="text4431"
|
||||
y="49.021507"
|
||||
x="163.64127"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
y="49.021507"
|
||||
x="163.64127"
|
||||
@@ -1571,7 +1574,7 @@
|
||||
id="text4435"
|
||||
y="108.22343"
|
||||
x="249.3869"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:sans-serif;font-stretch:normal;font-variant:normal;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
y="108.22343"
|
||||
x="249.3869"
|
||||
@@ -1589,5 +1592,142 @@
|
||||
x="16.370785"
|
||||
y="104.59885">iqVolts</tspan></text>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="653.67316"
|
||||
y="828.74841"
|
||||
id="text3852"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3854"
|
||||
x="653.67316"
|
||||
y="828.74841" /></text>
|
||||
<g
|
||||
id="g3960">
|
||||
<rect
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.73211181;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
id="rect3591"
|
||||
width="74.421585"
|
||||
height="99.359833"
|
||||
x="107.41199"
|
||||
y="899.23157" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.99921262;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#arrowSimple-3)"
|
||||
d="m 50.18638,921.41108 56.70939,-2e-5"
|
||||
id="path3603"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<text
|
||||
sodipodi:linespacing="125%"
|
||||
id="text3605"
|
||||
y="925.54919"
|
||||
x="-1.4135728"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
y="925.54919"
|
||||
x="-1.4135728"
|
||||
id="tspan3607"
|
||||
sodipodi:role="line">iqCmd</tspan></text>
|
||||
<g
|
||||
transform="translate(-405.25244,162.8825)"
|
||||
id="g3856">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3609"
|
||||
d="m 587.02969,749.59853 56.70939,-2e-5"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.99921262;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#arrowSimple-3)" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="647.9472"
|
||||
y="753.73669"
|
||||
id="text3611"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3613"
|
||||
x="647.9472"
|
||||
y="753.73669">iqVolts</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(-405.25244,161.60653)"
|
||||
id="g3861">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3615"
|
||||
d="m 587.02969,775.31685 56.70939,-2e-5"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.99921262;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#arrowSimple-3)" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="647.9472"
|
||||
y="779.45502"
|
||||
id="text3617"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3619"
|
||||
x="647.9472"
|
||||
y="779.45502">iqMeas (equals force and acceleration)</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(-405.25244,163.03468)"
|
||||
id="g3866">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3621"
|
||||
d="m 587.02969,798.33107 56.70939,-2e-5"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.99921262;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#arrowSimple-3)" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="647.9472"
|
||||
y="803.9231"
|
||||
id="text3623"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3625"
|
||||
x="647.9472"
|
||||
y="803.9231">actVel</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(-405.25244,162.8825)"
|
||||
id="g3871">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3627"
|
||||
d="m 587.95212,822.92562 56.70939,-2e-5"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.99921262;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#arrowSimple-3)" />
|
||||
<text
|
||||
sodipodi:linespacing="125%"
|
||||
id="text3599"
|
||||
y="828.28693"
|
||||
x="649.76263"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
y="828.28693"
|
||||
x="649.76263"
|
||||
id="tspan3601"
|
||||
sodipodi:role="line">actPos</tspan></text>
|
||||
</g>
|
||||
<text
|
||||
sodipodi:linespacing="125%"
|
||||
id="text3936"
|
||||
y="943.24255"
|
||||
x="123.30198"
|
||||
style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
y="943.24255"
|
||||
x="123.30198"
|
||||
id="tspan3938"
|
||||
sodipodi:role="line">stage</tspan><tspan
|
||||
y="961.99255"
|
||||
x="123.30198"
|
||||
sodipodi:role="line"
|
||||
id="tspan3986">x or y</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 102 KiB |
BIN
matlab/current_loop.slx
Normal file
BIN
matlab/current_loop.slx
Normal file
Binary file not shown.
@@ -62,12 +62,12 @@ function [mot1,mot2]=identifyFxFyStage()
|
||||
s=str2ndOrd(tfc);
|
||||
t=(0:199)*50E-6;
|
||||
[y,t]=step(tfc,t);
|
||||
f=figure();f.Position=[200,100,900,500]
|
||||
f=figure();f.Position=[200,100,900,500];
|
||||
subplot(1,2,1);
|
||||
plot(t*1000,obj.currstep.OutputData(11:210),'b',t*1000,y*1000,'r');
|
||||
xlabel('ms')
|
||||
ylabel('curr\_bits')
|
||||
grid on
|
||||
grid on;
|
||||
legend('real signal','model','Location','southeast')
|
||||
title(s);
|
||||
subplot(1,2,2);
|
||||
|
||||
Binary file not shown.
@@ -16,7 +16,8 @@ bit 3=8: custom chirp record/plot for various transfer function
|
||||
bit 4=16: plot the full bode recording
|
||||
bit 5=32: plot the full bode recording with an approximation model
|
||||
bit 6=64: plot all raw acquired data files
|
||||
bit 7=128: generate observer code (after files generated with matlab)
|
||||
bit 7=128: custom plots
|
||||
bit 8=256: generate observer code (after files generated with matlab)
|
||||
|
||||
-> check https://github.com/klauer/ppmac for fast data gathering server which supports
|
||||
phase gathering -> not yet compiling: /home/zamofing_t/Documents/prj/SwissFEL/PowerBrickInspector/ppmac/fast_gather
|
||||
@@ -37,6 +38,27 @@ from pbtools.misc.gather import Gather
|
||||
from pbtools.misc.tuning import Tuning
|
||||
|
||||
|
||||
# import sys, os
|
||||
|
||||
def wait_key():
|
||||
''' Wait for a key press on the console and return it. '''
|
||||
result = None
|
||||
import termios
|
||||
fd = sys.stdin.fileno()
|
||||
|
||||
oldterm = termios.tcgetattr(fd)
|
||||
newattr = termios.tcgetattr(fd)
|
||||
newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO
|
||||
termios.tcsetattr(fd, termios.TCSANOW, newattr)
|
||||
try:
|
||||
result = sys.stdin.read(1)
|
||||
except IOError:
|
||||
pass
|
||||
finally:
|
||||
termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm)
|
||||
return result
|
||||
|
||||
|
||||
class MXTuning(Tuning):
|
||||
tuneDir='/opt/ppmac/tune/'
|
||||
|
||||
@@ -75,7 +97,7 @@ class MXTuning(Tuning):
|
||||
#identify matlab: k:0.671226 w0:134.705 damp:0.191004
|
||||
mag1=6 #10**(db_mag1/20)
|
||||
db_mag1=20*np.log10(mag1)#dB
|
||||
w1=53.4705*_N #rad/sec
|
||||
w1=50.*_N #rad/sec
|
||||
f1=w1/2/np.pi; # ca. 6.5Hz
|
||||
T1=1/w1
|
||||
d1=0.6 # daempfung =1 -> keine resonanz -> den1= np.poly1d([T1,1])**2
|
||||
@@ -126,7 +148,7 @@ class MXTuning(Tuning):
|
||||
#identify matlab: k:1.7282 w0:51.069 damp:0.327613
|
||||
mag1=12. #10**(db_mag1/20)
|
||||
db_mag1=20*np.log10(mag1)#dB
|
||||
w1=18.*_N #rad/sec
|
||||
w1=21.*_N #rad/sec
|
||||
f1=w1/2/np.pi; # ca. 6.5Hz
|
||||
T1=1/w1
|
||||
d1=0.4 # daempfung =1 -> keine resonanz -> den1= np.poly1d([T1,1])**2
|
||||
@@ -134,8 +156,8 @@ class MXTuning(Tuning):
|
||||
den1 = np.poly1d([T1**2,2*T1*d1,1])
|
||||
|
||||
#resonance frequency
|
||||
f2=np.array([57.8,61.8])
|
||||
d2=np.array([.08,.095])#daempfung
|
||||
f2=np.array([55.,61.])
|
||||
d2=np.array([.2,.2])#daempfung
|
||||
w2=f2*2*np.pi #rad/sec
|
||||
T2=1/w2
|
||||
num2 = np.poly1d([T2[0]**2,2*T2[0]*d2[0],1])
|
||||
@@ -144,7 +166,7 @@ class MXTuning(Tuning):
|
||||
#bode(mdl)
|
||||
|
||||
#resonance frequency
|
||||
f3=np.array([136,148])
|
||||
f3=np.array([128,137])
|
||||
d3=np.array([.05,.05])#daempfung
|
||||
w3=f3*2*np.pi #rad/sec
|
||||
T3=1/w3
|
||||
@@ -456,7 +478,7 @@ EXPORT_SYMBOL(obsvr_servo_ctrl_{motid});'''.format(motid=motid)
|
||||
save_figs(os.path.join(self.baseDir,'bode_model_plot'))
|
||||
|
||||
if mode&64: # plot all raw acquired data files
|
||||
# display bode plots
|
||||
plt.close('all')
|
||||
import glob
|
||||
for fn in glob.glob(os.path.join(self.baseDir,'*.npz')):
|
||||
print(fn)
|
||||
@@ -464,11 +486,64 @@ EXPORT_SYMBOL(obsvr_servo_ctrl_{motid});'''.format(motid=motid)
|
||||
meta = fh['meta'].item()
|
||||
data = fh['data']
|
||||
plt.close('all')
|
||||
self.bode_plot(data, mode=25, kwargs=meta)
|
||||
bm=25
|
||||
if fn.find('all')>0:
|
||||
bm+=32 #amplitude linear (not dB)
|
||||
self.bode_plot(data, mode=bm, kwargs=meta)
|
||||
plt.show(block=False)
|
||||
save_figs(fn)
|
||||
#wait_key()
|
||||
raw_input('press return')
|
||||
|
||||
if mode&128: #generater code
|
||||
|
||||
if mode&128: #custom plots
|
||||
plt.close('all')
|
||||
G1=signal.lti([1/8.8], [2.4E-3/8.8,1]) # num denum
|
||||
print('rise time %e s'%(2.4E-3/8.8))
|
||||
bode(G1)
|
||||
t,y=G1.step()
|
||||
fig=plt.figure();ax=fig.add_subplot(1,1,1)
|
||||
ax.plot(t,y)
|
||||
#current loop 2nd order approx
|
||||
#identification with matlab: k=1, w0=8725, d=0.75
|
||||
dc=.75 # daempfung =1 -> keine resonanz -> den1= np.poly1d([T1,1])**2
|
||||
wc=8725. # rad/sec
|
||||
#...but phase lag seems to have earlier effect -> reduce wc. Probably because of the slower outer servo loop
|
||||
wc*=.5 # rad/sec
|
||||
Tc=1/wc
|
||||
num=np.poly1d([1.])
|
||||
den=np.poly1d([Tc**2,2*Tc*dc,1])
|
||||
mdl=signal.lti(num, den) # num denum
|
||||
bode(mdl)
|
||||
t,y=mdl.step()
|
||||
ax.plot(t,y)
|
||||
ax.grid(True)
|
||||
plt.show(block=False)
|
||||
raw_input('press return')
|
||||
|
||||
plt.close('all')
|
||||
fn=os.path.join(self.baseDir,'chirp_all_1a.npz')
|
||||
fh=np.load(fn)
|
||||
data=fh['data']
|
||||
meta=fh['meta'].item()
|
||||
meta['file']=fn
|
||||
# 2 DesPos,ActPos,IqCmd,IqMeas,IqVolts (for current, plant and regulation transfer function)
|
||||
for xy in ((2, 3), (2, 4)):
|
||||
self.bode_plot(data, xy=xy, mode=25+32, kwargs=meta)
|
||||
|
||||
fig=plt.figure(2)
|
||||
fig.axes[0].set_ylim(.9, 1.1)
|
||||
fig.axes[1].set_ylim(-40,10)
|
||||
fig.suptitle('tf: iqCmd->iqMeas', fontsize=16)
|
||||
fig=plt.figure(4)
|
||||
fig.axes[0].set_ylim(15,30)
|
||||
fig.axes[1].set_ylim(-20,20)
|
||||
fig.suptitle('tf: iqCmd->iqVolts', fontsize=16)
|
||||
plt.show(block=False)
|
||||
save_figs(os.path.join(self.baseDir,'iqCmd_TF'))
|
||||
|
||||
|
||||
if mode&256: #generater code
|
||||
#before this can be done, the observer controller has to be designed with matlab:
|
||||
#s.a.ESB_MX/matlab/Readme.md
|
||||
#clear;
|
||||
@@ -501,9 +576,10 @@ EXPORT_SYMBOL(obsvr_servo_ctrl_{motid});'''.format(motid=motid)
|
||||
fh.close()
|
||||
print(fnc+' generated.')
|
||||
print('now compile it looking at PBTools/pbtools/usr_servo_phase/usrServoSample')
|
||||
|
||||
print('done')
|
||||
plt.show()
|
||||
plt.show(block=False)
|
||||
raw_input('press return')
|
||||
|
||||
|
||||
def save_figs(fn):
|
||||
figures = [manager.canvas.figure
|
||||
@@ -524,14 +600,14 @@ def bode(mdl):
|
||||
w,mag,phase = signal.bode(mdl,1000)
|
||||
f=w/(2*np.pi)
|
||||
fig = plt.figure()
|
||||
ax = fig.add_subplot(2, 1, 1)
|
||||
ax.semilogx(f,mag,'-') # Bode magnitude plot
|
||||
ax.yaxis.set_label_text('dB ampl')
|
||||
ax1 = fig.add_subplot(2, 1, 1)
|
||||
ax1.semilogx(f,mag,'-') # Bode magnitude plot
|
||||
ax1.yaxis.set_label_text('dB ampl')
|
||||
plt.grid(True)
|
||||
ax = fig.add_subplot(2, 1, 2)
|
||||
ax.semilogx(f,phase,'-') # Bode magnitude plot
|
||||
ax.yaxis.set_label_text('phase')
|
||||
ax.xaxis.set_label_text('frequency [Hz]')
|
||||
ax2 = fig.add_subplot(2, 1, 2, sharex = ax1)
|
||||
ax2.semilogx(f,phase,'-') # Bode magnitude plot
|
||||
ax2.yaxis.set_label_text('phase')
|
||||
ax2.xaxis.set_label_text('frequency [Hz]')
|
||||
plt.grid(True)
|
||||
#plt.show()
|
||||
|
||||
@@ -577,6 +653,7 @@ Examples:'''+''.join(map(lambda s:cmd+s, exampleCmd))+'\n '
|
||||
tune.baseDir=args.dir
|
||||
assert(os.path.exists(tune.baseDir))
|
||||
tune.run(args.mode)
|
||||
|
||||
#------------------ Main Code ----------------------------------
|
||||
#ssh_test()'/tmp/usrcode.c'
|
||||
ret=parse_args()
|
||||
|
||||
Reference in New Issue
Block a user