Vai al contenuto
PLC Forum


Shift Register S7-300


serviceb

Messaggi consigliati

Buona Sera a tutti,

Faccio i complimenti per I Corso video Plc S7 con le varie lezioni.

Comunque sono alle prime armi nell'utilizzo di S7-300, non riesco a spostare un Bit da DX verso SX in linguaggio KOP,

Sebbene io esegui come descritto da manuale la funzione SCHL_W ho provato a leggere il manuale ma non capisco perchè in simulazione non riesca a vedere il bit che transla a Sx.

°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

M12.0

------E 1.0------------ P -----------------------------(M6.0)

°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

MOVE

-------------------- EN EN0 ---------

1 IN OUT MW1

°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

M3

------M 12.1---------- P ------------ EN SCH_W EN0 ----------

MW5------ IN OUT ----MW5

MW1------ N

Ho provato anche questo esempio e se provo a simularlo non vedo che questo bit si sposta in MW5.

La visualizazione in simulazione dell' MW5 è in binario.

Qualcuno cortesemente può spiegarmi cosa forse non capisco nello spostamento dei Bit.

O forse mi mancano dei principi fondamentali.....

Grazie

Link al commento
Condividi su altri siti


Scusatemi Volete dirmi che.......

Io devo scrivere 12.1, qualcuno puo' spiegarmi ?

Quello che mi serve e capire come fare lo shift

E' sicuro che quello che ho scritto non funziona, ho provato con la simulazione,

Volevo appunto qualche suggerimento.

Questo solo per capire come funzionano, dal corso se non ho capito male MW =16 Bit, ed 1 Byte sono 8 Bit.

Io devo traslare il Bit a Sx es. attivo un ingresso E0.0 fronte P 00000000 00000001

con un ulteriore ingresso sposto il bit E3.0 fronte P 00000000 00000010

Se attivo E3.0 front P senza E 0.0 fronte P avrò 00000000 00000100

e via dicendo...

Questo è quello che dovrei fare, spero di avermi spiegato in modo corretto.

Grazie Ancora

Link al commento
Condividi su altri siti

Ciao

Vuol dire che al posto di m6.0 devi scrivere m12.1 e che il blocco che devi usare è SHL_W(non SCH_W che non esiste).

Poi .... se MW5 vale 0 ... non vedrai nessun bit scorrere perchè nessun bit vale 1.

Devi inizializzare la variabile MW5 a 1 se vuoi veder scorrere il bit verso sinistra

Link al commento
Condividi su altri siti

Come posso inizializzare la variabile MW5, per caso devo scrivere B#16#1 anziche MW1 nel Blocco SHL_W

Comunque mi servono due ingressi, uno è E0.0 per caricare il Bit a 1 oppure 0 ed un ulteriore ingresso per traslare il bit a Sx che non so dove và messo.

Oppure mi sbaglio.....

Mi fareste un esempio per cortesia, non riesco venirne a capo, Con S7-200 era una banalità eseguirlo in Kop.

Probabilmente non si può............Oppure non è molto semplice e bisogna prima capire i puntatori e poi imparare Awl.

Non posso utilizare questa funzione; FC92 SHRB, che già esiste in S7-300 perchè devo creare 4 shift con almeno 8 Bit non di più.

è 4 giorni che sto leggendo diversi manuali ma non riesco a capire.....

Se esista o meno questa funzione, oppure bisogna crearla a Doc.

Grazie nuovamente

Grazie

Link al commento
Condividi su altri siti

Sono nuovo del forum quindi non so ancora come postare correttamente il codice, pertanto, ti posto il codice di 2 segmenti in AWL che puoi tranquillamente convertire in KOP

SEGMENTO 1
      U     E      0.0
      =     L     36.0
      U     L     36.0
      SPBNB _001
      L     1
      T     MW     5
_001: NOP   0
      U     L     36.0
      SPBNB _002
      L     1
      T     MW     1
_002: NOP   0


SEGMENTO 2
      U     E      0.1
      FP    M     12.0
      SPBNB _003
      L     MW     1
      L     MW     5
      SLW   
      T     MW     5
_003: NOP   0

Non farti ingannare da quello che leggi in AWL .... convertilo in KOP e ti accorgerai che è più semplice di quello che sembra

Link al commento
Condividi su altri siti

Grazie, Lo provo.

Poi .....se puoi e se vuoi me lo puoi spiegare?

Sarebbe meglio, così mi rimane in testa e capisco i puntatori cosa fanno.

Un po come a scuola (Io al momento ho solo copiato), ma vorrei capire il concetto da uno che ha fatto il programma.

Grazie Ancora

Link al commento
Condividi su altri siti

Ciao.

Capisco le tue difficoltà ma c'è davvero poco da spiegare.

Nel caso specifico non c'è uso dei puntatori.

L'ingresso E0.0 inizializza la variabile MW5 in modo da impostare a 1 il primo bit sulla destra e la variabile MW1 per indicare allo shift di spostare il bit a sinistra di 1.

Il fronte positivo dell'ingresso E0.1 esegue il vero e proprio shift del bit a sinistra.

Ciao

Link al commento
Condividi su altri siti

Ciao,

Ho notato che ora il bit trasla correttamente se a 1 esempio di due posizioni :MW5 00000000 00000100

Nel caso io attivi il bit E 0.0 cioè MW5 00000000 00000001

Mi si resetta a zero tutti i bit in coda e mi riparte con il primo bit di Dx a 1 come mai ?

Io dovrei avere questa condizione: MW5 00000000 00001001

Invece non è cosi.. Sbagli qualche attivazione?

Grazie per la tua risposta,

Link al commento
Condividi su altri siti

Invece non è cosi.. Sbagli qualche attivazione?

Il mio era solo un esempio ..... l'adattamento del caso avresti dovuto provare a farlo tu.

Comunque non cambia molto ... modifica il segmento 1 con il seguente:

SEGMENTO 1 
      U     E      0.0
      FP    M     12.1
      =     L     36.0
      U     L     36.0
      SPBNB _001
      L     MW     5
      L     1
      +I    
      T     MW     5
_001: NOP   0
      U     L     36.0
      SPBNB _002
      L     1
      T     MW     1
_002: NOP   0

Ciao

Link al commento
Condividi su altri siti

Scusami se forse scrivo delle cavolate ma vediamo Se ho capito:

Il fronte E0.0 con M12.1P alza o abbassa il primo bit alla MW5 (viene sommato uno e ricaricato nella MW5), mentre in MW1 viene caricato 1 oppure 0

E0.0 con M12.1P alza o abbassa il bit

ADD_I Somma numeri interi a 16 bit MW5

MOVE Assegna valore a MW1

Quando arriva E0.1 con il fronte di salita M12.0P viene eseguito uno shift, acquisendo MW1 con MW5 il risultato è che MW5 acquisisce il bit vecchio ed in più quello nuovo spostato di uno.

Domanda:

Il fronte M12.1 per primo e M12.0 e stato inserito per una ragione particolare, oppure potevo scrivere anche una memoria differente?

Grazie

Modificato: da serviceb
Link al commento
Condividi su altri siti

Il fronte E0.0 con M12.1P alza o abbassa il primo bit alla MW5 (viene sommato uno e ricaricato nella MW5)

Si è cosi ma non è quello che volevo fare ... quindi, più corretto sarebbe:

      U     E      0.0
      FP    M     12.1
      =     L     36.0
      U     L     36.0
      BLD   102
      S     M      6.0
      U     L     36.0
      SPBNB _001
      L     1
      T     MW     1
_001: NOP   0

mentre in MW1 viene caricato 1 oppure 0

No ... viene caricato solo 1 e sta indicare che voglio spostare il bit a sinistra di 1 posizione ..... se carico 2 vuol dire sposterò il bit di 2 posizioni

visualizzando MW1 con MW5 il risultato è che MW5 acquisisce il bit vecchio ed in più quello nuovo spostato di uno.

questa non l'ho capita

Il fronte M12.0 e M12.1 e stato preso per una ragione particolare, oppure potevo scrivere anche una memoria differente.

Li ho presi a caso seguendo più o meno gli indirizzi che avevi usato tu nel codice che hai postato.

Mentre il merker M6.0 è voluto in quanto serve ad alzare il primo bit a sinistra della MW5.

Ciao

Link al commento
Condividi su altri siti

acquisendo MW1 con MW5 il risultato è che MW5 acquisisce il bit vecchio ed in più quello nuovo spostato di uno

Premetto che ho letto solo frettolosamente i vari post, e nemmeno tutti.

Ma mi pare che il problema sia tutto qui.

Come è usata nell'esempio, MW1 serve solo per stabilire di quanti bit debba essere lo shift.

Caricare 1 in MW1 significa quindi solo dire che si vuole fare lo shift di un bit.

Non c'entra proprio nulla con "l'acquisizione di MW5".

MW5 va inizializzata con istruzioni fuori da "SHL_W".

Se prima non metti a 1 almeno un bit di MW5, l'istruzione SHL_W (con MW1 = 1) effettuerà comunque lo shift di un bit. Ma non te ne accorgi, perché fai scorrere tutti zeri.

Quindi, le istruzioni che ora usi per caricare 1 in MW1 le dovresti usare per mettere a 1 il bit più a destra di MW5, ovveroM6.0 (come nell'esempio nel post #14 di "Runtime"), e nel box SHL_W al posto di MW1 puoi semplicemente scrivere "1".

Per capire come funziona l'istruzione SHL_W basta selezionare il box col mouse e premere il tasto F1.

Concludo con un consiglio.

Usare MW1 e MW5 non è un errore ma, di solito, si preferisce usare word e dword con indirizzi pari (MW0, MW2, MW4...).

Link al commento
Condividi su altri siti

Concludo con un consiglio.

Usare MW1 e MW5 non è un errore ma, di solito, si preferisce usare word e dword con indirizzi pari (MW0, MW2, MW4...).

Pienamente daccordo .... mi sono trovato ad usare gli indirizzi usati nel primo post ed ho continuato ad usare quelli.

Link al commento
Condividi su altri siti

scusatè sè posso ne aprofitto per fare una domandà,sono alle prime armi anché io come ormai sapete,ma in precisione ,a cosa serve spostare un bit?

dove viene usato generalmentè?

Scusatè ancora tanto sè ne aprofitto , cìao

Link al commento
Condividi su altri siti

Elencare tutti i casi non basta lo spazio bi un messaggio.

Ti faccio solo un paio di esempi.

Se sposti a sx di un passo equivale a dividere per 2, così se sposta a dx di un passo moltiplichi per 2.

Link al commento
Condividi su altri siti

Il mio esempio è il seguente:

Ho un disco che ruota con 5 alloggiamenti eseguiti da una Cam a 5 posizioni, in un punto carico dei pezzi (A caso), in un punto rilevo la misura (Alto, Basso, Corretto) e poi nei successivi 3 punti ho 3 botole di scarico (Alto, Basso, Coretto), il problema è che avendo il disco che ruota in questi 5 alloggiamenti devo ricordami se il pezzo da scaricare è nella posizione corretta.

Per questo motivo carico il bit di una misura es.Alto in un MW nella posizione di lettura, mentre le altre due MW (Basso e Corretto) le lascio a zero, tutte e tre le MW le faccio scorrere a SX con un Ingresso il quale legge la Cam a questo punto ad un determinato Bit delle mie tre MW associo le uscita delle 3 valvole dei pezzi Alti, Bassi, Coretti, logicamente spostate di uno.

Essendo anch'io alle prime armi spero che questo sia uno dei modi corretti o per lo meno io ho ragionato così.

Ciao

Modificato: da serviceb
Link al commento
Condividi su altri siti

Scusate, Effettivamente le valvole Utili sono Due, in quanto l'ultima posizione è sempre aperta perciò bastano due MW

Il mio è un esempio teorico perché è quello che sto facendo per iniziare a imparare qualcosa, probabilmente sto sbagliando approccio.Il problema non è studiare i manuali, io li studio anche.

Il problema e associare quella funzione in un esempio pratico, sarebbe una bella cosa spiegare con dei video non solo i codici, ma come preparare un progetto partendo da ragionamenti semplici.

Ho visto e seguito il vostro bellissimo corso che dà le basi di teoria, ma poi il problema è che ti raffronti con la pratica e qui diventa la parte difficile, scegliere un metodo di approccio oppure un altro.

Il punto è che dovrei sapere tutti i codici a memoria e qui l'unico sistema è applicare un esempio più complesso alla funzione usata.

Forse questi sarebbero dei corsi video interessanti per intuire le funzioni.

Grazie Datemi anche delle dritte se possibile, (forse devo studiare di più....)

Ciao

Modificato: da serviceb
Link al commento
Condividi su altri siti

un grazie a livio orsini e a serviceb ,ho capito qualcosa, chiaramente appena ho un po di tempo provo fare qualche esercizo,simulando una situazione come serviceb,grazie mille ciaoo ragazzi

Link al commento
Condividi su altri siti

Il problema e associare quella funzione in un esempio pratico, sarebbe una bella cosa spiegare con dei video non solo i codici, ma come preparare un progetto partendo da ragionamenti semplici.

Se per diventare un buon programmatore di PLC fosse sufficiente conoscere a fondo le singole funzioni, basterebbero pochi mesi.

La difficoltà vera sta proprio nel maturare un certo modo di ragionare per mettere insieme le funzioni. Aggiungi poi il necessario bagaglio di esperienze che ti permettono di trovare la soluzione idonea da applicare per ogni singolo caso, l'indispensabile conoscenza di trasduttori, sonde, motori, inverter ed apparecchiature varie, dell'hardware del PLC che stai usando, ed ecco che si capisce perché per diventare buoni programmatori di PLC servano anni.

Peccato poi che i clienti vedano solo quello che lavora per 2 euro all'ora di meno :(

Se sposti a sx di un passo equivale a dividere per 2, così se sposta a dx di un passo moltiplichi per 2.

Vedere che anche i migliori sbagliano, mi consola un po' per quando a sbagliare sono io ;)

Link al commento
Condividi su altri siti

Vedere che anche i migliori sbagliano, mi consola un po' per quando a sbagliare sono io

Batta sono in vacanza al mare e la mia proverbiale distrazione aumenta, se poi ci agiungi anche il passare delle stagioni......

Però potevi anche correggere risparmiandomi la fatica. :smile: Comunque grazie per avermi inserito nel novero dei migliori. :smile:

"Se sposti a sx di un passo equivale a dividere per 2, così se sposta a dx di un passo moltiplichi per 2." in reltà è:

Se sposti a dx di un passo equivale a dividere per 2, così se sposta a sx di un passo moltiplichi per 2.

Peccato poi che i clienti vedano solo quello che lavora per 2 euro all'ora di meno

Purtroppo è diventato un male comune in quasi tutto il mondo, anche se da noi è ancora più radicato. Oramai sembra che l'unico metro di giudizio siano i soldi: se fai un euro meno del concorrente ti aggiuduchi il lavoro. Non importa la qualità finale.

Più di 10 anni fa l'ufficio acquisti dell'azienda dove lavoravo fece fare i canonici 3 preventivi per l'impianto elettrico dei nuovi uffici. 2 erano simili, il terzo costava la metà. Ovviamente l'ufficio acquisti sponsorizzava quello a costo infimo. Quello che mi stupì fu il consenso del direttore di stabilimento.

Fatto l'impianto si scoprirono tutte le magagne. Materiali scadenti, lavori tirati via alla meno peggio e, ciliegina finale, mancavono tutti i circa cento tubi fluorescenti. Motivazione: nell'offerta c'era scritto punti luce e plafoniere, quindi lampade escluse.

Il problema e associare quella funzione in un esempio pratico...

Nella sezione didattica trovi numerosi corsi sullo step7, corredati da esempi ed esercizi.

Poi ci sono anche i video corsi dell'ottimo Gian Mario Pedrani.

Nella sezione esempi di programmazione ci sono anche alcune funzioni più o meno complesse commentate.

Ragazzi perchè non sfruttate a fondo le risorse del forum?

Sono completamente gratuite, grazie al contributo degli appassionati e altruisti collaboratori. Serve solo un po di pazienza ed un poco di iniziativa. ;)

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