Vai al contenuto
PLC Forum


Impulso Al Secondo


Albert82

Messaggi consigliati

Salve, mi serve un contatto che si chiuda ad impulso ad ogni secondo, cosi facendo vado ad aumentare di 1 una determinata word

U M10.1 sarebbe l'impulso ad 1 secondo

SPNNB _001

L MW13 la mia word per il conteggio

L 1

+I

T MW13

_001: NOP 0

devo fare in modo che il contatto M10.1 abbia una frequenza di chiusura ogni secondo, ed inoltre che nella chiusura non continui ad aggiungere 1 alla MW13 ma solo una volta per il suo fronte si salita.

spero di essere stato chiaro

grazie

Link al commento
Condividi su altri siti


Nella CPU si puo impostare un Byte di Clock in questo caso il Byte 10 e il codice dovrebbe essere cosi

ON M 10.3 // Bit del Byte di Clock ogni 0.5 secondi che con il bit m127.0 conta ogni 1 secondo

O M 127.0 // Bit impulso singolo

SPB _001

L MW 13 // Word di Conteggio

L 1

+I

T MW 13

_001: O M 10.3

= M 127.0

// Estratto dall'. della CPU

A ogni bit del byte di merker di clock è assegnato un periodo/un a frequenza.

Bit 7 6 5 4 3 2 1 0

Periodo

(s): 2 1,6 1 0,8 0,5 0,4 0,2 0,1

Frequenza (Hz): 0,5 0,625 1 1,25 2 2,5 5 10

post-212888-0-43019700-1410533919_thumb.

Modificato: da Infoplc
Link al commento
Condividi su altri siti

oppure in alternativa

      U     M     10.5                  // Bit del Byte di Clock ogni 1 secondo
      FP    M    127.0                  // Bit impulso singolo
      SPBN  _001
      L     MW    13                    // Word di Conteggio
      INC   1
      T     MW    13
_001: NOP   0

Non hai parlato del reset del contatore o di un suo eventuale suo preset ad un valore di partenza, oppure cosa fare al superamento della max capacità di conteggio che in questo caso è 32767.

per questo motivo non ho aggiunto altro codice, se non quello espressamente richiesto nel tuo post.

Modificato: da cagliostro
Link al commento
Condividi su altri siti

provero, non sapevo di questa cosa del clock impostabile,

per il reset o altro non è un problema, faccio delle comparazioni di MW10 è poi porto a 0 o cosa mi serve.

era il fatto di contare, avevo provato il contatto ad impulso singolo ma non mi funzionavo, ossia rimaneva chiuso non solo per un impulso ma per piu tempo.

grazie mille! faro sapere l'esito!

Link al commento
Condividi su altri siti

  • 2 weeks later...

ahi, ahi, ahi signora Longari (Cagliostro ..) ecc. ecc. : attenzione l'istruzione INC implica un byte e non una word, come indicato dall' . Step7 qui sotto. Niente di grave, ma' ho gia pagato caro personalmente quest'errore, percio' tengo a rilevarlo, saluti

INC <numero intero, a 8 bit>

Operando Tipo dati Descrizione

<numero intero, a 8 bit > Costante (numero intero, 8 bit) Costante che viene sumata a ACCU1-L-L; campo da 0 a 255

Descrizione dell'operazione

INC <numero intero, a 8 bit> (Incrementa ACCU 1-L-L) addiziona un numero intero (a 8 bit) al contenuto di ACCU 1-L-L, e memorizza il risultato in ACCU 1-L-L. Gli accumulatori1-L-H, 1-H, e 2 restano inalterati. L’operazione viene eseguita senza considerare o influenzare i bit di stato.

AvvertenzaLe suddette operazioni non sono adatte alla matematica a 16 bit o a 32 bit, in quanto non viene effettuato nessun riporto dal byte basso della parola bassa di ACCU 1 al byte alto della parola bassa di ACCU 1. Per la matematica a 16 bit o a 32 bit si deve usare rispettivamente l’operazione +I o l’operazione +D.

Parola di stato

BIE A1 A0 OV OS OR STA RLC /ER

Scrive: - - - - - - - - -

Esempio

AWL Spiegazione

L MB22 //Carica il valore di MB22.

INC 1 //Incrementa ACCU 1 (MB 22) di 1, memorizza il risultato in ACCU 1-L-L.

T MB22 //Trasferisce nuovamente il contenuto di ACCU 1-L-L (risultato) a MB22.

Link al commento
Condividi su altri siti

:senzasperanza: ......

Non posso che prenderne atto.

Il tutto va bene per conteggi la cui capacità non vada oltre gli 8 bit (255max).

Quindi:

U     M     10.5                  // Bit del Byte di Clock ogni 1 secondo
      FP    M    127.0                  // Bit impulso singolo
      SPBN  _001
      L     MW    13                    // Word di Conteggio
      L 1
      +I
T     MW    13
_001: NOP   0

Grazie per la correzione.

Modificato: da cagliostro
Link al commento
Condividi su altri siti

Oppure

U     M     10.5                  // Bit del Byte di Clock ogni 1 secondo
      FP    M    127.0                  // Bit impulso singolo
      SPBN  _001
      L     MW    13                    // Word di Conteggio
      +     1
T     MW    13
_001: NOP   0

Link al commento
Condividi su altri siti

Tieni presente che la precisione che ottieni non è "assoluta". Sul tempo di clock scelto c'è un errore di +- un ciclo di scansione. Se vuoi il massimo della precisione devi attivare un interrupt a tempo e mettere la tua istruzione di somma in OB35 (se ricordo bene). Ciao

Link al commento
Condividi su altri siti

ma il merker 127.0 da cosa è attivato?

Se ti riferisci al codice di esempio

U     M     10.5                  // Bit del Byte di Clock ogni 1 secondo
      FP    M    127.0                  // Bit impulso singolo

M127.0 è attivato da M10.5

L'istruzione FP, rappresenta il rilevamento di un fronte di salita, conosciuto anche con il nome di oneshot.

In altre parole quando viene rilevata una transizione del segnale da OFF ad ON di M10.5, il merker M127.0 rimane attivo solamente per la durata di un ciclo scansione programma della CPU, anche con M10.5 che rimane nello stato di ON per un tempo indefinito.

L'attivazione di M127.0 per una sola scansione avviene nuovamente, dopo che M10.5 è ritornato ad ON passando per uno stato di OFF. Cioè rilevando il nuovo fronte di salita.

Modificato: da cagliostro
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...