Introdução
Esse guia detalha a API javascript do equipamento, que nada mais são do que as funções suportadas dentro do ambiente mhoJS.
mhoJS
Programação baseada em Javascript para a linha de equipamentos MHO Keeper. Por se tratar de uma abordagem própria de javacript otimizada para microcontroladores, nem todos os recursos da linguagem são suportados, apenas o que é descrito nesta documentação.
Por quê Javacript?
Escolhemos javascript por ser uma linguagem amplamente utilizada. Nossa intenção é deixar a programação simples e com diversas funções já incorporadas para simplificar o desenvolvimento de soluções customizadas. Incorporar outros tipos de linguagem, como as que normalmente são encontradas em CLPs, resultaria em um aumento na utilização de recursos e uma complexidade elevada, por isso para aplicações que demandem lógicas de alta complexidade e recursos pode ser recomendado a utilização de um CLP em conjunto com o MHO Keeper.
Recursos suportados
Por se tratar de uma abordagem de Javascript própria definida como mhoJS nem todos os recursos do javascript estão disponíveis, apenas os que estão listados abaixo e também as funções definidas nessa documentação:
- Sem comparações amplas como
!=
e==
. Apenas comparações estritas como!==
e===
; - Sem acesso computado a objetos:
a[b]
; - Sem exponencialzões
a**b
(utilize a função própria Math definida aqui); - Podemos usar typeof:
typeof('a') === 'string'
; - Loops devem ser feitos apenas com for:
for(...;...;...) {}
; - Condicional:
if (...) {...} else {...}
; - Condicional ternário
a ? b : c
; - Tipos:
let a, b = 1, c = 12.3, d = 'a', e = null, f = true, g = false;
- Funções devem ser definidas como:
let f = function(x, y) { return x + y; };
- Objetos:
let obj1 = {a: true, b: 'a', c: 10};
- Objetos de função:
let obj = {f: function(x) { return x * 2}}; obj.f(3);
- Toda declaração deve terminar com ponto e vírgula ;
- Strings são chunks binários, não Strings do padrão Unicode: 'Київ'.length === 8
Recursos não suportados
Os seguintes itens não são suportados, em seguida temos a alternativa que deve ser utilizada.
- Sem
var
econst
, use apenaslet
; - Sem
do
,switch
ewhile
, use apenasfor
; - Sem
=>
, use funçõeslet f = function(...){...};
; - Sem
arrays
,closures
,prototypes
,this
,new
edelete
; - Sem bibliotecas padrão como
Date
,Regexp
,Function
,String
eNumber
Funções disponíveis
As seguintes funções estão disponíveis e estão documentadas nas próximas páginas dessa base de conhecimento. A lista esta em forma de tabela, onde a primeira coluna indica o nome da função, a segunda coluna indica quando a função deve ser utilizada, a terceira coluna indica o tipo de resposta da função. Para mais detalhes, considerar os textos explicativos nas próximas paginas onde a função é definida. Você deve utilizar essas funções para desenvolver os programas em mhoJS.
Função | Utilização | Resposta |
---|---|---|
rtc.millis(); | Utilizado em lógicas de tempo ou delay com precisão de milissegundos | Tempo em milissegundos desde a inicialização do sistema |
rtc.seconds(); | Utilizado em lógicas de tempo ou delay com precisão de segundos | Tempo em segundos desde a inicialização do sistema |
io.readDI(DInumber); | Ler o status booleano da entrada digital | true ou false |
io.readDO(DOnumber); | Ler o status booleano da saída digital | true ou false |
io.setDO(DOnumber, value); | Comandar o status booleano da saída digital | Caso o comando tenha sucesso true, se não false |
io.readAI(AInumber, mode, y0, y1); | Ler o valor interpolado da entrada analógica | número com o valor interpolado |
Funções padrão
A seguinte função chamada setup
é executada apenas uma vez quando o equipamento é energizado. Deve ser utilizada para configurações ou tratamento de dados salvos anteriormente por exemplo.
let setup = function() {
//código que roda apenas uma vez
};
A seguinte função chamada loop
é chamada repetidamente a cada ciclo de processamento, então deve ser utilizada para rodar as lógicas principais. Dentro desse função podemos chamar as outras funções declaradas.
let loop = function() {
//codigo que vai rodar repedidamente
};
Utilizações
Utilização do if
O exemplo abaixo testa uma única condição com if e else:
let var1 = false;
if (var1){
}
else{
}
O exemplo abaixo testa multi condições com if e else if:
let var1 = false;
let var2 = true;
if (var1){
}
else if (var2){
}
else{
}
Comparações
As comparações podem estar dentro de um condicional if
, for
ou um operador ternário
.
===
!==
>
>=
<
<=
&&
||
Objetos
Objeto com múltiplos atributos
let myobj = {var1: 50, var2: 100, var3: true};
myobj.var1; //retorna valor salvo do atributo var1, neste caso 50
Exemplos
Abaixo temos o programa padrão main.js
vazio que todos os programas em mhoJS devem seguir, devemos ter a função setup e loop, a definição da versão do programa e a data que o programa foi feito comentada, conforme abaixo:
//copyright
version(1); //25/12/2023
let setup = function() {
//codigo que vai rodar repedidamente
};
let loop = function() {
//codigo que vai rodar repedidamente
};
Abaixo temos um exemplo do mesmo arquivo mas agora temos uma função customizada, que recebe dois argumentos e retorna um valor.
//copyright
version(1); //25/12/2023
let minhaFuncao = function(arg1, arg2) {
return arg1 + arg2;
};
let setup = function() {
//codigo que vai rodar repedidamente
};
let loop = function() {
//codigo que vai rodar repedidamente
let resultado = minhaFuncao(1,2);
log(resultado);
};
Abaixo temos um exemplo do mesmo arquivo mas agora temos uma função customizada, que recebe um objeto como argumento e retorna um valor.
//copyright
version(1); //25/12/2023
let minhaFuncao = function(arg1) {
return arg1.a + arg1.b;
};
let setup = function() {
//codigo que vai rodar repedidamente
};
let loop = function() {
let meuobjeto = {a:1, b:2};
let resultado = minhaFuncao(a);
log(resultado);
};