Skip to main content

Generazione del codice dell'applicazione

Il codice dell'applicazione è il codice macchina che un PLC esegue all'avvio di un'applicazione.

CODESYS genera automaticamente il codice dell'applicazione dal codice sorgente che è stato scritto nel sistema di sviluppo. Questa operazione viene eseguita automaticamente prima di scaricare l'applicazione sul controller. Prima della generazione del codice dell'applicazione, viene eseguito un test per verificare le allocazioni, i tipi di dati e la disponibilità delle librerie. Inoltre, gli indirizzi di memoria vengono allocati quando viene generato il codice dell'applicazione.

Puoi fare clic Crea → Genera codice per eseguire esplicitamente questo comando. Ciò è utile per rilevare eventuali errori nel codice sorgente, anche quando il PLC non è ancora collegato. Gli errori vengono emessi nella vista segnalazioni nella categoria "Build".

Importante

Se hai crittografato l'applicazione, considera le seguenti informazioni: Se una (nuova) applicazione di avvio viene generata su richiesta dopo una modifica online, l'applicazione di avvio viene formata nella RAM con il codice corrente che non è crittografato.

Generazione esplicita del codice dell'applicazione

Requisito: l'applicazione può essere compilata senza errori.

  • Clic Costruisci→ Genera codice.

    Il codice dell'applicazione viene generato. Informazioni dettagliate sull'allocazione della memoria vengono emesse nella vista dei messaggi.

Per ulteriori informazioni, vedere: Creazione di un'applicazione di avvio

Messaggi durante la generazione del codice dell'applicazione

Quando si genera il codice dell'applicazione, CODESYS emette informazioni sull'allocazione della memoria nella visualizzazione dei messaggi. Le lacune si formano nella memoria perché la riallocazione è solo per POU e variabili nuove e modificate a causa della creazione di memoria incrementale. Le modifiche online hanno lo stesso effetto. Questa frammentazione riduce la quantità di memoria disponibile. Tuttavia, è possibile riallocare completamente la memoria facendo clic Pulito e quindi aumentare la quantità di memoria libera.

Errori di sintassi e bug che CODESYS rileva durante la generazione del codice e l'allocazione della memoria vengono emessi anche nella visualizzazione dei messaggi (Costruire categoria).

Informazioni sull'output sull'allocazione della memoria:

  • Dimensione del codice generato (in byte): somma di tutti i segmenti di codice

  • Dimensione dei dati globali (in byte): memoria totale utilizzata dalle variabili globali. Gli ingressi e le uscite non sono inclusi a meno che gli ingressi o le uscite non siano mappati nell'area delle variabili globali.

  • Dimensione totale della memoria allocata per codice e dati (in byte): la memoria allocata totale è composta dalle aree di memoria già utilizzate più la memoria riservata, non ancora utilizzata per build incrementali e modifiche online. Dopo la prima build, la memoria già utilizzata è approssimativamente uguale all'indirizzo più alto utilizzato (vedi sotto). Il più grande divario di memoria contigua (vedi sotto) corrisponde ancora approssimativamente alla differenza rispetto alla memoria totale allocata. Tuttavia, con l'aumento del numero di build incrementali e modifiche online, aumenta anche il numero di vuoti di memoria e il più grande divario di memoria contiguo si riduce.

  • Area di memoria <n>: Contenuto delle singole aree di memoria riservate:

    Sfondo: Dipende dal PLC quali dati e codice sono memorizzati in quali aree di memoria. Ad esempio, codice e dati si trovano nella stessa area del CODESYS Control Win. Per gli indirizzi %I, %M, e %Q, la memoria è sempre riservata, anche quando una variabile non è assegnata ad un indirizzo. Dopo aver "pulito" l'applicazione, la memoria viene riallocata completamente. In questo caso, piccole lacune potrebbero derivare dall'"allineamento" predefinito (normalmente 8). Spazi più grandi derivano dalla modifica di una data senza "pulizia", ad esempio aumentando l'area dell'array. In questo caso, vengono ricompilate solo le POU interessate. Inoltre, in caso di modifica online, la memoria viene utilizzata solo per nuove variabili e nuovo codice. La memoria precedentemente riservata dalle variabili e dal codice cancellati viene resa nuovamente disponibile. Di conseguenza, la frammentazione della memoria può verificarsi dopo molte build incrementali e modifiche in linea. Ciò crea molte piccole lacune che potrebbero non essere affatto utilizzabili in alcuni casi. Per chiarire quanta memoria è disponibile in modo sicuro, durante la generazione del codice viene emesso il "gap di memoria contigua più grande" dell'area di memoria.

    • Indirizzo più utilizzato (Byte) : Questo è l'indirizzo riservato più alto nell'intera area di memoria allocata. Durante la prima build dopo un'operazione di "pulizia", gli indirizzi di memoria vengono inviati alle variabili in ordine crescente, tenendo conto dell'allineamento (normalmente 8 byte). Di conseguenza, l'indirizzo più alto utilizzato in questo momento corrisponde approssimativamente alla quantità di memoria utilizzata. Il resto dell'area di memoria allocata è ancora completamente disponibile per build incrementali e modifiche in linea.

    • La più grande lacuna di memoria contigua (in byte): questa è la dimensione della memoria disponibile per il backup.

      Le lacune risultanti nella memoria allocata vengono riutilizzate quando possibile per altre modifiche. Quando, ad esempio, una variabile globale di tipo Byte viene aggiunto, viene inserito nel primo byte libero della memoria. Anche solo un piccolo divario è sufficiente per questo. Tuttavia, un'istanza FB, una variabile della struttura del tipo o dell'array o il codice per una POU devono essere memorizzati in modo contiguo e quindi occupano più memoria di conseguenza. Di conseguenza, possono essere allocati solo all'area di memoria contigua più grande. Questo è il motivo per cui durante la generazione del codice viene emesso il "più grande gap di memoria contigua" disponibile in modo sicuro (in byte), così come la sua percentuale sulla memoria totale.

Per questo, vedi anche: Opzioni per la generazione di applicazioni

Crittografia del codice dell'applicazione

Per ulteriori informazioni, vedere: Protezione di un'applicazione