User Documentation

Anhang: Tutorial - C-Funktionen aus der IEC aufrufen
Systemhandbuch
2696780000/02/04.2020
131
In der Struktur struct func1_Instance wird die globale Variable der IEC-
Funktion abgebildet. Dazu wird der darin existierende Code durch Folgen-
den ersetzt:
struct func1_Instance {
int32_t *inst_global;
};
Zusätzlich müssen noch die beiden Dateien stdio.h und string.h inklu-
diert werden.
Um die C-Funktion zu erstellen wird im Projektbaum unter myIEC_C_Call ►
src die Datei MyIEC_C_Call.c im Arbeitsbereich geöffnet. Der Programm-
code in der Funktion int func1(...) wird entfernt und durch die nachfol-
genden Codeteile ersetzt.
In der ersten Codezeile der Funktion wird die Variable char msg [106] defi-
niert. Diese Variable wird später zum Zwischenspeichern eines Textes ge-
nutzt.
In der nächsten Codezeile werden die Werte der Eingangsparameter
(Adressen auf Speicherbereich), welche von der IEC-Applikation beim Aufruf
der C-Funktion übergeben werden, im u-create studio im Trace-Monitor aus-
gegeben.
printf("func1 (called from IEC) with params: in_dword:%i, in_string:%s,
in_real:%f \n", *(in->in_dword), in->in_string, *(in->in_real));
In den nächsten Zeilen werden die Berechnungen durchgeführt.
Zuerst wird die Variable inst_global mit der Variable in_dword addiert:
*(inst->inst_global) += *(in->in_dword);
Danach wird die Variable in_real mit 3 multipliziert und das Ergebnis der
Variable out_dword zugewiesen:
*(out->out_dword) = *(in->in_real) * 3;
Als Nächstes wird in die Variable msg ein Text bestehend aus der Variable
in_string und einer zusätzlichen Zeichenkette geschrieben. Anschließend
wird der Inhalt der Variable msg in die Variable out_string kopiert.
sprintf(msg,"C-Function answering to \"%s\" .", in->in_string);
strcpy(out->out_string , msg);
Zum Schluss wird die Variable in_dword mit 2 multipliziert und das Ergebnis
als Rückgabewert der Funktion zurückgegeben.
return *(in->in_dword) * 2;
Die C-Funktion wurde erstellt.
Nun wird das Projekt mittels Project ► Build All in der Menüleiste gebaut
und das Generat (libMyIEC_C_Call.so) mittels Download auf die Steue-
rung in das Verzeichnis /appldisk/application/control/ccontrol/ ge-
laden.