Pages: [1]   Go Down
Author Topic: Timer calcolo tempi morti per taglio laser lamiera  (Read 805 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve a tutti! da neofita ho scritto alcune righe di codice per il mio primo progetto ovvero un timer  collegato ad una macchina da taglio laser lamiera industriale che si attivi durante la lavorazione  conteggiando i secondi di  lavorazione e di fermo macchina per visualizzare l'andamento della produzione durante la giornata.
Il codice funziona... ma sul serial monitor ogni volta che avviene un cambiamento di stato da LOW a HIGH i secondi ripartono da zero, mentre vorrei che si sommassero ai precedenti.... potreste darmi un aiutino??
Grazie a tutti!!

const int laser = 40;  // input proveniente dal plc della macchina
long start;  //inizio macchina in lavorazione
long duratas; // durata macchina in lavorazione
long fermo;  // inizio fermo macchina
long durataf; // durata fermo macchina

void setup()
{
pinMode(laser,INPUT);
Serial.begin(9600);
}
void loop()
{
  if(digitalRead(laser == HIGH))
{
  start = millis();
  while(digitalRead(laser)== HIGH);
  duratas = millis()-start;
  delay(30); Serial.print ("Laser ON:");Serial.println(duratas/1000);
  //
}
if(digitalRead(laser == LOW))
{
  fermo = millis();
  while(digitalRead(laser)== LOW);
  durataf = millis()-fermo;
  delay(30);Serial.print ("Laser OFF:");Serial.println(durataf/1000);
  //
}
}

« Last Edit: October 14, 2012, 11:21:35 am by Alberto81 » Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 110
Posts: 6975
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Prova così

Code:
const int laser = 40;  // input proveniente dal plc della macchina
long start;  //inizio macchina in lavorazione
long duratas; // durata macchina in lavorazione
long fermo;  // inizio fermo macchina
long durataf; // durata fermo macchina

void setup() {
 pinMode(laser,INPUT);
 Serial.begin(9600);
}

void loop() {
 if(digitalRead(laser == HIGH))
  {
  start = millis();
  while(digitalRead(laser)== HIGH);
  duratas += millis()-start;
  delay(30);
  Serial.print("Laser ON:");
  Serial.println(duratas/1000);
  }
 if(digitalRead(laser == LOW))
  {
  fermo = millis();
  while(digitalRead(laser)== LOW);
  durataf +=millis()-fermo;
  delay(30);
  Serial.print ("Laser OFF:");
  Serial.println(durataf/1000);
  //
  }
}
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie!!!! funziona!!! scusate l'entusiasmo ma è il mio primo progetto e non avendo alcuna nozione  di elettronica ne di linguaggio di programmazione sono al settimo cielo! Ti adoro Arduino!
La notte scorsa... invece di prendere sonno... i miei pensieri erano offuscati da un dubbio...... nel serial monitor, ogni volta che è presente un cambiamento di stato, i valori   del nuovo vengono scritti a capo, mi chiedevo se fosse possibile avere sempre due righe come ad esempio:

Laser OFF: (120) 
Laser ON:  (50)

i valori tra parentesi dovrebbero cambiare sempre nella stessa posizione, come se fosse ad esempio il valore di un imput analogico che varia nel tempo. Spero di essermi spiegato...
Grazie a tutti !!
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 110
Posts: 6975
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ricorda di sostituire i long con unsigned long altrimenti col tempo vai in overflow ed escono risultati sballati.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La notte scorsa... invece di prendere sonno... i miei pensieri erano offuscati da un dubbio...... nel serial monitor, ogni volta che è presente un cambiamento di stato, i valori   del nuovo vengono scritti a capo, mi chiedevo se fosse possibile avere sempre due righe come ad esempio:

Laser OFF: (120) 
Laser ON:  (50)

i valori tra parentesi dovrebbero cambiare sempre nella stessa posizione, come se fosse ad esempio il valore di un imput analogico che varia nel tempo. Spero di essermi spiegato...
Grazie a tutti !!
Intendi eliminare il ritorno a capo e sovrascrivere i dati a quelli vecchi?
Col serial monitor dell'IDE non puoi. Dovresti scrivere un programma che intercetta i dati e che te li visualizza in una modalità a te consona. Oppure usare un display Lcd e, con opportuno codice, puoi fare quello che dici
Logged


Pages: [1]   Go Up
Jump to: