====== Functions to get access to registers ======
==== GetReg(variable_name[, connection_name]) ====
The GetReg function returns the current value of the specified register.
Before version 3.2 following notation was used:
The variable name **variable_name** where **variable_name** is the value of **Script alias** from the register's settings. Instead of variable_name you can specify a number - the register ID. However, the register ID is a less obvious way and it complicates the reading of the program.
The optional parameter **connection_name** can be specified if in several different connections there are registers with the same **variable_name**. In this case, connection_name indicates from which particular connection it is necessary to read the register named variable_name. Also, instead of the string connection_name, you can specify the connection ID. However, again, constants complicate the reading of the code and it is preferable to use named lines.
Since version 3.2 new enhanced notation used:
There is no **connection_name** parameter anymore. **variable_name** is the only parameter. It can be in one of 3 following formats:
- number with register Id. Not recommended to use because it is hard to read code with hardcoded numbers. Example: GetReg(12)
- string with script alias of register. Example: GetReg("speed")
- string in format "connection_alias.register_alias" where first part is connection alias and second part is register alias. Example: GetReg("mixer.speed"); In this example value or "speed" register from "mixer" connection will be fetched.
If the register was not found or was not read, then the value **nil** is returned.
For the convenience of selecting registers for GetReg, there is a special button in toolbar (4).
{{ network:get_reg_button.png?direct&300 |}}
When you click on any of them, a pop-up window appears with a list of registers.
{{ network:select_register_dialog.png?direct&800 |}}
After clicking on the register of interest, the editor will insert the code with the identifier of the selected register (variable_name if exists or ID) and a comment with the register name, its address and the connection name.
{{ network:reg_inserted_after_getreg.png?600 |}}
==== GetRegStatus(variable_name) ====
The GetRegStatus function returns the status of specified register. Function works exactly like function **GetReg**.
On success function will return one of the following states:
* unknown
* disabled
* normal
* warning
* alert
==== SetReg(variable_name[,connection_name], new_value) ====
The SetReg function sets the current value of the register with the name of the variable **variable_name** to **new_value** for the current scan. This function **DOES NOT** send new value to external devices. When polling this register in subsequent cycles, the old value will be read.
Function returns 1 if an error occurred and 0 on success.
The parameters **variable_name** and **connection_name** work just like in the GetReg function. Since version 3.2 there is no more **connection_name** parameter.
==== WriteReg(variable_name, new_value) ====
The WriteReg function sets the current value of the register with the name of the variable **variable_name** (optionally you can specify the connection **connection_name**) to provided **new_value** for the current scan and writes this value to the external device in the beginning of the next cycle. When polling this register in subsequent scans, a new value will be read (if it was not changed by the device itself).
Function's returns value **false** if any error occurred or **true** on success.
The parameters **variable_name** and **connection_name** work just like in the GetReg function.
Before version 3.2 there was **connection_name** parameter.
WriteReg(variable_name[, connection_name], new_value)
===== Getting register's values stored in a log =====
----
==== GetRegFromLog(variable_name, query_parameters) ====
The GetRegFromLog function fetches data from register log. **varialbe_name** is an identified of register (see GetReg function for details). **query_parameters** is a table with up to 4 parameters:
* from (unixtime, required)
* to (unixtime, required)
* order ("ASC" or "DECS, ASC is default)
* limit (integer number between 1 and 5000, 1000 is default)
Using these parameters WebHMI will construct query like:
SELECT * FROM log WHERE reg = //regId// AND datetime >= //from// AND datetime <= //to// ORDER by //order// LIMIT //limit//
On success function will return table with register records from log database. Each row is a table with following records:
* state (unknown, disabled, normal, warning, alert)
* regid (integer)
* time (unixtime)
* value (string)
Example:
function tprint (tbl, indent)
if not indent then indent = 0 end
for k, v in pairs(tbl) do
formatting = string.rep(" ", indent) .. k .. ": "
if type(v) == "table" then
ERROR(formatting)
tprint(v, indent+1)
else
ERROR(formatting .. v)
end
end
end
function main (userId)
now = os.time();
data = GetRegFromLog("myconn.myreg", {from = now-3600, to = now, order = "desc", limit = 10});
tprint(data);
end
Output:
Sep 13 17:37:25.098: ERROR: LUA scripts: 0:
Sep 13 17:37:25.098: ERROR: LUA scripts: state: disabled
Sep 13 17:37:25.098: ERROR: LUA scripts: regid: 1
Sep 13 17:37:25.098: ERROR: LUA scripts: time: 1536849431
Sep 13 17:37:25.098: ERROR: LUA scripts: value: 1
Sep 13 17:37:25.598: ERROR: LUA scripts: 1:
Sep 13 17:37:25.598: ERROR: LUA scripts: state: disabled
Sep 13 17:37:25.598: ERROR: LUA scripts: regid: 1
Sep 13 17:37:25.598: ERROR: LUA scripts: time: 1536849410
Sep 13 17:37:25.598: ERROR: LUA scripts: value: 0