Carissimi Amici.
DA poco mi sono affacciato sulla programmazione dei plc:
avrei una cortesia da chiedere per uso didattico.
Vorrei sapere come fare la programmazione di un orologio come Ivan spiega per L'Orologio del PLC S7-200s 200. Al PLC s7 300. per esattezza la CPU 315 2DP
L' articolo Di IVAN è molto benfatto e professionale.
Dovrei creare un programma che mi azioni delle elettrovalvole ad una determinata ora e che si diseccitano dopo un certo tempo da me inpostato cosi anche una pompa per un impianto di irrigazione.
Quindi con la funzione orologio .
SAluti
pronetart.
Orologio per S7-300
Moderatori:
dimaios,
carlomariamanenti
-
Ivan_Iamoni
5.336 6 10 12 - Utente disattivato per decisione dell'amministrazione proprietaria del sito
- Messaggi: 2330
- Iscritto il: 22 ott 2006, 18:45
0
voti
[2] Re: Orologio per S7-300
Prima ti faccio qualche domanda, l'orologio , deve interfacciarsi a qualche dispositivo esterno? (Pannello)
Se no come hai intenzione di scrivere i dati di paramentrizzazione per l'ora corrente, vuoi usare il forzamento variabili di S7?
Se no come hai intenzione di scrivere i dati di paramentrizzazione per l'ora corrente, vuoi usare il forzamento variabili di S7?
-
Candy
32,5k 7 10 13 - CRU - Account cancellato su Richiesta utente
- Messaggi: 10123
- Iscritto il: 14 giu 2010, 22:54
0
voti
[3] Re: Orologio per S7-300
Puoi usare le funzioni SFC1 ed SFC2, per impostare e leggere, ripettivamente, l'ora. Attenzione che i dati vengono accettati e restituiti tramite una variabile date_and_time, praticamente una struttura di numeri BCD, ciascuno relativo ad anno, mese, giorno, ora, etc... (Con la documentazione Step 7 delle due SFC, trovi già tutto cosa ti occorre sapere, oltre ad un poco di lavoro da fare per rendere il tutto utilizzabile).
Ad esempio, se hai, come presumo un pannello HMI e, se questo ha un orologio RTC, puoi semplicemente coordinarti con l'HMI e fare in modo che il PLC riceva l'ora da questo, così, un cambio ora sul pannello è automaticamente inviato al PLC; altrimenti, dovrai crearti una pagina, con dei campi numerici, che ti permettano di regolare l'ora del PLC.
Fatto questo, potrai fare un gestore di eventi che, rilevata e confrontata l'ora del PLC con un'orario impostato, attivi il programma che ti interessa.
Attenzione che però, le libreria STEP 7, sulla gestione degli eventi ad ora, sono scarse. Che io sappia c'è, in libreria, solo una funzione di confronto tra due variabili di tipo DATE_AND_TIME (DT), che restituisce, bada bene, la differenza in TIME, quindi, dopo 24 giorni e poco oltre, il confronto non è più valido. (Io ad esempio ho risolto aggiungendo un ulteriore contatore mio, e, ogni volta che la differenza di tempo spera l'ora, incremento un mio contatore di ore, su una variabile DINT.
Ti posto di seguito un estratto di codice SCL che ti fa vedere come leggere l'ora del PLC, e, quindi, estrapolarne i singoli elementi:
Ad esempio, se hai, come presumo un pannello HMI e, se questo ha un orologio RTC, puoi semplicemente coordinarti con l'HMI e fare in modo che il PLC riceva l'ora da questo, così, un cambio ora sul pannello è automaticamente inviato al PLC; altrimenti, dovrai crearti una pagina, con dei campi numerici, che ti permettano di regolare l'ora del PLC.
Fatto questo, potrai fare un gestore di eventi che, rilevata e confrontata l'ora del PLC con un'orario impostato, attivi il programma che ti interessa.
Attenzione che però, le libreria STEP 7, sulla gestione degli eventi ad ora, sono scarse. Che io sappia c'è, in libreria, solo una funzione di confronto tra due variabili di tipo DATE_AND_TIME (DT), che restituisce, bada bene, la differenza in TIME, quindi, dopo 24 giorni e poco oltre, il confronto non è più valido. (Io ad esempio ho risolto aggiungendo un ulteriore contatore mio, e, ogni volta che la differenza di tempo spera l'ora, incremento un mio contatore di ore, su una variabile DINT.
Ti posto di seguito un estratto di codice SCL che ti fa vedere come leggere l'ora del PLC, e, quindi, estrapolarne i singoli elementi:
Codice: Seleziona tutto
// Read CPU DateTime
iTemp0 := read_clk(CDT:=ActualTime);
iTemp0 := blkmov(srcblk:=ActualTime, DSTBLK:=ActTime);
PlcDateTime.Year := int_to_byte(BCD_TO_INT(ActTime.Year));
PlcDateTime.Month := int_to_byte(BCD_TO_INT(ActTime.Month));
PlcDateTime.Day := int_to_byte(BCD_TO_INT(ActTime.Day));
PlcDateTime.Hours := int_to_byte(BCD_TO_INT(ActTime.Hour));
PlcDateTime.Minuts := int_to_byte(BCD_TO_INT(ActTime.Minut));
PlcDateTime.Seconds := int_to_byte(BCD_TO_INT(ActTime.Second));
0
voti
[4] Re: Orologio per S7-300
vi ringrazio tutti dei consigli datemi, e mi scuso per il ritardo della risposta, motivi di lavoro.
Vengo al dunque
rispondo al amico Ivan.
I parametri ovviamente li inserisco tramite runtime di wincc.
In effetti devo programmare 12 elettrovalvole per irrigazione, e quindi mi serve una funzione timer con vari eventi anche due o tre al giorno.
mi dici smanettare .OK, lo so ovvio!
comunque smanettando e leggendo i vari manuali siemens che dicono e non dicono niente, alla fine ci sono riuscito.
Ho utilizzatoSFC0 SFC1 FB 5 e un db5 dove vado a leggere le varie variabili poi In OB1 ovviamente mi setto le varie variabili.
utilizzando le funzioni di comparazione come si vede sotto:
AUF DB 5 //Apre il blocco di dati DB5 come blocco di dati globale.
L DBW 9 //Carica la parola dati DBW9 del blocco di dati aperto in ACCU1-L.
T EW 22 //Trasferisce il contenuto di ACCU-L alla EW22.
poi comparando EW22 con MW100 dove nella variabile mw100 tramite una videata di wincc runtime mi setto i le ore e i minuti che quando sono uquali alla variabile EW 22 mi da lo stato ON e mi aziona l'elettrovalvola.
L EW 22
L MW 100
==I
S "elettrovalvola3"
ovviamente con un'altra variabile mi setto lo stato OFF
Cortesemente se potete darmi una dritta per fare la programmazione per ogni giorno della settimana mi fate molto piacere.
ringrazio tutti quelli che mi vogliono rispondere, in particolare gli amici Ivan e Mubetta, e mi scuso se non ho usato termini tecnici, per esprimere il concetto come sopra
Saluti
Pronetart
Vengo al dunque
rispondo al amico Ivan.
I parametri ovviamente li inserisco tramite runtime di wincc.
In effetti devo programmare 12 elettrovalvole per irrigazione, e quindi mi serve una funzione timer con vari eventi anche due o tre al giorno.
mi dici smanettare .OK, lo so ovvio!
comunque smanettando e leggendo i vari manuali siemens che dicono e non dicono niente, alla fine ci sono riuscito.
Ho utilizzatoSFC0 SFC1 FB 5 e un db5 dove vado a leggere le varie variabili poi In OB1 ovviamente mi setto le varie variabili.
utilizzando le funzioni di comparazione come si vede sotto:
AUF DB 5 //Apre il blocco di dati DB5 come blocco di dati globale.
L DBW 9 //Carica la parola dati DBW9 del blocco di dati aperto in ACCU1-L.
T EW 22 //Trasferisce il contenuto di ACCU-L alla EW22.
poi comparando EW22 con MW100 dove nella variabile mw100 tramite una videata di wincc runtime mi setto i le ore e i minuti che quando sono uquali alla variabile EW 22 mi da lo stato ON e mi aziona l'elettrovalvola.
L EW 22
L MW 100
==I
S "elettrovalvola3"
ovviamente con un'altra variabile mi setto lo stato OFF
Cortesemente se potete darmi una dritta per fare la programmazione per ogni giorno della settimana mi fate molto piacere.
ringrazio tutti quelli che mi vogliono rispondere, in particolare gli amici Ivan e Mubetta, e mi scuso se non ho usato termini tecnici, per esprimere il concetto come sopra
Saluti
Pronetart
-
Candy
32,5k 7 10 13 - CRU - Account cancellato su Richiesta utente
- Messaggi: 10123
- Iscritto il: 14 giu 2010, 22:54
0
voti
[5] Re: Orologio per S7-300
Con lo step 7 ed i manuali, devi controllare come è strutturato il formato date_and_time, perché contiene anche il numero di giorno della settimana, da 1 a 7.
P.S.: non trasferire nell'area EW..., perché è un'area utilizzata per memorizzare lo stato degli ingressi. PEr utilizzwrla, devi essere indibbiamente certo che mai in configurazione hardware sarà assegnata a qualche scheda di ingresso. Usa piuttosto l'area M.
P.S.: non trasferire nell'area EW..., perché è un'area utilizzata per memorizzare lo stato degli ingressi. PEr utilizzwrla, devi essere indibbiamente certo che mai in configurazione hardware sarà assegnata a qualche scheda di ingresso. Usa piuttosto l'area M.
0
voti
[6] Re: Orologio per S7-300
ciao candy
Con lo step 7 ed i manuali, devi controllare come è strutturato il formato date_and_time, perché contiene anche il numero di giorno della settimana, da 1 a 7.
si infatti riesco a vedere il giorno della settimana sottoforma di numero es 1=domenica ecc ecc.il problema mio e quello di fare una programmazione per giorno, es lunedi EV1 dalle 16 alle17
il martedi invece EV1 dalle 14 alle 15 ecc ecc.
P.S.: non trasferire nell'area EW..., perché è un'area utilizzata per memorizzare lo stato degli ingressi. PEr utilizzwrla, devi essere indibbiamente certo che mai in configurazione hardware sarà assegnata a qualche scheda di ingresso. Usa piuttosto l'area M.
Ho capito quello che tu dici sopra pero il problema è che quando dichiaro la variabile in wincc nel cambio formato in WORDTOBCDWORD in modo che in runtime vedo es 1534 che sta per ore 15 e 34 minuti, se non metto ew e metto mw non riesco ad ottenero lo stesso numero ma un numero diverso,
non so se ho reso l'idea mi farebbe piacere se mi dicessi se va bene ho se hai un'altra soluzione alternativa.
nel progetto hardware ovviamente ci vanno due moduli SM331 e due SM322.
saluti e grazie dei consigli
Pronetart
Con lo step 7 ed i manuali, devi controllare come è strutturato il formato date_and_time, perché contiene anche il numero di giorno della settimana, da 1 a 7.
si infatti riesco a vedere il giorno della settimana sottoforma di numero es 1=domenica ecc ecc.il problema mio e quello di fare una programmazione per giorno, es lunedi EV1 dalle 16 alle17
il martedi invece EV1 dalle 14 alle 15 ecc ecc.
P.S.: non trasferire nell'area EW..., perché è un'area utilizzata per memorizzare lo stato degli ingressi. PEr utilizzwrla, devi essere indibbiamente certo che mai in configurazione hardware sarà assegnata a qualche scheda di ingresso. Usa piuttosto l'area M.
Ho capito quello che tu dici sopra pero il problema è che quando dichiaro la variabile in wincc nel cambio formato in WORDTOBCDWORD in modo che in runtime vedo es 1534 che sta per ore 15 e 34 minuti, se non metto ew e metto mw non riesco ad ottenero lo stesso numero ma un numero diverso,
non so se ho reso l'idea mi farebbe piacere se mi dicessi se va bene ho se hai un'altra soluzione alternativa.
nel progetto hardware ovviamente ci vanno due moduli SM331 e due SM322.
saluti e grazie dei consigli
Pronetart

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)

