Vai al contenuto
PLC Forum


Programmazione Pl7


stefanobruciato

Messaggi consigliati

stefanobruciato

Ciao a tutti sono nuovo del forum e da un po mi sto appassionando ai plc e al pl7 pro ho la versione 4.4 ora vorrei sapere una cosa che al momento non riesco a fare, B) vorrei utilizzare lo stesso ingresso per attivare e disattivare un uscita come faccio?

Mi spiego meglio vorrei simulare un relè comandato da un pulsante come faccio la programmazione in Ladder?

Aiutatemi grazie

Link al commento
Condividi su altri siti


non è nè questione di Ladder nè questione di istruzioni particolari nè di che tipo di plc, è solo questione di logica.

Ci sono 1000 modi per fare quello che chiedi così come per tante altre gestioni.

cosa vuoi fare del tuo ingresso e della tua uscita?

1) quando premi il pulsante vuoi accendere la luce

2) quando ripremi il pulsante vuoi spegnere la luce

è necessario quindi sapere se devi accendere o spegnere la luce nel momento in cui premi il pulsante.

per sapere se accendere o spegnere ti basta controllare lo stato dell'uscita al momento della pressione

l'istruzione di questo ragionamento equivale a:

SE pulsante premuto=1 AND uscita=0 ALLORA uscita->1

SE pulsante premuto=1 AND uscita=1 ALLORA uscita->0

Eseguendo queste semplici righe ti accorgerai che non accenderai mai un bel niente, poichè quando la prima istruzione accende la luce, la seconda la spegne poiche la vede accesa.

A questo utilizzare scrivere l'uscita ad ogni riga d'istruzione è d'impiccio. Conviene utilizzare una nuova variabile che dica che la luce deve accendersi o deve spegnersi.

SE pulsante premuto=1 AND uscita=0 ALLORA accendere->1

SE pulsante premuto=1 AND uscita=1 ALLORA accendere->0

SE accendere=1 ALLORA uscita->1

SE accendere=0 ALLORA uscita->0

Eseguendo queste semplici righe ti accorgerai che la luce si accende e poi si spegne e così via finchè tieni premuto il pulsante.

Bisogna fare in modo che le istruzioni vengano eseguite una volta sola... quando? Al momento della pressione del pulsante. Bisogna memorizzare il momento in cui viene premuto il pulsante in modo tale che il momento (scansione) successivo ci si ricordi di aver già premuto e quindi di evitare di rieseguire nuovamente le istruzioni fino al momento di una nuova pressione.

SE pulsante premuto=1 AND già premuto=0 ALLORA comanda uscita->1 ALTRIMENTI comanda uscita->0

SE pulsante premuto=1 ALLORA già premuto->1 ALTRIMENTI già premuto->0

SE comanda uscita=1 AND uscita=0 ALLORA accendere->1

SE comanda uscita=1 AND uscita=1 ALLORA accendere->0

SE accendere=1 ALLORA uscita->1

SE accendere=0 ALLORA uscita->0

Questo è un ragionamento che ho fatto risolvendo passo passo le problematiche utilizzando le istruzioni di base AND, (AND NOT) ed l'assegnazione (in PL7 " := "). Puoi anche tradurre le parole in maiuscolo ed eseguire la programmazione in linguaggio strutturato.

Le prime due righe le puoi tradurre con un fronte di salita.

Si potrebbero anche utilizzare i salti (JUMP) anzichè memorie aggiuntive. Insomma questo è quello che mi è venuto in mente per meglio farti capire come io mi approccerei ai vari problemi.

Link al commento
Condividi su altri siti

stefanobruciato

Scusa ma la spataffiata di roba che hai tirato onestamente non l'ho compresa tanto comunque hai indovinato cosa voglio fare con l'IN e L' OUT inoltre se non ti dispiace vorrei sapere come far accendere al primo inpulso una lamapada al secondo un altra al terzo tutte e due e al quarto spegnere tutto ps però in ladder grazie ancora ps spiegati meglio oppure allega un file esempio

Link al commento
Condividi su altri siti

stefanobruciato così ti sei bruciato proprio!!! Ho letto il tuo post dove dicevi che ti stavi appassionando......

bella passione quella di farsi fare le cose gratis dagli altri... ma va..

io non ti allego un bel niente ... una fattura semmai...

Link al commento
Condividi su altri siti

stefanobruciato

Grazie per la tua esplicita richiesta di denaro pensavo che il forum servisse ad aiutare comunque non preoccuparti ci sarà qualcuno molto più gentile di te che mi faccia almeno capire in maniera decente come fare questa programmazione in ladder grazie ancora per la tua disponibilità :)

Link al commento
Condividi su altri siti

Ciao stefanobruciato :)

..vorrei sapere come far accendere al primo inpulso una lamapada al secondo un altra al terzo tutte e due e al quarto spegnere tutto ps però in ladder..

// Seg 1

         PS         M2              M5             Q1
+--------[ ]---+---[/]----+--------[/]------------( )---+ Lamp1
|              |          |    
|         Q1   |          |   
+--------[ ]---+          |
|                         |
|         M3              |
+--------[ ]--------------+

// Seg 2

          PS        Q1              M2      M5     M1
+--------[/]-------[ ]----+--------[/]-----[/]----( )----+ 
|                         |
|                         |
|         M1              |
+--------[ ]--------------+

// Seg 3

     PS     M1      M2              M5             Q2
+---[ ]----[ ]-+---[/]----+--------[/]------------( )---+ Lamp2
|              |          |    
|    Q2        |          |   
+---[ ]--------+          |
|                         |
|         M3              |   
+--------[ ]--------------+

// Seg 4

          PS        Q1          Q2       M3   M5   M2
+--------[/]-------[ ]----------[ ]--+--[/]--[/]--( )----+
|                                    |
|                                    |
|         M2                         |
+--------[ ]-------------------------+

// Seg 5

          PS        M2                      M5     M3
+--------[ ]-------[ ]------------------+--[/]----( )----+
|                                       |
|                                       |
|         M3                            |
+--------[ ]----------------------------+

//Seg 6

          PS        M3                      M5     M4
+--------[/]-------[ ]------------------+---[/]---( )----+
|                                       | 
|                                       |
|             M4                        |
+--------[ ]----------------------------+

// Seg 7 

          PS        M4                             M5
+--------[ ]-------[ ]----------------------------( )----+

PS = pulsante (Input)
M1-M2-M3-M4-M5 = memorie ausiliarie
Q1 = uscita lampada 1
Q2 = uscita lampada 2

Seg 1 accende Lamp 1
Seg 3 accende Lamp 2
Seg 4 spegne tutte 2 : fatto per riaccendere tutte 2 nel passo successivo, altrimenti ti ci vuole un'altro impulso per spegenere ambe due.
Seg 5 accende tutte 2 
Seg 7 spegne tutte e 2

Non lo ho testato nel PLC ma dovrebbe andare bene <_<

Provaci e fammi sapere ;)

Modificato: da Savino
Link al commento
Condividi su altri siti

stefanobruciato

Savino allora ho testao la programmazione però funziona in maniera diversa al 1inpulso accendono tutte e due al 2 si spegne una al terzo.... se tieni premuto il pulsante si riaccendono entrambe ma appena lasci si spengono tutte e due come mai? comunque grazie a te sono riuscito a fare la programmazione di un pulsante on/ off che era la mia prima domanda in questo topic grazie ancora appenna puoi fammi sapere io ci sto mettendo la mia buona volontà nel capirlo purtroppo sono nuovo di questo campo.

Link al commento
Condividi su altri siti

utilizza una word in questo modo:

%M0:=RE %I0.0;

IF %MW0>3 THEN %MW0:=0 END_IF;

IF %MW0=3 AND %M0 THEN %MW0:=4 END_IF;

IF %MW0=2 AND %M0 THEN %MW0:=3 END_IF;

IF %MW0=1 AND %M0 THEN %MW0:=2 END_IF;

IF %MW0=0 AND %M0 THEN %MW0:=1 END_IF;

%Q0.0:=%MW0:X0;

%Q0.1:=%MW0:X1;

non te lo faccio in ladder perchè ti sconsiglio vivamente il ladder di PL7.

Impara il linguaggio ST che ti soddisferà molto di più.

Link al commento
Condividi su altri siti

Savino allora ho testao la programmazione però funziona in maniera diversa al 1inpulso accendono tutte e due al 2 si spegne una al terzo.... se tieni premuto il pulsante si riaccendono entrambe ma appena lasci si spengono tutte e due come mai? comunque grazie a te sono riuscito a fare la programmazione di un pulsante on/ off che era la mia prima domanda in questo topic grazie ancora appenna puoi fammi sapere io ci sto mettendo la mia buona volontà nel capirlo purtroppo sono nuovo di questo campo.

Ciao,

Dunque, ho eseguito un test ON LINE del codice sopra postato. Ho fatto la simulazione utilizzando una tabella di monitoraggio variabili e facendo dei forzamenti per l'input "PS"

Il codice va bene, l'unica cosa ..dovresti inserire una modifica sul segmento 7 ed aggiungere un seg.8 per il reset della sequenza

// Seg 7 
          
          PS        M4                      M6     M5
+--------[/]-------[ ]------------------+---[/]---( )----+
|                                       | 
|                                       |
|        M5                             |
+--------[ ]----------------------------+

// Seg 8

          PS        M5        Q1        Q2          M6
+--------[/]-------[ ]-------[/]-------[/]---------( )----+
Poi ecco gli stati delle variabili ....
 

     Seg 1    Seg 2     Seg 3      Seg 4   Seg 5     Seg 6    Seg 7    Seg 8
-----------------------------------------------------------------------------
Ps    1        0         1          0       1          0        1       0
Q1    1        1         1          0       1          1        0       0
Q2    0        0         1          0       1          1        0       0
M1    0        1         1          0       0          0        0       0
M2    0        0         0          1       1          1        0       0
M3    0        0         0          0       1          1        0       0
M4    0        0         0          0       0          1        0       0
M5    0        0         0          0       0          0        1       0

Quindi...

Seg 1 accende Lamp 1

Seg 3 accende Lamp 2

Seg 4 spegne tutte 2 : fatto per riaccendere tutte 2 nel passo successivo, altrimenti ti ci vuole un'altro impulso per spegenere ambe due.

Seg 5 accende tutte 2

Seg 7 spegne tutte e 2

Seg 8 reset.

Verifica utilizzando lo stesso metodo. Per "PS" , al posto del ingresso utilizza una "memoria" per potere fare dei forzamenti....vedari che funziona.

Per provare col pulsante, dovresti fare attenzione a dare gl'impulsi correttamente . ;)

N.B: prima iniziare, verifica che le memorie utilizzate, ecc sono stato "Zero"(off).

Modificato: da Savino
Link al commento
Condividi su altri siti

stefanobruciato

Ok Savino oggi provo e ti faccio sapere grazie ancora.

X Rddiego ringrazio anche te per l'aiuto ma io l'st come l'inguzggio non lo mastico proprio invece il ladder un po di più comunque sapresti dirmi dove trovare qualche guida per l'st dove magari ci sono anche degli esempi? Grazie

Ps toglimi una curiosità ma il codice che hai postato

%M0:=RE %I0.0;

IF %MW0>3 THEN %MW0:=0 END_IF;

IF %MW0=3 AND %M0 THEN %MW0:=4 END_IF;

IF %MW0=2 AND %M0 THEN %MW0:=3 END_IF;

IF %MW0=1 AND %M0 THEN %MW0:=2 END_IF;

IF %MW0=0 AND %M0 THEN %MW0:=1 END_IF;

%Q0.0:=%MW0:X0;

%Q0.1:=%MW0:X1;

fa tutto quello che savino mi ha scritto in ladder? perchè sembra che sia molto più corto.

Link al commento
Condividi su altri siti

Due domande da questo argomento, come si fa a spedire i pezzi di programma in ladder e sottolineare in un riquadro le parti delle risposte precedenti ? Ho tentato di spedire in ladder ma ci metto 6 mesi a scriverlo e in più perdo l'allineamento con gli spazi vuoti .

Considerazione per i due tipi di linguaggio :

- Il ladder pl7 è uno tra i più facili, con un box fai (A+B)-C*D/F+(G+H-I),con altri ladder dovresti scrivere un libro per fare lo stesso.

- Il linguaggio ST usato con Word e comparazioni al posto dei semplici contatti, forse oggi non fa differenza, ma un po di anni fa quando i PLC erano più lenti, te l'avrebbero bocciato come soluzione, perchè impiegava un sacco di tempo e rallentava i tempi di ciclo del programma.

Link al commento
Condividi su altri siti

Due domande da questo argomento, come si fa a spedire i pezzi di programma in ladder e sottolineare in un riquadro le parti delle risposte precedenti ?

Per sottolineare le risposte precedenti usi il penultimo bottone "inserisci come citazione" sulla barra del menu del box "Rispondi". 
esempio:
[quote]inserisce qui il texto[/quote]
 
Incambio per sottolineare del codice, etc... utilizzi l'ultimo bottone "codice".
esempio:
[code ]inserisce qui il texto[/code ]
Per editare il ladder ti conviene copiarlo da un file .txt ( allineato) e poi lo incolli sul box "Rispondi", tra [code ]e[/code ], poiche' lo vedrai disallineato comunque.

Link al commento
Condividi su altri siti

Ciao stefanobruciato,

Scusa, ho visto un errore di editazione sull'ultima modifica del mio post precedente per il Seg 7.

PS e' un NO e non un NC

// Seg 7 
          
          PS        M4                      M6     M5
+--------[/]-------[ ]------------------+---[/]---( )----+
|                                       | 
|                                       |
|        M5                             |
+--------[ ]----------------------------+
Questo va bene.!
// Seg 7 
          
          PS        M4                      M6     M5
+--------[ ]-------[ ]------------------+---[/]---( )----+
|                                       | 
|                                       |
|        M5                             |
+--------[ ]----------------------------+

Modificato: da Savino
Link al commento
Condividi su altri siti

stefanobruciato

Scusa Savino tu che sei più esperto ma non cè un metodo in ladder per ridurre le istruzioni e fare le stesse operazioni? Grazie

Link al commento
Condividi su altri siti

L'esempio da me postato e' molto "basico". Appunto, visto che sei alle prime arme forse sarebbe meglio che tu afferrassi il concetto di logica booleana. Poiche', questa banale rappressentazione sarebbe universalmente portabile su tutti i PLC cosi' com'e' scritta.

Certamente che ci sono tanti altri modi di soluzioni, ma dovresti approffondire di piu' per quanto riguardano le possibilita' e ricchezze della suite di algoritmi di librerie offerti dal linguaggio stesso.

Certamente che scrivere in STL e' molto piu' semplificato che in ladder. ;)

Modificato: da Savino
Link al commento
Condividi su altri siti

stefanobruciato

Grazie ancora, sapresti indicarmi dove trovare guide e approfondimenti a riguardo? Magari con esempi pratici? Sia ladder che stl in modo da inpratichirmi un pò.

Link al commento
Condividi su altri siti

Non ho capito una cosa, ma se inserisco il txt allineato, gli spazi vuoti vengono cancellati ?

Se fai la copia da .txt ed incolli direttamente fuori dal blocco [code ] [/code ], pare che e' cosi' come dici.

Se incambio incolli dentro il suddetto blocco allora sembrerebbe che il passo per la larghezza dei caratteri non sarebbe uguale e quindi resta disallineato comunque. <_<

Modificato: da Savino
Link al commento
Condividi su altri siti

Considerazione per i due tipi di linguaggio :

- Il ladder pl7 è uno tra i più facili, con un box fai (A+cool.gif-C*D/F+(G+H-I),con altri ladder dovresti scrivere un libro per fare lo stesso.

molto brevemente dico che non concordo in nulla di ciò che dici, tuttavia non so quali sono le tue esperienze e quindi a cosa ti riferisci...

dire che il ladder di pl7 è uno dei più facili solo perchè puoi scrivere un'espressione è molto poco significativo.

Il ladder è per tutti ladder, chi ha una funzione di più chi di meno... ma il linguaggio è praticamente universale (e mi riferisco a quelle che per me sono le grandi marche AB, Siemens, Schneider).

Per me quindi il punto non è il linguaggio in sè o la funzione in più che ha il tal plc, ma l'interfaccia, e cioè il software, con cui vado a programmarlo. Per questo, e credo che nessuno potrà smentirmi, il ladder migliore tra i tre è certamente AB (parlo del vecchio RSLogix5 e del 5000). E tra i tre PL7 è certamente l'ultimo dove solo disegnare un segmento verticale un impiccio e cancellarlo è peggio. Poi mi sembra che ogni segmento abbia un limite di 8 righe e solo 11 colonne che non facilita certo la programmazione. E mi fermo qua.

- Il linguaggio ST usato con Word e comparazioni al posto dei semplici contatti, forse oggi non fa differenza, ma un po di anni fa quando i PLC erano più lenti, te l'avrebbero bocciato come soluzione, perchè impiegava un sacco di tempo e rallentava i tempi di ciclo del programma.

Come forse oggi non fa differenza???? A parte che non capisco il discorso di word, comparazioni... ma il linguaggio strutturato ha una potenza 1000 volte superiore ed è un miliardo di volte più malleabile. Sarà un po' meno leggibile, meno chiaro all'occhio dell'inesperto?? Beh ma parliamo di inesperto!!! La velocità non è un problema di linguaggio e comunque oggi è un problema che tende a non essere più tale con le sempre nuove tecnologie.

E ad ogni modo conta tanto anche il modo di ragionare e quindi di programmare. Probabilmente ti è più congeniale il ladder, come lo è per me quando voglio avere la logica ben chiara e debuggabile rapidamente.

Però il mio suggerimento è più che lecito parlando di PL7 (non direi lo stesso con Step7) poichè ha un ladder molto limitato.

Ps toglimi una curiosità ma il codice che hai postato

%M0:=RE %I0.0;

IF %MW0>3 THEN %MW0:=0 END_IF;

IF %MW0=3 AND %M0 THEN %MW0:=4 END_IF;

IF %MW0=2 AND %M0 THEN %MW0:=3 END_IF;

IF %MW0=1 AND %M0 THEN %MW0:=2 END_IF;

IF %MW0=0 AND %M0 THEN %MW0:=1 END_IF;

%Q0.0:=%MW0:X0;

%Q0.1:=%MW0:X1;

fa tutto quello che savino mi ha scritto in ladder? perchè sembra che sia molto più corto.

Esattamente, ed anche molto di più semplicemente cambiando i numeri.

Visto che quello che vuoi fare tu è praticamente come contare in binario dove lo 0 è la lampada spenta e l'1 è la lampada accesa, ho optato per questa soluzione pulita semplice e malleabile.

Se avessi più lampade potresti fare tutti i giochi di luce che vuoi ad ogni nuova pressione del pulsante semplicemente cambiando il valore alla word %MW0

Guarda che tradurlo in ladder è proprio banale:

dove c'è una comparazione in ladder usi il blocco COMPARE

dove c'è un AND usi il contatto ---| |---

dove c'è un'assegnazione di un valore numerico usi il COMPUTE

dove c'è l'assagnazione digitale usi la bobina ----( )----

l'istruzione RE è il contatto ----|P|----

le parole IF THEN END_IF sono rappresentate dal flusso stesso del Ladder

Link al commento
Condividi su altri siti

stefanobruciato

Grazie rddiego oggi provo a trasformare in ladder per le motivazioni che già ti ho detto comunque proverò a capire meglio l'altro linguaggio. a dopo ciao...

Ps X savino ancora non ho avuto il tempo di testare la tua programmazione appena ho news ti faccio sapere e grazie ancora per il link del manuale andrà bene anche in inglese. ;)

Link al commento
Condividi su altri siti

E tra i tre PL7 è certamente l'ultimo dove solo disegnare un segmento verticale un impiccio e cancellarlo è peggio.

Se usi i tasti funzione e' velocissimo... poi puoi sempre usare il maouse x selezionare una zona, cancellarla o fare il copia/incolla...

Poi mi sembra che ogni segmento abbia un limite di 8 righe e solo 11 colonne che non facilita certo la programmazione.

Vero solo per i Micro, con i Premium hai 16 righe x 8 colonne.

Di RUNG puoi comunque farne quante te ne pare e sinceramente riampire tutta quell'area di codice non so quanto ne benefici in leggibilita'...

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