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]
}
Tags:
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é
Encontramos erros nesse codigo.
Temos que entender bem o que acontece para não sermos pegos por erros bobos.
Mas temos evolução.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por