Migliori prassi per la denominazione degli identificatori

Panoramica

Gli identificativi sono definiti:

  • alla dichiarazione delle variabili (nome della variabile)

  • alla dichiarazione dei tipi di dati definiti dall'utente

  • alla creazione di POU (funzioni, blocchi funzione, programmi)

Oltre agli elementi generali da considerare nella definizione di un identificatore (fare riferimento al capitolo Informazioni generali sulla dichiarazione delle variabili), considerare quanto segue per rendere la denominazione il più univoca possibile:

NOTA: Le convenzioni di assegnazione del nome e gli esempi forniti nei paragrafi seguenti si basano sulle buone pratiche applicate durante lo sviluppo delle librerie Schneider Electric e corrispondono alle query delle convenzioni predefinite utilizzate in EcoStruxure Machine Expert Code Analysis. Le convenzioni di assegnazione del nome alternative di altre organizzazioni sono fornite tra parentesi nelle sezioni seguenti.

Nomi delle variabili

Per l'assegnazione dei nomi delle variabili nelle applicazioni e nelle librerie, attenersi per quanto possibile alla notazione ungherese.

Trovare per ogni variabile una descrizione breve e significativa. Questa descrizione va utilizzata come nome di base. Usare una lettera maiuscola per ogni parola del nome di base. Per i restanti caratteri, usare lettere minuscole (esempio: FileSize).

Tipo di dati

Limite inferiore

Limite superiore

Contenuto delle informazioni

Prefisso

Commento

BOOL

FALSE

TRUE

1 bit

x*

b

riservato

BYTE

8 bit

by

stringa di bit, non per le operazioni aritmetiche

WORD

16 bit

w

stringa di bit, non per le operazioni aritmetiche

DWORD

32 bit

dw

stringa di bit, non per le operazioni aritmetiche

LWORD

64 bit

lw

stringa di bit, non per le operazioni aritmetiche

SINT

-128

127

8 bit

si

tipo di dati intero aritmetico, 8 bit

USINT

0

255

8 bit

usi

tipo di dati intero aritmetico, 8 bit

INT

-32.768

32.767

16 bit

i

tipo di dati intero aritmetico, 16 bit

UINT

0

65.535

16 bit

ui

tipo di dati intero aritmetico, 16 bit

DINT

-2.147.483.648

2.147.483.647

32 bit

di

tipo di dati intero aritmetico, 32 bit

UDINT

0

4.294.967.295

32 bit

udi

tipo di dati intero aritmetico, 32 bit

LINT

–263

263-1

64 bit

li

tipo di dati intero aritmetico, 64 bit

ULINT

0

264-1

64 bit

uli

tipo di dati intero aritmetico, 64 bit

REAL

32 bit

r

tipo di dati a virgola mobile aritmetico, 32 bit

LREAL

64 bit

lr

tipo di dati a virgola mobile aritmetico, 64 bit

STRING

s

Stringa di caratteri a byte singolo di lunghezza variabile (impostazione predefinita: 80 caratteri)

WSTRING

ws

Stringa di caratteri a doppio byte di lunghezza variabile (impostazione predefinita: 80 caratteri)

TIME

tim

durata del tempo, 32 bit

LTIME

ltim

durata del tempo, 64 bit

  • TIME_OF_DAY

  • TOD

tod

ora del giorno, 32 bit

  • LTIME_OF_DAY

  • LTOD

ltod

ora del giorno, 64 bit

  • DATE_AND_TIME

  • DT

dt

data e ora

  • LDATE_AND_TIME

  • LDT

ldt

DATE

  • dat

  • d

data del calendario

LDATE

  • ldat

  • ld

data del calendario

Enumeration

et (e)

POINTER

p

ARRAY

a

Structure

st

Function block

fb

Interface

if (itf)

Union

ut

* x viene scelto intenzionalmente come prefisso per le variabili booleane per differenziarlo da BYTE nonché per assecondare la percezione di un programmatore IEC (vedere indirizzamento%IX0.0).

Dichiarazione semplice

Esempi di dichiarazioni semplici:

bySubIndex: BYTE;

sFileName: STRING;

udiCounter: UDINT;

Dichiarazione annidata

Esempio di dichiarazione annidata in cui i prefissi sono consecutivi nell'ordine delle dichiarazioni:

pabyTelegramData: POINTER TO ARRAY [0..7] OF BYTE;

Istanze e variabili di blocchi funzione di tipi di dati definiti dall'utente

Alle istanze e alle variabili dei blocchi funzione di tipi di dati definiti dall'utente è assegnato un prefisso costituito da un'abbreviazione del nome del blocco funzione o del tipo di dati (ad esempio: stSDO).

Esempio

stSDOReceivedTelegram: ST_SDOTelegram;
TYPE ST_SDOTelegram : 
STRUCT
  wIndex:WORD;
  bySubIndex:BYTE;
  byLen:BYTE;
  aby: ARRAY [0..3] OF BYTE;
END_STRUCT
END_TYPE

Costanti locali

Le costanti locali (c) iniziano con il prefisso c e un carattere di sottolineatura adiacente, seguito dal prefisso del tipo e dal nome della variabile.

Esempio

VAR CONSTANT
  c_uiSyncID: UINT := 16#80;
END_VAR

Variabili globali e costanti globali

Le variabili globali hanno il prefisso G_ (g_) e le costanti globali il prefisso Gc_ (gc_

Esempio

VAR_GLOBAL
  G_iTest: INT;
END_VAR
VAR_GLOBAL CONSTANT
  Gc_dwExample: DWORD;
END_VAR

Nomi delle variabili nelle librerie

Struttura

Per i nomi delle variabili, fare riferimento alla descrizione riportata sopra. Usare lo spazio dei nomi della libreria come prefisso quando si accede alla variabile nel codice dell'applicazione.

Esempio

G_iTest: INT; (declaration)
CAN.G_iTest (implementation, call in an application program

Tipi di dati definiti dall'utente (DUT) nelle librerie

Struttura

Il nome di ogni tipo di dati della struttura è composto dal prefisso del tipo corrispondente (fare riferimento anche a Prefisso POU) e da un nome breve e significativo (ad esempio, ET_Day) della struttura.

Esempio (nella libreria con spazio dei nomi CAL):

TYPE ET_Day :(
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY);

Dichiarazione:

etToday: CAL.ET_Day;

Uso nell'applicazione:

IF etToday = CAL.ET_Day.MONDAY THEN
NOTA: Tenere presente l'uso dello spazio dei nomi quando si utilizzano DUT o enumerazioni dichiarate nelle librerie.

Funzioni, blocchi funzione, programmi (POU), azioni

I nomi delle funzioni, dei blocchi funzione e dei programmi sono costituiti dal prefisso del tipo corrispondente (fare riferimento anche a Prefisso POU) e da un nome breve e significativo della POU (ad esempio, FB_SendTelegram). Come con le variabili, la prima lettera di una parola del nome POU deve essere una lettera maiuscola mentre le altre devono essere lettere minuscole. Ad esempio, comporre il nome della POU di un verbo e un sostantivo per indicare chiaramente il funzionamento del blocco funzione.

Esempio

FUNCTION_BLOCK FB_SendTelegram

Nella parte della dichiarazione, inserire una breve descrizione del POU come commento. Anche gli ingressi e le uscite devono avere un commento. Per i blocchi funzione, inserire il prefisso associato per le istanze di set-up direttamente dopo il nome.

Azioni

Le azioni non hanno prefissi. Solo le azioni che devono essere chiamate internamente, ossia dalla POU stessa, iniziano con prv_.

POU nelle librerie

Struttura

Per la creazione di nomi di metodi, valgono le stesse regole valide per le azioni. Specificare commenti per gli ingressi possibili di un metodo. Aggiungere una breve descrizione del metodo nella rispettiva dichiarazione. I nomi dell'interfaccia devono iniziare con il prefisso IF_ (I); ad esempio, IF_CANDevice.

NOTA: tenere presente l'uso dello spazio dei nomi quando si utilizzano le POU dichiarate nelle librerie.