Vai al contenuto
PLC Forum


Programmino PLC per comandare sequenzialmente le uscite


Messaggi consigliati

Inserito:

Sto imparando a programmare in awl e mi servirebbe una mano su un piccolo programmino...

Ho impostato le uscite da A0.0 a A0.7 e vorrei che queste si accendessero sequenzialmente con una frequenza di 1Hz.

Per creare la frequenza di un herz ho utilizzato un merker di clock, e per poter accendere le uscite in modo tale che prima si accende solo A0.0, poi solo A0.1, poi solo A0.2 e così via pensavo di utilizzare l'operazione di shift su un valore dell'accumulatore.

Questo però non mi funziona.

Potete consigliarmi?


Inserita:

Perchè non ti funziona?

Prova postare la sezione di codice che hai implementato.

Inserita:

ora non ce l'ho sotto mano, ma ho caricato il valore 1 (per poter accendere A0.0) nell'accumulatore e ogni volta che è alto l'accumulatore di clock eseguivo la traslazione e trasferivo il valore di accumulatore in un byte collegato alle uscite.

l'unica uscita che resta accesa è (A0.1).

Può essere dovuto al fatto che ogni volta mi si ricarica il valore 1 nell'accumulatore? per poterlo evitare come posso fare?

Inserita:

Facciamo un reset.

Supponiamo che le uscite interessate siano il byte A0.0 -------A0.7.

Al primo ciclo setti a "1" l'uscita A0.0.

Alla scdenza del clock copy il byte delle uscite nell'accumulatore, esegui uno shft a sx, poi ricopi laccumulatore nel byte di uscita.

Ovvimante devi verificare quando va a "1" il bit 8 dell'cumulatore. Per riprendere il ciclo daccapo devi resettare il bit 8 e settare il bit 0.

Questo è uno degli svariati modi per eseguire la rotazione ciclica. Altri potrebbero suggeirti metodi differenti, ognuno ha le sue preferenze.

Inserita:

Segmento 1 -- per caricare valore iniziale

Un m0.0

L 1

T mw1

S m0.0

Segmento 2

U m 5.5 -- merker di clock

L MW 1 -- word collegata in uscita

Slw

T mw1

Cosi non funziona... Mi fa solo lo shift iniziale

. dove sbaglio?

Inserita:

Chi è che comanda M0.0?

Non vedo nessuna istruzione che faccia ripartire il sistema dal primo bit, una volta effettuato lo shift completo.

La tua intenzione è sempre quella di comandare le uscite da A0.0 ad A0.7? Se è così, invece di usare una MW (16 bit) usa un MB (8 bit).

Il merker M5.5 è un merker che hai creato tu oppure fa parte del merker byte di sistema impostato in configurazione hardware?

Se fa parte del byte di sistema, non va alto per una scansione ogni secondo, ma rimane alto per 500 ms e basso per 500 ms.

Quando va alto (e vi rimane per 500 ms) non fa quindi un solo shift.

Potresti provare così:


	  U	 M	  5.5

	  FP	M	 16.0				  //Rileva fronte di salita merker di clock

	  SPBN  M000						//Elabora istruzioni una sola volta ogni secondo

	  L	 MB	17

	  SLW   1

	  T	 MB	17

	  L	 W#16#FF					 //Maschera il byte alto

	  UW	

	  SPP   M000						//Se il byte basso è zero, riparti da 1

	  L	 1

	  T	 MB	17

M000: NOP   0


	  L	 MB	17					//Trasferisci risultato alle uscite

	  T	 AB	 0



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...