Vai al contenuto
PLC Forum


Programma settimanale.


Futaba3

Messaggi consigliati

5 ore fa, Futaba3 ha scritto:

Ciao Batta Grazie dell'email ma questo in scl non riesco a eseguirlo....Grazie ancora.

non so proprio dove parare.

Non riesci a capire come funziona o non riesci ad aprire il progetto?

 

Se non capisci come funziona, chiedi che ti do una mano.

Ma potresti anche utilizzarlo così com'è, ed approfondire il modo di funzionamento in altro momento.

Per esempio, chiedevi un programma per attivare il PID alle 7 e disattivarlo alle 18, per tutti i giorni della settimana.
Nell'immagine che segue ho impostato accensione alle 7 e spegnimento alle 18 da lunedì a venerdì, accensione alle 7 e spegnimento alle 12 il sabato, domenica spento.
image.png.69fc856f35057d886f0a6dc92c97e684.png

 

Ho simulato la data del 06/01/2023, e mi viene visualizzato che è un venerdì. Ho simulato l'ora 17.13.05, e mi viene visualizzato che siamo nella fascia oraria Nr.9
Il Comando è nello stato ON, e il set di temperatura è di 20,0 °C.

 

Le fasce orarie vanno intese come segue: ogni fascia oraria inizia il giorno/ora impostato, e termina quando inizia la fascia oraria seguente.

Per esempio, la fascia oraria Nr.5 inizia mercoledì alle ore 7, e termina mercoledì alle ore 18.
La fascia oraria 6 inizia mercoledì alle ore 18, e termina giovedì alle ore 7.
La fascia oraria Nr.12 inizia sabato alle ore 12 e termina il lunedì successivo alle ore 7.


Le fasce dalla 13 alla 28 sono tutte disabilitate, e tutto quello che imposti in queste fasce non ha rilevanza.

Le variabili di impostazione le trovi nel DB di istanza della funzione (CronoSett_DBI), nell'array SET (nell'area STAT).
Potrebbe non piacere il fatto che queste variabili siano nel DB di istanza ma, come detto, era nato come esercizio. Bastano poche modifiche per spostare queste variabili come IN/OUT ed appoggiarle in un DB diverso.


Il comando digitale, il set di temperatura, il set di umidità e la fascia oraria attiva, le trovi come OUT della funzione.
Se ti basta un solo set point (che non è per forza una temperatura), usi solo quello, ed ignori il secondo set point (umidità, nell'esempio).

 

In quanto all'utilizzo di un pannello Weintek, credo sia necessario utilizzare l'indirizzamento assoluto e, quindi, nelle proprietà della funzione, in Attributi, dovrai togliere la spunta da "Accesso ottimizzato al blocco".
Ma, per quanto riguarda gli HMI Weintek, ci sono molti utenti sul forum che ti sapranno essere molto piu utili di me.

 

Link al commento
Condividi su altri siti


  • Risposte 51
  • Created
  • Ultima risposta

Top Posters In This Topic

  • Futaba3

    27

  • batta

    12

  • acquaman

    4

  • max.bocca

    4

Top Posters In This Topic

Posted Images

Salve oggi eseguo prova in campo.

Vi chiedo una Cortesia nel controllare il tutto la Cpu mi avvisava che avevo esaurito lo spazio dei blocchi...

essendo un programma semplice con 3 FC e 2 OB non credo di aver usato tanto la CPU .

considerando il vecchio programma che c'era con 10OB 12FC 13 DB.

Forse sbaglio qualcosa, ho eseguo dei blocchi blocchi fc troppo grandi che poi vengono richiamati in OB e quindi esaurisco i blocchi od altro....

Grazie del vostro aiuto..

 

Link al commento
Condividi su altri siti

Salve ieri sul campo ho eseguito tutte le prove e il sistema funziona tranquillamente. 

mi viene il dubbio se nel togliere tensione mantenga i dati della schedulazione.

i db sono tutti a ritenzione dovrei anche settare "Valori di impostazione"? 

Facendo delle ricerche non capisco bene il da farsi... 

La CPU a un caricamento a caldo...

Nei DB mi sfugge se devo spuntare "Carica Senza reinizializzazione".

Grazie per il vostro supporto.

 

Link al commento
Condividi su altri siti

Per mantenere i dati dopo un "avvio a caldo" (il passaggio da stopa run o il ritorno della tensione di alimentazione) ti basta impostare i dati come ritentivi.
Per avere dati validi anche in caso di avviamento a freddo o di reinizializzazione del DB, fai una "istantanea dei valori attuali" e poi "copia istantanee come valori di avvio".

Link al commento
Condividi su altri siti

Intendi che scrivi dei valori, poi spegni e riaccendi, e non ritrovi i valori precedentemente scritti?
Ma chi scrive questi valori? Se sono scritti anche da programma, il problema lo devi cercare lì.

Modificato: da batta
Link al commento
Condividi su altri siti

2 ore fa, batta ha scritto:

Intendi che scrivi dei valori, poi spegni e riaccendi, e non ritrovi i valori precedentemente scritti?
Ma chi scrive questi valori? Se sono scritti anche da programma, il problema lo devi cercare lì.

Ciao Batta Si una volta scritti i valori sul'hmi che poi riporta su plc una volta tolta la tensione i valori sono settati a 0.

 

 

Link al commento
Condividi su altri siti

Da qualche parte del programma c'è qualcosa che ti azzera i valori. Anche perché, in assenza di ritenzione, ti dovresti trovare i valori di avvio, e non tutti zeri.

Link al commento
Condividi su altri siti

Mi conviene verificare gli altri Db ho il tipo di variabile che punto può essere sbagliata ?. Non credo che sia il fatto che i db non sono in copia a i lista dati??? Domani controllo grazie ancora del supporto...

Link al commento
Condividi su altri siti

31 minuti fa, Futaba3 ha scritto:

salve penso di aver sbagliato qualcosa in questo programma..Ma non riesco ha trovare l'errore...

 

Cattura2.PNG

le varie mw che usi nei move sono dichiarate ritentive? se non lo fossero è normale che ti trovi tutto a 0 all'accensione

Link al commento
Condividi su altri siti

L'unica cosa che ho dichiarato solo una volta e poi ripetuto nei vari rami dei giorni sono le ore e i minuti , non vorrei che dovevo dichiararle per ogni giorno cioè:

"lunedì H ON"

"lunedì H OFF" 

E così via ..... ed e per questo che li porta a 0??

 

Immagine 2023-01-15 104108.png

Link al commento
Condividi su altri siti

partiamo dall'inizio, nel segmento 2 del codice che hai allegato sposti delle mw in delle dbb(e già qui c'è un errore, sposti 2 byte dentro ad un byte solo), le mw2, mw16, mw18, ecc devi dichiararle ritentive, altrimenti all'accensione si trovano a 0, viene elaborato il move e ti mette a 0 anche i vari valori nel db.

 

Modificato: da Mattia Spoldi
Link al commento
Condividi su altri siti

  • 2 weeks later...

Salve mi scuso se non vi ho fatto sapere più nulla....

era da un paio di settimane incasinatissimo per altri lavori.

questa mattina sono andato per dare una occhiata all programma schedulazione che avevo eseguito da un cliente e mi sono accorto che ogni ora il programma si fermava spaccate alle 00.

Mi son chiesto dove fosse l'errore e mi sono accorto che era nei "minuti"

Ho eseguito questo ramo ma cambiando i vari operando l'unico che funzionava era questo "<>" pero allo stesso minuto impostato si fermava e poi ripartiva un minuto dopo.

Ora ho chiesto al cliente di togliere i minuti e fare un settaggio solo sulle ore ma lui mi chiedeva la mezzora. 

Come posso ovviare questo... scusatemi la mia scarsa preparazione nel settore mi capitano poche volte di eseguire questi programmi quindi finche non faccio tutta la mia esperienza sono ancora alle prime armi......specialmente su cose mai fatte e anche guardando e leggendo non mi vogliono entrare in testa.

Grazie ancora tanto siete un Mare di risorse.

Immagine 2023-01-28 192019.png

Link al commento
Condividi su altri siti

Non mi è molto chiaro, io normalmente per giorno uguale e ora inizio io con minuti >= o ora maggiore e ora fine minore o ora fine uguale minuti <= il tutto è on... 

 

Link al commento
Condividi su altri siti

Salve si io avevo eseguito la stessa vostra ipotesi cioè == giorno, ore minuti on  >=h - >=m - ore minuti off <=h- <=m.  però se io nei .minuti cioè off inserisco e per esempio 30minuti lui alla prima ora che scattano i minuti 30 blocca il programma.

Link al commento
Condividi su altri siti

In questo modo non ne vieni fuori.

Analizziamo qualche caso.

Impostiamo ora ON 8:30 e ora OFF 10:30.

Pensiamo, per ora, solo alle comparazioni per ora ON.

Alle ore 8:29 ti trovi con la prima comparazione vera, ma la seconda falsa. Ed è corretto.
Alle 8:30 le prime due comparazioni saranno entranbe vere, ed è corretto.
E tutto andrà bene fino alle 8:59.
Ma alle 9:00, ti ritrovi con la comparazione dei minuti che sarà falsa.
Lo stesso ragionamento vale per le comparazioni ora OFF.
Hai due soluzioni:

1) Fai tutte le comparazioni "==" e gestisci con SET/RESET
2) Trasformi tutto in minuti, ed allora  puoi fare con due comparazioni.

 

Il primo metodo ha l'inconveniente che se il PLC non è in run all'ora di una commutazione, ti perdi l'evento. Ti potresti perdere l'evento anche in caso di modifica dell'ora del PLC.
Il secondo metodo non perde eventi ma, con due sole comparazioni, non funziona se l'ora OFF è antecedente all'ora ON (esempio: ON alle ore 18:00, OFF alle ore 10:00).

Per rendere completo il secondo metodo dovresti fare prima una comparazione tra ora ON e ora OFF. Se ora ON è maggiore di ora OFF, allora dovresti tenere ON tra ora ON e le ore 23:59 e tra le ore 00:00 e ora OFF.

Link al commento
Condividi su altri siti

  • 2 weeks later...
Il 30/1/2023 alle 08:48 , batta ha scritto:

In questo modo non ne vieni fuori.

Analizziamo qualche caso.

Impostiamo ora ON 8:30 e ora OFF 10:30.

Pensiamo, per ora, solo alle comparazioni per ora ON.

Alle ore 8:29 ti trovi con la prima comparazione vera, ma la seconda falsa. Ed è corretto.
Alle 8:30 le prime due comparazioni saranno entranbe vere, ed è corretto.
E tutto andrà bene fino alle 8:59.
Ma alle 9:00, ti ritrovi con la comparazione dei minuti che sarà falsa.
Lo stesso ragionamento vale per le comparazioni ora OFF.
Hai due soluzioni:

1) Fai tutte le comparazioni "==" e gestisci con SET/RESET
2) Trasformi tutto in minuti, ed allora  puoi fare con due comparazioni.

 

Il primo metodo ha l'inconveniente che se il PLC non è in run all'ora di una commutazione, ti perdi l'evento. Ti potresti perdere l'evento anche in caso di modifica dell'ora del PLC.
Il secondo metodo non perde eventi ma, con due sole comparazioni, non funziona se l'ora OFF è antecedente all'ora ON (esempio: ON alle ore 18:00, OFF alle ore 10:00).

Per rendere completo il secondo metodo dovresti fare prima una comparazione tra ora ON e ora OFF. Se ora ON è maggiore di ora OFF, allora dovresti tenere ON tra ora ON e le ore 23:59 e tra le ore 00:00 e ora OFF.

Scusate se non vi ho risposto prima ma sono talmente impegnato che non avevo nemmeno un minuto per vedere i vostri messaggi, che mi sbalordiscono e penso sempre di più che questo Forum e uno Spettacolo, Vi ringrazio tutti per la Vostra Presenza e Sostegno. 

Batta non ho il pc con me per fare una prova So che chiedo troppo, la 2° opzione  non comprendo quando dici trasformi tutto in Minuti. "Considerando Il fatto che poi dovrei Inserirlo su HMI che non credo dovrei impostare in minuti.."

Gentilmente mi puoi fare un esempio. Grazie sempre Gentilissimo.

Mentre questo mi e stato chiaro "Per rendere completo il secondo metodo dovresti fare prima una comparazione tra ora ON e ora OFF. Se ora ON è maggiore di ora OFF, allora dovresti tenere ON tra ora ON e le ore 23:59 e tra le ore 00:00 e ora OFF."

Grazie ancora tanto.

 

Link al commento
Condividi su altri siti

11 minuti fa, Futaba3 ha scritto:

Batta non ho il pc con me per fare una prova So che chiedo troppo, la 2° opzione  non comprendo quando dici trasformi tutto in Minuti. "Considerando Il fatto che poi dovrei Inserirlo su HMI che non credo dovrei impostare in minuti.."

Su HMI puoi continuare ad impostare ore e minuti. Poi ti basta moltiplicare le ore per 60, e sommare i minuti. Dato che hai anche l'ora attuale in ore e minuti, fai la stessa operazione anche per quella. Ecco che ti ritrovi sia con l'impostazione ore e minuti fatta su HMI, sia con l'ora attuale, trasformate in minuti dalla mezzanotte. A questo punto, puoi risolvere con le comparazioni.

Link al commento
Condividi su altri siti

13 ore fa, batta ha scritto:

Su HMI puoi continuare ad impostare ore e minuti. Poi ti basta moltiplicare le ore per 60, e sommare i minuti. Dato che hai anche l'ora attuale in ore e minuti, fai la stessa operazione anche per quella. Ecco che ti ritrovi sia con l'impostazione ore e minuti fatta su HMI, sia con l'ora attuale, trasformate in minuti dalla mezzanotte. A questo punto, puoi risolvere con le comparazioni.

Grazie Mille Batta Sei Un grande. provo domani e vi faccio sapere .L'unico dubbio e che dovrei convertire le ore da USInt ad INT per fare la moltiplicare per 60 perchè se non erro le UsInt dovrebbero essere fino a 289..

poi Moltiplicarex60 e sommare con i  minuti tutto in INT  e poi comparare..

Sbaglio??

Link al commento
Condividi su altri siti

Una USINT (intero a 8 bit senza segno) va da 0 a 255 (ovvero 256 valori, che è 2^8).

Ma non devi fare alcuna conversione, basta che il risultato lo metti in una INT (o UINT). Al resto, ci pensa il TIA.

Link al commento
Condividi su altri siti

  • 2 weeks later...

Salve mi scuso ma un sacco di lavoro mi ha bloccato .

credo di aver risolto il programma gira la schedulazione funziona Correttamente.

Vorrei ringraziarvi  Tutti per il supporto. 

Gentilissimi. Vorrei sdebitarmi non ho idea come fare. grazie mille ..

Link al commento
Condividi su altri siti

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora

×
×
  • Crea nuovo/a...