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