Módulos Externos LUA
O HIscada Pro oferece o suporte a criação de scripts Lua, que são criados através do IDE ou diretamente na tela de depuração. Os scritps Lua são vinculados a eventos do sistema, tais como: inicialização, término, ações na interface,etc.
Um script pode invocar outros scripts através da API Scripts.Run(). Ainda que este mecanismo permita a passagem de parâmetros entre scripts, os scripts que não são executados em paralelo permitem o compartilhamento de funções e estruturas de dados, pois rodam na mesma máquina virtual Lua (LVM).
Outra forma de viabilizar o compartilhamento de funções e estruturas de dados entre scripts é a criação de módulos externos Lua. Um módulo externo Lua é um arquivo com a extensão “.lua” que contém funções e estruturas de dados que podem ser definidas uma única vez e reutilizadas em diversos scritps.
Os módulos externos podem ser criados em um subdiretório de nome “lua” que:
ou reside no mesmo diretório onde estiverem os executáveis. Neste caso, o Kernel, IDE e Viewer cada um terá seu próprio subdiretório “lua”.
ou reside dentro do diretório do Projeto abaixo de “publ”. Neste caso, os módulos depositados neste subdiretório serão automaticamente compartilhados entre Kernel, IDE e Viewer.
O diretório “lua” se não existir, pode ser criado manualmente pelo Windows Explorer ou pelo comando mkdir lua em uma caixa-DOS (cmd.exe).
O conteúdo do diretório “lua” não é gerenciado, ficando responsabilidade do usuário fazer sua administração (criação, limpeza, backup, versionamento, etc).
Para identificar o caminho de diretórios onde módulos podem ser criados, basta executar o código:
print(package.path)
Por exemplo, o resultado seria algo semelhante (mas não necessariamente idêntico) a:
;W:\HspExe\lua\?.lua;W:\HspExe\lua\?\init.lua;W:\HspExe\?.lua;W:\HspExe\?\init.lua;.\?.lua;
C:\Program Files (x86)\Lua\5.1\lua\?.luac;W:\HspExe\Projects\x\publ\lua\?.lua
Este resultado mostra os caminhos possíveis de diretórios para armazenamento de módulos externos Lua. Ou seja, a criação do diretório lua dentro do diretório de executáveis é opcional, uma vez que o próprio diretório de executáveis pode hospedar arquivos “.lua”. Mas recomendamos o uso do subdiretório lua para efeito de organização e separação de módulos de usuário dos módulos distribuídos pelo próprio HIscada Pro. Recomendamos ainda o uso do diretório lua contextual ao Projeto para módulos que sejam específicos de um dado projeto.
Exemplo de criação de módulo
Vamos criar o arquivo de nome teste.lua
-- Linha obrigatória que define conteudo publico do modulo
local M = {}
-- exemplo de funcao privada, pois nao pertence a M
function soma(x,y)
return x + y
end
-- definicao de funcao hello publica
function M.hello(x)
print(x) -- uso do parametro
print(soma(1,3)) -- uso de funcao privada
print("Hello World!")
end
local exemplo_variavel_privada = 3
M.tabela_publica = {
["um"] = "one",
["dois"] = "two"
}
-- Linha obrigatoria que devolve o conteudo publico do modulo
return M
Observe que um modulo pode conter estruturas públicas e privadas. Como a tabela M é que será devolvida, todos os atributos de M serão públicos, as demais estruturas definidas serão privadas, só podendo ser utilizadas dentro do próprio modulo.
Exemplo de utilização do módulo
t = require "teste"
t.hello(3)
print(t.tabela_publica["dois"])
Saída:
3
4
Hello World!
two