Boa noite amigos. Estou fazendo uns testes que já usei com modbus serial e foi tranquilo mas agora com modbus IP não estou encontrando a solução. A aplicação que pretendo é simples ler uma entrada analógica no scadabr e se o valor dela for o desejado aciona uma saida digital, a comunicação entre arduino e scada está acontecendo, mas a leitura da analógica fica apenas em 1023 e se giro o potenciômetro nela ligada o valor fica o mesmo mas ela faz ligar a saida não qual programei para ligar através de um point link, mas apenas aparece ligada no scada não manda para o arduino.

Agradeço pela atenção e possíveis contribuições.

Segue anexo Sketch do arduino que é o da biblioteca modbus, só alterado o ip.

Também em anexo fotos das configurações do scadabr.

#include <SPI.h>
#include <Ethernet.h>
#include "Mudbus.h"
Mudbus Mb;
//Function codes 1(read coils), 3(read registers), 5(write coil), 6(write register)
//signed int Mb.R[0 to 125] and bool Mb.C[0 to 128] MB_N_R MB_N_C
//Port 502 (defined in Mudbus.h) MB_PORT

void setup()
{
  uint8_t mac[]     = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
  uint8_t ip[]      = { 192, 168, 0, 150 };
  uint8_t gateway[] = { 192, 168, 0, 1 };
  uint8_t subnet[]  = { 255, 255, 255, 0 };
  Ethernet.begin(mac, ip, gateway, subnet);
  //Avoid pins 4,10,11,12,13 when using ethernet shield

  delay(500);
  Serial.begin(9600);
 
  pinMode(7, INPUT);
  pinMode(8, OUTPUT);
}

void loop()
{
  Mb.Run();
 
  //Analog inputs 0-1023
  Mb.R[0] = analogRead(A0); //pin A0 to Mb.R[0]
  Mb.R[1] = analogRead(A1);
  Mb.R[2] = analogRead(A2);
  Mb.R[3] = analogRead(A3);
  Mb.R[4] = analogRead(A4);
  Mb.R[5] = analogRead(A5);

  //Analog outputs 0-255
  analogWrite(6, Mb.R[6]); //pin ~6 from Mb.R[6]

  //Digital inputs
  Mb.C[7] = digitalRead(7); //pin 7 to Mb.C[7]

  //Digital outputs
  digitalWrite(8, Mb.C[8]); //pin 8 from Mb.C[8]
}

Exibições: 1602

Anexos

Responder esta

Respostas a este tópico

Vou dar minhas opiniões.

Vc não renomeou aquela biblioteca que o Lucas indicou? Não vi ela incluida no inicio do codigo. Se não estiver dando erro tudo bem. Não intendi o motivo dele criar esse novo arquivo.

Eu não intendi uma coisa nesse código. Vc manda escrever na porta 6 o valor do Mb.R 6, acontece que vc não tem valor nele. Veja que ele é um registrador e na posição 6. As analogicas vão de Mb.R 0 a Mb.R5. Então se vc ler esses registradores vc vai ter valores.

Agora olha, a entrada digital vai para Mb.C7, que ta configurada para entrada lá em cima. E vc pode fazer um digital na MB.C 8.

Vc ta usando registrador de holding com sinal. Eu sempre usei sem sinal.

Outro problema vc colocou o ofset 1 no datapoint Mb.R 0, portanto vc ta apontando errado. o ofset é o 0 e não 1.

Mas é muita coisa pra escrever. 

Vou tentar falar com vc para te ajudar.

Obrigado pessoal pela contribuição, ainda estou na mesma kkk.

Sidney, parcero essa não ta fácil kkkkkkkkkkkkk. Esse sketch é o da biblioteca não alterei nada e pelo que entendi dele teria que ler a analogica 0 aqui:    Mb.R[0] = analogRead(A0);

E controlar a saída 8 aqui:     digitalWrite(8, Mb.C[8]); //pin 8 from Mb.C[8]

E como fiz la dentro do scadabr essa lógica de ler A0 e fazer ela acionar a saída 8, achei que seria por aí.

Mas fora isso não to sabendo fazer, é o meu limitado conhecimento em programação kkkkkk, mas vamo lá.

Adilson,

fique tranquilo que vamos resolver isso.

Temos que nos encontrar virtualmente, mas acho que ta quase.

até

A vez que testei essa lib encontrei um bug na função 5 =write coil

Encontramos erros nesse codigo.

Temos que entender bem o que acontece para não sermos pegos por erros bobos.

Mas temos evolução.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço