caracarogna Inserito: 6 maggio 2009 Segnala Share Inserito: 6 maggio 2009 (modificato) Ciao a tutti,Ho creato 2 FB, il primo avente in input 2 parametri ANY, nella stat una chiamata al secondo FB e nella temp un appoggio di tipo ANY.Il secondo FB ha un parametro input di tipo ANY e nella temp un appoggio di tipo ANY.FUNCTION_BLOCK "SUB_1" TITLE =SUB_1 AUTHOR : CARACAROGNA VERSION : 0.1 VAR_INPUT ANY1 : ANY; ANY2 : ANY; END_VAR VAR_IN_OUT END_VAR VAR SUB_2 : "SUB_2"; END_VAR VAR_TEMP APP_ANY : ANY; END_VAR BEGIN NETWORK .... END_FUNCTION_BLOCK FUNCTION_BLOCK "SUB_2" TITLE =SUB_2 AUTHOR : CARACAROGNA VERSION : 0.1 VAR_INPUT ANY1 : ANY; END_VAR VAR_IN_OUT END_VAR VAR END_VAR VAR_TEMP APP_ANY : ANY; END_VAR BEGIN NETWORK .... END_FUNCTION_BLOCK Quello che vorrei fare e' passare il secondo parametro in Input di SUB_1 nel parametro in Input di SUB_2. L'unico modo per farlo (l'unico a mia conoscenza) e' il seguente: L P##ANY1 LAR1 L W [AR1,P#0.0] T LW 0 // APP_ANY (temp) L D [AR1,P#2.0] T LD 2 // APP_ANY (temp) L D [AR1,P#6.0] T LD 6 // APP_ANY (temp) CALL #SUB_2 BUFFER:=#APP_ANY Per utilizare il parametro ANY1 internamente a SUB_2 ho operato in maniera analoga ... e qui ho commesso un'errore! Dentro a SUB_2 ho scritto il seguente codice: L P##ANY1 LAR1 L W [AR1,P#0.0] T LW 0 // APP_ANY (temp) L D [AR1,P#2.0] T LD 2 // APP_ANY (temp) L D [AR1,P#6.0] T LD 6 // APP_ANY (temp) .... Non tenendo conto dell'offset all'interno del DB d'istanza, risultato P##ANY1 (sub2) = ANY1 (sub1) Per gestire l'offset ho modificato il codice nel modo seguente: TAR2 L P##ANY1 +D LAR1 L W [AR1,P#0.0] T LW 0 // APP_ANY (temp) L D [AR1,P#2.0] T LD 2 // APP_ANY (temp) L D [AR1,P#6.0] T LD 6 // APP_ANY (temp) ....Ma nulla da fare ... lo stop del mio 400 arriva inesorabile!Ma dove sbaglio??? Modificato: 6 maggio 2009 da caracarogna Link al commento Condividi su altri siti More sharing options...
BeavisPlc Inserita: 25 maggio 2009 Segnala Share Inserita: 25 maggio 2009 Nel tuo codice vedo che per tener condo della multipla istanza ha i fatto questo... TAR2 L P##ANY1 +D LAR1 Ma devi ricordare che TAR2 porta in ACCU1 anche l'area code e quindi devi PULIRE l'area code (normalmente 0x84) e poi fare la somma.Modifica il codice così:TAR2SLD 8 //Pulitura 8 bit "alti"SRD 8 L P##ANY1+D LAR1 e vedrai che dovrebbe andare meglio. Sicuramente il tuo plc ti andava in stop a causa di "area code non correct"...Ciao! Link al commento Condividi su altri siti More sharing options...
caracarogna Inserita: 25 maggio 2009 Autore Segnala Share Inserita: 25 maggio 2009 non ci avevo pensato...Appena posso provo a tirare su tutto (ormai era in archivio) e ci provoNel Mentre ... GRAZIE MILLEP.S. appena ho provato ti faccio sapere ... 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