+ All Categories
Home > Software > Use of Lua in Lab Devices

Use of Lua in Lab Devices

Date post: 18-Feb-2017
Category:
Upload: claus-kuehnel
View: 207 times
Download: 0 times
Share this document with a friend
21
Sample & Assay Technologies Use of Lua in Lab Devices Claus Kühnel, Daniel Zwirner, QIAGEN Instruments AG January 2015 Lua is a powerful, light-weight programming language designed for extending applications. The language engine is accessible as a library, having a C API which allows the application to exchange data with Lua programs and also to extend Lua with C functions. Lua is also used as a general-purpose, stand-alone language through the simple command line interpreter provided.
Transcript
Page 1: Use of Lua in Lab Devices

Sample & Assay Technologies

Use of Lua in Lab DevicesClaus Kühnel, Daniel Zwirner, QIAGEN Instruments AGJanuary 2015

Lua is a powerful, light-weight programming language designed for extending applications. The language engine is accessible as a library, having a C API which allows the application to exchange data with Lua programs and also to extend Lua with C functions.

Lua is also used as a general-purpose, stand-alone language through the simple command line interpreter provided.

Page 2: Use of Lua in Lab Devices

Sample & Assay Technologies

2

Initial Situation

2

Origin of Lua

Lua is designed, implemented, and maintained by a team at PUC-Rio, the Pontifical Catholic University of Rio de Janeiro in Brazil. Lua was born in 1993 and raised in Tecgraf, formerly the Computer Graphics Technology Group of PUC-Rio. LabLua was founded on May 2004 by Prof. Roberto Ierusalimschy.Lua is now housed at LabLua, a laboratory of the Department of Computer Science of PUC-Rio.

"Lua" (pronounced LOO-ah) means "Moon" in Portuguese.

Page 3: Use of Lua in Lab Devices

Sample & Assay Technologies

3

Initial Situation

3

Initial Situation

Robotic Hardware (HAL) movexy(x,y) ….

Biological Protocol

Protocol Interpreter

….

Robotic Platform

Page 4: Use of Lua in Lab Devices

Sample & Assay Technologies

4

• To execute “biological protocols” we need an protocol interpreter as a layer over the HAL

• Should we develop the 1001. proprietary interpreter now?

• Searching for a suitable solution leads us to Lua

• A Friday afternoon was enough for installation and first tests

• Culture shock for the proprietary fraction

Initial Situation

Page 5: Use of Lua in Lab Devices

Sample & Assay Technologies

5

• Lua is a powerful, fast, lightweight, embeddable scripting language.

• Lua combines simple procedural syntax with powerful data description constructs based on associative arrays and extensible semantics.

• Lua is dynamically typed, runs by interpreting byte code for a register-based virtual machine, and has automatic memory management with incremental garbage collection, making it ideal for configuration, scripting, and rapid prototyping.

What is Lua?

Page 6: Use of Lua in Lab Devices

Sample & Assay Technologies

6

• Lua is a proven, robust language used in applications like Adobe's Photoshop Lightroom, World of Warcraft & Angry Birds. 

• Lua is fast, portable, embeddable

• Lua is powerful (but simple)

• Lua is small. Under Linux, the Lua interpreter built with all standard Lua libraries takes 182 KB and the Lua library takes 244 KB.

• Lua is well documented

• Lua is free open-source software, distributed under the well-known MIT license

• Runs on all common operating systems

Why choose Lua?

Page 7: Use of Lua in Lab Devices

Sample & Assay Technologies

7

Lua Documentation

Page 8: Use of Lua in Lab Devices

Sample & Assay Technologies

8

Installing Lua (to get a playground)

Lua for WindowsLua for Windows (LfW) combines Lua binaries, Lua libraries with a Lua-capable editor in a single install package for the MS Windows operating system. LfW contains everything you need to write, run and debug Lua scripts on Windows. A wide variety of libraries and examples are included that are ready to use with MS Windows.https://code.google.com/p/luaforwindows/

Lua for Linux (Debian)apt-get install lua5.1apt-get install lua5.1-0-dev

http://ckuehnel.ch/dokuwiki/doku.php?id=lua_on_bananapi

Page 9: Use of Lua in Lab Devices

Sample & Assay Technologies

10

Some Lua code

function p(a) io.write(a .. ", type is " .. type(a) .. "\n")end

a = 123.45p(a)-> 123.45, type is number

a = "hello"p(a)-> hello, type is string

a = 123+ "12"p(a)-> 135, type is number

Page 10: Use of Lua in Lab Devices

Sample & Assay Technologies

12

Returning multiple variables

function f(a,b) return a, a*b, 5end

print(f(1,2))-> 1 2 5

a,b,c = f(3,4)print(a,b,c)-> 3 12 5

t = {1,2}print(f(unpack(t)))-> 1 2 5

Page 11: Use of Lua in Lab Devices

Sample & Assay Technologies

14

Variable number of arguments

function f(a,b, ...) print(a,b, unpack(arg))end

print(f(1,2))-> 1 2

print(f(1,2,3))-> 1 2 3

print(f(1,2, "Hi", " there"))-> 1 2 Hi there

Page 12: Use of Lua in Lab Devices

Sample & Assay Technologies

15

Set of functions that allow C to interact with Lua

• Functions to read and write Lua global variables• Functions to call Lua functions

• Functions to register C functions within Lua

Stack-based parameter passing

C Interface API

Page 13: Use of Lua in Lab Devices

Sample & Assay Technologies

16

Embedding Lua:• Lua is packed as a library. • The application calls lua_open to create and

initializes a Lua state.• When the application is finished running Lua script it

calls lua_close to finalize and destroy Lua state.

Extending Lua:• The Lua API supports the extension of Lua state by

the possibility to call C functions from Lua scripts.

Embedding Lua vs. Extending Lua

Page 14: Use of Lua in Lab Devices

Sample & Assay Technologies

17

Lua Stack – LIFO principle

C-> Lua Lua -> Cvoid lua_pushnil() lua_isnil()

void lua_pushboolean() int lua_toboolean

void lua_pushnumber() double lua_tonumber

void lua_pushstring() const char* lua_tostring

void lua_pushlstring() size_t lua_strlen

void lua_gettable

void lua_settable

Page 15: Use of Lua in Lab Devices

Sample & Assay Technologies

18

Lua Stack – Pushing elements

void lua_pushnil (lua_State *L) void lua_pushboolean (lua_State *L, int bool); void lua_pushnumber (lua_State *L, double n); void lua_pushlstring (lua_State *L, const char *s, size_t length); void lua_pushstring (lua_State *L, const char *s);

Page 16: Use of Lua in Lab Devices

Sample & Assay Technologies

19

Lua Stack – Query elements

int lua_toboolean (lua_State *L, int index)double lua_tonumber (lua_State *L, int index)const char * lua_tostring (lua_State *L, int index)size_t lua_strlen (lua_State *L, int index);

Page 17: Use of Lua in Lab Devices

Sample & Assay Technologies

20

Lua Stack – other stack operations

void lua_pop (lua_State *L, int number)int lua_gettop (lua_State *L)void lua_settop (lua_State *L, int index)void lua_pushvalue (lua_State *L, int index)void lua_remove (lua_State *L, int index)void lua_insert (lua_State *L, int index)void lua_replace (lua_State *L, int index);

Page 18: Use of Lua in Lab Devices

Sample & Assay Technologies

21

Enhancing Lua by C functions

http://ckuehnel.ch/dokuwiki/doku.php?id=lua_erweiterung

Embedding Lua in a C application

http://ckuehnel.ch/dokuwiki/doku.php?id=lua_embedding

Page 19: Use of Lua in Lab Devices

Sample & Assay Technologies

22

Wrapper

SWIG is a software development tool that connects programs written in C and C++ with a variety of high-level programming languages.http://www.swig.org/

tolua is a tool that greatly simplifies the integration of C/C++ code with Lua. Based on a cleaned header file, tolua automatically generates the binding code to access C/C++ features from Luahttp://webserver2.tecgraf.puc-rio.br/~celes/tolua/

Look for examples to both wrappers in our book.

Page 20: Use of Lua in Lab Devices

Sample & Assay Technologies

23

Lua in a Lab Device

HAL movexy(x,y) ….

GUI movexy(x,y) ….

Lua VM

….

Robotic Platform

Lua enhanced by C/C++

functions (HAL)

Lua embedded in C/C++

application (GUI)

Page 21: Use of Lua in Lab Devices

Sample & Assay Technologies

24

INSTRUMENT init()…

Lua in a Lab Device – some code

HAL init()

GUI pushButtonInitPressed() ….

LuaVM

run()…

luaopen_cube() …

Robotic Platform

Lua embedded in C/C++

application (GUI)

Lua enhanced by C/C++

functions (HAL)

Code sample: http://ckuehnel.ch/dokuwiki/doku.php?id=lua_lab_device


Recommended