Rolando2007 Inserito: 1 gennaio 2008 Segnala Inserito: 1 gennaio 2008 Salve,prima di tutto, Buon anno a tutti.Non riesco a capire come fare a impostare un bit in una variabile, mi spigo meglio:S7-200 e Microwin 4.0 programmazione KOP.Ho una variabile VD1 ( Double Word ) la quale, se non sbaglio, in binario contiene 32 bit.Dovrei interfacciare gli 8 ingressi della mia CPU 221 sui primi 8 bit di questa variabile.Ingressi da Q0.0 a Q0.7Non riesco a capire quale e' la funzione da utilizzare.Grazie mille a tutti.
Livio Orsini Inserita: 2 gennaio 2008 Segnala Inserita: 2 gennaio 2008 C'una via un poco contorta. Acquisisci gli stati I0.0 - I0.7 (credo che Q0.0 - Q0.0 sia un refuso) in una variabile Byte, poi converti il Byte in intero, con l'apposita istruzione e riconverti, sempre tramite l'istruzione apposita, l'intero in doppio intero. A questo punto fai or dell due variabili previo azzeramento dei primi 8 bit della variabile di partenza.L'altra via, più semplice, è quella di assegnare una variabile byte al medesimo indirizzo del byte basso della variabile Doppio Intero. Però devi fare molta attenzione agli indirizzi
Rolando2007 Inserita: 2 gennaio 2008 Autore Segnala Inserita: 2 gennaio 2008 In effetti ho fatto un po' di confusione gli ingressi sono I, per fortuna e' stata solo una svista.Credo di aver risolto in parte.Ipotiziamo di creare una VD0 formato binario, quest'ultima occupa 4 byte, che posso ritrovare utilizzando da V0.0 a V3.7.In questo modo posso settare a piacimento il singolo bit e vederli anche tramite la VD0.Tutto questo mi serve per realizzare un sistema personale di domotica, utilizzando un sistema di supervisione il quale limita, nella versione base ( non posso spendere 1000 euro per la supervisione del mio impianto di domotica ) a poche decine di variabili.In questa maniera con ogni Doubleword posso supervisionare fino a 32 I/O.Gia' che ci siamo, si puo' fare qualcosa anche con i valori analogici?Devo monitorare alcune sonde PT100 e la risoluzione potrebbe essere tranquillamente in gradi senza decimali.Ciao e grazie
JumpMan Inserita: 2 gennaio 2008 Segnala Inserita: 2 gennaio 2008 (modificato) La via più semplice è quella di utilizzare l'istruzione MOV_B con ingresso IB0 e uscita VB0.Non ho capito bene se Livio con questa fraseL'altra via, più semplice, è quella di assegnare una variabile byte al medesimo indirizzo del byte basso della variabile Doppio Intero. Però devi fare molta attenzione agli indirizzi intendeva la stessa cosa...Comunque per risparmiare potresti fare a meno del programma di supervisione usando la modalità freeport, solo che io non l'ho mai provata e non ti posso dare molti consigli in merito. Modificato: 2 gennaio 2008 da JumpMan
kamikaze Inserita: 3 gennaio 2008 Segnala Inserita: 3 gennaio 2008 Gia' che ci siamo, si puo' fare qualcosa anche con i valori analogici?Si' , considerando solo che il valore analogico in ingresso puo' essere interrogato solo come parola, cioe' word.Esempio:LD SM0.0MOVW AIW10, MW10 //trasferisce valore analogico in una merker wordOppure:LD SM0.0MOVW AIW10, VW10 //trasferisce il valore analogico in una V worde la risoluzione potrebbe essere tranquillamente in gradi senza decimali.Diciamo che il modulo analogico fornisce un valore compreso tra +0 e +32000 , nella AIW che corrisponde al minimo ed al massimo valore misurato sul canale analogico, non fornisce un dato di temperatura diretto , devi tu tramite una linearizzazione convertirlo secondo le tue esigenze.Esistono vari modi, tramite la funzione SCALE : S_ITR (Scale Integer to Real) , include elaborazione in annotazione REALEsempio , supponiamo che nel modulo EM231 (che tra l'altro non ho mai usato), il valore di 0.0 gradi corrisponda a 0 e 100.0 gradi corrisponda a 20000.Scrivi:LD SM0.0CALL S_ITR, AIW10, 20000, 0, 100.0, 0.0, VD100Dove leggi il valore analogico in AIW10, fissi i valori di ingresso massimo 20000 e minimo 0 , ed i valori di uscita 100.0 e 0.0 , e la destinazione VD100 (dopia paroloa prche' in annotazione reale).Se invece restiamo nel campo del fai da te' , una semplice linearizzazione potrebbe essere, supponendo che all'ingresso analogico la il valore zero della word corrisponda a zero gradi ed il valore massimo 32000 corrisponda a 150 gradi:Scirvi:LD M0.0 //Always ONITD AIW10, VD100 //Converti valore intero della AIW in doppio intero destinazione VD100DTR VD100,DV100 //Converti valore INT in REAL/R 32000.0, VD100 //Dividi il contenuto di VD100 per 32000 e ritrasferisci in VD100*R 150.0, VD100 // Moltiplica il contenuto di DV100 per 150 (fondoscala) e ritrasferisci in VD100.Il risultato del calcolo si trovera' in VD100 a partire da VW100, sempre in formato REAL.CiaoIvan
Livio Orsini Inserita: 3 gennaio 2008 Segnala Inserita: 3 gennaio 2008 Non ho capito bene se Livio con questa frase..Si è la medesima cosa; l'indirizzo di VB è il medesimo dell'indirizzo del byte basso di VD, questa tecnica è conosciuta come "overlapping". Bisogna solo stare molto attenti nell'assegnazione delle memorie per evitare confusioni
Rolando2007 Inserita: 3 gennaio 2008 Autore Segnala Inserita: 3 gennaio 2008 E' vero, che stupido, con soli 4 comandi posso avere il controllo di 16 DI e 16 DO in una sola Doubleword.MOV_B da IB0 a VB0MOV_B da IB1 a VB1MOV_B da VB2 a QB0MOV_B da VB3 a QB1Il tutto supervisionabile da VD0 ripsettivamente Ingressi da V0.0 a V1.7, Uscite da V2.0 a V3.7E' corretto o sto' facendo nuovamente confusione?
kamikaze Inserita: 4 gennaio 2008 Segnala Inserita: 4 gennaio 2008 No e' giusto, puoi anche ridurre il tutto a 2 comandi cioe':MOV_W IW0 , VW0 // muove il contenuto della word ingressi 0 + 1 nella V Word 0+1 MOV_W VW2 , QW0 // muove il contenuto della V word 2+3 nella word di uscita 0+1Ma se proprio ti servono i byte per motivi che non ho inteso , lascia come hai fatto tu.CiaoIvan
Rolando2007 Inserita: 4 gennaio 2008 Autore Segnala Inserita: 4 gennaio 2008 Hai ragiona ancora tu....... non c'e necessita' di utilizzare i Byte, posso spostare l'intera word e risparmio due comandi.Sono all'inizio e vedo ancora il PLC all'esterno, non sono ancora completamente dentro con la mente.Hai presente MATRIX? Prima o poi vedro' soltanto 101100001111111110110....
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