Project75 Inserito: 22 febbraio 2022 Segnala Share Inserito: 22 febbraio 2022 (modificato) Buona sera ho una CPU et200sp, vorrei realizzare uno scambio di soglie su 3 soffiati, spiego meglio, ho tre soffiati che lavorano con tre soglie diverse, supponiamo di dare 3 soglie diverse soglia 1=10, soglia 2=20 e soglia 3=30, queste tre soglie devono alternarsi sulle 3 soffiati quindi soffiati 1=10, soffiante 2=20 e soffiante 3=30, dopo 1 ora soffiante 1=20, soffiante 2=30 e soffiante 3=10, dopo ancora un ora soffiante 1=30, soffiante 2=10 e soffiante 3=20 e dopo un'altra ora soffiante 1=10, soffiante 2=20 e soffiante 3=30, e così via.... cosa mi suggerite per realizzare questa combinazione? Modificato: 22 febbraio 2022 da Project75 Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 23 febbraio 2022 Segnala Share Inserita: 23 febbraio 2022 Fai uno shift circolare con le tre soglie alla soffiata 1 assegni laposizione 1, alla soffiata 2 la posizione 2 ed alla soffiata 3 la posizione 3. Dopo ogni soffiata dai un avanamento allo shift così allo prossima soffiata hai già le sogle pronte. Questo è il primo metodo che mi viene alla mente, probabilmente c'è anche qualche altro modo. Link al commento Condividi su altri siti More sharing options...
Project75 Inserita: 23 febbraio 2022 Autore Segnala Share Inserita: 23 febbraio 2022 Buongiorno Livio e grazie per la disponibilità, potresti spiegare più nel dettaglio la tua soluzione ? Grazie mille Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 23 febbraio 2022 Segnala Share Inserita: 23 febbraio 2022 Non so come fare ad entrare nel dettaglio. Se programmassi ancora i PLC ti metterei il codice che si aggirerebbe in una decina di righe in AWL. Se non sai cos'è un shift, fai un contatore da 1 a 3; contatore che andrai ad incrementare dopo ogni soffiata; se il contatore > 3 ===> contatore = 1. Poi fai i test di eguaglianza e, a seconda del conteggio, applichi i valori previsti per le soffianti. Link al commento Condividi su altri siti More sharing options...
drn5 Inserita: 23 febbraio 2022 Segnala Share Inserita: 23 febbraio 2022 in pseudocodice: ora_attuale = oradelsistema IF ora_attuale<>ora_ultima THEN soglia=soglia+1 IF soglia > 3 THEN soglia=1 IF soglia = 1 THEN soffio1 = 10 : soffio2 = 20 : soffio3 = 30 IF soglia = 2 THEN soffio1 = 20 : soffio2 = 30 : soffio3 = 10 IF soglia = 3 THEN soffio1 = 30 : soffio2 = 10 : soffio3 = 20 ora_ultima=ora_attuale ENDIF Link al commento Condividi su altri siti More sharing options...
Project75 Inserita: 23 febbraio 2022 Autore Segnala Share Inserita: 23 febbraio 2022 12 minuti fa, Livio Orsini ha scritto: Non so come fare ad entrare nel dettaglio. Se programmassi ancora i PLC ti metterei il codice che si aggirerebbe in una decina di righe in AWL. Se non sai cos'è un shift, fai un contatore da 1 a 3; contatore che andrai ad incrementare dopo ogni soffiata; se il contatore > 3 ===> contatore = 1. Poi fai i test di eguaglianza e, a seconda del conteggio, applichi i valori previsti per le soffianti. Infatti ho fatto così, il contatore conta da 1 a 3 e con il blocco == trasferisco la soglia corrispondente al numero del conteggio, e cosi tutto funziona. Per semplificare le cose e per evitare tanti move ho fatto una array da 1 a 3 of real e con lindice, che sarebbe il numero del conteggio, trasferisco il valore della mia soglia senza fare eguaglianza, però quando carico alla CPU mi da un errore e non si avvia e rimane acceso LED arancione, cosa può essere?......allego foto errore Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 23 febbraio 2022 Segnala Share Inserita: 23 febbraio 2022 Spiacente su questo non tiso rispondere Link al commento Condividi su altri siti More sharing options...
Project75 Inserita: 23 febbraio 2022 Autore Segnala Share Inserita: 23 febbraio 2022 36 minuti fa, drn5 ha scritto: in pseudocodice: ora_attuale = oradelsistema IF ora_attuale<>ora_ultima THEN soglia=soglia+1 IF soglia > 3 THEN soglia=1 IF soglia = 1 THEN soffio1 = 10 : soffio2 = 20 : soffio3 = 30 IF soglia = 2 THEN soffio1 = 20 : soffio2 = 30 : soffio3 = 10 IF soglia = 3 THEN soffio1 = 30 : soffio2 = 10 : soffio3 = 20 ora_ultima=ora_attuale ENDIF Grazie infinite, ma non uso questo tipo di linguaggio. Link al commento Condividi su altri siti More sharing options...
drn5 Inserita: 23 febbraio 2022 Segnala Share Inserita: 23 febbraio 2022 Mostra quello che hai fatto e che ti dà errore... Link al commento Condividi su altri siti More sharing options...
batta Inserita: 23 febbraio 2022 Segnala Share Inserita: 23 febbraio 2022 6 ore fa, Project75 ha scritto: però quando carico alla CPU mi da un errore e non si avvia e rimane acceso LED arancione Sicuramente l'indice esce dai limiti dell'array. Se inserisci l'OB "ProgrammingError" (anche vuoto), la cpu dovrebbe rimanere in RUN. Ma l'errore, comunque, rimane, Link al commento Condividi su altri siti More sharing options...
Project75 Inserita: 23 febbraio 2022 Autore Segnala Share Inserita: 23 febbraio 2022 1 ora fa, batta ha scritto: Sicuramente l'indice esce dai limiti dell'array. Se inserisci l'OB "ProgrammingError" (anche vuoto), la cpu dovrebbe rimanere in RUN. Ma l'errore, comunque, rimane, Immaginavo che fosse un problema dell'indice, perché appena lo toglievo andava via l'errore, come si può fare a non farlo uscire fuori dal limite dell'array? Link al commento Condividi su altri siti More sharing options...
max.bocca Inserita: 23 febbraio 2022 Segnala Share Inserita: 23 febbraio 2022 Il programma che ha inserito drn5 e simil SCL con qualche adattamento è funzionante sul 1200/1500 Link al commento Condividi su altri siti More sharing options...
Project75 Inserita: 23 febbraio 2022 Autore Segnala Share Inserita: 23 febbraio 2022 12 minuti fa, max.bocca ha scritto: Il programma che ha inserito drn5 e simil SCL con qualche adattamento è funzionante sul 1200/1500 Purtroppo non programmo in SCL...... altra soluzione? Link al commento Condividi su altri siti More sharing options...
Project75 Inserita: 23 febbraio 2022 Autore Segnala Share Inserita: 23 febbraio 2022 Ciao batta, grazie mille per la tua disponibilità, perché l'indice esce dai limiti dell'array, cosa bisogna modificare per evitare questo errore? Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 24 febbraio 2022 Segnala Share Inserita: 24 febbraio 2022 11 ore fa, Project75 ha scritto: perché l'indice esce dai limiti dell'array, cosa bisogna modificare per evitare questo errore? Se hai dimensionato l'array a 3 devi devi, quando incrementi l'indice, verificare che non sia >3. Link al commento Condividi su altri siti More sharing options...
Project75 Inserita: 24 febbraio 2022 Autore Segnala Share Inserita: 24 febbraio 2022 (modificato) 1 ora fa, Livio Orsini ha scritto: Se hai dimensionato l'array a 3 devi devi, quando incrementi l'indice, verificare che non sia >3. In ogni caso larray dell'indice e sempre dimensionato a 3, e l'errore però lo fa senza avviare niente, anche perché la cpu non va in run....... Modificato: 24 febbraio 2022 da Project75 Link al commento Condividi su altri siti More sharing options...
Project75 Inserita: 24 febbraio 2022 Autore Segnala Share Inserita: 24 febbraio 2022 Questo è il segmento del blocco FB7 che da problemi Questo è l'errore Link al commento Condividi su altri siti More sharing options...
batta Inserita: 24 febbraio 2022 Segnala Share Inserita: 24 febbraio 2022 Non è che si capisca molto. IN_Soglia_START è un array. Di che dimensioni? IndiceSoglia è un altro array, probabilmente da 1 a 3. Ma che valore hanno IndiceSoglia[1], IndiceSoglia[2] e IndiceSoglia[3]? Perché sono quasti valori che passi come indice per IN_Soglia_START. 13 ore fa, Project75 ha scritto: Purtroppo non programmo in SCL...... altra soluzione? Devi assolutamente colmare questa tua lacuna. Oggi non è più ammissibile programmare PLC senza conoscere il testo strutturato. Link al commento Condividi su altri siti More sharing options...
Project75 Inserita: 24 febbraio 2022 Autore Segnala Share Inserita: 24 febbraio 2022 20 minuti fa, batta ha scritto: Non è che si capisca molto. IN_Soglia_START è un array. Di che dimensioni? IndiceSoglia è un altro array, probabilmente da 1 a 3. Ma che valore hanno IndiceSoglia[1], IndiceSoglia[2] e IndiceSoglia[3]? Perché sono quasti valori che passi come indice per IN_Soglia_START. Devi assolutamente colmare questa tua lacuna. Oggi non è più ammissibile programmare PLC senza conoscere il testo strutturato. Gli array sono tutti da 1a3 ed i valori dell'indice sono rispettivamente 1, 2 e 3. Quindi l'indice soglia 1 trasferisce il valore del IN soglia START 1 al OUT soglia START 1 Link al commento Condividi su altri siti More sharing options...
acquaman Inserita: 24 febbraio 2022 Segnala Share Inserita: 24 febbraio 2022 Secondo me negli indici soglie non ci sono valori idonei, prima di questo blocco metti un controllo su questi indici se il valore è compreso tra 1 e 3. Link al commento Condividi su altri siti More sharing options...
Project75 Inserita: 24 febbraio 2022 Autore Segnala Share Inserita: 24 febbraio 2022 40 minuti fa, acquaman ha scritto: Secondo me negli indici soglie non ci sono valori idonei, prima di questo blocco metti un controllo su questi indici se il valore è compreso tra 1 e 3. Ciao acquaman, il valore agli indici lo trasferisco con un move Link al commento Condividi su altri siti More sharing options...
acquaman Inserita: 24 febbraio 2022 Segnala Share Inserita: 24 febbraio 2022 Se l'array Indice è un array temp e il contatore ha ha valore 0 l'array indice è tutto a zero. A cosa serve usare 2 array IN e OUT? Ho l'impressione che ti stai un pò complicando la vita. Io userei un array con le tre soglie, e in array con l'indice della soglia delle 3 soffianti. La soffiante 1 userà La soglia Soglia[Indice[1]] La soffiante 2 userà La soglia Soglia[Indice[2]] La soffiante 3 userà La soglia Soglia[Indice[3]] Nell'indice soffiante verranno caricati i valori 1, 2, 3. Ad ogni ora schifto i valori dell'indice. IF Cambio_Ora Then AuxIndice:=Indice[1]; Indice[1]:=Indice[2]; Indice[2]:=Indice[3]; Indice[3]:=AuxIndice; END_IF; Link al commento Condividi su altri siti More sharing options...
batta Inserita: 24 febbraio 2022 Segnala Share Inserita: 24 febbraio 2022 17 minuti fa, Project75 ha scritto: il valore agli indici lo trasferisco con un move Indice_Soglia è una variabile statica o temporanea? i MOVE vengono eseguiti sempre, ad ogni ciclo? Se Indice_Soglia è una variabile temporanea e non viene eseguito il MOVE, assume valore 0. 3 minuti fa, acquaman ha scritto: Se l'array Indice è un array temp e il contatore ha ha valore 0 l'array indice è tutto a zero. @acquaman, mi hai anticipato per un soffio 😉 Link al commento Condividi su altri siti More sharing options...
Project75 Inserita: 24 febbraio 2022 Autore Segnala Share Inserita: 24 febbraio 2022 39 minuti fa, batta ha scritto: Indice_Soglia è una variabile statica o temporanea? i MOVE vengono eseguiti sempre, ad ogni ciclo? Se Indice_Soglia è una variabile temporanea e non viene eseguito il MOVE, assume valore 0. @acquaman, mi hai anticipato per un soffio 😉 Link al commento Condividi su altri siti More sharing options...
acquaman Inserita: 24 febbraio 2022 Segnala Share Inserita: 24 febbraio 2022 (modificato) Ma hai verificato che valori ci sono dentro l'array soglie? Per evitare questo problema, crea gli array soglie che vanno da 0..3, se per qualche motivo i valori dell'indice sono a 0 il plc non va in stop. Modificato: 24 febbraio 2022 da acquaman Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora