quarta-feira, 18 de outubro de 2017

Integração Protheus vs Arduino

Neste artigo rápido, gostaria de mostrar uma simples integração entre o ERP Protheus e o Arduino. Não irei aprofundar-me na arquitetura da plataforma arduino, mas resumidamente, ele permite uma ótima integração entre software e hardware.

Imagine poder controlar a rotação de um motor elétrico, nível de luminosidade em determinado ambiente, abrir e fechar circuitos, acionar alarmes, trabalhar com diversos sensores como de temperatura, de presença  usando o ERP Protheus. Com o arduino, isso é possível. E para começar a mostrar as possibilidades, irei iniciar com um projeto bem simples aonde uma tela em advpl terá botões que irão controlar o acendimento de leds.

Para começar, segue abaixo o código usado na IDE do Arduino:

const int LEDa = 13;
const int LEDb = 12;
const int LEDc = 11;
const int LEDd = 10;

void setup() {
  Serial.begin(9600);    //configura comunicação serial com 9600 bps
  pinMode(LEDa,OUTPUT);   //configura pino do led como saída
  pinMode(LEDb,OUTPUT);   //configura pino do led como saída
  pinMode(LEDc,OUTPUT);   //configura pino do led como saída
  pinMode(LEDd,OUTPUT);   //configura pino do led como saída
}
void loop() {
   if (Serial.available()) //se byte pronto para leitura
   {
    apagaTudo();
    switch(Serial.read())      //verifica qual caracter recebido
    {
      case 'A':                  //caso 'A'
        digitalWrite(LEDa,HIGH); //inverte estado do LED
      break;

      case 'B':                  //caso 'B'
        digitalWrite(LEDb,HIGH); //inverte estado do LED
      break;

       case 'C':                  //caso 'C'
        digitalWrite(LEDc,HIGH); //inverte estado do LED
      break;

      case 'D':                  //caso 'D'
        digitalWrite(LEDd,HIGH); //inverte estado do LED
      break;
     
    }
  }
}

void apagaTudo()
{
  digitalWrite(LEDa,LOW);
  digitalWrite(LEDb,LOW);
  digitalWrite(LEDc,LOW);
  digitalWrite(LEDd,LOW);
}



Agora, a tela Protheus que irá controlar os leds:

#INCLUDE "rwmake.ch"                                                 
#INCLUDE 'PROTHEUS.CH'
#include "topconn.ch"   
#INCLUDE 'FONT.CH'
#INCLUDE 'COLORS.CH'


User Function intARDU()  

SetPrvt("oDlg1","oBtn1","oBtn2","oBtn3","oBtn4")

oDlg1      := MSDialog():New( 092,232,225,748,"INTEGRAÇÃO PROTHEUS VS ARDUINO",,,.F.,,,,,,.T.,,,.T. )
oBtn1      := TButton():New( 012,032,"LED A",oDlg1,{|| SendMSG('A')},037,012,,,,.T.,,"",,,,.F. )
oBtn2      := TButton():New( 012,080,"LED B",oDlg1,{|| SendMSG('B')},037,012,,,,.T.,,"",,,,.F. )
oBtn3      := TButton():New( 012,128,"LED C",oDlg1,{|| SendMSG('C')},037,012,,,,.T.,,"",,,,.F. )
oBtn4      := TButton():New( 012,176,"LED E",oDlg1,{|| SendMSG('D')},037,012,,,,.T.,,"",,,,.F. )

oDlg1:Activate(,,,.T.)


Return




Static Function SendMSG(cMSG)


Local cCfg := "COM3:9600,n,8,1"
Local nH := 0


lRet       := msOpenPort(nH,cCfg)     

if(!lRet)
    Alert("Falha ao conectar com a porta serial")
    Return
EndIf 

msWrite(nH,cMSG)

Return



A tela no Protheus deverá ficar assim:



O esquema da placa ficaria assim:



Basicamente o Protheus irá se conectar com a placa Arduino usando a porta USB emulada como porta COM, por isso, o código advpl usa  msOpenPort.

Por último, o resultado:



domingo, 17 de setembro de 2017

Uma grande dor de cabeça para o desenvolvedor Advpl Protheus é a confecção de relatórios gráficos. Por não oferecer um bom ambiente de desenvolvimento, os relatórios à base do objeto TMSPrinter são construídos manualmente via código, gerando em muitos casos retrabalho, além de do fato do próprio componente em questão estar descontinuado pela TOTVS.
Uma opção para cobrir este "vazio" seria usar outras ferramentas disponíveis no mercado como o Crystal Reports ou Ireport. A primeira opção tem um custo um pouco elevado além da possibilidade de surgir problemas na integração e a exigência de cada micro ter uma ODBC criada para atender a conexão. Já o Ireport também pode apresentar problemas de integração e exige que cada micro tenha o Java instalado.

Pesando em uma solução, criei uma arquitetura simples que oferece relatórios gráficos, com ferramenta de desenvolvimento rápido além de fácil integração com o Protheus, sem a necessidade de instalar dll, executáveis ou criação de ODBC. Basta apenas compilar um fonte e pronto, os relatórios já ficam disponíveis.

A arquitetura basicamente é a seguinte:


O ambiente de desenvolvimento é bem parecida com as que temos hoje no mercado, abaixo um projeto aberto nele:


E no Protheus um exemplo de um relatório feito pela ferramenta citada:




O relatório pode conter também gráficos, imagens etc. 

Para mais informações, como valores , treinamento e implantações, basta entrar em contato pelo Skype luis.lacombe ou por e-mail : erpconsult@erpconsultbrasil.com.br