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.
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.
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.
Youtube esta llendo de todo tipo de soluciones. Solo hay que buscar.
Te pones con un programa en una PC como Modbus Poll
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
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
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.
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
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
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