lleyo11



Arduino code:

/ *
   Copyright (c) 2018 Boot & Work Corp., SL Todos los derechos reservados

   Este programa es software libre: puede redistribuirlo y / o modificarlo
   bajo los términos de la Licencia Pública General Menor de GNU publicada por
   la Free Software Foundation, cualquiera de las versiones 3 de la Licencia, o
   (a su elección) cualquier versión posterior.

   Este programa se distribuye con la esperanza de que sea útil,
   pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de
   COMERCIABILIDAD o APTITUD PARA UN PROPÓSITO EN PARTICULAR. Consulte la
   Licencia pública general menor de GNU para obtener más detalles.

   Debería haber recibido una copia de la Licencia pública general menor de GNU
   junto con este programa. Si no, vea < http://www.gnu.org/licenses/ >.
 * /

#include <ModbusTCPSlave.h>

#include <Ethernet.h>


// Valores de configuración de Ethernet
uint8_t mac [] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEE};
IP Dirección IP (192, 168, 1, 213);
int puerto = 502;

// Mapeo de registros Modbus

/ ************************ CONFIGURACIÓN DE PINOUT ****************** ******* Entrada

digital: 22, 24, 26, 28, 30, 32, 34, 36, (% IX100.0 -% IX100.7)
            38, 40, 42, 44, 46, 48, ( 50-spi-miso), (52-spi-sck), (% IX101.0 -% IX101.7)
            14, 15, 16, 17, 18, 19, (20-i2c-sda), (21-i2c -scl) (% IX102.0 -% IX102.7)
     
Salida digital: 23, 25, 27, 29, 31, 33, 35, 37 (% QX100.0 -% QX100.7)
             39, 41, 43, 45, 47, 49, (51-spi-mosi), (53-spi-ss) (% QX101.0 -% QX101.7) Entrada

analógica: A0, A1, A2, A3, A4 , A5, A6, A7 (% IW100 -% IW107)
           A8, A9, A10, A11, A12, A13, A14, A15 (% IW108 -% IW115)
       
Salida analógica: 2, 3, (4-ss-sd), 5, 6, 7, 8, 9, (% QW100 -% QW107)
            (10-ss-ethernet), 11, 12, 13 (% QW108 -% QW111)
     
************* ************************************************** ****** /

int digitalInputsPins [] = {22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 14, 15, 16, 17, 18 , 19};
int digitalOutputsPins [] = {23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49};
int analogInputsPins [] = {A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15};
int analogOutputsPins [] = {2, 3, 5, 6, 7, 8, 9, 11, 12, 13};

#define numDigitalOutputs int (sizeof (digitalOutputsPins) / sizeof (int))
#define numDigitalInputs int (sizeof (digitalInputsPins) / sizeof (int))
#define numAnalogOutputs int (sizeof (analogOutputsPins) / sizeof (int))
#define intinnalog sizeof (analogInputsPins) / sizeof (int))

bool digitalOutputs [numDigitalOutputs];
bool digitalInputs [numDigitalInputs];
uint16_t analogOutputs [numAnalogOutputs];
uint16_t analogInputs [numAnalogInputs];

// Definir el objeto

ModbusTCPSlave ModbusTCPSlave modbus (puerto);

//////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
configuración nula () {
  Serial.begin (9600UL);

  // Inicia variables, entradas y salidas
  para (int i = 0; i <numDigitalOutputs; ++ i) {
    digitalOutputs [i] = false;
    digitalWrite (digitalOutputsPins [i], digitalOutputs [i]);
  }
  para (int i = 0; i <numDigitalInputs; ++ i) {
    digitalInputs [i] = digitalRead (digitalInputsPins [i]);
  }
  para (int i = 0; i <numAnalogOutputs; ++ i) {
    analogOutputs [i] = 0;
    analogWrite (analogOutputsPins [i], analogOutputs [i]);
  }
  para (int i = 0; i <numAnalogInputs; ++ i) {
    analogInputs [i] = analogRead (analogInputsPins [i]);
  }

  // Init Ethernet
  Ethernet.begin (mac, ip);
  Serial.println (Ethernet.localIP ());

  // Objeto Init ModbusTCPSlave
  modbus.begin ();

  modbus.setCoils (digitalOutputs, numDigitalOutputs);
  modbus.setDiscreteInputs (digitalInputs, numDigitalInputs);
  modbus.setHoldingRegisters (analogOutputs, numAnalogOutputs);
  modbus.setInputRegisters (analogInputs, numAnalogInputs);
}

///////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////// /
void loop () {
  // Actualizar entradas
  para (int i = 0; i <numDigitalInputs; ++ i) {
    digitalInputs [i] = digitalRead (digitalInputsPins [i]);
  }
  para (int i = 0; i <numAnalogInputs; ++ i) {
    analogInputs [i] = analogRead (analogInputsPins [i]);
  }

  // Procesar solicitudes de
  modbus modbus.update ();

  // Actualizar salidas
  para (int i = 0; i <numDigitalOutputs; ++ i) {
    digitalWrite (digitalOutputsPins [i], digitalOutputs [i]);
  }
  para (int i = 0; i <numAnalogOutputs; ++ i) {
    analogWrite (analogOutputsPins [i], analogOutputs [i]);
  }
}
Quote 0 0
lleyo11
Sorry for my level of English. Very good thiagoralves OpenPLC project .... I hope to help a little. This is to connect the Arduino to OpenPlc via Modbus Tcp ... with others, it fails me
Quote 0 0
maximus.arifin
Dear
lleyo11

I am do not know abaut arduino to much
I am use ladder plc for my program
Now open plc can use arduino as plc
it is can use to arduino ethernet shield and how to use it?
Quote 0 0