Allgemein #
Mit ACCCAL können Sie während des Kalibriervorgangs auf ihre eigene Hardware zugreifen. Es können damit einfache Aktionen wie z.B. das Einlesen der aktuellen Temperatur und Luftfeuchte, aber auch wesentlich komplexere Vorgänge ausgeführt werden. Dieses Konzept wird in ACCCAL als Plugin bezeichnet. Plugins sind Windows DLLs welche von Ihnen selbst programmiert werden können um den Zugriff auf ihre Hardware zu bewerkstelligen.
Aufbau der DLL #
Exportierte Funktionen #
Die Windows DLL muss eine 32bit Dll sein, welche folgende Funktionen exportieren sollte.
#ifdef ACCCALDEMOPLUGIN_EXPORTS
#define ACCCALDEMOPLUGIN_API extern __declspec(dllexport)
#else
#define ACCCALDEMOPLUGIN_API extern __declspec(dllimport)
#endif
// This is the callback to send measured values back to ACCCAL
// VariableName consist of two parts divided by a dot eg. TESTING.TEMPERATURE
// VariableUnit is the Unit of your measured value
// Value is your measured value
typedef void(__stdcall* callback)(const char* VariableName, const char* VariableUnit, const char* Value);
extern "C"
{
// Functions are called in this sequence
ACCCALDEMOPLUGIN_API int Initialize(callback aCallback);
ACCCALDEMOPLUGIN_API void SUTBegin(void);
ACCCALDEMOPLUGIN_API void SUTStep(int StepNo, double Frequency, double Acceleration);
ACCCALDEMOPLUGIN_API void SUTEnd(void);
ACCCALDEMOPLUGIN_API void Finalize(void);
}
Es muss mindestens die Funktion Initialize implementiert werden, da über diese der Callback als Parameter geliefert wird, über welchen Sie ihre Messwerte an ACCCAL senden können. Diese Funktion wird vor dem Kalibriervorgang aufgerufen. Hier kann z.B. die Verbindung zu Ihrer Hardware geöffnet, Variablen initialisiert oder ähnliches vorgenommen werden. Ab diesem Zeitpunkt ist auch der Callback bereit Messdaten anzunehmen. Danach wird SUTBegin aufgerufen, um den Start des Kalibrievorgangs zu signalisieren. Es folgt SUTStep für jeden Schritt in der Kalibrierpunktvorlage. In StepNo 0 wird die aktuelle Empfindlichkeit ermittelt. Sind alle Kalibrierschritte abgearbeitet, wird SUTEnd aufgerufen. Mit Finalize wird das Ende der Kalibrierung signalisiert.
Alle exportierten Funktionen müssen cdecl als Aufrufkonvention haben, nur der callback ist als stdcall ausgeführt.
Der CALLBACK #
Der Callback hat folgendes Aussehen:
void* Callback(const char* VariableName, const char* VariableUnit, const char* Value);
Der Callback erwartet 3 Parameter vom Typ const char* und liefert kein Funktionsergebnis zurück. Im Parameter VariableName wird der Name der Variablen übergeben. Variablennamen bestehen aus zwei Teilen, welche durch einen Punkt getrennt sind (z.B.: DLL.TEMPERATURE) und können dadurch in den Reports als Ersatztexte verwendet werden. Es wird empfohlen keine Sonderzeichen in den Namen der Variablen zu verwenden. In VariableUnit steht die Einheit der Variablen und Value beinhaltet deren Messwert. Im einfachsten Fall, würde der Aufruf folgendermaßen aussehen:
#include "ACCCALDemoPlugin.h"
callback MyCallback;
ACCCALDEMOPLUGIN_API int Initialize(callback aCallback)
{
MyCallback = aCallback; // Callback merken
MyCallback("PLUGIN.BAROMETRIC PRESSURE", "hPa", "1021"); // Callback aufrufen
return 1;
}
Zwischen Initialize und Finalize kann jederzeit ein Messwert über den Callback an ACCCAL übertragen werden.
Aktivieren der Plugins #
Nachdem Sie ihre DLL erstellt haben, kopieren Sie diese in Plugin-Verzeichnis von ACCCAL. Existiert dieses noch nicht, dann legen Sie einen neuen Orden mit dem Namen Plugins im Installationsverzeichnis von ACCCAL an. Öffnen Sie die Datei ACCCAL.INI und tragen in der Sektion [PLUGINS] ihre DLL ein.
[PLUGINS]
MYDLL=MYDLL.DLL;1
Es können hier beliebig viele Plugins eingetragen werden. Sie sollten allerdings darauf achten, dass nicht zu viel Zeit in den Aufrufen vergeudet wird.
Demo Plugin #
Es werden zwei Demo Plugins in Visual C++ bzw. Delphi bei der Installation im Ordner Plugins als Source-Code mitgeliefert. Sie können aber auch jede andere Programmiersprache zu Erstellung verwenden, sofern standard 32Bit DLLs damit erzeugt werden können.