starktony Inserito: 19 maggio 2013 Segnala Share Inserito: 19 maggio 2013 Buongiorno a tutti, studiando la guida step 7 mi sono imbattuto nel comando UC <identificazione del blocco di codice> (Richiamo incondizionato di un blocco), ma non riesco a capire come funziona. Dovrebbe essere l'equivalente di CALL ma senza parametri Se richiamo una FC parametrizzata con magari un parametro in ingresso e uno in uscita come faccio ad essegnare l' ingresso? Ho provato a richiamare tramite UC l' SFC 20 BLKMOV ma non me lo permette. Qualcuno puà darmi una mano? Grazie in anticipo Link al commento Condividi su altri siti More sharing options...
batta Inserita: 19 maggio 2013 Segnala Share Inserita: 19 maggio 2013 Dovrebbe essere l'equivalente di CALL ma senza parametri Ti sei già dato la risposta. Ovviamente, puoi usare l'istruzione UC al posto di CALL solo per richiamare FC che non richiedono parametri. Se ci sono parametri, devi uasre per forza l'istruzione CALL. Link al commento Condividi su altri siti More sharing options...
starktony Inserita: 20 maggio 2013 Autore Segnala Share Inserita: 20 maggio 2013 (modificato) Cercando ho trovato questo esempio: UC "BLKMOV" P#L 8.0 P#L 36.0 P#L 18.0 sembra che usa i dati locali per i parametri necessari all'sfc 20. Ma l'sfc in questione richiede 2 parametri Any e uno Int mentre qui viene caricato il valore del puntatore riferito a quell'area di dati locali. Non riesco a capire come funziona. Volendo emulare il codice che ho scritto, il plc non accetta il comando UC "BLKMOV" e mi rimane rosso. Modificato: 20 maggio 2013 da starktony Link al commento Condividi su altri siti More sharing options...
batta Inserita: 20 maggio 2013 Segnala Share Inserita: 20 maggio 2013 Non so dove tu abbia trovato quell'esempio, ma è completamente sbagliato. Prima di tutto, non si può usare l'istruzione UC per richiamare SFC20. Poi sono completamente sbagliati i collegamenti delle variabili. SRCBLK e DSTBLK richiedono una variabile di tipo ANY, che può essere richiamata semplicemente usando il simbolico (per esempio assegnando il nome di una variabile, di una struttura o di un array), o indicando l'indirizzo. Nel caso si voglia usare l'indirizzo, nell'esempio manca la lunghezza dell'area di dati da trasferire. Al posto di: P#L 8.0 si dovrebbe scrivere, per esempio: P#L 8.0 BYTE 20 A RET_VAL si deve collegare una variabile di tipo INT. Quindi, sempre per seguire l'esempio, al posto di: P#L 36.0 si potrebbe scrivere: LW 36.0 Poi io trovo estremamente brutto accedere alle variabili locali con l'indirizzo. Molto meglio usare il simbolico. Se usi l'indirizzo, se modifichi la struttura delle variabili locali devi rimettere a posto tutti gli indirizzi. Insomma, sarei proprio curioso di sapere dove hai trovato quell'esempio, perché non mi è mai capitato di trovare così tanti errori tutti insieme. Link al commento Condividi su altri siti More sharing options...
starktony Inserita: 20 maggio 2013 Autore Segnala Share Inserita: 20 maggio 2013 Ti mando una mail Batta. Link al commento Condividi su altri siti More sharing options...
batta Inserita: 20 maggio 2013 Segnala Share Inserita: 20 maggio 2013 Ho controllato il programma che mi hai inviato. Effettivamente ci sono le istruzioni esattamente come le hai scritte tu ma, se provi tu a scrivere qualcosa di simile, non te lo accetta. La spiegazione però è molto semplice: la funzione FC160 che contiene il richiamo "anomalo" di "BLKMOVE", è stata scritta in SCL. Il codice sorgente SCL però è mancante, e l'FC160 che ti ritrovi è stata scaricata così com'è direttamente dalla CPU. La CPU però lavora solo con codice AWL, anche se il programma viene scritto in altri linguaggi. Quindi, se scrivi una funzione in SCL, il compilatore la converte in AWL prima di scaricarla nella CPU. I blocchi generati dal compilatore SCL possono contenere istruzioni che non vengono accettate dall'editor AWL. Inoltre, come puoi notare, il codice AWL generato dal compilatore SCL è estremamente contorto. In questo caso, fa addirittura riferimento ad indirizzi nell'area locale che non sono nemmeno stati dichiarati nell'interfaccia delle variabili. Spesso riuscire a capire il funzionamento di un blocco partendo da codice così generato, è impresa impossibile o quasi. Link al commento Condividi su altri siti More sharing options...
starktony Inserita: 20 maggio 2013 Autore Segnala Share Inserita: 20 maggio 2013 (modificato) Grazie per la tua disponibilità Batta. Modificato: 20 maggio 2013 da starktony 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