Lua script API Reference Guide gratuit


Télécharger Lua script API Reference Guide gratuit

★★★★★★★★★★3.5 étoiles sur 5 basé sur 1 votes.
Votez ce document:

Télécharger aussi :


Lua script API Reference Guide gratuit

...

Qu'est ce que le Lua?

 Langage de script simple et procédural

Licensed licence MIT

 Construit pour l'intégration

 Faible empreinte

 Extrêmement portable

Qu'y a-t-il dans le module lua?

 enregistrement JavaScript

Type Type d'enregistrement avec comportement scriptable

 luash

Remplacement de la coquille IOC

 Prise en charge des périphériques pour les enregistrements communs

 Méthodes d'assistance pour intégrer Lua à d'autres modules

L'enregistrement luascript

 Basé sur l'enregistrement scalcout

 Champ CALC remplacé par le champ CODE

 Peut être soit déclaration en ligne

Ou peut référencer une fonction dans un script

champ (CODE "return‘ Hello, World '")

champ (CODE, fonction "@ script.lua")

Utilisation des entrées

10 entrées doubles (A-J) et 10 entrées de chaîne (AA-JJ)

Lors du processus d'enregistrement, les valeurs d'entrée sont converties en variables globales du même nom.

champ (CODE "retour A + B") champ (CODE "retour AA .. BB")

La coquille Lua

 REPL en utilisant l'interprète lua

Peut être utilisé en remplacement ou en complément du shell IOC ou vxWorks.

 Fournit des ajouts importants pour rendre les scripts de démarrage plus puissants.

Les fonctions

 Les fonctions peuvent simplifier les tâches complexes

def logInfo (text)

fichier journal = io.open ("test.log", "a +")

logfile: write (os.date ("% c", os.time ()))

logfile: write ("-" .. text .. "\ n")

logfile: close ()

fin

Arithmétique

Effectuer une opération arithmétique pour déterminer les valeurs de macro

NUM_CHANS = 16

SAMPLES_PER_CHAN = 1200

TOTAL_SAMPLES = NUM_CHANS * SAMPLES_PER_CHAN

Les conditions

 Utiliser des conditions pour contrôler de manière sélective l'exécution

ORDINATEUR = os.getenv ("HOSTNAME")

si (ORDINATEUR ~ = "kobold.aps.anl.gov") alors

logInfo ("IOC ne peut pas être exécuté sur d'autres ordinateurs")

os.exit ()

fin

Contrôle de flux

Utiliser des boucles pour effectuer des tâches répétitives

IOC_INFO = {name = "ioc1", ingénieur = "klang", emplacement = "437b004"}

pour clé, valeur par paires (IOC_INFO) do

print (clé, valeur)

fin

Coutumes

Peut être entré et quitté sur la ligne de commande du shell



 Peut être utilisé pour appeler un script

Peut être utilisé en remplacement intégral de iocsh (IOC soft uniquement)

iocxxx> luash

iocxxx> luash "script.lua" "MACRO = valeur"

luash (argv [1])

 Bibliothèque ‘asyn’

 getXXXParam,

setXXXParam

 Lire ou écrire des valeurs param sur un port asyn

 écrire / lire / écrire

Lecture, écriture ou les deux sur un port asynOctet

VAL = asyn.getIntegerParam ("port", 0, "param")

asyn.setIntegerParam ("port", 0, "param", VAL + 1)

asyn.callParamCallbacks ("port", 0)

RESPONSE = asyn.writeread ("IDN?", "Port", 0) print (RESPONSE)

 Bibliothèque ‘epics’

 obtenir / mettre

 Fait la même chose que caput ou caget

 pv

 Commodité pour les fonctions précédentes

 dormir

 cause le thread d'exécution à dormir

if (epics.get ("xxx: yyy: value")> 0) alors

epics.put ("xxx: yyy: valeur2", 10)

fin

PV1 = epics.pv ("xxx: yyy: valeur")

PV2 = epics.pv ("xxx: yyy: valeur2")

si (PV1 ["VAL"]> 0) alors

PV2 ["VAL"] = 10

fin

pour I = 1, 10 do

imprimer (I)

epics.sleep (1.0)

fin

 Bibliothèque ‘iocsh’

 Uniquement disponible en 3.15.5 et au-dessus

 Prend n'importe quel nom de fonction et argument

Recherche toute fonction de shell IOC portant le même nom.

VERSION = 0 + os.getenv ("EPICS_VERSION_MAJOR)

REVISION = 0 + os.getenv ("EPICS_VERSION_MIDDLE)

MINOR = 0 + os.getenv ("EPICS_VERSION_MINOR")

VERSION_INT = VERSION << 16 | RÉVISION << 8 | MINEUR

si (VERSION_INT> = (3 << | 15 << 8 | 5)) alors

iocsh.dbLoadRecords ("./ advanced.db", "P = xxx:")

fin

Ajout de bibliothèques personnalisées

 Les IOC avec le module peuvent étendre lua avec des fonctions personnalisées

 Toutes les plates-formes prennent en charge le chargement à l'exécution de scripts lua purs

 Les plates-formes prenant en charge les bibliothèques dynamiques peuvent charger des bibliothèques c / c ++ lors de l'exécution

 À l'aide du registre de la base de données EPICS, vous pouvez créer des extensions lua dans votre IOC.

Bibliothèques C / C ++

 Une seule fonction exportée doit être disponible

Ua luaopen_xxx, où xxx est le même nom que la bibliothèque.

La fonction doit prendre un lua_State * et renvoyer un entier

Valeur de retour est le nombre de valeurs poussées sur la pile Lua

Ne devrait être que 1

Utilise luaL_newlib pour donner à lua une table de pointeurs de fonctions et de noms de chaînes

Exemple static int bar (état lua_State *) {

lua_pushstring (state, "Hello, World");

retourne 1;

}

int luaopen_foo (état lua_State *) {



constante statique luaL_Reg fooFuncs [] = {

{"bar", bar},

{NULL, NULL} / * Élément Sentinel * /

};

luaL_newlib (state, fooFuncs);

retourne 1;

}

Bibliothèques Dynamiques

Définissez la variable d'environnement LUA_CPATH

Un ensemble de modèles avec des caractères génériques

Exemple: "./?.so;/usr/local/?/init.so"

foo = require ("foo")

print (foo.bar ())

Bibliothèques statiques

foo.cpp

statique vide fooRegister (vide)

{

luaRegisterLibrary ("foo",

luaopen_foo);

}

extern "C"

{

epicsExportRegistrar (fooRegister);

}

foo.dbd

registraire (fooRegister)

 ………

Définit le contenu du texte de l'éditeur de texte. La position du curseur est définie sur 1 (début du texte), -1 (fin du texte) ou une valeur comprise entre 1 et la longueur du texte plus 1. Vous pouvez sélectionner le texte en spécifiant un index de sélection indiquant la fin de la sélection. Si la sélection = -1, aucun texte n'est sélectionné. Si le curseur <-1 ou la sélection <-1, une erreur est renvoyée. Si non spécifié, le curseur et la sélection commencent par défaut à -1. Si la valeur est true, le paramètre facultatif final, précision complète, indique que tous les chiffres des résultats calculés doivent être affichés. Si la valeur est false, la précision maximale indique que les résultats calculés doivent être arrondis à l'aide du paramètre de précision de l'éditeur.

Remarque

Toutes les barres obliques inverses envoyées à l'éditeur doivent être doublées. Cela s'ajoute à la règle d'échappement standard pour les caractères spéciaux. En conséquence, la chaîne requise pour que l'éditeur affiche \ home \ stuff \ work est "home \\\\ stuff \\\\ work".

Usage

Les positions du curseur et de la sélection sont les limites entre les caractères, pas les positions des caractères. L’extrait de code suivant met en évidence les caractères "chaîne à se" et place le curseur avant la chaîne "s’ dans ".

str = ’Ceci est une chaîne de test pour le voir fonctionner. "

d2e, erreur = D2Editor. newRichText ()

résultat, erreur = d2e: setText (str, 16, 28)

L’extrait de code suivant met en évidence les caractères "chaîne à se" et place le curseur avant le deuxième e "dans" voir ".

str = ’Ceci est une chaîne de test pour le voir fonctionner. "

d2e, erreur = D2Editor. newRichText () result, error = d2e: setText (str, 28, 16)

Retourne l'objet éditeur de texte.

……

Bibliothèque de curseurs

Cette bibliothèque de curseurs contrôle l’apparence du pointeur de la souris. La visibilité du curseur ne peut être contrôlée que sur un ordinateur de poche.

Une bonne pratique consiste à demander l'apparence attendue du curseur dans on.activate (). Les appels sur la bibliothèque de curseurs sont ignorés lors de la désactivation (après réception de on.deactivate ()).

ensemble

le curseur . set (cursorname)

Le paramètre cursorname est une chaîne contenant le nom de la forme du curseur à utiliser pour le pointeur de la souris. Ce peut être l'une des chaînes suivantes:

"Défaut", "interrogation", "réticule", "texte", "pointeur", "sélection de lien", "changement de taille", "attente occupée", "pointeur creux", "rotation", "crayon", "zoom" boîte "," masquer "," flèche "," zoom arrière "," flèche en pointillé "," effacer "," animer "," excel plus "," étiquette de mod "," écriture "," indisponible "," redimensionner la ligne "," Redimensionner la colonne "," glisser la main "," main ouverte "," main fermée "," pointeur de main ",

"Zoom avant", "dilatation", "traduction", "montrer"

Introduit dans platform.apiLevel = ’1.0’

cacher

le curseur . cacher ()

Cette routine masque le pointeur de la souris sur un ordinateur de poche.

Remarque: Les appels à cette routine sont ignorés s'ils ne sont pas exécutés sur un ordinateur de poche.



144