Berlus Inserito: 25 gennaio 2008 Segnala Share Inserito: 25 gennaio 2008 Ciao a tutti,sto iniziando a programmare in ambiente RSLogix 5000, uso il testo strutturato. Mi sono trovato a dover scrivere un'espressione del tipo:IF sourceA = sourceB THEN ...dove sourceA e sourceB sono due BOOL. Il compilatore non mi lascia scrivere questa espressione, in pratica non gli piace il paragone tra due booleani fatto così.Ma ora dico io, come faccio a paragonare il valore di due bit?Se invece gli scrivoIF NOT (sourceA XOR sourceB) THEN ...gli va bene. E' chiaro che le due espressioni hanno lo stesso risultato logico, ma non vorrei usare il secondo metodo per ottenere il paragone tra due bit...Spero di star sbagliando qualcosa io, che mi dite? Link al commento Condividi su altri siti More sharing options...
Beatrice_Ru Inserita: 26 gennaio 2008 Segnala Share Inserita: 26 gennaio 2008 Non hai altra possibilita' almemo mi sembra che operazione " = " in ST sia uguale a quella in Ladder "EQU" infatti queste 2 funzioni esigono operatori come SINT,INT,DINT,REAL, etcnon e' percio' possibile con 2 operatori Boolean.Potresti eseguire il Casting su 2 operatori SINT e trascrivere in essi il valore True or False sul Bit0 in questo modo :definisco 2 nuovi Tags OP_A, OP_B : [sINT] definisco 2 tags sourceA,sourceB : [bOOL]Poi eseguo un casting OP_A.0 := sourceA ; OP_B.0 := sourceBin pratica diventa cosi' : OP_A :=0;OP_B :=0; OP_A.0 := sourceA ; OP_B.0 := sourceB if OP_A = OP_B then Result := 1: else Result:=0: end_if:Ma il tuo metodo di eseguire una EXOR e' certamente corretto. .oppure potresti farti una tua nuova istruzione ADD-ON e la chiami ad esempio "equal" li passi i 2 parametri di input , e tifai restituire il risultato su "EnableOut"ecco un esempio veloce.ADD-ON Instruction Nome = ' Equal'Parameters:Name Usage Type Default Style Req Visible Description EnableIn Input BOOL 1 Decimal 0 0 Enable Input - System Defined Parameter EnableOut Output BOOL 0 Decimal 0 0 Enable Output - System Defined Parameter A Input BOOL 0 Decimal 1 1 Operand A B Input BOOL 0 Decimal 1 1 Operand B C Input BOOL 0 Decimal 1 1 Operand C Result Output BOOL 0 Decimal 0 1 Result Local:Name Type Default Style OP_A DINT 0 Decimal OP_B DINT 0 Decimal OP_C DINT 0 Decimal Logic: OP_A:=0;OP_B:=0;OP_C:=0; OP_A.0:= A; OP_B.0:= B; OP_C.0:= C; if (OP_A=OP_ and (OP_B=OP_C) then Result:=1; else Result:=0; End_If; EnableOut:=Result; Esempio uso in Lader: << Equal Test A B C OTE Goal >> Esempio uso in ST: << Equal(Ck3,A,B,C); if Ck3.Result then Hello:=1; else Hello:=0; end_If;>> Link al commento Condividi su altri siti More sharing options...
Berlus Inserita: 28 gennaio 2008 Autore Segnala Share Inserita: 28 gennaio 2008 Grazie mille della risposta esaustiva. Provengo da altri ambienti, ed è la prima volta che mi capita un ambiente che non supporti questo tipo di istruzione.Sempre su questo argomento, ho notato che il sistema non prevede le classiche istruzioni di castingINT_TO_BOOLWORD_TO_INTe chi più ne ha più ne metta. In pratica te le devi creare sottoforma di Add-On Instructions, il che non mi piace molto in quanto sono istruzioni basilari e necessarie. Va bè, mi adatto e inizierò a scriverle mano a mano che mi serviranno.Quando avrò nuovi dubbi o domande mi rifarò sentire, grazie ancora! Link al commento Condividi su altri siti More sharing options...
Henon Inserita: 28 gennaio 2008 Segnala Share Inserita: 28 gennaio 2008 (modificato) WORD_TO_INT move Tag[word] to tag[iNT]integer e word ci sono poche differenze.puoi leggere i singoli Bits di un Integer, e di una Wordil Casting avviene quali sempre verso l' elemento di destinazione, in automatico.Perciò non devi usare nessuna funzione particolare di Casting (Tipo INT_TO_BOOL e WORD_TO_INT)Il caso che tu hai esposto in precedenza è un caso eccezionale, non ti devi preocupare di castomizzare i tuoi dati.Unica volta che bisogna prestare attenzione e nel passare dei Real verso un INT o DINT (devi solo limitare il Casting)puoi eseguire un casting anche da 2 INT il un REAL, oppure 4 SINT in un REAL, e viceversa, con istruzione COP o CPS.i singoli bits di una Tag di tipo INT,DINT può essere estrapolati in questa maniera Joel[int] estrapolo il bit 7 così Joel.7puoi estrapolare porzioni di Word e DWORD con le funzioni BTD o con MVM, SWPB, puoi estrapolare dati da più word o Dword con FAL, FSC, COP, FLLnel linguaggio ST non devi castomizzare ogni dato, come avviene per SCL in Siemens, oppure in altri linguaggi tipo Pascal o Delphi. Modificato: 28 gennaio 2008 da Henon 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