LUCAP86 Inserito: 24 aprile 2008 Segnala Share Inserito: 24 aprile 2008 Salve tutti;ho assolutamente bisogno di aiuto, io sto facendo un progetto con Vijeo Citect 7.0, e per problemi di licenza, devo andare a leggere un Bit all'interno di una doppia word proveniente da un PLC. Qualcuno di voi voi saprebbeindicarmi se all'interno del Cicode esiste una funzione che mi permette di "shiftare" la doppia parola per interrogarei vari Bit? Altrimenti come posso fare? Avete qualche altra via alternativa per risolvere questo problema?Aspetto con ansia qualche consiglio grazie mille a tutti.Luca Link al commento Condividi su altri siti More sharing options...
pescatori Inserita: 24 aprile 2008 Segnala Share Inserita: 24 aprile 2008 Prova a scrivere questa funzione:INT FUNCTION StatoBit(INT Word, INT Bit); INT res, mask; mask=Pow(2, Bit); IF ((Word BITAND mask)>0) THEN RETURN 1; ELSE RETURN 0; END END Link al commento Condividi su altri siti More sharing options...
LUCAP86 Inserita: 1 maggio 2008 Autore Segnala Share Inserita: 1 maggio 2008 Grazie Marco, le i bit sono riuscito a leggerli con la funzione "BITAND", non come descritta sulla tua funzione, ma facendo i confronti (es. 1,2,4,8,16.....), ho provato ed ho visto che mi funziona, adesso devo però vedere come fare per scrivere un singolo bit all'interno di una word tu hai qualche idea a tale proposito?grazie 1000. Link al commento Condividi su altri siti More sharing options...
pescatori Inserita: 5 maggio 2008 Segnala Share Inserita: 5 maggio 2008 Ciao, per scrivere un bit prova questa funzione:INT FUNCTION ScriviBit(INT Word, INT Bit, INT Val); INT res, mask; mask=Pow(2, Bit); IF (Val==1) THEN Word=(Word BITOR mask); RETURN 1; ELSE mask=(mask BITXOR 0xFFFF); Word=(Word BITAND mask); RETURN 0; END END Link al commento Condividi su altri siti More sharing options...
LUCAP86 Inserita: 6 maggio 2008 Autore Segnala Share Inserita: 6 maggio 2008 Molte grazie Marco sei stato davvero molto gentile, adesso la provo e poi ti faccio sapere ancora tante grazie.Luca Link al commento Condividi su altri siti More sharing options...
Toyu Inserita: 6 maggio 2008 Segnala Share Inserita: 6 maggio 2008 ciao ragazzi, anch'io ho lo steso problema però apro per le prime volte Citec.sono convinto che queste funzioni siano esatte perchè se dettate da voi.....ma dove le vado a scrivere , le devo ssalvare con qualche nome particolare ?dai , non picchiatemi anche se la cosa vi sembra elementare nb. ho la 6.1grazie , grazie , grazie 10000 !!! Link al commento Condividi su altri siti More sharing options...
pescatori Inserita: 6 maggio 2008 Segnala Share Inserita: 6 maggio 2008 Non prenderti male, qua si cerca solo di aiutarsi uno con l'altro in base alle proprie conoscenze ed esperienze maturate, ovvio che mica tutti sono super-esperti; anche io sono più le volte che chiedo consiglio piuttosto che quelle dove fornisco aiuto ad altri.Comunque per rispondere alla tua domanda:le funzioni che sono state postate sono scritte in Cicode; con Citect hai la possibilità di programmare funzioni e script con due diversi tipi di linguaggi, il Cicode appunto ed il CitectVBA che riprende come dice il nome il VBA. Di volta in volta si può usare quella che si ritiene migliore per lo scopo da raggiungere oppure che si padroneggia meglio.Se guardi nella struttura di un progetto di Citect, vedrai che ci sono due cartelle ripettivamente "Cicode Files" e "CitectVBA Files"; se selezioni ad esempio Cicode Files avrai una voce che dice "Create a new Cicode page"; se clicchi su essa ti si aprirà il Cicode editor dove avrai a disposizione un editor completo con cui scrivere le tue funzioni; ovviamente per imparare la sintassi, le istruzioni, le funzioni già disponibili e gli operatori dovrai studiarti un po' il linguaggio sui manuali on line. Comunque se dentro l'editor copi ad esempio una delle funzioni scritte qui e salvi puoi già usarle. In un file del Cicode puoi ovviamente scrivere più funzioni e queste sarranno comunque disponibili anche negli altri (come nei moduli in VBA di Excel).Lo stesso vale per il CitectVBA che ovviamente avrà regole di sintassi, operatori e funzioni diverse dal cicode.Visto che parti da zero con Citect ti consiglio di guardare per bene i manuali che sono veramente fatti bene e dettagliati, almeno per avere le basi da cui partire per sviluppare un progetto (intanto guarda anche i progetti inclusi con la installazione) e poi dopo aver acquisito le basi puoi cominciare a smanettare seriamente.Ciao. Link al commento Condividi su altri siti More sharing options...
Toyu Inserita: 6 maggio 2008 Segnala Share Inserita: 6 maggio 2008 grazie tanto sei stato veramente istantaneo.approposito di manuali dove posso recuperarli in italiano ?io non ne ho , ho solo il software spedito da Schneider e mi aiuto di tanto in tanto con l'.(anche se comprendo quasi nulla)mi sarebbe di vero aiuto un bel pdf .grazie ,grazie , grazie !! Link al commento Condividi su altri siti More sharing options...
pescatori Inserita: 6 maggio 2008 Segnala Share Inserita: 6 maggio 2008 Per quanto riguarda la documentazione mi spiace ma in italiano non esiste nulla. Non so se i manuali ci sono anche in pdf, prova a guardare sul sito della Schneider. Link al commento Condividi su altri siti More sharing options...
Toyu Inserita: 6 maggio 2008 Segnala Share Inserita: 6 maggio 2008 Ok Grazie Link al commento Condividi su altri siti More sharing options...
LUCAP86 Inserita: 7 maggio 2008 Autore Segnala Share Inserita: 7 maggio 2008 Eccomi qui ho testato un attimo la funzione tutto fila liscio e i bit vengono scritti,la funzione che sto utilizzando è quella scritta qui sotto, ho notato però che questa funzione, ogni volta che viene lanciata, mi sovrascrive i bit già scritti, ma non riesco a capire il motivo visto che utilizzo il BITOR i bit dovrebbero essere aggiunti non sovrascritti, è anche vero però che il valore della doppia parola viene scritto ogni volta secondo te Marco dov'è l'inghippo? FUNCTION ScriviBit(STRING DWord, INT valore, INT m);INT IntDWord, BitBit = Pow(2, m);IntDWord = TagRead(Dword);IF valore = 1 THEN IntDWord = IntDWord BITOR BitENDTagWrite(DWord, IntDWord);ENDGrazie milleLuca Link al commento Condividi su altri siti More sharing options...
pescatori Inserita: 7 maggio 2008 Segnala Share Inserita: 7 maggio 2008 Scusa ma cosa intendi dire con:ogni volta che viene lanciata, mi sovrascrive i bit già scrittiLa cosa importante è che venga modificato solo lo stato del bit che ti interessa, poi è ovvio che dichiarando le variabili come word o doubleword, a livello di comunicazione tra Citect e PLC avrai un aggiornamento di tutti i bit, ma se un bit è ad 1 ed al ciclo successivo di lettura/scrittura viene sempre rimesso a 1 non mi pare ci siano problemi. Link al commento Condividi su altri siti More sharing options...
LUCAP86 Inserita: 7 maggio 2008 Autore Segnala Share Inserita: 7 maggio 2008 No non intendo dire quello forse mi sono spiegato male io. Quando io scrivo 1 bit modifico lo stato del bit che mi interessa, e fin qui tutto va bene, il problema che io riscontro è che se ho già modificato un bit, e poi decido di modificarne un'altro differente all'interno della stessa doppiaword il bit che avevo scritto all'inizio non ha più lo stato a 1 , ma viene messo a zero per esempio:DWord: DB2.DBD20Decido di alzare il bit DB2.DBX20.0 che va ad 1 e continua a rimanere ad 1,nell'altro ciclo di scrittura alzo il DB2.DBX20.1, e mi aspetto che il DB2.DBX20.0 continui a rimanere sempre a 1, invece viene rimesso a 0 mentre il 20.1 viene alzato correttamente. Link al commento Condividi su altri siti More sharing options...
pescatori Inserita: 7 maggio 2008 Segnala Share Inserita: 7 maggio 2008 Magari è una stupidata, ma hai controllato l ordine di precedenza degli operatori?Prova a scrivere così:IntDWord=(IntDWord BITOR Bit); Link al commento Condividi su altri siti More sharing options...
LUCAP86 Inserita: 8 maggio 2008 Autore Segnala Share Inserita: 8 maggio 2008 No no non è una stupidata avevi proprio ragione mancavano le parentesi, va beh non ci sarei mai arrivato, grazie mille Marco. 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