[TASK] Generic commit.

This commit is contained in:
Jan Philipp Timme 2016-10-10 11:50:26 +02:00
parent afbe2019ac
commit 3fd3e904ec

View File

@ -1104,8 +1104,18 @@ Diese muss nun lediglich als Ereignisdatenstrom an der Engine registriert werden
\item \textbf{Verschleiß der Bremsen durch sehr starke Bremsmanöver:}
Die Umsetzung hier ist sehr ähnlich zu dem Query aus Listing~\ref{lst:scenario_strong_acceleration}, da der einzige Unterschied die Beschleunigungsrichtung ist. Somit ist für die Erkennung lediglich die Vertauschung der beiden Geschwindigkeitsparameter bei der Differenzbildung notwendig. Am Ende der Auswertung wird dann ein Ereignis vom Typ \texttt{CarStrongBrakeEvent} gefeuert.
\item \textbf{Verschleiß des Motors durch Fahrt mit überhöhter Motordrehzahl:} Um die andauernd überhöhte Motordrehzahl eines PKW zu erkennen, müssen mehrere \texttt{CarStatusEvent}s in einem Zeitfenster betrachtet werden und die durchschnittliche Motordrehzahl durch den Einsatz von Aggregationsfunktionen ermittelt werden.
\item \textbf{Verschleiß des Motors durch Fahrt mit überhöhter Motordrehzahl:} Um die andauernd überhöhte Motordrehzahl eines PKW zu erkennen, müssen mehrere \texttt{CarStatusEvent}s für einen einzelnen PKW in einem Zeitfenster betrachtet werden und die durchschnittliche Motordrehzahl durch den Einsatz von Aggregationsfunktionen ermittelt werden. Dieser ermittelte Mittelwert muss nun mit den im Domänenwissen hinterlegten Daten für das Modell des PKW abgeglichen werden, um festzustellen, ob er sich noch in dem für den Betrieb zulässigen Bereich befindet.
Die folgende, abstrakte CEP-Regel stellt diesen Vorgang dar:
\begin{lstlisting}[mathescape=true,label={},caption={}]
CONDITION ($(CarStatusEvent\ AS\ statusEvent)$)[WindowSize:15s,StepSize:5s]
$\wedge$ AGGREGATE(statusEvent, "motorRPM", {statusEvent.relatedCar}, AVG) AS avgMotorRPM
$\wedge$ lookup("maxMotorRPM", statusEvent.relatedCar) AS maxMotorRPM
$\wedge$ avgMotorRPM > maxMotorRPM
ACTION
new CarEngineWearEvent(relatedCar=c.relatedCar, avgMotorRPM=avgMotorRPM, maxMotorRPM=maxMotorRPM)
\end{lstlisting}
Übersetzt man diese CEP-Regel in einen C-SPARQL-Query, so erhält man folgende Abfrage:
\begin{lstlisting}[label={lst:scenario_get_engine_wear},caption={Ermittlung überhöhter Motordrehzahl im Betrieb}]
REGISTER STREAM getEngineWear AS
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
@ -1118,7 +1128,7 @@ CONSTRUCT {
; car:avgMotorRPM ?avgMotorRPM
; car:maxMotorRPM ?maxMotorRPM .
}
FROM STREAM <http://example.org/carSim/stream/carStream> [RANGE 3s STEP 1s]
FROM STREAM <http://example.org/carSim/stream/carStream> [RANGE 15s STEP 5s]
FROM <http://example.org/carSim/localDomainKnowledge>
WHERE {
{
@ -1135,6 +1145,8 @@ WHERE {
FILTER(?avgMotorRPM > ?maxMotorRPM)
}
\end{lstlisting}
Auch diese Abfrage muss später in der Engine als Datenstrom registriert werden, um innerhalb von weiteren Abfragen auf die Ergebnisse dieses Queries zugreifen zu können.
\item \textbf{Verschleiß der Handbremse durch Fahren mit angezogener Handbremse:}
\item \textbf{Verschleiß der Reifen durch Fahren mit zu niedrigem Reifendruck:}
\end{itemize}