lunchtime edit
This commit is contained in:
parent
2305f58a37
commit
0eca387b18
@ -145,6 +145,14 @@ methodology",
|
|||||||
YEAR = "2005"
|
YEAR = "2005"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@BOOK{easw,
|
||||||
|
AUTHOR = "Nancy Leveson",
|
||||||
|
TITLE = "Engineering a safer world ISBN: 978-0262016629",
|
||||||
|
PUBLISHER = "MIT Press",
|
||||||
|
YEAR = "2012"
|
||||||
|
}
|
||||||
|
|
||||||
@BOOK{bfmea,
|
@BOOK{bfmea,
|
||||||
AUTHOR = "Robin E McDermot et all",
|
AUTHOR = "Robin E McDermot et all",
|
||||||
TITLE = "The Basics of FMEA ISBN: 0-527-76320-9",
|
TITLE = "The Basics of FMEA ISBN: 0-527-76320-9",
|
||||||
@ -240,6 +248,12 @@ methodology",
|
|||||||
YEAR = "2002"
|
YEAR = "2002"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@BOOK{kandr,
|
||||||
|
AUTHOR = "Kernighan,Ritchie",
|
||||||
|
TITLE = "The C programming Language 2nd edition",
|
||||||
|
PUBLISHER = "Prentise Hall",
|
||||||
|
YEAR = "1988"
|
||||||
|
}
|
||||||
|
|
||||||
@BOOK{probstat,
|
@BOOK{probstat,
|
||||||
AUTHOR = " M~R~Spiegel",
|
AUTHOR = " M~R~Spiegel",
|
||||||
|
@ -172,13 +172,19 @@ With these definitions we can apply FMEA
|
|||||||
to existing software\footnote{Existing software excluding recursive code, and unstructured non-functional languages}.
|
to existing software\footnote{Existing software excluding recursive code, and unstructured non-functional languages}.
|
||||||
}
|
}
|
||||||
|
|
||||||
\section{FMEA Process}
|
\section{FMEA Background}
|
||||||
|
|
||||||
%What FMEA is, briefly variants...
|
%What FMEA is, briefly variants...
|
||||||
|
|
||||||
Failure Mode effects Analysis is the process of taking
|
Failure Mode effects Analysis is the process of taking
|
||||||
component failure modes, and by reasoning, tracing their effects through a system
|
component failure modes, and by reasoning, tracing their effects through a system
|
||||||
and determining what system level failure modes could be caused.
|
and determining what system level failure modes could be caused.
|
||||||
|
FMEA dates from the 1940s where simple electro-mechanical systems were the norm.
|
||||||
|
Modern control systems nearly always have a significant software/firmware element,
|
||||||
|
and not being able to model software with current FMEA methodologies
|
||||||
|
is a cause for criticism~\cite{easw}~\cite{safeware}~\cite{bfmea}.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Several variants of FMEA exist,
|
Several variants of FMEA exist,
|
||||||
traditional FMEA being a associated with the manufacturing industry, with the aims of prioritising
|
traditional FMEA being a associated with the manufacturing industry, with the aims of prioritising
|
||||||
@ -203,13 +209,17 @@ all the above variants of FMEA.
|
|||||||
|
|
||||||
\section{Modularising FMEA}
|
\section{Modularising FMEA}
|
||||||
|
|
||||||
In outline, in order to modularise FMEA, we must create small modules form the bottom-up.
|
In outline, in order to modularise FMEA, we must create small modules from the bottom-up.
|
||||||
We can do this by taking collections of base~components that
|
We can do this by taking collections of base~components that
|
||||||
perform (ideally) a simple and well defined task.
|
perform (ideally) a simple and well defined task.
|
||||||
|
%
|
||||||
We can call these {\fgs}. We can then analyse the failure mode behaviour of a {\fg}
|
We can call these {\fgs}. We can then analyse the failure mode behaviour of a {\fg}
|
||||||
using all the failure modes of all its components.
|
using all the failure modes of all its components.
|
||||||
|
%
|
||||||
When we have its failure mode behaviour, or the symptoms of failure from the perspective of the {\fg},
|
When we have its failure mode behaviour, or the symptoms of failure from the perspective of the {\fg},
|
||||||
we now treat the {\fg} as a {\dc}; where the failure modes of the {\dc} are the symptoms of failure of the {\fg}.
|
we now treat the {\fg} as a {\dc}; where the failure modes of the {\dc} are the symptoms of failure of the {\fg}.
|
||||||
|
%
|
||||||
|
%
|
||||||
We can now use {\dcs} to build higher level {\fgs} until we have a complete hierarchical model
|
We can now use {\dcs} to build higher level {\fgs} until we have a complete hierarchical model
|
||||||
of the failure mode behaviour of a system. An example of this process, applied to an inverting op-amp configuration
|
of the failure mode behaviour of a system. An example of this process, applied to an inverting op-amp configuration
|
||||||
is given in~\cite{syssafe2011}.
|
is given in~\cite{syssafe2011}.
|
||||||
@ -297,12 +307,16 @@ of typical modern safety critical systems.
|
|||||||
With modular FMEA (FMMD) we have the concepts of failure~modes
|
With modular FMEA (FMMD) we have the concepts of failure~modes
|
||||||
of components, {\fgs} and symptoms of failure for a functional group.
|
of components, {\fgs} and symptoms of failure for a functional group.
|
||||||
|
|
||||||
A programmatic function is very similar to a functional group.
|
A programmatic function is very similar to a f via hardware interactionunctional group.
|
||||||
It calls other functions, and uses data sources, which could be viewed as its `components'.
|
It calls other functions, and uses data sources via hardware interaction, which could be viewed as its `components'.
|
||||||
It has outputs which will be used by functions that may call it.
|
It has outputs which will be used by functions that may call it.
|
||||||
|
map the FMMD concepts of {\fms}, {\fgs} and {\dcs}
|
||||||
However, we need to define a clear concept of failure modes of a function in order to
|
to software functions.
|
||||||
map FMMD to software.
|
%
|
||||||
|
%However, we need to map a the FMMD concepts of {\fms}, {\fgs} and {\dcs}
|
||||||
|
to software functions.
|
||||||
|
% failure modes of a function in order to
|
||||||
|
%map FMMD to software.
|
||||||
|
|
||||||
\subsection{Software, a natural hierarchy}
|
\subsection{Software, a natural hierarchy}
|
||||||
|
|
||||||
@ -317,25 +331,30 @@ functions that interact with hardware/electronics.
|
|||||||
|
|
||||||
Contract programming is a discipline~\cite{dbcbe} for building software functions in a controlled
|
Contract programming is a discipline~\cite{dbcbe} for building software functions in a controlled
|
||||||
and traceable way. Each function is subject to pre-conditions (constraints on its inputs),
|
and traceable way. Each function is subject to pre-conditions (constraints on its inputs),
|
||||||
post-conditions (constraints on its outputs) and function wide invariants (rules).
|
post-conditions (constraints` on its outpu'ts) and function wide invariants (rules).
|
||||||
|
|
||||||
|
|
||||||
\paragraph{Mapping contract pre-condition violations to failure modes}
|
\paragraph{Mapping contract `pre-condition' violations to failure modes}
|
||||||
|
|
||||||
A precondition, or requirement for a contract software function
|
A precondition, or requirement for a contract software function
|
||||||
defines the correct ranges of input conditions for the function
|
defines the correct ranges of input conditions for the function
|
||||||
to operate successfully.
|
to operate successfully.
|
||||||
|
|
||||||
For a software function, a violation of a pre-condition is
|
For a software function, a violation of a pre-condition is
|
||||||
in effect a failure mode of one of its components.
|
in effect a failure mode of `one of its com'ponents.
|
||||||
|
|
||||||
|
|
||||||
\paragraph{Mapping contract post-condition violations to symptoms}
|
\paragraph{Mapping contract `post-condition' violations to symptoms}
|
||||||
|
|
||||||
A post condition is a definition of correct behaviour by a function.
|
A post condition is a definition of correct behaviour by a function.
|
||||||
This could be an action performed or an output value.
|
|
||||||
|
|
||||||
A violated post condition is a symptom of failure of a function.
|
A violated post condition is a symptom of failure of a function.
|
||||||
|
Post conditions could be either actions performed (i.e. the state of hardware changed) or an output value of a function.
|
||||||
|
|
||||||
|
\paragraph{Mapping contract `invariant' violations to symptoms and failure modes}
|
||||||
|
|
||||||
|
Invariants in contract programming may apply to inputs to the function (where the can be considered {\fms} in FMMD terminology),
|
||||||
|
and to outputs (where the can be considered {failure symptoms} in FMMD terminology).
|
||||||
|
|
||||||
|
|
||||||
\subsection{Software FMEA}
|
\subsection{Software FMEA}
|
||||||
|
|
||||||
@ -343,18 +362,29 @@ A violated post condition is a symptom of failure of a function.
|
|||||||
|
|
||||||
|
|
||||||
Consider a function that reads a {\ft} input, and returns a value between 0 and 999 (i.e. per mil $\permil$)
|
Consider a function that reads a {\ft} input, and returns a value between 0 and 999 (i.e. per mil $\permil$)
|
||||||
representing the current detected with an error indication flag .
|
representing the current detected with an additional error indication flag .
|
||||||
|
|
||||||
Let us assume the {\ft} detection is via a \ohms{220} resistor., and that we read a voltage
|
Let us assume the {\ft} detection is via a \ohms{220} resistor., and that we read a voltage
|
||||||
from an ADC into the software.
|
from an ADC into the software.
|
||||||
Let us define any value outside the 4mA to 20mA range as an error condition.
|
Let us define any value outside the 4mA to 20mA range as an error condition.
|
||||||
|
%
|
||||||
As a voltage, we use ohms law~\cite{aoe} to determine the voltage ranges: $V=IR$, $0.004A * \ohms{220} = 0.88V$
|
As a voltage, we use ohms law~\cite{aoe} to determine the voltage ranges: $V=IR$, $0.004A * \ohms{220} = 0.88V$
|
||||||
and $0.020A * \ohms{220} = 4.4V$. Our acceptable voltage range is therefore $V >= 0.88 \wedge V<= 4.4$.
|
and $0.020A * \ohms{220} = 4.4V$.
|
||||||
|
%
|
||||||
|
Our acceptable voltage range is therefore $V >= 0.88 \wedge V<= 4.4$.
|
||||||
This voltage range forms our input requirement.
|
This voltage range forms our input requirement.
|
||||||
We can now examine software function. For the purpose of example the `C' programming language is used.
|
%
|
||||||
We assume a function {\em read\_ADC()} which returns a double precision
|
We can now examine a software function that performs a conversion from the voltage read to
|
||||||
value which holds the voltage read.
|
a per~mil representation of the {\ft} input current.
|
||||||
{\vbox{
|
%
|
||||||
|
or the purpose of example the `C' programming language is used.
|
||||||
|
We initially assume a function \textbf{read\_ADC} which returns a floating point %double precision
|
||||||
|
value which holds the voltage read (see code sample in figure~\ref{fig:code_read_4_20_input}).
|
||||||
|
|
||||||
|
|
||||||
|
%%{\vbox{
|
||||||
|
\begin{figure}
|
||||||
|
|
||||||
\footnotesize
|
\footnotesize
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
/* Software function to read 4mA to 20mA input */
|
/* Software function to read 4mA to 20mA input */
|
||||||
@ -384,22 +414,28 @@ int read_4_20_input ( int * value ) {
|
|||||||
return error_flag;
|
return error_flag;
|
||||||
}
|
}
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
}
|
%}
|
||||||
}
|
%}
|
||||||
|
\label{fig:code_read_4_20_input}
|
||||||
|
\caption{Software Function: \textbf{read\_4\_20\_input}}
|
||||||
|
\label{fig:420i}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
Note that the function above calls another, `read\_ADC', which returns a
|
We now look at the function called by \textbf{read\_4\_20\_input}, \textbf{read\_ADC}, which returns a
|
||||||
voltage for a given ADC channel. This function
|
voltage for a given ADC channel. This function
|
||||||
deals directly with the hardware in the micro-controller we are running the software on.
|
deals directly with the hardware in the micro-controller we are running the software on.
|
||||||
Its job is to select the correct channel (ADC multiplexer) and then to initiate a
|
Its job is to select the correct channel (ADC multiplexer) and then to initiate a
|
||||||
conversion by setting an ADC 'go' bit.
|
conversion by setting an ADC 'go' bit (see code sample in figure~\ref{code_read_ADC}).
|
||||||
|
It takes the raw ADC reading and converts it into a floating point\footnote{the type, `double' or `double precision', is a standard C language floating point type~\cite{kandr}.}
|
||||||
|
voltage value.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%{\vbox{
|
||||||
|
\begin{figure}
|
||||||
{\vbox{
|
\label{fig:code_read_ADC}
|
||||||
\footnotesize
|
\footnotesize
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
/* Software function to read voltage from a */
|
/* Software function to read voltage from a */
|
||||||
@ -440,8 +476,10 @@ double read_ADC( int channel ) {
|
|||||||
return dval;
|
return dval;
|
||||||
}
|
}
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
}
|
\caption{Software Function: \textbf{read\_ADC}}
|
||||||
}
|
\end{figure}
|
||||||
|
%}
|
||||||
|
%}
|
||||||
|
|
||||||
|
|
||||||
We now have a very simple software structure, a call tree, shown in figure~\ref{fig:ct1}.
|
We now have a very simple software structure, a call tree, shown in figure~\ref{fig:ct1}.
|
||||||
@ -477,15 +515,23 @@ $$ fm(R) = \{OPEN,SHORT\}. $$
|
|||||||
|
|
||||||
For the ADC we can determine the following failure modes:
|
For the ADC we can determine the following failure modes:
|
||||||
|
|
||||||
$$ fm(ADC) = \{ STUCKAT, MUXFAIL, LOWOUT, HIGHOUT \}. $$
|
\begin{itemize}
|
||||||
|
\item STUCKAT --- The ADC outputs a constant value,
|
||||||
|
\item MUXFAIL --- The ADC cannot select its input channel correctly,
|
||||||
|
\item LOW --- The ADC output is always LOW, or zero ADC counts,
|
||||||
|
\item HIGH --- The ADC output is always HIGH, or max ADC counts.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
With these failure modes, we can analyse our first functional group.
|
We can use the function $fm$ to define the {\fms} of an ADC thus:
|
||||||
|
$$ fm(ADC) = \{ STUCKAT, MUXFAIL,LOW, HIGH \}. $$
|
||||||
|
|
||||||
|
With these failure modes, we can analyse our first functional group, see table~ref{tbl:cmatv}.
|
||||||
|
|
||||||
{
|
{
|
||||||
\tiny
|
\tiny
|
||||||
\begin{table}[h+]
|
\begin{table}[h+]
|
||||||
\caption{CMATV: Failure Mode Effects Analysis} % title of Table
|
\caption{CMATV: Failure Mode Effects Analysis} % title of Table
|
||||||
\label{tbl:phs225amp}
|
\label{tbl:cmatv}
|
||||||
|
|
||||||
\begin{tabular}{|| l | c | l ||} \hline
|
\begin{tabular}{|| l | c | l ||} \hline
|
||||||
\textbf{Failure} & \textbf{failure} & \textbf{Symptom} \\
|
\textbf{Failure} & \textbf{failure} & \textbf{Symptom} \\
|
||||||
@ -507,8 +553,8 @@ With these failure modes, we can analyse our first functional group.
|
|||||||
4: $ADC_{MUXFAIL}$ & ADC may read & $V\_ERR$ \\
|
4: $ADC_{MUXFAIL}$ & ADC may read & $V\_ERR$ \\
|
||||||
& wrong channel & \\ \hline
|
& wrong channel & \\ \hline
|
||||||
|
|
||||||
5: $ADC_{LOWOUT}$ & output low & $LOW$ \\
|
5: $ADC_{LOW}$ & output low & $LOW$ \\
|
||||||
6: $ADC_{HIGHOUT}$ & output high & $HIGH$ \\ \hline
|
6: $ADC_{HIGH}$ & output high & $HIGH$ \\ \hline
|
||||||
|
|
||||||
|
|
||||||
\hline
|
\hline
|
||||||
@ -561,7 +607,7 @@ We can now analyse this hardware/software combined {\fg}.
|
|||||||
\tiny
|
\tiny
|
||||||
\begin{table}[h+]
|
\begin{table}[h+]
|
||||||
\caption{RADC: Failure Mode Effects Analysis} % title of Table
|
\caption{RADC: Failure Mode Effects Analysis} % title of Table
|
||||||
\label{tbl:phs225amp}
|
\label{tbl:radc}
|
||||||
|
|
||||||
\begin{tabular}{|| l | c | l ||} \hline
|
\begin{tabular}{|| l | c | l ||} \hline
|
||||||
\textbf{Failure} & \textbf{failure} & \textbf{Symptom} \\
|
\textbf{Failure} & \textbf{failure} & \textbf{Symptom} \\
|
||||||
@ -630,7 +676,7 @@ We can now form a functional group with the {\dc} $RADC$ and the software compon
|
|||||||
\tiny
|
\tiny
|
||||||
\begin{table}[h+]
|
\begin{table}[h+]
|
||||||
\caption{Read\_4\_20: Failure Mode Effects Analysis} % title of Table
|
\caption{Read\_4\_20: Failure Mode Effects Analysis} % title of Table
|
||||||
\label{tbl:phs225amp}
|
\label{tbl:r420i}
|
||||||
|
|
||||||
\begin{tabular}{|| l | c | l ||} \hline
|
\begin{tabular}{|| l | c | l ||} \hline
|
||||||
\textbf{Failure} & \textbf{failure} & \textbf{Symptom} \\
|
\textbf{Failure} & \textbf{failure} & \textbf{Symptom} \\
|
||||||
@ -705,12 +751,22 @@ The derived component representing the {\ft} reader
|
|||||||
in software shows that by taking a modular approach for FMEA, we can integrate
|
in software shows that by taking a modular approach for FMEA, we can integrate
|
||||||
software and electro-mechanical FMEA models.
|
software and electro-mechanical FMEA models.
|
||||||
|
|
||||||
|
|
||||||
|
We now have a {\dc} for a {\ft} input in software.
|
||||||
|
Typically, more than one such input could be present in a real-world system.
|
||||||
|
Not only have we integrated electronics and software in an FMEA, we can also
|
||||||
|
re-use the analysis for each {\ft} input in the system.
|
||||||
|
|
||||||
The unsolved symptoms, or unobservable errors, i.e. $VAL\_ERR$ could be addressed
|
The unsolved symptoms, or unobservable errors, i.e. $VAL\_ERR$ could be addressed
|
||||||
by another software function to read other known signals
|
by another software function to read other known signals
|
||||||
via the MUX (i.e. voltage references). This strategy would
|
via the MUX (i.e. voltage references). This strategy would
|
||||||
detect ADC STUCK AT and MUX FAIL failure modes.
|
detect ADC STUCK AT and MUX FAIL failure modes.
|
||||||
|
%
|
||||||
|
Detailing this however, is beyond the scope %and page-count
|
||||||
|
of this paper.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Detailing this however, is beyond the scope and page-count of this paper.
|
|
||||||
%Its solved. Hoooo-ray !!!!!!!!!!!!!!!!!!!!!!!!
|
%Its solved. Hoooo-ray !!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user