maxntt Inserito: 4 giugno 2010 Segnala Share Inserito: 4 giugno 2010 Avrei bisogno di una cortesia da parte di qualcuno che sappia (ancora) programmare in AWL.Il mio problema è il seguente: in funzione dello stato di un ingresso digitale devo copiare (o meglio, trasferire) un DB (nello specifico il DB181 se l'ingresso è a 0 o il DB182 se l'ingresso è a 1) sul DB180. Le strutture dei DB sono identiche, cambiano ovviamente i valori che contengono (tempi, misure...). Non so se la cosa è fattibile in modo semplice (con altri PLC è immediato ma con Siemens...!!). Tenete presente che a parte semplici routine di logica non ho mai fatto nulla con S5.Grazie!! Link al commento Condividi su altri siti More sharing options...
cagliostro Inserita: 4 giugno 2010 Segnala Share Inserita: 4 giugno 2010 Salve,la cosa non dovrebbe essere difficoltosa da realizzare, per esempio potresti a seconda dello stato del tuo ingresso, richiamare una o l'altra FB, che caricano uno dei due set di dati verso il DB180.Oppure su di un'unica DB a seconda dello stato dell'ingresso, utilizzare le istruzione di salto condizionato (SPB) ad una label per caricare anche in questo caso il set di dati preposto verso il DB180.Ora non avendo STEP5 installato nel mio PC non posso affermare con sicurezza quello che sto per dirti, ma penso che non potendo lavorare con un'indirizzamento di tipo indiretto, e non potendo disporre di biblioteche con funzioni tipo la classica SFC20 di S7; credo che dovrai utilizzare tutta una serie di MOVE che in AWL sono es.:L DW xT DW ySe i DB in questione non contengono un numero eccessivo di dati, puoi considerare di fare quanto detto pocanzi.Se i dati nel DB iniziano ad essere molti, francamente al momento non avrei altra soluzione più "snella" da suggerirti. Link al commento Condividi su altri siti More sharing options...
cagliostro Inserita: 4 giugno 2010 Segnala Share Inserita: 4 giugno 2010 (modificato) Ripensando a quanto scritto nel precedente post, in parte si può lavorare con indirizzamenti di tipo indiretto ed usare anche un'istruzione la TNB che effettua il trasferimento di un pacchetto massimo di 255byte specificando l'indirizzo finale della sorgente e l'indirizzo finale della destinazione.Tuttavia queste ed altre istruzioni diciamo più "sofisticate", sono possibili solo a partire dalla CPU103 per la serie S5-100, mi sembra invece che per la serie 115 non ci siano problemi di sorta. Ora non so quale sia il tipo di CPU sulla quale devi apportare le modifiche al programma. Modificato: 4 giugno 2010 da cagliostro Link al commento Condividi su altri siti More sharing options...
svsoftware Inserita: 5 giugno 2010 Segnala Share Inserita: 5 giugno 2010 Ciao, io ho programmato S5 anni fa solo in AWL, NON sono molto frescoperò posso dirti che ho delle funzioni che fanno la copia esatta dei DB, in ogni caso è fatta con l'istruzione LOOP sfuttandola possibilita di aprire due db in contemporanea e trasferire le variabili Potresti forse trovare anche qualcosa scritta in STEP 7 che potresti tranquillamente convertirla in S5 chiaramente la struttura STEP 7 deve provenire da una precedente conversione da S5. (quindi senza usare i puntatori S7)Io ( essendo poco pratico di PLCforum ) non so se si possono mettere degli esempi o scrivere delle righe di programmanel caso si possa fare se non hai risolto posso provare (se possibile) a fare una ricerca rapidavisto che anche io sono alle prese con test su CPU S5.SALUTI Link al commento Condividi su altri siti More sharing options...
maxntt Inserita: 10 giugno 2010 Autore Segnala Share Inserita: 10 giugno 2010 Grazie per l'aiuto...Il sistema in questione è della serie 155 con CPU 947.La mole di dati scritta sul DB è abbastanza ampia (ho ricordo di almeno 80 valori di formati misti).Ciò che mi avete suggerito è giusto solo che, ahimè non so come fare...Vorrei scrivere qualche riga per fare la seguente funzione:Se M129.0 è = a 1 allora trasferisci tutto il contenuto di DB181 sul DB180Se M129.1 è = a 1 allora trasferisci tutto il contenuto di DB182 sul DB180...va bene anche fatto costruendo uno o due FB ma...come? Link al commento Condividi su altri siti More sharing options...
cagliostro Inserita: 11 giugno 2010 Segnala Share Inserita: 11 giugno 2010 (modificato) Salve,premessa:Non ho installato S5 nel mio PC per cui il codice che ti posto non è stato testato, quindi potrebbe essere necessario procedere al solito debug.Tuttavia vale la pena provarlo.1) Prima cosa l'esempio postato è stato fatto per DB181 che copia verso DB180.2) Poi per la DB182 duplichi la funzione in un'altra FBxx ci cambi il nome e l'indirizzo del DB sorgente.3) Importante: Il richiamo della funzione FB avviene attraverso M129.0, ma utilizzando però un oneshotCrea una FBxx che chiamerai per esempio DBMOVE1, all'interno della FB copi questo codice::L KF 80 //questo dato contiene la lunghezza del tuo data block che hai specificato essere di circa 80 Word , poi inserisic tu il dato preciso:T MW140 //questo è l'indice del loop, ho usato la MW 140 vedi tu eventualmente se usare la stessa o cambiare indirizzoCYCL :A DB181 //abilita il blocco dati sorgente:B MW140:L DW0 //carica il valore della la prima word del DB181:A DB180 //abilita il blocco dati di destinazione:B MW140:T DW0 //trasferisce il valore di DW0 del DB181 versao la DW0 del DB180:L MW140 //carica il valore dell'indice del loop:Dxx//e lo decrementa di 1 Nota: Metti solamente D e togli xx, le ho messe altrimenti compariva lo smile:T MW140 //indice del vlaore dell contatore di loop -1: SPN =CYCL //salta alla label CYCL se MW140 non ha raggiunto il valore 0:BEIn questo modo viene fatta una copia del DB 181 partendo dalla DW80 per arrivare alla DW0 verso la DB180.Ti ripeto è una cosa improvvisata e non testataEventualmente Io ( essendo poco pratico di PLCforum ) non so se si possono mettere degli esempi o scrivere delle righe di programmanel caso si possa fare se non hai risolto posso provare (se possibile) a fare una ricerca rapidacontatta svsoftwareperò posso dirti che ho delle funzioni che fanno la copia esatta dei DB, Modificato: 11 giugno 2010 da cagliostro Link al commento Condividi su altri siti More sharing options...
cagliostro Inserita: 11 giugno 2010 Segnala Share Inserita: 11 giugno 2010 (modificato) Correggo un'errore nel codice postato in precedenzaDxx//e lo decrementa di 1 Nota: Metti solamente D e togli xx, le ho messe altrimenti compariva lo smilediventaD 1//mi ero dimenticato di inserire la quantità da decrementare.Inoltre mi ero scordato di commentare l'istruzione B, in pratica l'operazione seguente viene combinata con il parametro indicato nella parola MW e poi eseguita, in pratica si tratta di un OR che alla fine riporta l'indice della variabile MW140 sulla DW0 cambiandone l'indirizzo.Quindi si parte a scrivere da DW80 a scendere fino alla 0. Modificato: 11 giugno 2010 da cagliostro Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora