Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Tempo Di Esecuzione Di "blkmov"


Messaggi consigliati

Inserito:

Salve a tutti voi,

per una questione di brevità e semplicità, sono solito creare ed impiegare FC standard, per risolvere le parti di programma comuni e ripetitive.

Ancora per ragioni di pulizia e praticità, in esse non faccio mai uso di operandi assoluti, come M, DB e T, che passo alle funzioni dall'esterno, come viaribili di IN, IN_OUT, etc.

Fin qui tutto bene.

Quando mi trovo poi a lavorare su strutture di dati complesse: leggi Pacchetti dati che arrivano da slave in rete, sono solito costruire delle strutture UDT, che poi dichiaro nella funzione come variabili temporanee.

Come parametro di ingresso alla funzione, dichiaro un puntatore ANY, che significa la tabella di allocazione di questi dati, che potrà essere area M, DB, o quant'altro. Quindi, con una operazione un poco macchinosa, nella funzione copio il puntatore ANY passato su una variabile locale, ed uso, in testa alla funzione il BLKMOV per recuperare la vecchia immagine dati, elaborare tutto in locale nell'area L, quindi prima dell'uscita, riscrivo con altro BLKMOV la nuova immagine dei dati.

Tutto questo per due ragioni essenziali:

- la funzione così creata è sempre "portabile" e basta collegarla bene nel punto di richiamo, potendo utilizzare a scelta aree M, DB, e quanto sivoglia;

- all'interno della funzione, i dati della struttura, sono nuovamente sfruttabili nel formato booleano, intero, reale, etc.

Insomma, non conosco altro modo per poter passare una struttura dati ad una funzione, e quindi poter accedere agli operandi SENZA dover tenere conto di come sono dichiarati, infatti l'area L la si manipola indipendentemente dal tipo di dati che contiene, viceversa non è possibile farlo, se la struttura era stata passata come variabile IN_OUT.

La domanda è questa: che voi sappiate, l'utilizzo di BLKMOV per leggere e scrivere dati su DB, appesantisce il tempo ciclo come l'utilizzo delle DB all'interno del programma? (Mi riferisco al fatto di indicare sempre il numero di DB in tutti i richiami, per una questione di leggibilità e commento di tutti gli operandi).


Inserita:
La domanda è questa: che voi sappiate, l'utilizzo di BLKMOV per leggere e scrivere dati su DB, appesantisce il tempo ciclo come l'utilizzo delle DB all'interno del programma? (Mi riferisco al fatto di indicare sempre il numero di DB in tutti i richiami, per una questione di leggibilità e commento di tutti gli operandi).

penso che da come hai strutturato i tui programmi ( i complimenti da parte di uno che programma , non so' cosa ti direbbe un manutentore .............) il tempo di esecuzione dell'SFC20 sia l'ultimo dei tuoi problemi , ad esperienza personale e' molto piu' veloce di un L e T per x operandi

Ciao

Luca

Inserita:
non so' cosa ti direbbe un manutentore ...

Io dico di essere un manutentore, oltre che sviluppatore, e tovo di avere adottato un modo veloce per poter mettere le mani su programmi di chiunque e farli andare, sopratutto quando là, fuori, devi sbrigarti.

Comunque, la domanda voleva essere un poco più complessa, ma si è persa un poco nella mia testa. Volevo capire se appunto l'uso del "BLKMOV" sia più veloce, perchè magari scritto con linguaggio diverso dall'AWL, quindi non replicabile con gli strumenti Step 7, appunto, con dei loop di L e T e relativo codice accessorio.

E questo perché sto cercando di scrivere una funzione per lo shift di word, piuttosto che di dword, ed appunto, non sono riuscito a fare altro che dei loop di L e T, con parti di codice che aprono la DB, qualora la tabella di ingresso lo sia.

Infine: siccome BLKMOV, piuttosto che altre funzioni di sistema, accettano di lavorare con tabelle in quasi tutte le aree di memoria, mi chiedevo se non ci sia modo di realizzare funzioni personalizzate, che non debbano aprire le DB, pur potendoci lavorare sopra.

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...