Programmer's Guide C-Control IoT-Starter Kit 10 Deckblatt Gültig ab: l l l Firmware Version: 01v000 Server Version: 43.3 Hardware Version: 1.1 300822 | Rev.
Kapitel 1 Inhaltsverzeichnis Kapitel 1 Inhaltsverzeichnis Deckblatt 1 Kapitel 1 Inhaltsverzeichnis 3 Kapitel 2 Allgemeine Angaben 7 2.1 Übersetzung 7 2.2 Copyright 7 2.3 Gebrauchsnamen 7 Kapitel 3 rapidM2M Toolset 9 3.1 Allgemein 9 3.2 Voraussetzungen 9 3.3 Funktionsprinzip 10 3.4 Installation 11 3.5 Übersicht 14 3.6 Menü des rapidM2M Toolset 16 3.6.1 Script 16 3.7 Kateireiter "Script" 17 3.8 Karteireiter "Config" 19 3.9 Karteireiter "Console" 20 3.
.2.2 Consolen Funktionen 29 4.2.3 rapidM2M Funktionen 30 4.2.3.1 Arrays mit symbolischen Indizes 30 4.2.3.2 Konstanten 32 4.2.3.3 Callback Funktionen 34 4.2.3.4 Funktionen 36 4.2.4 File Transfer Funktionen 4.2.4.1 Arrays mit symbolischen Indizes 67 4.2.4.2 Konstanten 67 4.2.4.3 Callback Funktionen 68 4.2.4.4 Funktionen 69 4.2.5 Iotbox Funktionen 72 4.2.5.1 Konstanten 4.2.6 Universaleingangsmodul Funktionen 72 72 4.2.6.1 Konstanten 72 4.2.6.2 Funktionen 74 4.2.
Kapitel 1 Inhaltsverzeichnis 4.4.1.5 Reservierte Schlüsselworte 91 4.4.1.6 Numerische Konstanten 91 4.4.1.6.1 Numerische Integer-Konstanten 91 4.4.1.6.2 Numerische Gleitkomma-Konstanten 92 4.4.2 Variablen 92 4.4.2.1 Deklaration 92 4.4.2.2 Lokale Deklaration 92 4.4.2.3 Globale Deklaration 92 4.4.2.4 Statische lokale Deklaration 92 4.4.2.5 Statische globale Deklaration 93 4.4.2.6 Gleitkommawerte 93 4.4.3 Konstante Variablen 93 4.4.4 Array Variablen 94 4.4.4.
4.4.6.2 Zusammengesetzte Anweisungen 102 4.4.6.3 Ausdrucksanweisung 102 4.4.6.4 Leeres Statement 102 4.4.6.5 assert Ausdruck 102 4.4.6.6 break 103 4.4.6.7 continue 103 4.4.6.8 do Statement while ( Ausdruck ) 104 4.4.6.9 exit Ausdruck 104 4.4.6.10 for ( Ausdruck 1 ; Ausdruck 2 ; Ausdruck 3 ) Statement 104 4.4.6.11 goto Etikett 105 4.4.6.12 if ( Ausdruck ) Statement 1 else Statement 2 105 4.4.6.13 return Ausdruck 106 4.4.6.14 switch ( Ausdruck ) { case Liste } 106 4.4.6.
Kapitel 2 Allgemeine Angaben Kapitel 2 Allgemeine Angaben Die Informationen dieses Handbuchs wurden sorgfältig geprüft und nach bestem Wissen zusammengestellt. Der Hersteller übernimmt dennoch keine Verantwortung für möglicherweise in diesem Handbuch enthaltene falsche Angaben. Der Hersteller ist nicht verantwortlich für direkte, indirekte, versehentliche oder Folgeschäden, die aus Fehlern oder Unterlassungen in diesem Handbuch entstanden, selbst wenn auf die Möglichkeit solcher Schäden hingewiesen wurde.
Kapitel 3 rapidM2M Toolset Kapitel 3 rapidM2M Toolset Hinweis: Alle Screenshots zeigen das rapidM2M Toolset in der Version 1.18. Bei neueren Versionen können geringfügige Änderungen am Erscheinungsbild des Programms vorgenommen worden sein. 3.1 Allgemein Das rapidM2M Toolset steht unter folgender Adresse gratis zum Download bereit: www.microtronics.at/Toolset Es handelt sich um eine IDE, die den Kunden bei der Erstellung von Applikationen für das C-Control IoT-Starter Kit 10 unterstützen soll.
3.3 Funktionsprinzip Funktionsprinzip 1 C-Control IoT-Starter Kit 10 3 C-Control-Sever 2 Sensor, der mit dem C-Control IoT-Starter Kit 10 verbunden ist (optional) 4 PC, auf dem das rapidM2M Toolset installiert ist Das rapidM2M Toolset kommuniziert über die USB-Schnittstelle direkt mit dem C-Control IoT-Starter Kit 10 .
Kapitel 3 rapidM2M Toolset 3.4 Installation Das folgende Kapitel beschreibt den Installationsprozess unter Windows 7. 1. Führen Sie die Datei "InstRapidM2MToolset.exe" aus, um den Installationsprozess zu starten. Hinweis: Verbinden Sie das C-Control IoT-Starter Kit 10 erst nach Abschluss des Installationsprozesses mit Ihrem PC da die benötigten USB-Treiber erst während dieses Vorgangs installiert werden. rapidM2M Toolset Setup Wizard Rev.
2. Folgen Sie den Anweisungen des Setup Wizzards bis Sie zu der folgenden Ansicht gelangen. Für den ordnungsgemäßen Betrieb müssen die USB-Treiber zwingend installiert werden. Installation der USB-Treiber für M12x Module Installation der USB-Treiber für M22x Module und C-Control IoT-Starter Kit 10 12 Rev.
Kapitel 3 rapidM2M Toolset 3. Wenn Sie schließlich zur folgenden Ansicht gelangen, schließen Sie den Installationsvorgang durch Klicken auf den Button "Finish" ab. Setup abschließen 4. Nachdem Sie auf den Button "Finish" geklickt haben, startet die Installation der USB Treiber. Rev.
3.
Kapitel 3 rapidM2M Toolset Wichtiger Hinweis: Verknüpfen Sie das C-Control IoT-Starter Kit 10 mit einer Messstelle (siehe "Benutzerhandbuch für C-Control -Server " 206.886) bevor Sie per USB darauf zugreifen. Bei einer nachträglichen Verknüpfung würden alle bisher getroffenen Einstellungen (inkl. Script) durch die Übernahme der Einstellungen von der Messstelle verloren gehen.
GSM-Signalstärke > -64dBm -64...-73dBm -74...-83dBm -84...-93dBm -94...-107dBm <= -108dBm 3.6 Menü des rapidM2M Toolset 3.6.1 Script Menüpunkt "Script" Über den Menüpunkt "Script -> Download device specific SDK" lassen sich gerätespezifische Erweiterungen für das rapidM2M Toolset herunterladen und installieren. Dazu muss das entsprechende Gerät mit der USB-Schnittstelle des PCs verbunden sein und der PC über eine bestehende Verbindung zum Internet verfügen. 16 Rev.
Kapitel 3 rapidM2M Toolset 3.7 Kateireiter "Script" Dieser Bereich dient zum Erstellen des Scripts. Der Karteireiter ist auch verfügbar, wenn keine USBVerbindung zu einem C-Control IoT-Starter Kit 10 besteht. Mit Ausnahme des Downloads des kompilierten Scripts und der Anzeige der Speichergrößen ("Size of compiled codes", "Memory occupancy" und "Available memory on the device"), stehen in diesem Fall alle Funktionen zur Verfügung. Das zuletzt geöffnete Script wird beim Programmstart automatisch geladen.
5 öffnet den Dialog zum Speichern des Scripts unter einem anderen Dateinamen 6 kompiliert das geöffnete Script. Dabei wird es auch automatisch gespeichert. 7 überträgt das geöffnete Script in das Modul/Gerät. Dabei wird das Script zuerst gespeichert und dann kompiliert. Das kompilierte PAWN-Binary (*.amx) wird im selben Ordner wie das Script gespeichert.
Kapitel 3 rapidM2M Toolset 3.8 Karteireiter "Config" Dieser Karteireiter ermöglicht den Zugriff auf die 10 Konfigurationsspeicherblöcke. Diese können editiert, gespeichert und vom und zum C-Control IoT-Starter Kit 10 übertragen werden. Der Karteireiter ist auch verfügbar, wenn keine USB-Verbindung zu einem C-Control IoT-Starter Kit 10 besteht. In diesem Fall ist es allerdings nicht möglich, die Konfigurationsblöcke vom und zum CControl IoT-Starter Kit 10 zu übertragen.
3.9 Karteireiter "Console" Dieser Bereich dient der Anzeige von Debug-Informationen, die innerhalb des PAWN-Scripts mittels der Funktionen "print" und "printf" (siehe "Consolen Funktionen" auf Seite 29) auf die Standardausgabe gedruckt wurden. Der Karteireiter "Console" ist nur verfügbar, wenn eine USBVerbindung zu einem C-Control IoT-Starter Kit 10 besteht.
Kapitel 3 rapidM2M Toolset 3.10 Karteireiter "Server" Über diesen Karteireiter erreichen Sie die Testseite der REST-API des C-Control-Servers. Mit ihrer Hilfe können Sie sehr einfach und schnell überprüften, ob die komplette Prozesskette - angefangen beim Speichern der Daten mittels Script, über die Übertragung per GPRS, bis hin zur Ablage der Daten am Server - korrekt funktioniert. Diese Funktion kann auch ohne über die USB-Schnittstelle verbundenes C-Control IoT-Starter Kit 10 verwendet werden.
3.11 Karteireiter "Log" Dieser Bereich dient der Verwaltung der Log-Einträge. Er ermöglicht das Laden der Einträge vom CControl IoT-Starter Kit 10 , das Speichern als *.tsv-Datei und das Löschen der Einträge aus dem Speicher des C-Control IoT-Starter Kit 10 . Karteireiter "Log" 1 speichert die angezeigten Log-Einträge als *.
Kapitel 3 rapidM2M Toolset Karteireiter "Log" mit aktivierter Detailansicht 1 detaillierte Darstellung der Log-Einträge aktiviert 3 Log-Eintrag, der in jedem Fall angezeigt wird 2 informativer Log-Eintrag, der nur sichtbar ist, wenn die detaillierte Darstellung aktiviert wurde 3.12 Karteireiter "FW" Dieser Bereich ermöglicht das direkte Einspielen der Firmware über die USB-Schnittstelle. Karteireiter "FW" 1 aktuell installierte Firmware Rev.
3.13 Hot-Keys Befehl New Script Tastenkombination Erklärung Ctrl+N erstellt ein neues leeres Script Open Script Ctrl+O öffnet ein gespeichertes Script Save Script Ctrl+S speichert das aktuell geöffnete Script Compile Script Shift+F9 kompiliert das geöffnete Script. Dabei wird es auch automatisch gespeichert. Compile and Send F9 to Device 24 überträgt das geöffnete Script in das Modul/Gerät. Dabei wird das Script zuerst gespeichert und dann kompiliert. Das kompilierte PAWN-Binary (*.
Kapitel 4 Pawn Script Kapitel 4 Pawn Script 4.1 Allgemein Das folgende Kapitel beschreibt die Funktionalität des Pawn Scripts. PAWN (vormals SMALL) ist eine C-ähnliche Skriptsprache, welche auf embedded Systemen läuft. Zusätzliche detaillierte Informationen finden Sie auf der Website der Entwickler: http://www.compuphase.com/pawn/pawn.htm.
4.2 rapidM2M API 4.2.1 Core Funktionen native heapspace(); liefert den freien Speicherplatz auf dem Heap Rückgabewert Erklärung Der freie Speicherplatz auf dem Heap. Der Stack und der Heap besetzen einen gemeinsamen Speicherbereich, so dass dieser Wert die Anzahl der Bytes angibt, die entweder für den Stack oder den Heap übrig sind.
Kapitel 4 Pawn Script native getarg(arg, index=0); liefert den Wert des Arguments Parameter arg Erklärung Die Sequenznummer des Arguments. Verwenden Sie 0 für das erste Argument. index Index, falls sich "arg" auf ein Array bezieht Rückgabewert Erklärung Diese Funktion liefert ein Argument aus einer variablen Argumentenliste. Wenn das Argument ein Array ist, gibt "index" den Index des gewünschten Arrayelements an. Der Rückgabewert ist der Wert des Arguments.
native toupper(c); wandelt ein Zeichen in einen Großbuchstaben um Parameter c Rückgabewert Erklärung Zeichen, das in einen Großbuchstaben umgewandelt werden soll Erklärung Die Großbuchstaben-Variante des übergebenen Zeichens, falls vorhanden, oder der unveränderte Zeichencode von "c", wenn der Buchstabe "c" kein Großbuchstaben-Äquivalent hat.
Kapitel 4 Pawn Script native max(value1, value2); liefert den größeren der beiden übergebenen Wert Parameter value1 Erklärung zwei Werte, von denen der größere ermittelt werden soll value1 Rückgabewert Erklärung der größere der beiden übergebenen Werte native clamp(value, min=cellmin, max=cellmax); prüft, ob der übergebene Wert zwischen "min" und "max" liegt Parameter value Erklärung Wert, der geprüft werden soll min untere Bereichsgrenze max obere Bereichsgrenze Rückgabewert l l l Erklärung
native printf(const format[], {Float,Fixed,_}:...); druckt den übergebenen Format-String auf die Standardausgabe. Die Arbeitsweise der Funktionen entspricht jener der Standard ANSI-C Implementierung. Parameter format[] Erklärung die zu verwendende Format-Zeichenkette Rückgabewert Erklärung Anzahl der gedruckten Zeichen ERROR, falls nicht erfolgreich l l 4.2.3 rapidM2M Funktionen 4.2.3.
Kapitel 4 Pawn Script TrM2M_GSMInfo Informationen zum GSM-Modem, SIM-Chip sowie dem bei der letzten Verbindung verwendeten GSM-Netz // // // // // // // // // // // // // // // // // // cgmi cgmm cgmr imei imsi iccid mcc mnc simstate Manufacturer Identification des Modems Modem Modellinformation Modem Revisionsinformation International Mobile Equipment Identity des Modems International Mobile Subscriber Identity des SIM-Chips, der für die letzte Verbindung verwendet wurde Leerstring, wenn noch keine V
4.2.3.
Kapitel 4 Pawn Script Singnalpegel der GPIOs RM2M_GPIO_LOW RM2M_GPIO_HIGH = 0, = 1, // Signalpegel "low" // Signalpegel "high" Konfiguration von Clock-Polarität und Clock-Phase des SPI-Interfaces Konfigurationsflags für die Funktion rM2M_SpiInit() RM2M_SPI_CLKPOL RM2M_SPI_CLKPHA = 0b00000001, // Clock-Polarität: Idle "high" = 0b00000010, /* Clock-Phase: Daten werden bei der ersten Flanke übernommen.
Konfigurierungsflags für die Funktion rM2M_Pack() RM2M_PACK_GET RM2M_PACK_BE RM2M_PACK_U8 RM2M_PACK_S8 RM2M_PACK_U16 RM2M_PACK_S16 RM2M_PACK_U32 RM2M_PACK_S32 RM2M_PACK_F32 = = = = = = = = = 0b00000001, 0b00000010, 0b00010000, 0b10010000, 0b00100000, 0b10100000, 0b01000000, 0b11000000, 0b01000000, // // // // // // // // // Wert soll gelesen werden (Get Packed) "Big Endian"-Format verwenden 8-Bit Unsigned 8-Bit Signed 16-Bit Unsigned 16-Bit Signed 32-Bit Unsigned 32-Bit Signed 32-Bit Float Konfigurieru
Kapitel 4 Pawn Script public func(cfg); vom Script-Entwickler bereitzustellende Funktion, die aufgerufen wird, wenn sich einer der Konfigurationsspeicherblöcke geändert hat Parameter cfg Erklärung Nummer des Konfigurationsspeicherblocks, beginnend mit 0 für den ersten Speicherblock, der geändert wurde public func(reg); vom Script-Entwickler bereitzustellende Funktion, die aufgerufen wird, wenn sich die Registrierung geändert hat Parameter reg Erklärung Index des Registrierungsspeicherblocks (siehe "Ind
4.2.3.
Kapitel 4 Pawn Script native rM2M_GetDate(&year=0, &month=0, &day=0, timestamp=0); Wurde kein Timestamp übergeben (timestamp=0), wird für die aktuelle Systemzeit (in UTC) das Datum (Jahr, Monat, Tag) ermittelt. Andernfalls wird für den übergebenen Timestamp das Datum (Jahr, Monat, Tag) ermittelt. Parameter year Erklärung Variable zur Aufnahme des Jahres - OPTIONAL Hinweis: Die Angabe des Jahres erfolgt relativ zum Jahr 2000, d.h. für das Jahr 2014 wird der Wert 14 retourniert.
native rM2M_DoW(timestamp); berechnet den Wochentag aus einem gegebenen Timestamp Parameter timestamp Erklärung Zeitstempel des zu berechnenden Tages Rückgabewert Erklärung Wochentag, 0=Montag ...
Kapitel 4 Pawn Script native rM2M_TimerAddExt(funcidx, bool:cyclic, time); erzeugt einen neuen ms Timer Parameter funcidx Erklärung Index der öffentlichen Funktion, die nach Ablauf des Timers aufgerufen werden soll Typ der Funktion: public func(); cyclic Einstellung für das Verhalten nach Ablauf des Timerintervalls: true: Der Timer soll nach dem Ablauf des Intervalls neu gestartet werden. false: Der Timer wird nach Ablauf des Intervalls gestoppt.
native rM2M_GpioDir(gpio, dir); setzt die Signalrichtung für einen GPIO Parameter gpio Erklärung Nummer des GPIOs, beginnend mit 0 für GPIO1 dir Einstellung der Signalrichtung: RM2M_GPIO_INPUT : Eingang RM2M_GPIO_OUTPUT : Ausgang Erklärung Rückgabewert l l OK, wenn erfolgreich < OK, wenn ein Fehler auftritt (siehe "Returncodes für allgemeine Zwecke" im Kapitel "Konstanten" auf Seite 32) native rM2M_GpioSet(gpio, level); setzt das Ausgangslevel eines GPIOs, der als Ausgang konfiguriert wurde Param
Kapitel 4 Pawn Script native rM2M_GpioGet(gpio); liest das Signallevel eines GPIOs, der als Eingang konfiguriert wurde Parameter gpio Rückgabewert Erklärung Nummer des GPIOs, beginnend mit 0 für GPIO1 l l l l Rev.
native rM2M_SpiInit(spi, clock, config); initialisiert das SPI-Interface Parameter spi Erklärung Nummer des SPI-Interfaces, beginnend mit 0 für SPI1 clock zu verwendende Clockfrequenz in Hz. Bitte beachten Sie die für das verwendete Modul gültigen Grenzwerte (siehe "Technische Daten" auf Seite 125). config Konfiguration von Clock-Polarität und Clock-Phase Bit0: Clock-Polarität 0 = Idle "low" 1 = Idle "high" Bit1: Clock-Phase 0 = Daten werden bei der ersten Flanke ausgegeben.
Kapitel 4 Pawn Script native rM2M_SpiClose(spi); schließt das SPI-Interface Parameter spi Erklärung Nummer des SPI-Interfaces, beginnend mit 0 für SPI1 Erklärung Rückgabewert l l l OK, wenn erfolgreich ERROR, wenn die Nummer des SPI-Interfaces ungültig ist < OK, wenn ein anderer Fehler auftritt (siehe "Returncodes für allgemeine Zwecke" im Kapitel "Konstanten" auf Seite 32) native rM2M_SpiCom(spi, data{}, txlen, rxlen); führt eine asynchrone SPI Kommunikation aus.
native rM2M_I2cInit(i2c, clock, config); initialisiert das I2C-Interface Parameter i2c Erklärung Nummer des I2C-Interfaces, beginnend mit 0 für I2C1 clock zu verwendende Clockfrequenz in Hz. Bitte beachten Sie die für das verwendete Modul gültigen Grenzwerte (siehe "Technische Daten" auf Seite 125).
Kapitel 4 Pawn Script native rM2M_I2cCom(i2c, adr, data{}, txlen, rxlen); führt eine I2C Kommunikation aus. Zuerst werden Daten versendet, danach Daten empfangen. Parameter i2c Erklärung Nummer des I2C-Interfaces, beginnend mit 0 für I2C1 adr Adresse des I2C Slaves (Bit7-Bit1, Bit0 unused) data Array, in dem zunächst die zu versendenden Daten gespeichert sein müssen. Wurden die Daten versendet, wird das Array als Speicher für die zu empfangenden Daten verwendet.
native rM2M_UartInit(uart, baudrate, mode, funcidx); initialisiert das UART-Interface Parameter uart Erklärung Nummer des UART-Interfaces, beginnend mit 0 für UART1 baudrate zu verwendende Baudrate. Bitte beachten Sie die für das verwendete Modul gültigen Grenzwerte (siehe "Technische Daten" auf Seite 125). mode Bit 0...1 1 = 1 Stopbit 2 = 2 Stopbit Bit 2...3 0 = keine Parität 1 = ungerade Parität 2 = gerade Parität Bit 4...5 0 = 7 Datenbits 1 = 8 Datenbits Bit 6...
Kapitel 4 Pawn Script native rM2M_UartClose(uart); schließt das UART-Interface Parameter uart Erklärung Nummer des UART-Interfaces, beginnend mit 0 für UART1 Erklärung Rückgabewert l l OK, wenn erfolgreich < OK, wenn ein Fehler auftritt (siehe "Returncodes für allgemeine Zwecke" im Kapitel "Konstanten" auf Seite 32) native rM2M_UartWrite(uart, const data{}, len); versendet Daten über das angegebene UART-Interface Parameter uart Erklärung Nummer des UART-Interfaces, beginnend mit 0 für UART1 data A
native rM2M_TxSetMode(mode); setzt die zu verwendende Verbindungsart Parameter mode Erklärung zu verwendende Verbindungsart: RM2M_TXMODE_TRIG: Die Verbindung erfolgt beim Aufruf der Funktion "rM2M_TxStart()" RM2M_TXMODE_WAKEUP: Die Verbindung erfolgt wie im Modus "intervall" beim Aufruf der Funktion "rM2M_TxStart()". Zusätzlich kann das Gerät über den Server dazu veranlasst werden, sofort eine Verbindung aufzubauen (siehe "Benutzerhandbuch für C-Control -Server " 206.886).
Kapitel 4 Pawn Script native rM2M_TxGetStatus(); liefert den aktuellen Verbindungsstatus Rückgabewert Bit0 (RM2M_TX_FAILED): Erklärung gesetzt, wenn der letzte GPRSVerbindungsaufbau fehlgeschlagen ist Bit1 (RM2M_TX_ACTIVE): gesetzt, wenn eine GPRS-Verbindung besteht Bit2 (RM2M_TX_STARTED): gesetzt, wenn der Verbindungsaufbau gestartet wurde Bit3 (RM2M_TX_RETRY): gesetzt, während der Wartezeit bis zum erneuten automatischen Retry bei Verbindungsproblemen Bit4 (RM2M_TX_WAKEUPABLE): gesetzt, wenn das
native rM2M_RecData(timestamp, const data{}, len); speichert einen Datensatz im internen Flash-Speicher. Benutzen Sie die Funktionen "rM2M_ Pack", "rM2M_SetPacked" oder "rM2M_SetPackedB", um den Datenbereich zu erzeugen. Parameter timestamp Erklärung Zeitstempel, der für die Aufzeichnung verwendet werden soll = 0: Die aktuelle Systemzeit wird als Zeitstempel verwendet. > 0: Der übergebene Zeitstempel wird verwendet. (Der Zeitstempel muss in Sekunden seit 31.12.
Kapitel 4 Pawn Script native rM2M_SetPacked(data{}, pos, &{Float,Fixed,_}:value, size=4, bool:bigendian=false); schreibt den übergebenen Wert an die angegebene Position in ein Array Parameter data Erklärung Array, das als Datenbereich für einen Datensatz oder eine Konfiguration verwendet werden soll pos Byteoffset innerhalb des Arrays zur Bestimmung der Position, an die der Wert geschrieben werden soll value Wert, der in das Array geschrieben werden soll size Anzahl der Bytes, die für den zu schreib
native rM2M_SetPackedB(data{}, pos, const block[], size); schreibt den übergebenen Datenblock an die angegebene Position in ein Array Parameter data Erklärung Array, das als Datenbereich für einen Datensatz oder eine Konfiguration verwendet werden soll pos Byteoffset innerhalb des Arrays zur Bestimmung der Position, an die der Datenblock geschrieben werden soll block Datenblock, der in das Array geschrieben werden soll size Anzahl der Bytes, die vom Datenblock in das Array geschrieben werden sollen
Kapitel 4 Pawn Script native rM2M_GetPackedB(const data{}, pos, block[], size); liest einen Datenblock, der sich an der angegebenen Position in einem Array befindet Parameter data Erklärung Array, das als Datenbereich für einen Datensatz oder eine Konfiguration verwendet werden soll pos Byteoffset innerhalb des Arrays zur Bestimmung der Position, von der die Daten gelesen werden sollen block Array zur Aufnahme der zu lesenden Daten size Anzahl der Bytes, die zu lesen sind Rev.
native rM2M_Pack(const data{}, pos, &{Float,Fixed,_}:value, type); Funktion für den Zugriff auf gepackte Daten. Wurde das Bit0 (RM2M_PACK_GET) des Parameters "type" gesetzt, liefert die Funktion den Wert, der sich an der angegebenen Position im Array befindet. Andernfalls schreibt die Funktion den übergebenen Wert an die angegebene Position ins Array.
Kapitel 4 Pawn Script native rM2M_CfgInit(cfg, flags); legt die Konfiguration für einen Konfigurationsspeicherblock fest. Ein Aufruf der Funktion ist nur notwendig, wenn eines der Konfigurationsflags gesetzt werden soll. Parameter cfg flags Erklärung Nummer des Konfigurationsspeicherblocks, beginnend mit 0 für den ersten Speicherblock. Das Gerät verfügt über 10 voneinander unabhängige Speicherblöcke.
native rM2M_CfgWrite(cfg, pos, const data{}, size); speichert den übergebenen Datenblock an der angegeben Position in einem Konfigurationsspeicherblock. Bitte beachten Sie, dass der Konfigurationspeicherblock abhängig von der mit Hilfe der Funktion "rM2M_CfgInit" ausgewählten Art der Speicherung gespeichert wird, entweder flüchtig im RAM (Bit0 = RM2M_CFG_VOLATILE) oder nichtflüchtig im FLASH (Bit0 = 0, default).
Kapitel 4 Pawn Script native rM2M_CfgFlush(cfg); speichert den Konfigurationsspeicherblock dessen Nummer übergeben wurde nicht flüchtig im FLASH. Ein Aufruf der Funktion ist nur dann notwendig, wenn mittels der Funktion "rM2M_ CfgInit" als Art der Speicherung für den betreffenden Konfigurationsspeicherblock "flüchtig im RAM (Bit0 = RM2M_CFG_VOLATILE)" ausgewählt wurde. Parameter cfg Erklärung Nummer des Konfigurationsspeicherblocks, beginnend mit 0 für den ersten Speicherblock.
native rM2M_CfgDelete(cfg); löscht alle Daten des übergebenen Konfigurationsspeicherblocks Parameter cfg Erklärung Nummer des Konfigurationsspeicherblocks, beginnend mit 0 für den ersten Speicherblock. Das Gerät verfügt über 10 voneinander unabhängige Speicherblöcke. Erklärung Rückgabewert l l l OK, wenn erfolgreich ERROR_MEM, wenn momentan nicht genügend temporärer Speicher (RAM) verfügbar ist.
Kapitel 4 Pawn Script native rM2M_RegGetString(reg, const name[], string[], len=sizeof string); liest eine Zeichenkette aus einem Registrierungsspeicherblock.
native rM2M_RegSetString(reg, const name[], const string[]); schreibt eine Zeichenkette in einen Registrierungsspeicherblock. Parameter reg Erklärung Index des Registrierungsspeicherblocks (siehe "Indizes der Registrierungsspeicherblöcke" im Kapitel "Konstanten" auf Seite 32) name Name des Eintrags Wenn bereits ein Eintrag mit diesem Namen existiert, wird die bestehende Zeichenkette durch die übergebene Zeichenkette ersetzt. Andernfalls wird ein neuer Eintrag angelegt.
Kapitel 4 Pawn Script native rM2M_RegOnChg(funcidx); legt die Funktion fest, die aufgerufen werden soll, wenn sich einer der Registrierungsspeicherblöcke geändert hat.
native rM2M_WriteLog(log, param); erzeugt einen Eintrag im Gerätelog Parameter log Erklärung zu erzeugender Log-Eintrag (gültiger Bereich: 0...999). Die Log-Einträge werden auf den gültigen Bereich eingeschränkt. D.h. bei Unterschreiten des gültigen Bereichs wird 0 verwendet, bei Überschreiten des gültigen Bereichs wird 999 verwendet. Wichtiger Hinweis: Die Log-Einträge werden für die Anzeige am Server in den Bereich "MODULE ERR" (2000-2999) gemappt.
Kapitel 4 Pawn Script native rM2M_SetPos(Lat, Long, Elev, Qual, SatUsed); speichert die GPS-Positionsinformationen im Gerät. Es erfolgt keine historische Aufzeichnung. D.h. die aktuellen Positionsinformationen überschreiben immer die letzte bekannte Position. Die Informationen werden zum C-Control-Server übertragen und können z.B. per XMLSchnittstelle ausgelesen werden.
native rM2M_SetPosNMEA(const Sentence[]); entnimmt die GPS-Positionsinformationen aus dem übergebenen NMEA-Datensatz und speichert sie im Gerät. Es erfolgt keine historische Aufzeichnung. D.h. die aktuellen Positionsinformationen überschreiben immer die letzte bekannte Position. Die Informationen werden zum C-Control-Server übertragen und können z.B. per XML-Schnittstelle ausgelesen werden. Parameter Sentence Erklärung NMEA-Datensatz vom einem GPS-Empfänger, beginnend mit dem Zeichen '$'.
Kapitel 4 Pawn Script native rM2M_GetPos(&Lat, &Long, &Elev); liest die im Gerät gespeicherten GPS-Positionsinformationen aus Parameter Lat Erklärung Variable zur Aufnahme der geographischen Breite in Grad (Auflösung: 0,000001°) -90 000 000 = Südpol 90° Süd 0 = Äquator +90 000 000 = Nordpol 90° Nord Long Variable zur Aufnahme der geographischen Länge in Grad (Auflösung: 0,000001°) -180 000 000 = 180° West 0 = Nullmeridian (Greenwich) +180 000 000 = 180° Ost Elev Rückgabewert Variable zur Aufnahme der
native rM2M_GetGSMPos(posidx, pos[TrM2M_GSMPos]=0); liefert die Anzahl der GSM-Zellen, für die gültige Informationen im Gerät gespeichert sind (posidx < 0 ) bzw.
Kapitel 4 Pawn Script 4.2.4 File Transfer Funktionen 4.2.4.1 Arrays mit symbolischen Indizes TFT_Info Eigenschaften eines Dateieintrags // name Name der Datei // stamp Zeitstempel der Datei (Sekunden seit 31.12.1999) // size Dateigröße in Byte // crc Ethernet CRC32 der Datei (siehe "CRC32()" ) // flags Datei Flags (siehe "Datei Flags" im // Kapitel "Konstanten" auf Seite 67) #define TFT_Info[ .name{256}, .stamp, .size, .crc, .flags ] 4.2.4.
4.2.4.3 Callback Funktionen public func(id, cmd, const data{}, len, ofs); vom Script-Entwickler bereitzustellende Funktion, die beim Empfang eines File Transfer Kommandos aufgerufen wird. Die Callback Funktion muss in der Lage sein, alle File Transfer Kommandos (siehe "File Transfer Kommandos" im Kapitel "Konstanten" auf Seite 67) zu behandeln.
Kapitel 4 Pawn Script 4.2.4.
native FT_SetProps(id, stamp, size, crc, flags); setzt die Eigenschaften einer Datei Wichtiger Hinweis: Diese Funktion muss nach dem Empfang eines "FT_CMD_LIST" Befehls aufgerufen werden. Parameter id Erklärung eindeutige Identifikation mit der die Datei referenziert wird (wurde bei der Registrierung festgelegt) stamp Zeitstempel der Datei (Sekunden seit 31.12.
Kapitel 4 Pawn Script native FT_Accept(id, newid=-1); akzeptiert die Datei, die der C-Control-Server schreiben will. Falls die übergebene eindeutige Identifikationsnummer (Parameter "id") auf einen Dateiknoten verweist, handelt es sich um eine neue Datei. In dem Fall muss für die neue Datei eine eindeutige Identifikationsnummer (Parameter "newid") vergeben werden. Die neue Datei muss außerdem mittels der Funktion "FT_Register()" registriert werden.
native FT_Error(id); dient zum Anzeigen eines Fehlers im Dateihandling und beendet jeglichen Datei Befehl Parameter id Erklärung eindeutige Identifikation mit der die Datei referenziert wird (wurde bei der Registrierung festgelegt) Erklärung Rückgabewert l l OK, wenn erfolgreich < OK, wenn ein Fehler auftritt (siehe "Returncodes für allgemeine Zwecke" im Kapitel "Konstanten" auf Seite 32) 4.2.
Kapitel 4 Pawn Script Samplerate in [Hz] für die Messung UI_SAMPLE_RATE_2 UI_SAMPLE_RATE_4 UI_SAMPLE_RATE_8 UI_SAMPLE_RATE_16 UI_SAMPLE_RATE_32 UI_SAMPLE_RATE_64 UI_SAMPLE_RATE_128 Rev.
4.2.6.2 Funktionen native UI_Init(channel, mode, filtertime); initialisiert einen Universaleingang (UI 1 - UI 2 ). Die Konfiguration der Samplerate für die Messwerterfassung erfolgt durch die Funktion "UI_SetSampleRate". Ein Aufruf der Funktion "UI_SetSampleRate" ist nur erforderlich, wenn die Default-Einstellung der Samplerate von 16Hz (62,5ms) für Ihre Anwendung nicht geeignet ist. Hinweis: Mit jedem Universaleingang der initialisiert wird, steigt der Energieverbrauch.
Kapitel 4 Pawn Script native UI_Close(channel); deaktiviert einen Universaleingang (UI 1 - UI 2 ). Hinweis: Mit jedem Universaleingang der deaktiviert wird, sinkt der Energieverbrauch. Parameter channel Erklärung Nummer des Universaleingangs, beginnend mit 0 für UI 1 Hinweis: Sie können für diesen Parameter auch die vordefinierten Konstanten verwenden (siehe "Nummern der Universaleingänge" im Kapitel "Iotbox Funktionen" auf Seite 72).
native UI_SetSampleRate(samplerate); setzt die Samplerate für die Messwerterfassung an den Universaleingängen. Die getroffene Einstellung ist immer für alle Universaleingänge gültig. Eine gesonderte Einstellung für einzelne Universaleingänge ist nicht möglich. Der Default-Wert der Samplerate beträgt 16Hz (62,5ms) . Hinweis: Mit Erhöhung der Samplerate steigt auch der Energieverbrauch.
Kapitel 4 Pawn Script 4.2.7 Mathematische Funktionen Hilfreiche Konstanten Definintition M_E Wert 2.7182818284590452354 e M_LOG2E 1.4426950408889634074 log2 e M_LOG10E 0.43429448190325182765 log10 e M_LN2 0.69314718055994530942 ln 2 M_LN10 2.30258509299404568402 ln 10 M_PI 3.14159265358979323846 π M_PI_2 1.57079632679489661923 π/2 M_PI_4 0.78539816339744830962 π/4 M_1_PI 0.31830988618379067154 1/π M_2_PI 0.63661977236758134308 2/π M_2_SQRTPI 1.
native Float:acos(Float:x); arccos(x) im Bereich [0, π], x Element von [-1, 1] native Float:atan(Float:x); arctan(x) im Bereich [-π/2, π/2] native Float:atan2(Float:y, Float:x); arctan(y/x) im Bereich [-π, π] native Float:sinh(Float:x); Sinus Hyperbolicus von x native Float:cosh(Float:x); Cosinus Hyperbolicus von x native Float:tanh(Float:x); Tangens Hyperbolicus von x native Float:exp(Float:x); Exponentialfunktion ex native Float:log(Float:x); natürlicher Logarithmus ln(x), x > 0 native Float:log10(Float:x
Kapitel 4 Pawn Script 4.2.
native strcpy(dest[], const source[], maxlength=sizeof dest); kopiert die Zeichenkette source in das Array dest (inklusive '\0').
Kapitel 4 Pawn Script native strchr(const string[], char); sucht ein Zeichen (erstes Vorkommen) in einer Zeichenkette Parameter string Erklärung Zeichenkette, die durchsucht werden soll char Zeichen, das gesucht werden soll Rückgabewert l l Erklärung -1, wenn das gesuchte Zeichen nicht in der Zeichenkette enthalten ist Array-Index des gesuchten Zeichens (erstes in der Zeichenkette vorkommendes Zeichen) native strrchr(const string[], char); sucht ein Zeichen (letztes vorkommen) in einer Zeichenkette
native strcspn(const string1[], const string2[]); sucht die Position des ersten Zeichens in string1, das auch in der Zeichenkette erlaubter Zeichen (string2) enthalten ist Parameter string1 Erklärung Zeichenkette, die durchsucht werden soll string2 Zeichenkette erlaubter Zeichen Rückgabewert l l Erklärung Länge von string1, wenn kein erlaubtes Zeichen gefunden wurde Position des ersten Zeichens in der zu durchsuchenden Zeichenkette, das auch in der Zeichenkette der erlaubten Zeichen enthalten ist na
Kapitel 4 Pawn Script native strtol(const string[], base); wandelt eine Zeichenkette in einen Wert um Parameter string Erklärung umzuwandelnde Zeichenkette base gibt die Basis an, die für die Umwandlung verwendet werden soll 2-36: Die angegebene Basis wird verwendet 0: Als Basis wird 8, 10 oder 16 verwendet, abhängig von der umzuwandelnden Zeichenkette Basis 8: bei einer führenden 0 Basis 16: bei 0x oder 0X Rückgabewert Erklärung Wert, der der Zeichenkette entspricht native Float: atof(const string[]
TablePointF zweispaltige Stützpunkttabelle, Datentyp Float // key // value Spalte, die durchsucht wird Spalte mit den zurückzuliefernden Ergebniswerten #define TablePointF[Float:.key, Float:.value] 4.2.9.2 Konstanten Fehlercodes der Funktionen "CalcTable" und "CalcTableF" const { TAB_ERR_FLOOR = -1, // gesuchter Wert kleiner als der erste Tabelleneintrag TAB_ERR_CEIL = -2, // gesuchter Wert größer als der letzte Tabelleneintrag }; 4.2.9.
Kapitel 4 Pawn Script native CRC32(data{}, len); liefert die berechnete Ethernet CRC32 der übergebenen Daten Parameter data Erklärung Array, das die Daten enthält für die die CRC32 berechnet werden soll len Anzahl der Bytes, die bei der Berechnung berücksichtigt werden sollen Erklärung Rückgabewert Rev.
native CalcTable(key, &value, const table[][TablePoint], size = sizeof table); sucht einen bestimmten Wert in der "key"-Spalte der übergebenen Stützpunktabelle und liefert den entsprechenden Wert der "value"-Spalte der Tabelle. Liegt der gesuchte Wert zwischen zwei Stützpunkten, wird der Rückgabewert zwischen den zwei angrenzenden "value"-Spaltenwerten linear interpoliert (Geradengleichung: y = k*x + d). Mit dieser Funktion können nicht lineare Kennlinien (z.B.
Kapitel 4 Pawn Script 4.3 Pawn Script Fehlercodes Sollte beim Durchlaufen des Pawn Scripts ein Fehler auftreten, wird die Scriptausführung gestoppt und deaktiviert. Zudem wird in das Gerätelog der entsprechende Fehlercode eingetragen. Bei allen Log-Einträgen bis auf "SCRIPT_ERR" enthält der Parameter den 32-Bit Instruction Pointer der PAWN abstract machine (AMX). Da im Parameter eines Log-Eintrags nur 16-Bit Werte gespeichert werden können, werden jeweils 2 Einträge im Gerätelog erzeugt.
Log-Eintrag Code Klartext 3000 SCRIPT_ERR Parameter Code Klartext 0 NO SCRIPT kein gültiges Script vorhanden 1 SCRIPT UPDATE neues Script erhalten 2 SCRIPT EXCEPT LOOP Exception Loop erkannt (4 Systemstarts nach Exeption innerhalb von 10min.) Beschreibung Das Script wird deaktiviert und das Errorhandling aktiviert (siehe "Errorhandling" auf Seite 90). Es erfolgt auch eine Neu-Formatierung des Filesystems. D.h. alle bisher aufgezeichneten Daten sowie Log-Einträge gehen verloren.
Kapitel 4 Pawn Script Log-Eintrag Code Klartext 3003 AMX_ERR_ STACKERR Parameter Code Klartext ## --- Beschreibung Stack / Heap Kollision (unzureichende StackGröße) 3004 AMX_ERR_BOUNDS ## --- Array-Index außerhalb des gültigen Bereichs 3005 AMX_ERR_ MEMACCESS --- ungültiger Speicherzugriff ## z.B.
Log-Eintrag Parameter Code Klartext Code Klartext 3025 AMX_ERR_PARAMS ## --- Beschreibung fehlerhafter Parameter 3026 AMX_ERR_DOMAIN ## --- Domain-Fehler. Das Ergebnis des Ausdrucks ist nicht im gültigen Bereich. 3027 AMX_ERR_GENERAL ## --- allgemeiner Fehler (unbekannter oder nicht spezifizierter Fehler) 3028 AMX_ERR_OVERLAY ## --- Overlays werden nicht unterstützt (JIT) oder sind nicht initialisiert. 4.3.1 Errorhandling Um zu gewährleisten, dass bei Problemen mit dem Script eine Diagnose bzw.
Kapitel 4 Pawn Script Stern) beginnt und mit einem "*/" endet, ist ein Dokumentationskommentar. Ein Kommentar, der mit "/// " (drei Schrägstriche und ein Leerzeichen nach dem dritten Schrägstrich) beginnt, ist ebenfalls ein Dokumentationskommentar. Der Parser kann den Dokumentationskommentar in unterschiedlicher Weise unterstützen, zum Beispiel könnte er eine Online-Hilfe daraus generieren. 4.4.1.4 Bezeichner Namen von Variablen, Funktionen und Konstanten. Bezeichner bestehen aus den Zeichen a...z, A...
4.4.1.6.2 Numerische Gleitkomma-Konstanten Eine Gleitkommazahl ist eine Zahl mit einem Nachkommateil. Eine Gleitkommazahl beginnt mit einer oder mehreren Ziffern, beinhaltet einen Dezimaltrennpunkt und hat zumindest eine Ziffer nach dem Dezimaltrennpunkt. z.B. "12.0" und "0.75" sind gültige Gleitkommazahlen. Optional kann noch ein Exponent angehängt werden. Die Notation ist der Buchstabe "e" (Kleinbuchstabe), gefolgt von einer ganzzahligen numerischen Konstante. Z.B. "3.12e4" oder "12.
Kapitel 4 Pawn Script Variable auch nach dem Ende einer Funktion im Speicher. Dies bedeutet, dass statische lokale Variablen eine private, dauerhafte Speicherung bereitstellen, die nur in einer einzigen Funktion (oder einem Block) zugänglich sind. Wie globale Variablen, können statische lokale Variablen nur mit konstanten Ausdrücken initialisiert werden. 4.4.2.
4.4.4 Array Variablen 4.4.4.1 Eindimensionales Array Die Syntax name[constant] deklariert "name" als ein Array aus “constant” Elementen, wobei jedes Element ein Eintrag ist. "name" ist ein Platzhalter für den Namen der Variable und "constant" ist ein positiver Wert ungleich Null. "constant" ist optional und kann weggelassen werden. Wenn kein Wert zwischen den Klammern steht, ist die Anzahl von Elementen gleich der Anzahl der Initialwerte.
Kapitel 4 Pawn Script 4.4.4.4 Mehrdimensionale Arrays (Es werden nur Arrays mit bis zu 3 Dimensionen unterstützt) Mehrdimensionale Arrays sind Arrays, die Referenzen zu weiteren Sub-Arrays enthalten. Zum Beispiel ist ein zweidimensionales Array ein "Array auf Eindimensionale Arrays". Beispiele für die Deklaration von zweidimensionalen Arrays: new new new new new new a[4][3] b[3][2] = [ [ 1, 2 ], [ 3, 4 ], [ 5, 6 ] ] c[3][3] = [ [ 1 ], [ 2, ...], [ 3, 4, ...
new matrix[3][2] = { { 1, 2 }, { 3, 4 }, { 5, 6 } } printf(’’%d %d’’, sizeof matrix, sizeof matrix[]); Die Anwendung des "sizeof"-Operators auf mehrdimensionale Arrays ist besonders praktisch, wenn er als Standardwert für Funktionsargumente verwendet wird. 4.4.5 Operatoren und Ausdrücke 4.4.5.1 Zeichenerklärung Die Anwendung von einigen Operatoren hängt von der jeweiligen Art des Operanden ab. Aus diesem Grund wird in diesem Kapitel folgende Notation angewendet: e beliebiger Ausdruck (eng.
Kapitel 4 Pawn Script 4.4.5.3 Arithmetik Operator Beispiel Erklärung + e1 + e2 Ergebnis der Addition von e1 und e2 - e1 - e2 Ergebnis der Subtraktion von e1 und e2 -e Ergebnis der arithmetischen Negation von e (Zweierkomplement) * e1 * e2 Ergebnis der Multiplikation von e1 und e2 / e1 / e2 Ergebnis der Division e1 durch e2. Das Ergebnis wird zum nächstgelegenen ganzzahligen Wert, der kleiner oder gleich dem Quotienten ist, abgeschnitten.
4.4.5.5 Zuweisung Das Ergebnis eines Zuweisungsausdrucks ist der Wert des Operanden nach der Zuweisung. Operator Beispiel Erklärung = v=e weist den Wert von e der Variable v zu v=a weist das Array a der Variable v zu. v muss ein Array mit derselben Größe und denselben Dimensionen sein wie a. a kann eine Zeichenkette oder ein Array sein. Hinweis: Die folgenden Operatoren kombinieren eine Zuweisung mit einer arithmetischen oder bitweisen Operation.
Kapitel 4 Pawn Script Hinweis: Die folgenden Operatoren können verkettet werden, wie im Ausdruck "e1 <= e2 <= e3". Dies bedeutet, dass das Ergebnis "1" ist, wenn jeder einzelne Vergleich zutrifft und "0", wenn zumindest ein Vergleich nicht zutrifft. Operator Beispiel Erklärung < e1 < e2 Das Ergebnis ist ein logisches "true", wenn e1 kleiner ist als e2. <= e1 <= e2 Das Ergebnis ist ein logisches "true", wenn e1 kleiner oder gleich e2 ist.
4.4.5.8 Sonstiges Operator Beispiel [] a[e] Erklärung Array Index: Das Ergebnis ist der Eintrag an der Position e des Arrays a. {} a{e} Array Index: Das Ergebnis ist das Zeichen an der Position e des "packed" Arrays a. () f(e1, e2, ... eN) Das Ergebnis ist der Wert, der von der Funktion f zurückgegeben wird. Die Funktion wird mit den Parametern e1, e2, ... eN aufgerufen. Die Reihenfolge der Auswertung der Parameter ist nicht definiert.
Kapitel 4 Pawn Script Wenn die Auswertung eines Ausdrucks nicht explizit durch Klammern begründet wird, wird sie von den Assoziationsregeln bestimmt. Zum Beispiel: a*b/c ist gleich (a*b)/c auf Grund der links zu rechts Assoziation, und a=b=c ist gleichzusetzen mit a=(b=c).
4.4.6 Anweisungen Ein Statement kann aus einer oder mehreren Zeilen bestehen. Eine Zeile kann zwei oder mehrere Statements enthalten. Statements zur Ablaufsteuerung (if, if-else, for, while, do-while und switch) können geschachtelt werden. 4.4.6.1 Statement-Etikett Ein Etikett besteht aus einem Identifizierer gefolgt von einem ":". Ein Etikett ist ein "Sprung-Ziel" eines "goto" Statements. Jede Anweisung kann mit einem Etikett versehen werden.
Kapitel 4 Pawn Script Beispiel: fibonacci(n) { assert n > 0 new a = 0, b = 1 for (new i = 2; i < n; i++) { new c = a + b a = b b = c } return a + b } 4.4.6.6 break beendet und verlässt das kleinste, umschließende "do"-, "for"- oder "while"-Statement an jedem beliebigen Punkt in der Schleife. Das "break"-Statement bewegt den Programmfluss zum nächsten Statement außerhalb der Schleife. Beispiel: example(n) { new a = 0 for(new i = 0; i < n ; i++ ) { a += i if(i>10) break a += 1 } return a } 4.4.6.
Beispiel example(n) { new a = 0 for(new i = 0; i < n ; i++ ) { a += i if(i>10) continue a += 1 } return a } 4.4.6.8 do Statement while ( Ausdruck ) führt ein Statement aus, bevor der Bedingungsteil (die "while"-Bedingung) evaluiert wird. Das Statement wird wiederholt, solange die Bedingung logisch "true" ist. Das Statement wird zumindest einmal ausgeführt. Beispiel: example(n) { new a = 0 do { a++ } while(n >= 0) return a } 4.4.6.9 exit Ausdruck bricht das Programm ab.
Kapitel 4 Pawn Script Ausdruck 1: wird nur einmal ausgewertet, vor Eintritt in die Schleife. Dieser Ausdruck kann zum Initialisieren einer Variablen genutzt werden. Dieser Ausdruck hält auch die Variablendeklaration mittels der "new"-Syntax. Eine Variable, die an dieser Stelle deklariert wird, ist nur innerhalb der Schleife gültig. Es ist nicht möglich einen Ausdruck (mit bereits vorhandenen Variablen) und eine Deklaration von neuen Variablen in diesem Feld zu kombinieren.
Beispiel: example(n) { if(n < 0) return -1 else if (n == 0) return 0 else return 1 } 4.4.6.13 return Ausdruck beendet die aktuelle Funktion und bewegt die Programmsteuerung zum nächsten Statement nach dem Funktionsaufruf. Der Wert des Ausdrucks wird als Funktionsergebnis zurückgeliefert. Der Ausdruck kann ein Array oder eine Zeichenfolge sein. Der Ausdruck ist optional, wenn er jedoch vorhanden ist, muss er an der selben Zeile beginnen, wie das "return"-Statement.
Kapitel 4 Pawn Script Beispiel: example(n) { new a = 0 switch (n) { case 0..3: a = 0 case 4,6,8,10: a = 1 case 5,7: a = 2 case 9: a = 3 default: a = -1 } return a } 4.4.6.15 while ( Ausdruck ) Statement wertet den Ausdruck aus und führt das Statement aus, wenn das Ergebnis des Ausdrucks logisch "true" ergibt. Nachdem die Anweisung ausgeführt wurde, kehrt die Programmsteuerung erneut zu dem Ausdruck zurück. Das Statement wird daher ausgeführt, solange der Ausdruck logisch "true" ist.
muss global definiert, d.h. außerhalb einer anderen Funktion deklariert werden und ist global verfügbar. Wenn ein Semikolon der Funktionsdeklaration folgt (anstatt einer Anweisung), dann ist dies eine Vorwärtsdeklaration einer Funktion. Die "return"-Anweisung setzt den Rückgabewert der Funktion. Zum Beispiel, hat die Funktion "sum" (siehe unten) als Rückgabewert die Summe der beiden Parameter. Der "return"-Ausdruck ist optional.
Kapitel 4 Pawn Script 4.4.7.1 Funktionsargumente ("call-by-value" versus "call-by-reference") Die "faculty"-Funktion im nächsten Beispiel hat einen Parameter, der in der Schleife benutzt wird um die Fakultät dieser Zahl zu berechnen. Was Aufmerksamkeit verdient ist, dass die Funktion das Argument modifiziert.
Beispiel: addvector(a[], const b[], size) { for (new i = 0; i < size; i++) a[i] += b[i] } Arrays werden immer als Referenz übergeben. Hinweis: Das Array "b" im oben gezeigten Beispiel wird in der Funktion nicht verändert. Dieses Funktionsargument wurde als "const" deklariert, um dies explizit zu machen. Zusätzlich zur verbesserten Fehlererkennung, erlaubt es dem Compiler einen effizenteren Code zu generieren.
Kapitel 4 Pawn Script new wkday1 = weekday( .month = 12, .day = 31, .year = 1999) new wkday2 = weekday( .day = 31, .month = 12, .year = 1999) new wkday3 = weekday( .year = 1999, .month = 12, .day = 31) Bei "benannten Parametern" wird ein Punkt (".") dem Namen des Arguments vorangestellt. Das Argument der Funktion kann auf einen beliebigen Ausdruck gesetzt werden, der gültig für das Argument ist.
Mit der vorangegangenen Definition der Funktion "divmod" sind die folgenden Funktionsaufrufe alle gültig: new p, q divmod(10, divmod(10, divmod(10, divmod(10, divmod 10, 3, 3, 3, 3, 3, p, p, _, p) p, q) _) q) q Das nächste Beispiel addiert die Werte von einem Array zu einem anderen. Wenn nur ein Parameter angegeben wird, dann werden die Werte des Arrays um 1 erhöht: addvector(a[], const b[] = {1, 1, 1}, size = 3) { for (new i = 0; i < size; i++) a[i] += b[i] } 4.5 Beispiele t.b.d. 4.
Kapitel 4 Pawn Script l l l l l l l l l l "Cases" in einem "switch"-Statement sind nicht "durchfallend". Es muss dem "case"-Label zumindest eine Anweisung folgen. Um mehrere Anweisungen auszuführen, müssen Sie ein zusammengesetztes Statement (mit {}) erstellen (siehe "switch ( Ausdruck ) { case Liste }" auf Seite 106). In C/C++ ist die "switch"-Anweisung ein "bedingtes goto". In Pawn ist die "switch"Anweisung ein strukturiertes "if". Eine "break"-Anweisung beendet nur Schleifen.
l 114 In den meisten Fällen sind Vorwärts-Deklarationen von Funktionen (d.h., Prototypen) nicht notwendig. Pawn ist ein 2-Pass-Compiler. Er erkennt alle Funktionen beim ersten Durchlauf und verwendet diese beim zweiten Durchlauf. Benutzerdefinierte Operatoren müssen jedoch vor der Benutzung deklariert werden. Falls vorhanden, müssen Vorwärts-Deklarationen genau mit der Definition der Funktion übereinstimmen. Die Parameternamen in den Prototypen und den Definitionen der Funktionen müssen ident sein.
Kapitel 5 Connector Das Grundprinzip des C-Control IoT-Starter Kit 10 ist eine sogenannte Storage-2-StorageDatenübertragung. Für diese Art der Datenübermittlung müssen weder das C-Control IoT-Starter Kit 10 noch der Server über den logischen Inhalt der Datenblöcke Bescheid wissen. Es geht also nur darum, einen Block Daten von A nach B zu transportieren. Die von einem C-Control IoT-Starter Kit 10 an den Server übermittelten Daten sind somit frei gestaltbar.
l Vollständigkeit des Nutzdatenblocks (gilt nur für Daten) Nutzdatenblöcke sind immer mit allen Datenfeldern zu befüllen, auch wenn sich nur ein oder zwei Werte seit der letzten Übertragung verändert haben. Die Daten werden vom Connector mit Byte-Offset und Länge aus dem Nutzdatenblock extrahiert, daher müssen sich die Felder immer an der gleichen Position befinden.
dafür Sorge tragen, dass das erste Byte des Rohdatensatzes immer einen Wert größer 9 enthält. Beispiel für einen Split-tag: Code source target key =rm2mraw =histdata0 =* Erklärung Beginn des Split-tags Quelle der Daten, die kopiert werden sollen Ziel, in das die Daten kopiert werden sollen Schlüssel für die Auftrennung der Daten Ende des Split-tags source Tabellenname der Quelle Bei rapidM2M ist die Quelle immer rm2mraw.
Hinweis: Ergänzende Erklärung zur Funktionsweise der Split-tags Im folgenden Beispiel existieren zwei Nutzdatenblockstrukturen, die mittels Connector vom unstrukturierten Bereich ("rm2mraw") in unterschiedliche strukturierte Messdatenkanäle ("histdata0" und "histdata1") kopiert werden sollen, um sie in Verbindung mit der myDatanet Oberfläche nutzen zu können (Auswertungen, Visualisierungen, Grafiken, etc.).
Code
name =histdata0 name =ch0 title =Verzögerung units =sec type =u16 byteofs =0 vofs =10 min =10 max =2000 chmode =3
Erklärung Beginn des Table-tags Name der zu beschreibenden Datentabelle Beginn einer Feld-Definition (ch0) für ein Feld des Typs u16, Beschreibung der Attribute siehe unten Ende einer Feld-Definition (ch0) Beispiel für die Aufteilung eines Konfigurationsspeicherblocks ("config0") in einzelne Datenfelder Code name =config0 name =field0 titalias Alphanumerisch. Alias für den internen Namen des Kanals der von der REST-API verwendet wird. title Alphanumerisch. Titel des Feldes. Diese Bezeichnung findet sich danach in allen Auswertungen, Grafiken, etc. für diesen Kanal. Die Länge von title sollte 16 Zeichen nach Möglichkeit nicht überschreiten, da sonst Darstellungsprobleme an der Oberfläche auftreten können. units Alphanumerisch. Einheiten des Werts.
vscale Numerisch, Fließkomma. Virtuelle Skalierung des Werts. Der extrahierte Wert wird mit diesem Faktor multipliziert und dann erst weiterverwendet. Dieser Wert stellt den Wert k aus der Formel k*x+d dar. vofs Numerisch, Fließkomma. Virtueller Offset des Werts. Der extrahierte Wert wird erst mit vscale multipliziert, danach wird vofs zum Wert addiert. Dieser Wert stellt den Wert d aus der Formel k*x+d dar. min Der Minimalwert für die weitere Darstellung am Server (z.B. Grafik).
edit Numerisch, ganzzahlig, positiv. Gibt den Benutzerlevel an, der erforderlich ist, um den Feldinhalt über die Oberfläche des C-Control-Servers verändern zu können. Wird dieses Attribut nicht angegeben oder ist der angegebene Wert kleiner als jener für das Attribut "view", ist zum Ändern des Feldinhalts der für das Attribut "view" angegebene Benutzerlevel erforderlich. Soll ein Ändern des Feldinhalts über die REST-API verhindert werden, muss der Wert dieses Attributs auf 99 gesetzt werden. 122 Rev.
5.4 Beispiel
name =histdata0 name =ch0 title =Verzögerung units =sec type =u16 byteofs =0 vofs =10 min =10 max =2000 chmode =3 index =1 name =ch1 title =Höhe units =cm type =f32 byteofs =2 decpl =2 vofs =0 vscale =0.5.5 Spezialwerte der Datentypen Jeder numerische Datentyp unterstützt spezielle Zustände wie z.B. NaN (Not a Number). Wird solch ein Wert am Server erkannt, so wird die in myDatanet übliche Anzeige und Weiterverarbeitung angewandt.
Kapitel 6 Technische Daten Kapitel 6 Technische Daten Versorgung Li-Po Akku mit 520mAh Ladespannung 5VDC über Micro-USB Typ B Buchse Ausgangsspannung 2,8V , max. 30mA Eingangsbereich der I/Os 0...2,8V Abmessungen (BHT) Modul: 39 x 32 x 6mm Akku: 37 x 31 x 6mm Gewicht Modul: 7g Akku: 10g Antennenanschluss U.FL Interface 2 x 10 durchkontaktierte Bohrungen im Raster 2,54mm Universaleingänge 2 x analog oder digital l 0...2,5V : Auflösung 610µV, max. 2,5V, Bürde 1MΩ l Digital: max.
USB-Schnittstelle 1 x Micro USB 2.0 Slave für die Verbindung mit einem PC und zum Laden des Akkus. Für die Kommunikation mit der C-Control IoT-Starter Kit 10 muss am PC das rapidM2M Toolset installiert sein. Datenspeicher 448 kB interner Flash-Speicher Die Größe der Datensätze ist variabel (max. 1024 Byte ) und wird durch das vom User erstellte Script bestimmt. Der systembedingte Overhead beträgt pro Datensatz 10 Byte.
Kapitel 7 Kontaktinformationen Kapitel 7 Kontaktinformationen Elco Industrie Automation GmbH Benzenmühlstr. 9 71723 Großbottwar Germany, Europe Tel. +49 7148 154 99 90 info@elco-automation.de www.elco-automation.de Rev.