Paralleler, nicht-blockierender, Zugriff auf ein Inferenzmodul
In diesem Beispiel wird gezeigt, wie auf eine Instanz des FB_MllPrediction
aus zwei parallellaufenden Tasks zugegriffen werden kann.
Das Beispiel kann hier heruntergeladen werden: concurrent sample.
Die Instanz fbpredict
ist in der GVL_ML deklariert. Somit haben alle Programme in der PLC Zugriff auf die Instanz. Als Programme sind angelegt.
- P_InitML: Hier ist die Schrittkette zur Initialisierung/zum Laden eines ML-Modells beschrieben.
- P_Predict_Task1: Hier wird die Predict-Methode des
fbpredict
aufgerufen, wobei das PRG auf Core 1 ausgeführt wird. - P_Predict_Task2: Hier wird die Predict-Methode des
fbpredict
aufgerufen, wobei das PRG auf Core 2 ausgeführt wird.
Die wesentlichen Bestandteile zur parallelen Ausführung von 2 Predict-Aufrufen sind:
- Die maximale Anzahl paralleler Zugriffe muss bei der Configure Methode angegeben werden:
GVL_ML.fbpredict.stPredictionParameter.MaxConcurrency := nMaxConcurrency;
mit nMaxConcurrency = 2.
Die Instanz hält dann diese Anzahl von unabhängigen Inferenz-Maschinen vor. - Beim Aufruf der Predict-Methode ist eine eindeutige ID des aufrufenden Kontextes anzugeben. Diese sind in P_Predict_Task1 und P_Predict_Task2 als Konstanten deklariert, siehe
nConcurrencyId
.
Der Anwender muss sicherstellen, dass jeder aufrufende Kontext eine eindeutige ID mit dem Predict-Aufruf übergibt. - Der restliche Quellcode ist größtenteils identisch mit dem Schnellstart-Beispiel.