Pular para o conteúdo principal

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 e const, use apenas let;
  • Sem do, switch e while, use apenas for;
  • Sem =>, use funções let f = function(...){...};;
  • Sem arrays, closures, prototypes, this, new e delete;
  • Sem bibliotecas padrão como Date, Regexp, Function, String e Number

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çãoUtilizaçãoResposta
rtc.millis();Utilizado em lógicas de tempo ou delay com precisão de milissegundosTempo em milissegundos desde a inicialização do sistema
rtc.seconds();Utilizado em lógicas de tempo ou delay com precisão de segundosTempo em segundos desde a inicialização do sistema
io.readDI(DInumber);Ler o status booleano da entrada digitaltrue ou false
io.readDO(DOnumber);Ler o status booleano da saída digitaltrue ou false
io.setDO(DOnumber, value);Comandar o status booleano da saída digitalCaso o comando tenha sucesso true, se não false
io.readAI(AInumber, mode, y0, y1);Ler o valor interpolado da entrada analógicanú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:

Multi condições
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.

Igualdade
===
Diferente
!==
Maior
>
Maior ou igual
>=
Menor
<
Menor ou igual
<=
E
&&
OU
||
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);
};