W&T verbindet
Interfaces für TCP/IP, Ethernet, RS-232, RS-485, USB, 20mA, Glas- und Kunststoff-LWL, http, SNMP, OPC, Modbus TCP, I/O digital, I/O analog, ISA, PCI

Applikation zur pure.box:

Eigenes C-Programm auf der pure.box ausführen


Das folgende Beispiel soll einen Überblick verschaffen, welche Schritte erforderlich sind, um einen C-Quelltext für das Zielsystem der pure.box zu kompilieren, das Kompilat auf die Box zu laden und dieses zyklisch auszuführen. Die Funktion des vorliegenden Beispielprogramms besteht darin, den Schaltzustand eines Outputs eines digitalen Web-IOs im Minutentakt umzuschalten.

Die pure.box erlaubt für ihr System erstellte Kompilate bei Systemstart, zeitgesteuert oder beim Empfang von TCP- oder UDP-Daten auszuführen. Unterstützt werden die Bibliotheken:

  • GNU C-Lib v2.1
  • SQLite v3.6
  • OpenSSL v0.9
  • zlib v1.2

Download und Installation des Cross-Kompilers

Auf dem in der pure.box eingesetzten Coldfire-Prozessor läuft ein GNU/Linux-Betriebssystem. Der für diese Prozessor/Betriebssystem-Kombination erforderliche Cross-Kompiler (inkl. Dokumentation) kann hier kostenlos in der Lite-Version für Windows und Linux heruntergeladen werden. Informationen zum Installationsvorgang auf dem Hostsystem entnehmen Sie bitte der Dokumentation.

Quelltext unter Windows kompilieren

Der Quelltext für das vorliegende Beispielprogramm kann hier heruntergeladen werden. Das Archiv enthält neben der C-Datei auch das bereits fertige pure.box-Kompilat (output_toggle).

Speichern Sie die Datei output_toggle.c auf Ihrer Festplatte und öffnen Sie die Window-Eingabeaufforderung. Navigieren Sie in das Verzeichnis, in dem Sie die Quelltextdatei zuvor abgelegt haben. Folgendes Kommando erstellt das Kompilat:

m68k-linux-gnu-gcc -mcpu=54450 -o output_toggle output_toggle.c

Der Kompiler m68k-linux-gnu-gcc wird mit zusätzlicher Angabe des Prozessortyps der Zielplattform aufgerufen (-mcpu=54450). Die zu erstellende Objektdatei wird mit -o output_toggle festgelegt. Abschließend erfolgt die Angabe der C-Datei (output_toggle.c). Wurde das Kommando erfolgreich ausgeführt, finden Sie die erstellte Programmdatei output_toggle im selben Verzeichnis wie den originalen Quelltext.

Konfiguration der pure.box

Speichern Sie die Datei output_toggle per FTP oder über die SMB-Freigabe im Ordner programs auf der pure.box ab. Anschließend sind folgende Konfigurationsschritte notwendig:

  • Rufen Sie die Startseite der pure.box durch Eingabe der IP-Adresse in der Adresszeile Ihres Browsers auf.

    Homepage Motherbox
  • Wählen Sie Anmelden im Menübaum und loggen Sie sich über den aufgerufenen Dialog mit Ihrem Passwort.

    Logindialog Motherbox
  • Navigieren Sie auf die Seite Home >> Konfiguration >> Eigene Dateien. Klicken Sie in der Dateiübersicht auf den Ordner programs. Die Datei save_data.php wird sichtbar.

    Dateibrowser Motherbox
  • Ein Klick auf das Icon Dateieigenschaften bearbeiten (links neben output_toggle) öffnet den Bearbeiten-Dialog.

    Dateieigenschaften bearbeiten
  • Aktivieren Sie die Option Programm. Tragen Sie bei Aufrufparameter ein:

    • IP-Adresse des Web-IO digital
    • Nummer des HTTP-Ports
    • zyklisch zu schaltender Kanal
    • ggf. vergebenes Passwort

    Haben Sie kein Passwort vergeben, könnte der Aufruf so aussehen:
    10.40.27.10 80 5 ""

    Die Aneinanderreihung der Aufrufparameter ist mit der bei einem direkten Konsolenaufruf des Programms identisch.

    Ereignissteuerung
  • Aktivieren Sie Zeitgesteuert und stellen Sie sicher, dass in jedem der folgenden Textfelder ein * notiert ist. Dieser CRON-Definition zufolge wird das Programm output_toggle im Minutentakt mit den unter Aufrufparameter festgelegten Werten aufgerufen.

    Übernehmen Sie die neuen Einstellungen mit Speichern... Fertig!

    Ereignissteuerung

Ab jetzt wird das in den Aufrufparametern spezifizierte Web-IO von der pure.box über das Netzwerk angesprochen Der Schaltzustand des angegebenen Outputs wird dabei jedesmal gewechselt.

Der Quelltext

In den ersten Zeilen werden die benötigten Header-Dateien angegeben.

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

Das Programm besteht ausschließlich aus einer main-Funktion. Zu Beginn werden die lokalen Variablen festgelegt. Die per Parameterübergabe übermittelten Werte werden dann ausgegeben. Diese Ausgabe wird beim zyklischen Anstarten durch die pure.box unterdrückt, ist während der Entwicklungsphase, in der das Programm auch lokal am PC augeführt wird, allerdings sehr hilfreich.

int main(int argc, char **argv) {
	int handle;
	char command[128];
	struct sockaddr_in remote;
	printf("address: %s\r\n",argv[1]);
	printf("port: %i\r\n",atoi(argv[2]));
	printf("channel: %i\r\n",atoi(argv[3]));
	printf("password: %s\r\n",argv[4]);
	...
}

Anschließend wird das Kommando zum Toggeln des Outputs aufgebaut und in der Variablen command gespeichert.

sprintf(command, "GET /outputaccess%i?PW=%s&State=TOGGLE&\r\n", atoi(argv[3]), argv[4]);

handle hält den Socket, über den die Kommunikation mit dem Web-IO erfolgt. Kann dieser nicht erstellt werden, wird das Programm verlassen.

handle = socket(PF_INET , SOCK_STREAM , 0);
if(socket < 0) {
	printf("Socket cannot be created\r\n");
	exit(-1);
}

Erstellung des Verbindungsendpunktes und Herstellen der Verbindung. Tritt ein Fehler auf, wird das Programm verlassen.

inet_aton(argv[1], &remote.sin_addr);
remote.sin_family = AF_INET;
remote.sin_port = htons(atoi(argv[2]));
if(connect(handle, (struct sockaddr *) &remote, sizeof(remote)) != 0) {
	printf("Connection cannot be established\r\n");
	exit(-1);
}

Der zuvor bereits aufgebaute Kommandostring wird über die geöffnete Verbindung an das Web-IO gesendet.

if(send(handle, (const void *)command, sizeof(command), 0) == 0) {
	printf("Error at sending data\r\n");
}

Schließen der Verbindung und ordnungsgemäßes Verlassen des Programms.

close(handle);
exit(0);

Das Programm ist hiermit vollständig abgearbeitet und wird verlassen. Es wird zum nächsten Ausführungszeitpunkt erneut gestartet und läuft wieder wie oben beschrieben ab.

Fazit

Mit einfachen Mitteln kann die pure.box als Träger von eigenen C- und C++-Programmen eingesetzt werden. Dabei können durch den Zugriff auf das Netzwerk und das interne Dateisystem sehr komplexe Aufgaben bewältigt werden.


nach oben