Stefano Russoni Inserito: 4 giugno 2019 Segnala Share Inserito: 4 giugno 2019 Salve a tutti, Sono un giovane ragazzo di 21 anni alle prime anni con i software di programmazione con tia portal v15.1. Sto sviluppando un software e durante lo sviluppo di questo software mi sono imbattuto nell' istruzione FILL, che devo utilizzarla per azzerare una db composta da 64 bit che sarebbero gli allarmi del mio impianto. Purtroppo ho un esempio, ma è sviluppato con un s7-1500 ( CPU 1514F e l'istruzione FILL utilizza un tipo di dati "Variant", mentre come illustrato dal sistema di informazione posso utilizzare per l's7-300 (CPU 314 2PN DP)"Any" come tipo di dati. Come posso procedere? Quali sono le differenze? Dove posso trovare qualche manuale o spiegazione che mi faccia comprendere a pieno l'istruzione FILL e i suoi tipi di dati? Ringrazio in anticipo chi avrà la pazienza di aiutarmi. Russoni Stefano Link al commento Condividi su altri siti More sharing options...
DesmoGiec Inserita: 4 giugno 2019 Segnala Share Inserita: 4 giugno 2019 Ciao! Fill lo usi stabilendo con cosa devi andare a riempire un area dati. Ad esempio. Dichiaro #Zero = 0 Richiamo FILL, indico il campo sorgente (bval) con il quale andrò a riempire l'area specificata in BLK. In questo caso andrò ad azzerare il campo db1.dbb0 per 68 byte. Se nella tua db avessi una struttura commentata, potresti fare una cosa del genere per semplificarti la vita (e leggibilità) Prendendo sempre esempio db1.. Dichiarando una struttura che racchiuda l'intera db, il P#db1.dbx0.0 byte 68 prende preso nome della db, con il nome della struttura. (quindi "test1" = nome db, .TEST_FILL è la struttura interna della db, che vale 68 byte. Nei dettagli di programma, in BLK avrai: Spero sia chiaro! Ciao! Link al commento Condividi su altri siti More sharing options...
Stefano Russoni Inserita: 5 giugno 2019 Autore Segnala Share Inserita: 5 giugno 2019 Ciao, scusami se non ti ho più risposto e grazie ancora!! Stamattina ho provato a utilizzare l'istruzione come da te suggerito, però certe cose ancora non mi sono chiare.. ovvero che tipo di dati devo utilizzare nel parametro BVAL e inoltre non riesco a capire il fattore di moltiplicazione... comunque lascio in allegato la mia prova Link al commento Condividi su altri siti More sharing options...
batta Inserita: 5 giugno 2019 Segnala Share Inserita: 5 giugno 2019 Attenzione che l'istruzione FILL è messa nel gruppo "Legacy". Se possibile, si consiglia di evitarne l'uso. Per fare quello che desideri prova a guardare l'istruzione "SCATTER" che, tra l'altro, lavora anche con blocchi ottimizzati. Link al commento Condividi su altri siti More sharing options...
Stefano Russoni Inserita: 5 giugno 2019 Autore Segnala Share Inserita: 5 giugno 2019 Mi scuso tanto per la mia ignoranza ma purtroppo il gruppo Legacy non so cosa sia. Proverò a vedere la funzione SCATTER e farò qualche prova. Grazie. Link al commento Condividi su altri siti More sharing options...
batta Inserita: 5 giugno 2019 Segnala Share Inserita: 5 giugno 2019 In Legacy ci sono funzioni ancora presenti per mantenere la compatibilità con le precedenti versioni, ma considerate obsolete. In ogni caso, per il tuo scopo l'istruzione SCATTER risulta anche più facile da usare. Link al commento Condividi su altri siti More sharing options...
Stefano Russoni Inserita: 6 giugno 2019 Autore Segnala Share Inserita: 6 giugno 2019 Ciao batta, purtroppo la funzione SCATTER per s7-300 non è disponibile, è disponibile solo per s71500 e s71200. Link al commento Condividi su altri siti More sharing options...
batta Inserita: 6 giugno 2019 Segnala Share Inserita: 6 giugno 2019 Quote purtroppo la funzione SCATTER per s7-300 non è disponibile, è disponibile solo per s71500 e s71200. Sì, hai ragione. Vedendo che usi TIA, avevo dato per scontato che la CPU fosse una 1200/1500. Mi era sfuggito che la devi usare su un 300. Comunque, con il 300, per soli 64 bit non mi farei tanti problemi con FILL od altro, bastano due semplici MOVE su due DWORD. Link al commento Condividi su altri siti More sharing options...
Siltec Inserita: 11 novembre 2020 Segnala Share Inserita: 11 novembre 2020 Buongiorno, in relazione al problema di Stefano e per curiosità, l'istruzione FILL_BLK associata ad un array in questo caso per gli allarmi, si può implementare con l's7-300? andrebbe ad azzerare tutti gli elementi da indice 0 ad x. Link al commento Condividi su altri siti More sharing options...
TravelMen Inserita: 11 novembre 2020 Segnala Share Inserita: 11 novembre 2020 Ciao si una cosa abbastanza semplice, di seguito quello che uso io per fare quello che serve a te: L L#0 T #Fill_DWORD AUF "DB_MMI_ALLARMI" L DBLG // Carico la lunghezza totale del DB da azzerare T #Lunghezza_DB LAR1 P##P_ALLARMI_MAC // Carica indirizzo inziale del puntatore Any di origine in AR1 L B#16#10 // Registra Syntax-ID nel puntatore Any T LB [AR1,P#0.0] L B#16#2 // Carica tipo di area a BYTE T LB [AR1,P#1.0] // e deposita nel puntatore Any L #Lunghezza_DB // Registra numero dei byte T LW [AR1,P#2.0] L 127 // Registra numero DB di origine T LW [AR1,P#4.0] L P#DBX 0.0 T LD [AR1,P#6.0] // Carica puntatore di area nel blocco // generali // multirex // inverter // assi // libero CALL "FILL" BVAL :=#Fill_DWORD RET_VAL:=#Fill_Error BLK :=#P_ALLARMI_MAC Cosi anche se la DB dovesse essere modificata la funzione sopra andrebbe sempre ad azzerarla, io la uso su una DB da 64 word Saluti Link al commento Condividi su altri siti More sharing options...
Siltec Inserita: 13 novembre 2020 Segnala Share Inserita: 13 novembre 2020 Il 11/11/2020 alle 01:23 , Siltec ha scritto: Buongiorno, in relazione al problema di Stefano e per curiosità, l'istruzione FILL_BLK associata ad un array in questo caso per gli allarmi, si può implementare con l's7-300? andrebbe ad azzerare tutti gli elementi da indice 0 ad x. Mi riferisco ad un array di valori booleani Link al commento Condividi su altri siti More sharing options...
TravelMen Inserita: 16 novembre 2020 Segnala Share Inserita: 16 novembre 2020 Ciao Quote Mi riferisco ad un array di valori booleani per l'istruzione fill non fa differenza se il tuo DB è composto da bool da word o dword, nel caso di bool hai hai solo una condizione da rispettare ovvero che la tua DB sia divisibile per 8 come scritto sul . dell'istruzione: Quote Se l'area di destinazione da preimpostare non è un multiplo intero della lunghezza del parametro di ingresso BVAL, essa viene comunque scritta fino all'ultimo byte. Se l'area di destinazione indicata è minore dell'area sorgente, vengono copiati solo tanti dati quanti ne può contenere l'area di destinazione. Se l'area di destinazione o l'area sorgente realmente disponibile è minore delle dimensioni dell'area di memoria parametrizzata per l'area sorgente o di destinazione (parametri BVAL, BLK), la reazione dipenderà dal tipo di CPU. · CPU S7-300: non vengono trasmessi dati. RET_VAL ha il valore W#16#837F. · CPU S7-400 V4 (CPU standard V4, CPU H V4 e V4.5): non vengono trasmessi dati.Per tutte le altre CPU S7-400: i dati vengono trasmessi.In tutte le CPU S7-400 viene segnalato un errore in RET_VAL con codice di errore W#16#8122 o W#16#8323. Questi parametri RET_VAL vanno sempre analizzati nel programma utente. Se il puntatore ANY (sorgente o destinazione) è del tipo BOOL, la lunghezza indicata deve essere divisibile per 8; in caso contrario l'SFC non viene eseguita. Saluti 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