lua:introduction_to_lua_programming
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revisionNext revisionBoth sides next revision | ||
introduction_to_lua_programming [2019/01/09 10:03] – created akuzmuk | lua:introduction_to_lua_programming [2021/07/22 07:31] – ↷ Links adapted because of a move operation atolstov | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Introduction to Lua programming ====== | ====== Introduction to Lua programming ====== | ||
- | WebHMI allows you to create custom programs (scripts) in [[https:// | + | WebHMI allows you to create custom programs (scripts) in [[https:// |
- | There is a useful link for quick understanding | + | |
- | The scripts are managed in the **Setup -> Scripts** menu item. | + | |
- | Each script should contain a function named **main**. It will be called at the right time (depending on the settings of the script - in each cycle, when you act on the dashboard or when changing the value of the register, etc). Also, the entire script will be executed once when the daemon is started. This is necessary to compile the Lua script and validate it. Mis means that all the code that is in the global scope (that is, outside the main function, the main function will not be called) will be executed. This can be useful for initialising | + | If you have no experience with Lua language read this tutorial at first [[ https:// |
+ | |||
+ | Each WebHMI | ||
Each script has its own global scope. It is impossible to access global variables and functions from one script in another. | Each script has its own global scope. It is impossible to access global variables and functions from one script in another. | ||
- | The **main** function will receive one parameter //userId//. This is ID of the user that executed this script. If the script is being executed in each loop or when the register is changed, **userId** will be zero. | + | The **main** function will receive one special |
- | The example of a simple script for WebHMI: | + | Here is an example of a simple script for WebHMI: |
<code lua> | <code lua> | ||
--[[ | --[[ | ||
these vars will be assigned only once | these vars will be assigned only once | ||
| | ||
- | BUT NOT between project restarts!!! -- use DSxxx registers | + | BUT NOT between project restarts!!! -- for saving data between project restarts |
--]] | --]] | ||
first_scan = true -- first scan flag | first_scan = true -- first scan flag | ||
Line 44: | Line 44: | ||
WebHMI imposes the following restrictions on standard Lua functions and libraries: | WebHMI imposes the following restrictions on standard Lua functions and libraries: | ||
- | *such functions and tables are __not available__: | + | * such functions and tables are __not available__: |
- | *libraries are __not available__: | + | * libraries are __not available__: |
- | In addition to the standard Lua functions, WebHMI also defines additional functions which are decsribed | + | In addition to the standard Lua functions, WebHMI also defines additional functions which are described |
- | For the convenience of working with registers from Lua programs, each register can be assigned a symbolic name and be accessed from Lua already | + | For the convenience of working with registers from Lua programs, each register can be assigned a symbolic name and be accessed from Lua with this name. This name is specified in the register settings in the **Script alias** field: |
{{ : | {{ : | ||
- | In the example above, | + | In the example above, |
An example of a simple script that shows the calls of some WebHMI functions: | An example of a simple script that shows the calls of some WebHMI functions: | ||
Line 75: | Line 75: | ||
</ | </ | ||
- | Despite the fact that the built-in editor checks the syntax of the program, it is not able to detect all the errors that can occur during the execution of the script. | + | Despite the fact that the built-in editor checks the syntax of the program, it is not able to detect all the errors that can occur during the execution of the script. |
- | For example, once this script will be executed, an error will occur because variable **random** | + | For example, once this script will be executed, an error will occur because variable **random** |
<code lua> | <code lua> | ||
Line 83: | Line 83: | ||
| | ||
local v1 = GetReg(" | local v1 = GetReg(" | ||
- | v1 = v1+random; -- error is here, without random everything is ok | + | v1 = v1 + random; -- error is here, without random everything is ok |
| | ||
SetReg(" | SetReg(" | ||
Line 100: | Line 100: | ||
</ | </ | ||
- | Here we see that the error occurred while trying to perform an arithmetic operation with an undefined variable (value is **nil**). The error occurred in script | + | Here we see that the error occurred while trying to perform an arithmetic operation with an undefined variable (value is **nil**). The error occurred in script |
- | Thus, using this log you can find all runtime errors in your scripts. Also for debugging you can use watch console window, which is available in script editor. | + | Thus, using this log you can find all runtime errors in your scripts. Also for debugging you can use watch console window, which is available in [[: |
lua/introduction_to_lua_programming.txt · Last modified: 2022/01/17 20:58 by 127.0.0.1