Salve a tutti,
dopo un pò di mesi di inattività, sono ritornare a sperimentare la comunicazione tra Arduino (Mega) e un PLC Siemens S7-1200.
Il PLC fa da Client, mentre Arduino fa da Server.
In pratica, il PLC invia 3 Int ad Arduino e questi invìa un quarto Int al PLC.
Nel PLC tutto sembra funzionare bene, non ho codici di errore e lo stato dei blocchi MB_Client conferma che i dati sono stati inviati e ricevuti.
Tuttavia, in Arduino qualcosa non va: non legge e non scrive i dati dei registri.
Allego il software:
/* Ottiene i comandi di START, STOP D'EMERGENZA e RESET dal Siemens S7-1200 e scrive tempo sensore nel registro dedicato */
#include <ModbusEthernet.h>
const int START_REG = 40001; // definisce 3 registri per variabili digitali (101, 102 e 103) e 1 per variabile analogica (40001)
const int EM_STOP_REG = 40002;
const int RESET_REG = 40003;
const int SENSOR_REG = 40021;
int startRobot; // definisce le variabili associate ai registri
int emStopRobot;
int resetRobot;
int sensorTime;
ModbusEthernet mb;
void setup() {
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 0, 101 };
mb.config(mac, ip);
mb.addIreg(START_REG, 111); // assegna i registri e li inizializza a 0
mb.addIreg(EM_STOP_REG, 222);
mb.addIreg(RESET_REG, 333);
mb.addHreg(SENSOR_REG, 666);
Serial.begin(9600);
}
void loop() {
mb.task();
startRobot = mb.Ireg(START_REG); // riscrive le variabili ad ogni ciclo sulla base dei valori del registro, ottenuti dal PLC
emStopRobot = mb.Ireg(EM_STOP_REG);
resetRobot = mb.Ireg(RESET_REG);
sensorTime = mb.Hreg(SENSOR_REG);
Serial.print("Valori da PLC: ");
Serial.print(startRobot);
Serial.print("\t");
Serial.print(emStopRobot);
Serial.print("\t");
Serial.print(resetRobot);
Serial.print(" Valori verso PLC: ");
Serial.print("\t");
Serial.print(sensorTime);
Serial.println();
}
Questo è invece quello che vedo nel serial monitor, ovvero sempre e solo i valori preimpostati nel sfotware Arduino. Mi aspettavo nei “Valori da PLC” i valori che imposto manualmente nei registri del PLC, mentre il “Valore verso PLC” mi aspettavo di leggerlo nei registri del PLC. INvece nulla di tutto ciò.
Non riesco a capire dove possa essere l’errore. Qualcuno più esperto può darmi una mano ad uscire da queste empasse?
Grazie!
Pasquale
