crammed this into 5 pages
This commit is contained in:
parent
5b322c0695
commit
a8b864f083
@ -65,10 +65,10 @@
|
|||||||
\newcommand{\ohms}[1]{\ensuremath{#1\Omega}}
|
\newcommand{\ohms}[1]{\ensuremath{#1\Omega}}
|
||||||
\newcommand{\fm}{failure~mode}
|
\newcommand{\fm}{failure~mode}
|
||||||
\newcommand{\fms}{failure~modes}
|
\newcommand{\fms}{failure~modes}
|
||||||
\newcommand{\fg}{functional~group}
|
\newcommand{\fg}{functional~grouping}
|
||||||
\newcommand{\FG}{\mathcal{G}}
|
\newcommand{\FG}{\mathcal{G}}
|
||||||
\newcommand{\DC}{\mathcal{DC}}
|
\newcommand{\DC}{\mathcal{DC}}
|
||||||
\newcommand{\fgs}{functional~groups}
|
\newcommand{\fgs}{functional~groupings}
|
||||||
\newcommand{\dc}{derived~component}
|
\newcommand{\dc}{derived~component}
|
||||||
\newcommand{\dcs}{derived~components}
|
\newcommand{\dcs}{derived~components}
|
||||||
\newcommand{\bc}{base~component}
|
\newcommand{\bc}{base~component}
|
||||||
@ -99,9 +99,9 @@ failure mode of the component or sub-system}}}
|
|||||||
\setlength{\topmargin}{0in}
|
\setlength{\topmargin}{0in}
|
||||||
\setlength{\headheight}{0in}
|
\setlength{\headheight}{0in}
|
||||||
\setlength{\headsep}{0in}
|
\setlength{\headsep}{0in}
|
||||||
\setlength{\textheight}{22cm}
|
%\setlength{\textheight}{22cm}
|
||||||
\setlength{\textwidth}{18cm}
|
\setlength{\textwidth}{18cm}
|
||||||
\setlength{\textheight}{24cm}
|
\setlength{\textheight}{24.5cm}
|
||||||
%\setlength{\textwidth}{20cm}
|
%\setlength{\textwidth}{20cm}
|
||||||
\setlength{\oddsidemargin}{0in}
|
\setlength{\oddsidemargin}{0in}
|
||||||
\setlength{\evensidemargin}{0in}
|
\setlength{\evensidemargin}{0in}
|
||||||
@ -115,7 +115,13 @@ failure mode of the component or sub-system}}}
|
|||||||
\setlength{\topmargin}{0pt}
|
\setlength{\topmargin}{0pt}
|
||||||
\setlength{\topsep}{0pt}
|
\setlength{\topsep}{0pt}
|
||||||
\setlength{\partopsep}{0pt}
|
\setlength{\partopsep}{0pt}
|
||||||
%\linespread{0.5}
|
\setlength{\itemsep}{1pt}
|
||||||
|
% \renewcommand\subsection{\@startsection
|
||||||
|
% {subsection}{2}{0mm}%
|
||||||
|
% {-\baslineskip}
|
||||||
|
% {0.5\baselineskip}
|
||||||
|
% {\normalfont\normalsize\itshape}}
|
||||||
|
\linespread{0.6}
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
%\pagestyle{fancy}
|
%\pagestyle{fancy}
|
||||||
@ -129,7 +135,7 @@ failure mode of the component or sub-system}}}
|
|||||||
%\lhead{Developing a rigorous bottom-up modular static failure modelling methodology}
|
%\lhead{Developing a rigorous bottom-up modular static failure modelling methodology}
|
||||||
% numbers at outer edges
|
% numbers at outer edges
|
||||||
\pagenumbering{arabic} % Arabic page numbers hereafter
|
\pagenumbering{arabic} % Arabic page numbers hereafter
|
||||||
\author{R.Clark$^\star$ \\ % , A.~Fish$^\dagger$ , C.~Garrett$^\dagger$, J.~Howse$^\dagger$ \\
|
\author{R.Clark$^\star$,A.~Fish$^\dagger$ , C.~Garrett$^\dagger$, J.~Howse$^\dagger$ \\
|
||||||
$^\star${\em Energy Technology Control, UK. r.clark@energytechnologycontrol.com} \and $^\dagger${\em University of Brighton, UK}
|
$^\star${\em Energy Technology Control, UK. r.clark@energytechnologycontrol.com} \and $^\dagger${\em University of Brighton, UK}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -181,7 +187,7 @@ can be applied to software, and is compatible
|
|||||||
and integrate-able with FMMD performed on mechanical and electronic systems.
|
and integrate-able with FMMD performed on mechanical and electronic systems.
|
||||||
}
|
}
|
||||||
|
|
||||||
\today
|
%\today
|
||||||
\nocite{en298}
|
\nocite{en298}
|
||||||
\nocite{en61508}
|
\nocite{en61508}
|
||||||
|
|
||||||
@ -199,7 +205,8 @@ to define failure modes and failure symptoms for
|
|||||||
software functions.
|
software functions.
|
||||||
%
|
%
|
||||||
With these definitions we can apply the FMMD modular form of FMEA
|
With these definitions we can apply the FMMD modular form of FMEA
|
||||||
to existing software\footnote{Existing software excluding recursive~\cite{misra}[16.2] code, and unstructured non-functional languages}.
|
to existing software\footnote{Existing software excluding recursive~\cite{misra}[16.2] code,
|
||||||
|
and unstructured non-functional languages}.
|
||||||
}
|
}
|
||||||
|
|
||||||
\section{FMEA Background}
|
\section{FMEA Background}
|
||||||
@ -209,10 +216,11 @@ to existing software\footnote{Existing software excluding recursive~\cite{misra}
|
|||||||
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.
|
FMEA dates from the 1940s where simple electro-mechanical systems were the norm.
|
||||||
Modern control systems nearly always have a significant software/firmware element,
|
Modern control systems nearly always have a significant software/firmware element,
|
||||||
and not being able to model software with current FMEA methodologies
|
and not being able to model software with current FMEA methodologies
|
||||||
is a cause for criticism~\cite{easw}~\cite{safeware}~\cite{bfmea}.
|
is a cause for criticism~\cite{safeware}.
|
||||||
|
|
||||||
%Several variants of FMEA exist,
|
%Several variants of FMEA exist,
|
||||||
% traditional FMEA being associated with the manufacturing industry, with the aims of prioritising
|
% traditional FMEA being associated with the manufacturing industry, with the aims of prioritising
|
||||||
@ -240,10 +248,10 @@ hardware and software models, but to perform
|
|||||||
FMEA on the software in isolation~\cite{procsfmea}.
|
FMEA on the software in isolation~\cite{procsfmea}.
|
||||||
Some work has been performed using databases
|
Some work has been performed using databases
|
||||||
to track the relationships between variables
|
to track the relationships between variables
|
||||||
and system failure modes~\cite{procsfmeadb}, and work has been performed to
|
and system failure modes~\cite{procsfmeadb}, work has been performed to
|
||||||
introduce automation into the FMEA process~\cite{appswfmea} and code analysis
|
introduce automation into the FMEA process~\cite{appswfmea} and code analysis
|
||||||
automation~\cite{modelsfmea}. Although the SFMEA and hardware FMEAs are performed separately
|
automation~\cite{modelsfmea}. Although the SFMEA and hardware FMEAs are performed separately
|
||||||
some schools of thought aim for FTA~\cite{nasafta}~\cite{nucfta} (top down - deductive) and FMEA (bottom-up inductive)
|
some schools of thought aim for FTA~\cite{nasafta,nucfta} (top down - deductive) and FMEA (bottom-up inductive)
|
||||||
to be performed on the same system to provide insight into the
|
to be performed on the same system to provide insight into the
|
||||||
software hardware/interface~\cite{embedsfmea}.
|
software hardware/interface~\cite{embedsfmea}.
|
||||||
%
|
%
|
||||||
@ -255,15 +263,16 @@ through the top (and therefore ultimately controlling) layer of software.
|
|||||||
\subsection{Current FMEA techniques are not suitable for software}
|
\subsection{Current FMEA techniques are not suitable for software}
|
||||||
|
|
||||||
The main FMEA methodologies are all based on the concept of taking
|
The main FMEA methodologies are all based on the concept of taking
|
||||||
base component {\fms}, and translating them into system level events/failures~\cite{sfmea}~\cite{sfmeaa}.
|
base component {\fms}, and translating them into system level events/failures~\cite{sfmea,sfmeaa}.
|
||||||
In a complicated system, mapping a component failure mode to a system level failure
|
In a complicated system, mapping a component failure mode to a system level failure
|
||||||
will mean a long reasoning distance; that is to say the actions of the failed component will have to be traced through
|
will mean a long reasoning distance; that is to say the actions of the failed component will have to be traced through
|
||||||
several sub-systems and the effects of other components on the way.
|
several sub-systems and the effects of other components on the way.
|
||||||
%
|
%
|
||||||
With software at the higher levels of these sub-systems
|
With software at the higher levels of these sub-systems
|
||||||
we have yet another layer of complication.
|
we have yet another layer of complication.
|
||||||
|
%
|
||||||
In order to integrate software, in a meaningful way we need to re-think the
|
In order to integrate software, %in a meaningful way
|
||||||
|
we need to re-think the
|
||||||
FMEA concept of simply mapping a base component failure to a system level event.
|
FMEA concept of simply mapping a base component failure to a system level event.
|
||||||
%
|
%
|
||||||
One strategy would be to modularise FMEA. To break down the failure effect
|
One strategy would be to modularise FMEA. To break down the failure effect
|
||||||
@ -301,7 +310,6 @@ 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}.
|
||||||
@ -386,7 +394,7 @@ derived component (which has the system---or top---level failure modes).
|
|||||||
|
|
||||||
\begin{figure}
|
\begin{figure}
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=200pt]{./fmmdh.png}
|
\includegraphics[width=150pt]{./fmmdh.png}
|
||||||
% fmmdh.png: 365x405 pixel, 72dpi, 12.88x14.29 cm, bb=0 0 365 405
|
% fmmdh.png: 365x405 pixel, 72dpi, 12.88x14.29 cm, bb=0 0 365 405
|
||||||
\caption{FMMD Hierarchy}
|
\caption{FMMD Hierarchy}
|
||||||
\label{fig:fmmdh}
|
\label{fig:fmmdh}
|
||||||
@ -428,7 +436,7 @@ We can thus apply the $\derivec$ function to software functions, by viewing them
|
|||||||
mode behaviour. To simplify things as well, software already fits into a hierarchy.
|
mode behaviour. To simplify things as well, software already fits into a hierarchy.
|
||||||
For Electronics and Mechanical systems, although we may be guided by the original designers
|
For Electronics and Mechanical systems, although we may be guided by the original designers
|
||||||
concepts of modularity and sub-systems in design, applying FMMD means deciding on the members for {\fgs}
|
concepts of modularity and sub-systems in design, applying FMMD means deciding on the members for {\fgs}
|
||||||
and the subsequent hierarchy. With software already written, that hierarchy is fixed.
|
and the subsequent hierarchy. With software already written, that hierarchy is fixed/given.
|
||||||
|
|
||||||
% map the FMMD concepts of {\fms}, {\fgs} and {\dcs}
|
% map the FMMD concepts of {\fms}, {\fgs} and {\dcs}
|
||||||
%to software functions.
|
%to software functions.
|
||||||
@ -452,45 +460,43 @@ What is potentially difficult with a software function, is deciding what
|
|||||||
are its `failure~modes', and later what are its `failure~symptoms'.
|
are its `failure~modes', and later what are its `failure~symptoms'.
|
||||||
%
|
%
|
||||||
With electronic components, we can use literature to point us to suitable sets of
|
With electronic components, we can use literature to point us to suitable sets of
|
||||||
{\fms}~\cite{fmd91}~\cite{mil1991}~\cite{en298}.%~\cite{en61508}~\cite{en298}.
|
{\fms}~\cite{fmd91,mil1991,en298}.%,en61508}.%~\cite{en298}.
|
||||||
%
|
%
|
||||||
With software, only some library functions are well known and rigorously documented
|
With software, only some library functions are well known and rigorously documented
|
||||||
enough to have the equivalent of known failure modes.
|
enough to have the equivalent of known failure modes.
|
||||||
Most software is `bespoke'. We need a different strategy to
|
Most software is `bespoke'. We need a different strategy to
|
||||||
describe the failure mode behaviour of software functions.
|
describe the failure mode behaviour of software functions.
|
||||||
We can use definitions from contract programming to assist here.
|
We can use definitions from contract programming to assist here.
|
||||||
|
%
|
||||||
\subsection{Contract programming description}
|
\subsection{Contract programming description}
|
||||||
|
%
|
||||||
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 outputs) 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 components'.
|
||||||
|
%
|
||||||
|
|
||||||
\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.
|
||||||
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.
|
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}
|
\paragraph{Mapping contract `invariant' violations to symptoms and failure modes}
|
||||||
|
%
|
||||||
Invariants in contract programming may apply to inputs to the function (where they can be considered {\fms} in FMMD terminology),
|
Invariants in contract programming may apply to inputs to the function (where they can be considered {\fms} in FMMD terminology),
|
||||||
and to outputs (where they can be considered {failure symptoms} in FMMD terminology).
|
and to outputs (where they can be considered {failure symptoms} in FMMD terminology).
|
||||||
|
|
||||||
|
|
||||||
\subsection{Software FMMD}
|
\subsection{Software FMMD}
|
||||||
|
%
|
||||||
For the purpose of example, we chose a simple common safety critical industrial circuit
|
For the purpose of example, we chose a simple common safety critical industrial circuit
|
||||||
that is nearly always used in conjunction with a programmatic element.
|
that is nearly always used in conjunction with a programmatic element.
|
||||||
A common method for delivering a quantitative value in analogue electronics is
|
A common method for delivering a quantitative value in analogue electronics is
|
||||||
@ -509,15 +515,17 @@ and is therefore easy to detect as an error rather than an incorrect value.
|
|||||||
Should the driving electronics go wrong at the source end, it will usually
|
Should the driving electronics go wrong at the source end, it will usually
|
||||||
supply far too little or far too much current, making an error condition easy to detect.
|
supply far too little or far too much current, making an error condition easy to detect.
|
||||||
%
|
%
|
||||||
At the receiving end, we only require one simple component to convert the
|
At the receiving end, need a resistor to convert the
|
||||||
current signal into a voltage that we can read with an ADC: the humble resistor!
|
current signal into a voltage that we can read with an ADC.%
|
||||||
|
%we only require one simple component to convert the
|
||||||
|
%current signal into a voltage that we can read with an ADC: the humble resistor!
|
||||||
|
|
||||||
|
|
||||||
%BLOCK DIAGRAM HERE WITH FT CIRCUIT LOOP
|
%BLOCK DIAGRAM HERE WITH FT CIRCUIT LOOP
|
||||||
|
|
||||||
\begin{figure}[h]
|
\begin{figure}[h]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=230pt]{./ftcontext.png}
|
\includegraphics[width=200pt]{./ftcontext.png}
|
||||||
% ftcontext.png: 767x385 pixel, 72dpi, 27.06x13.58 cm, bb=0 0 767 385
|
% ftcontext.png: 767x385 pixel, 72dpi, 27.06x13.58 cm, bb=0 0 767 385
|
||||||
\caption{Context Diagram for {\ft} loop}
|
\caption{Context Diagram for {\ft} loop}
|
||||||
\label{fig:ftcontext}
|
\label{fig:ftcontext}
|
||||||
@ -545,15 +553,16 @@ As a voltage, we use ohms law~\cite{aoe} to determine the voltage ranges: $V=IR$
|
|||||||
and $0.020A * \ohms{220} = 4.4V$.
|
and $0.020A * \ohms{220} = 4.4V$.
|
||||||
%
|
%
|
||||||
Our acceptable voltage range is therefore
|
Our acceptable voltage range is therefore
|
||||||
|
%
|
||||||
$$(V \ge 0.88) \wedge (V \le 4.4) \; .$$
|
$(V \ge 0.88) \wedge (V \le 4.4) \; .$
|
||||||
|
|
||||||
This voltage range forms our input requirement.
|
This voltage range forms our input requirement.
|
||||||
%
|
%
|
||||||
We can now examine a software function that performs a conversion from the voltage read to
|
We can now examine a software function that performs a conversion from the voltage read to
|
||||||
a per~mil representation of the {\ft} input current.
|
a per~mil representation of the {\ft} input current.
|
||||||
%
|
%
|
||||||
For the purpose of example the `C' programming language~\cite{kandr} is used\footnote{ C coding examples use the Misra~\cite{misra} and SIL 3 recomended language constraints~\cite{en61508}.}.
|
For the purpose of example the `C' programming language~\cite{DBLP:books/ph/KernighanR88} is
|
||||||
|
used\footnote{ C coding examples use the Misra~\cite{misra} and SIL 3 recommended language constraints~\cite{en61508}.}.
|
||||||
We initially assume a function \textbf{read\_ADC} which returns a floating point %double precision
|
We initially assume a function \textbf{read\_ADC} which returns a floating point %double precision
|
||||||
value which represents the voltage read (see code sample in figure~\ref{fig:code_read_4_20_input}).
|
value which represents the voltage read (see code sample in figure~\ref{fig:code_read_4_20_input}).
|
||||||
|
|
||||||
@ -661,16 +670,18 @@ double read_ADC( int channel ) {
|
|||||||
%}
|
%}
|
||||||
|
|
||||||
|
|
||||||
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, where {\em read\_4\_20\_input}
|
||||||
|
calls {\em read\_ADC}, which in turn interacts with the hardware/electronics.
|
||||||
\begin{figure}[h]
|
%shown in figure~\ref{fig:ct1}.
|
||||||
\centering
|
%
|
||||||
\includegraphics[width=100pt]{./ct1.png}
|
% \begin{figure}[h]
|
||||||
% ct1.png: 151x224 pixel, 72dpi, 5.33x7.90 cm, bb=0 0 151 224
|
% \centering
|
||||||
\caption{Call tree for software example}
|
% \includegraphics[width=56pt]{./ct1.png}
|
||||||
\label{fig:ct1}
|
% % ct1.png: 151x224 pixel, 72dpi, 5.33x7.90 cm, bb=0 0 151 224
|
||||||
\end{figure}
|
% \caption{Call tree for software example}
|
||||||
|
% \label{fig:ct1}
|
||||||
|
% \end{figure}
|
||||||
|
%
|
||||||
This software is above the hardware in the conceptual call tree---from a programmatic perspective---%in software terms---the
|
This software is above the hardware in the conceptual call tree---from a programmatic perspective---%in software terms---the
|
||||||
software is reading values from the `lower~level' electronics.
|
software is reading values from the `lower~level' electronics.
|
||||||
%
|
%
|
||||||
@ -697,11 +708,11 @@ Our functional group, $G_1$ is thus the set of base components: $G_1 = \{R, ADC\
|
|||||||
We now determine the {\fms} of all the components in $G_1$.
|
We now determine the {\fms} of all the components in $G_1$.
|
||||||
For the resistor we can use a failure mode set from the literature~\cite{en298}.
|
For the resistor we can use a failure mode set from the literature~\cite{en298}.
|
||||||
Where the function $fm$ returns a set of failure modes for a given component we can state:
|
Where the function $fm$ returns a set of failure modes for a given component we can state:
|
||||||
|
%
|
||||||
$$ fm(R) = \{OPEN,SHORT\}. $$
|
$ fm(R) = \{OPEN,SHORT\}. $
|
||||||
\vbox{
|
\vbox{
|
||||||
For the ADC we can determine the following failure modes:
|
For the ADC we can determine the following failure modes:
|
||||||
|
%
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item STUCKAT --- The ADC outputs a constant value,
|
\item STUCKAT --- The ADC outputs a constant value,
|
||||||
\item MUXFAIL --- The ADC cannot select its input channel correctly,
|
\item MUXFAIL --- The ADC cannot select its input channel correctly,
|
||||||
@ -710,8 +721,8 @@ For the ADC we can determine the following failure modes:
|
|||||||
\end{itemize}
|
\end{itemize}
|
||||||
}
|
}
|
||||||
We can use the function $fm$ to define the {\fms} of an ADC thus:
|
We can use the function $fm$ to define the {\fms} of an ADC thus:
|
||||||
$$ fm(ADC) = \{ STUCKAT, MUXFAIL,LOW, HIGH \}. $$
|
$ fm(ADC) = \{ STUCKAT, MUXFAIL,LOW, HIGH \}. $
|
||||||
|
%
|
||||||
With these failure modes, we can analyse our first functional group, see table~\ref{tbl:cmatv}.
|
With these failure modes, we can analyse our first functional group, see table~\ref{tbl:cmatv}.
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -758,10 +769,10 @@ We now collect the symptoms for the hardware functional group, $\{ HIGH , LOW, V
|
|||||||
We now create a {\dc} to represent this called $CMATV$.
|
We now create a {\dc} to represent this called $CMATV$.
|
||||||
%
|
%
|
||||||
We can express this using the `$\derivec$' function thus:
|
We can express this using the `$\derivec$' function thus:
|
||||||
$$ CMATV = \; \derivec (G_1) .$$
|
$ CMATV = \; \derivec (G_1) .$
|
||||||
%
|
%
|
||||||
As its failure modes are the symptoms of failure from the functional group we can now state:
|
As its failure modes are the symptoms of failure from the functional group we can now state:
|
||||||
$$fm ( CMATV ) = \{ HIGH , LOW, V\_ERR \} .$$
|
$fm ( CMATV ) = \{ HIGH , LOW, V\_ERR \} .$
|
||||||
|
|
||||||
|
|
||||||
\paragraph{Functional Group - Software - Read\_ADC - RADC}
|
\paragraph{Functional Group - Software - Read\_ADC - RADC}
|
||||||
@ -788,8 +799,7 @@ of this function, which we can call $V\_REF$.
|
|||||||
Taken as a component for use in FMEA/FMMD our function has
|
Taken as a component for use in FMEA/FMMD our function has
|
||||||
two failure modes. We can therefore treat it as a generic component, $Read\_ADC$,
|
two failure modes. We can therefore treat it as a generic component, $Read\_ADC$,
|
||||||
by stating:
|
by stating:
|
||||||
|
$ fm(Read\_ADC) = \{ CHAN\_NO, VREF \} $
|
||||||
$$ fm(Read\_ADC) = \{ CHAN\_NO, VREF \} $$
|
|
||||||
|
|
||||||
As we have a failure mode model for our function, we can now use it in conjunction with
|
As we have a failure mode model for our function, we can now use it in conjunction with
|
||||||
with the ADC hardware {\dc} CMATV, to form a {\fg} $G_2$, where $G_2 =\{ CMSTV, Read\_ADC \}$.
|
with the ADC hardware {\dc} CMATV, to form a {\fg} $G_2$, where $G_2 =\{ CMSTV, Read\_ADC \}$.
|
||||||
@ -843,10 +853,10 @@ for the function.
|
|||||||
This postcondition, {\em /* ensure: value is voltage input to within 0.1\% */ },
|
This postcondition, {\em /* ensure: value is voltage input to within 0.1\% */ },
|
||||||
corresponds to $VV\_ERR$, and is already in the {\fm} set for this {\fg}.
|
corresponds to $VV\_ERR$, and is already in the {\fm} set for this {\fg}.
|
||||||
%
|
%
|
||||||
We can now create a {\dc} called $RADC$ thus: $$RADC = \; \derivec(G_2)$$ which has the following
|
We can now create a {\dc} called $RADC$ thus: $RADC = \; \derivec(G_2)$ which has the following
|
||||||
{\fms}:
|
{\fms}:
|
||||||
|
%
|
||||||
$$ fm(RADC) = \{ VV\_ERR, HIGH, LOW \} .$$
|
$ fm(RADC) = \{ VV\_ERR, HIGH, LOW \} .$
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -861,9 +871,9 @@ to determine its {\fms}.
|
|||||||
Its pre-condition is, {\em /* require: input from ADC to be between 0.88 and 4.4 volts */}.
|
Its pre-condition is, {\em /* require: input from ADC to be between 0.88 and 4.4 volts */}.
|
||||||
We can map this violation of the pre-condition, to the {\fm} VRNGE; %As this function has one pre-condition
|
We can map this violation of the pre-condition, to the {\fm} VRNGE; %As this function has one pre-condition
|
||||||
we can state,
|
we can state,
|
||||||
|
%
|
||||||
$$ fm(read\_4\_20\_input) = \{ VRNGE \} .$$
|
$ fm(read\_4\_20\_input) = \{ VRNGE \} .$
|
||||||
|
%
|
||||||
We can now form a functional group with the {\dc} $RADC$ and the
|
We can now form a functional group with the {\dc} $RADC$ and the
|
||||||
software component $read\_4\_20\_input$, i.e. $G_3 = \{read\_4\_20\_input, RADC\} $.
|
software component $read\_4\_20\_input$, i.e. $G_3 = \{read\_4\_20\_input, RADC\} $.
|
||||||
|
|
||||||
@ -894,12 +904,7 @@ software component $read\_4\_20\_input$, i.e. $G_3 = \{read\_4\_20\_input, RADC\
|
|||||||
|
|
||||||
4: $RADC_{LOW}$ & ADC may read & $OUT\_OF\_$ \\
|
4: $RADC_{LOW}$ & ADC may read & $OUT\_OF\_$ \\
|
||||||
& wrong channel & $RANGE$ \\ \hline
|
& wrong channel & $RANGE$ \\ \hline
|
||||||
|
|
||||||
\hline
|
\hline
|
||||||
|
|
||||||
|
|
||||||
\hline
|
|
||||||
|
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{table}
|
\end{table}
|
||||||
}
|
}
|
||||||
@ -913,26 +918,22 @@ can fail. An $OUT\_OF\_RANGE$ will be flagged by the error flag variable.
|
|||||||
The $VAL\_ERR$ will mean that the value read is simply wrong.
|
The $VAL\_ERR$ will mean that the value read is simply wrong.
|
||||||
%
|
%
|
||||||
We can finally make a {\dc} to represent a failure mode model for our function $read\_4\_20\_input$ thus:
|
We can finally make a {\dc} to represent a failure mode model for our function $read\_4\_20\_input$ thus:
|
||||||
|
%
|
||||||
$$ R420I = \; \derivec(G_3) .$$
|
$ R420I = \; \derivec(G_3) .$
|
||||||
|
%
|
||||||
This new {\dc} has the following {\fms}:
|
This new {\dc} has the following {\fms}:
|
||||||
$$fm(R420I) = \{OUT\_OF\_RANGE, VAL\_ERR\} .$$
|
$fm(R420I) = \{OUT\_OF\_RANGE, VAL\_ERR\} .$
|
||||||
|
|
||||||
%
|
%
|
||||||
% Using the derived components, CMATV and VTPM we create
|
% Using the derived components, CMATV and VTPM we create
|
||||||
% a new functional group. This
|
% a new functional group. This
|
||||||
% integrates FMEA's from software and eletronics
|
% integrates FMEA's from software and eletronics
|
||||||
% into the same failure mode model.
|
% into the same failure mode model.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
We can now represent the software/hardware FMMD analysis
|
We can now represent the software/hardware FMMD analysis
|
||||||
as a hierarchical diagram, see figure~\ref{fig:hd}.
|
as a hierarchical diagram, see figure~\ref{fig:hd}.
|
||||||
|
|
||||||
\begin{figure}[h]
|
\begin{figure}[h]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=200pt]{./hd.png}
|
\includegraphics[width=60pt]{./hd.png}
|
||||||
% hd.png: 363x520 pixel, 72dpi, 12.81x18.34 cm, bb=0 0 363 520
|
% hd.png: 363x520 pixel, 72dpi, 12.81x18.34 cm, bb=0 0 363 520
|
||||||
\caption{FMMD hierarchy with hardware and software elements}
|
\caption{FMMD hierarchy with hardware and software elements}
|
||||||
\label{fig:hd}
|
\label{fig:hd}
|
||||||
@ -952,39 +953,39 @@ using the groups as intermediate stages:
|
|||||||
% \end{eqnarray*}
|
% \end{eqnarray*}
|
||||||
%or,
|
%or,
|
||||||
with a nested definition,
|
with a nested definition,
|
||||||
$$ \derivec \Big( \derivec \big( \derivec(R,ADC), read\_4\_20\_input \big), read\_4\_20\_input \Big). $$
|
$ \derivec \Big( \derivec \big( \derivec(R,ADC), read\_4\_20\_input \big), read\_4\_20\_input \Big). $
|
||||||
|
%
|
||||||
This nested structure means that we have multiple traceable
|
This nested structure means that we have multiple traceable
|
||||||
stages of failure mode reasoning in our analysis. Traditional FMEA would have only one stage
|
stages of failure mode reasoning in our analysis. Traditional FMEA would have only one stage
|
||||||
of reasoning for each component failure mode.
|
of reasoning for each component failure mode.
|
||||||
|
|
||||||
|
|
||||||
\section{Heuristic Comments on {\ft} Input Circuit}
|
% \section{Heuristic Comments on {\ft} Input Circuit}
|
||||||
|
%
|
||||||
Part of the design philosophy of a {\ft} loop, is that
|
% Part of the design philosophy of a {\ft} loop, is that
|
||||||
if anything goes wrong, we should be able to detect it.
|
% if anything goes wrong, we should be able to detect it.
|
||||||
In fact unless all electrical elements in the loop
|
% In fact unless all electrical elements in the loop
|
||||||
are in working order we will detect a failure in
|
% are in working order we will detect a failure in
|
||||||
the majority of cases.
|
% the majority of cases.
|
||||||
\paragraph{Sending side of a {\ft} loop}
|
% \paragraph{Sending side of a {\ft} loop}
|
||||||
A current loop has to be actively maintained. If the sending side looses power,
|
% A current loop has to be actively maintained. If the sending side looses power,
|
||||||
the current will drop to zero, and thus be detectable as an error because it is below 4mA.
|
% the current will drop to zero, and thus be detectable as an error because it is below 4mA.
|
||||||
Should the sending circuitry fail, it is far more likely to drive too high or too low, rather than supply
|
% Should the sending circuitry fail, it is far more likely to drive too high or too low, rather than supply
|
||||||
an erroneous but in bounds ($4mA \ge \wedge \le 20mA$) value.
|
% an erroneous but in bounds ($4mA \ge \wedge \le 20mA$) value.
|
||||||
\paragraph{Receiving side of a {\ft} loop}
|
% \paragraph{Receiving side of a {\ft} loop}
|
||||||
The most common fault is disconnection, and this is easily detected ($0mA\; \le \; 4mA$--out of bounds).
|
% The most common fault is disconnection, and this is easily detected ($0mA\; \le \; 4mA$--out of bounds).
|
||||||
Other failure modes, such as the resistor going open or shorted
|
% Other failure modes, such as the resistor going open or shorted
|
||||||
also immediately push the voltage signal out of bounds.
|
% also immediately push the voltage signal out of bounds.
|
||||||
The software side of the interface, is easy to test, either as software modules
|
% The software side of the interface, is easy to test, either as software modules
|
||||||
or as an integrated system (hand-held precision current sources are cheaply available).
|
% or as an integrated system (hand-held precision current sources are cheaply available).
|
||||||
\paragraph{What could go wrong---Production}
|
% \paragraph{What could go wrong---Production}
|
||||||
PCB construction contractors are well known for random polarity placement of diodes.
|
% PCB construction contractors are well known for random polarity placement of diodes.
|
||||||
Less likely is that the resistor fitted will be an incorrect value, which could
|
% Less likely is that the resistor fitted will be an incorrect value, which could
|
||||||
lead to the range being incorrect. Were this the case, we would have to be very unlucky
|
% lead to the range being incorrect. Were this the case, we would have to be very unlucky
|
||||||
and get a value very close to our chosen \ohms{220} for this to be a problem, and
|
% and get a value very close to our chosen \ohms{220} for this to be a problem, and
|
||||||
in safety critical equipment, a production test rig would pick this up.
|
% in safety critical equipment, a production test rig would pick this up.
|
||||||
Worse perhaps, a resistor with poor temperature coefficient could be
|
% Worse perhaps, a resistor with poor temperature coefficient could be
|
||||||
erroneously chosen (this would be a cheaper component), and could contribute small errors.
|
% erroneously chosen (this would be a cheaper component), and could contribute small errors.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -994,11 +995,13 @@ erroneously chosen (this would be a cheaper component), and could contribute sma
|
|||||||
The {\dc} representing the {\ft} reader
|
The {\dc} 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.
|
||||||
|
%
|
||||||
With this analysis
|
With this analysis
|
||||||
we have a complete `reasoning~path' linking the failures modes from the
|
we have a complete `reasoning~path' linking the failures modes from the
|
||||||
electronics to those in the software.
|
electronics to those in the software.
|
||||||
Each functional group to {\dc} transition represents a
|
Each functional group to {\dc} transition represents a
|
||||||
reasoning stage.
|
reasoning stage.
|
||||||
|
%
|
||||||
With traditional FMEA methods the reasoning~distance is large, because
|
With traditional FMEA methods the reasoning~distance is large, because
|
||||||
it stretches from the component failure mode to the top---or---system level failure.
|
it stretches from the component failure mode to the top---or---system level failure.
|
||||||
For this reason applying traditional FMEA to software stretches
|
For this reason applying traditional FMEA to software stretches
|
||||||
@ -1034,7 +1037,7 @@ Using FMMD we can determine an accurate failure model for the interface as well.
|
|||||||
% %\today
|
% %\today
|
||||||
% %
|
% %
|
||||||
{ %\tiny %
|
{ %\tiny %
|
||||||
\footnotesize
|
\tiny
|
||||||
\bibliographystyle{plain}
|
\bibliographystyle{plain}
|
||||||
\bibliography{../../vmgbibliography,../../mybib}
|
\bibliography{../../vmgbibliography,../../mybib}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user