Hello
I'm trying to connect my OPTA through the Modbus TCP/IP with the FactoryIO software to do some simulations/demonstrations, but I'm not being successful.
The same IP that I define in the programming I also place within the software to connect to that same IP, but all attempts were unsuccessful.
Below I have the programming that I am testing and I believe that even using a different library than the conventional one it should work.
Has anyone managed to make a TCP/IP connection with OPTA to help me?
/*
Web client
This sketch connects to a website (http://www.google.com)
using an Arduino Wiznet Ethernet shield.
Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
created 18 Dec 2009
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe, based on work by Adrian McEwen
*/
#include <PortentaEthernet.h>
#include <Ethernet.h>
#include <SPI.h>
#include "MgsModbus.h" //Esta libreria se encuentra aqui en github, la tienes que incluir en el proyecto
MgsModbus Mb; // Creamos una instancia de la clase MgsModbus llamada 'Mb'
byte mac[] = {0x90, 0xA2, 0xDA, 0x0E, 0x94, 0xB5}; // Dirección MAC para la interfaz Ethernet del Arduino
IPAddress ip(192, 168, 1, 100); // Configuramos la dirección IP del Arduino
IPAddress gateway(192, 168, 1, 1); // Configuramos la dirección del gateway
IPAddress subnet(255, 255, 255, 0); // Configuramos la máscara de subred
int pinEntrada = A0; // Definimos el pin 2 como una entrada digital
void setup() {
// Configuramos los pines D3-D10 como salidas digitales
Ethernet.begin(mac, ip, gateway, subnet); // Iniciamos la conexión Ethernet
// Configuramos los pines A1-A4 como una salida digital
pinMode(D0, OUTPUT);
}
void loop() {
Mb.MbData[0] = 0; // Inicializamos un registro Modbus con un valor de 0.
while (true) {
// Leemos y escribimos valores en función de bits de registros Modbus
digitalWrite(A1, bitRead(Mb.GetBit(0x02), 0)); // Enciende/apaga la banda (factory io) en función del registro Modbus 0x02
digitalWrite(4, bitRead(Mb.GetBit(0x04), 0)); // Enciende/apaga el indicador de señal digital (fisico) en función del registro Modbus 0x04
int entradaValor = digitalRead(pinEntrada); // Leemos el valor del pin 2
if (entradaValor == HIGH) { // Si se presiona el botón externo, activamos la banda y el indicador de señal digital
Mb.SetBit(0x04, true); // Establecemos el bit en el registro Modbus 0x04 en verdadero
Mb.SetBit(0x02, true); // Establecemos el bit en el registro Modbus 0x02 en verdadero
digitalWrite(D0, HIGH); // Encendemos el pin A2
} else {
digitalWrite(D0, LOW); // Apagamos el pin A2
Mb.SetBit(0x04, false); // Establecemos el bit en el registro Modbus 0x04 en falso
}
Mb.MbsRun(); // Procesamos las solicitudes entrantes del maestro Modbus.
}
}