PLC Siemens S7-1200 y Arduino con ENC28J60

Hola compañeros!

Me gustaría saber si me pueden ayudar con un codigo para recibir una señal, del PLC al Arduino por medio de un ENC28J60. Tengo este codigo, solamente que me gustaria saber si esta bien la recepcion de datos, que puedo mejorar. Gracias!

// Libraries

#include <EtherCard.h>   
#include <Modbus.h>
#include <ModbusIP_ENC28J60.h> 
#include "CytronMotorDriver.h"


const int MOTOR_IREG = 50;
CytronMD motor1(PWM_DIR, 3, 4); 
ModbusIP mb;

void setup() {

Serial.begin(9600); 

//dirección MAC
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF,0xFE, 0xED}; 
//dirección IP
byte ip [] = {192,168,1,22};

mb.config (mac,ip);// se confirma las direcciones 
mb.addIreg(MOTOR_IREG);

}

void loop() {
mb.task();// actualiza para el trabajo se realize 
          // con normalidad

  mb.Ireg(MOTOR_IREG, motor1.setSpeed(120));


}

He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @paulomw.

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

1 Like

Hay muchos ejemplos disponibles en la librería, nuestras respuestas se basaran directamente en dichos ejemplos.
Lo tuyo no es una simple conexión Ethernet, sino una conexón Modbus TCP/IP que no es lo mismo.

Este es el ejemplo llamado [TempSensor.ino](https://github.com/andresarmento/modbus-arduino/blob/master/libraries/ModbusIP_ENC28J60/examples/TempSensor/TempSensor.ino)

#include <EtherCard.h>
#include <Modbus.h>
#include <ModbusIP_ENC28J60.h>

//Modbus Registers Offsets (0-9999)
const int SENSOR_IREG = 100;
//Used Pins
const int sensorPin = A0;

//ModbusIP object
ModbusIP mb;

long ts;

void setup() {
    // The media access control (ethernet hardware) address for the shield
    byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    // The IP address for the shield
    byte ip[] = { 192, 168, 1, 120 };
    //Config Modbus IP
    mb.config(mac, ip);

    // Add SENSOR_IREG register - Use addIreg() for analog Inputs
    mb.addIreg(SENSOR_IREG);

    ts = millis();
}

void loop() {
   //Call once inside loop() - all magic here
   mb.task();

   //Read each two seconds
   if (millis() > ts + 2000) {
       ts = millis();
       //Setting raw value (0-1024)
       mb.Ireg(SENSOR_IREG, analogRead(sensorPin));
   }
}

Lo veo muy parecido por lo que concluyo que deberia funcionar correctamente.

1 Like

Hola muchas gracias por tu respuesta.

Voy a estudiarlo, si fuera el caso de que tengo una consulta, volvere a preguntar.
Gracias!

¿Tienes un servidor Modbus programado en
el 1200?

1 Like

Hola!

Gracias por tu respuesta.

.Mira lo que pasa es que eso es de Arduino a PLC. Yo necesito de un PLC al arduino.Y no encuentro nada

Hola!

Eso estoy intentando, lo que pasa es que yo necesito enviar señal del PLC al Arduino

No se si se usa el modbus client o el server, para enviar los datos al arduino

Revisa el ejemplo Servo de la librería ModbusIP_ENC28J60

El problema es que el s7 1200 no implementa comunicaciones modbus de forma nativa. Debes hacer un trabajo de programación en el PLC (ya sea cliente o servidor) y programar los datos que deseas intercambiar por modbus. El protocolo nativo de Siemens es el S7.

1 Like

De casualidad no tienes algun video o documento donde pueda hacer eso?

Youtube esta llendo de todo tipo de soluciones. Solo hay que buscar.
Te pones con un programa en una PC como Modbus Poll

image

Con la interfaz debida en tu PC, e interactuas con el S7. Si logras hacer que responda, podras hacer lo mismo con el Arduino usando el módulo ethernet que sea.

Esta por ejemplo es una interfaz que puede ayudarte

image

Adaptador Conversor Usb Serial Rs485

Hola amigos!

Necesito ayuda urgente, necesito enviar datos de mi PLC S7-1200 a mi arduino. He encontrado mucho video, es de arduino a PLC. Yo necesito de PLC al Arduino

Si desea continuar comunicándose en español, puede informar su publicación a un moderador usando el símbolo de la bandera debajo de su publicación. El moderador puede mover tu hilo al subforo de habla hispana.

Si continúas en inglés este es el lugar correcto.
Por tu corta frase es imposible ayudarte.
Ayúdanos a ayudarte.

Hay muchas formas en que un PLC puede comunicarse con un microcontrolador.

  • algunas salidas digitales que solo transmiten BAJO o ALTO
  • voltajes analógicos en su mayoría 0-10V
  • corriente analógica 4-20 mA
  • una interfaz serie
    • ¿A qué velocidad en baudios? ¿Qué paridad? ¿Qué número de paradas?
  • conexión de red
    • ¿En qué protocolo? modbusRTU?

De todas estas preguntas se puede ver que tendrá que proporcionar mucha más información detallada que solo

spanish Cómo sacar lo mejor de este foro

best regards Stefan

He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @paulomw.

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

Primero tienes que decirte quien es maestro y y quien es el esclavo (cliente o servidor)
Ya sea que el Arduino sea el cliente o el PLC, la información puede ir en ambos sentidos.
Por ejemplo, si el Arduino es el cliente (master), una posible hoja de ruta para tu proyecto seria:
1 con un router con DHCP pones todo en el mismo rango de IP (PC, PLC Arduino). utilizando TIA Portal para configurar el PLC ( el router no es estrictamente necesario, pero te facilitara notoriamente la vida)
2 Con TIA Portal creas un bloque de datos con la información que deseas intercambiar y mediante la instrucción MB_SERVER creas un servidor modbus.
3 Con alguna herramienta (Surbite te recomendó Modbus Poll) compruebas que efectivamente funciona.
4 finalmente creas un cliente en el arduino y LISTO.
La parte de programación en TIA portal no es complicada, pero tampoco es trivial, si nunca se utilizo la herramienta. Con Un PLC con modbus nativo seria mucho mas simple.
Saludos

Hola amigo!

Si, lo que pasa es que es viceversa, el PLC es el server y el arduino el cliente. En este caso necesito enviarle una señal la cual el arduino active un output hacia un motor

Creo que @PeterKantTropus ha sido más que claro.

Hola amigos!

Necesito ayuda urgente, necesito enviar datos de mi PLC S7-1200 a mi arduino. He encontrado mucho video, es de arduino a PLC. Yo necesito de PLC al Arduino

Moderador.
Es el tercer hilo que abres del mismo tema
Dos en español y uno en inglés y encima usando idioma español.
Si sigues desobedeciendo las normas tendré que sancionarte por posteo cruzado.
No te advierto mas!
Hilo cerrado y movido al hilo que ya esta avanzado.

Tienes un error de concepto, en un protocolo cliente -server no determina la dirección de la información, solo quien inicia el intercambio. El Arduino puede ser cliente, leyendo y escribiendo información en el server.
No creo que encuentres un vídeo "Todo listo" para aplicar a tu problema.
Saludos