Funzioni ed FB per gestione moduli periferici

SysPhrInfos, get infos from peripheral modules

image0

Type Library
Funzione XTarget_07_0

Questa funzione esegue l’acquisizione di informazioni dai moduli periferici. Viene trasferita nella variabile stringa il cui indirizzo è passato in Info, l’informazione indicata da InfoID relativa al modulo indicato in Module.

La funzione ritorna TRUE se correttamente eseguita, in caso contrario FALSE.

Parametri funzione:

Module (USINT) Occorre specificare l’indirizzo di modulo da cui eseguire l’acquisizione (Range da 0 a 15). Il valore 0 indica il primo modulo di estensione, 1 il secondo e così di seguito.
InfoID (USINT)

Occorre specificare l’ID della informazione richiesta.

0: Ritorna codice prodotto
1: Ritorna codice programma
Info (STRING[10]) Indirizzo variabile dove trasferire l’informazione.

La funzione ritorna:

(BOOL) FALSE: Errore esecuzione. TRUE: Funzione eseguita correttamente.

Codici di errore

In caso di errore la funzione torna con FALSE e con SysGetLastError è possibile rilevare il codice di errore.

9990100 Il modulo indirizzato in Module non è presente.
9990110 Il valore di InfoID non è corretto.
9990200 L’informazione richiesta non è supportata dal modulo.
9990210 Errore durante la richiesta della informazione dal modulo.
9990990 Non implementata nel simulatore.

Esempi

E” riportato un programma che esegue la lettura del codice prodotto dal modulo di estensione con indirizzo 0. Il codice ritornato è trasferito nella variabile Info. Il ritorno della funzione è trasferito sull’uscita Do01M00.

Definizione variabili
image1

Esempio LD

image2

SysGetPhrDI, get peripheral digital input

image3

Type Library
FB XTarget_07_0

Questo blocco funzione esegue l’acquisizione degli ingressi digitali dai moduli periferici. Il blocco funzione ritorna lo stato degli ingressi digitali dal modulo indicato in Address in base al comando di Mode definito.

Per acquisire gli ingressi digitali presenti sul modulo CPU occorre definire Address 255 e Mode DI_8_LL.

Address (USINT) Occorre specificare l’indirizzo di modulo da cui eseguire l’acquisizione degli ingressi digitali (Range da 0 a 255). Il valore 0 indica il primo modulo di estensione, 1 il secondo e così di seguito. L’indirizzo 255 indica il modulo CPU.
Mode (USINT) Occorre specificare il modo di acquisizione ingressi digitali, Digital input mode.
Done (BOOL) Dato acquisito, viene attivato se acquisizione ingressi digitali terminata.
Fault (BOOL) Errore di acquisizione, viene attivato in caso di errore nella sequenza di acquisizione.
Value (UDINT) Ritorna lo stato degli ingressi digitali acquisiti.

Codici di errore

In caso di errore si attiva l’uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.

9985050 Errore allocazione blocco funzione.
9985070 Errore versione blocco funzione.
9985100 Il modulo indirizzato in Address non è presente.
9985110~24 Il modo acquisizione definito in Mode non è corretto.
9985200~13 Errore durante l’esecuzione della lettura ingressi dal modulo periferico.

Esempi

Viene acquisito lo stato degli 8 ingressi bassi (Da Inp 0 a Inp 7) del modulo di con indirizzo 0. Se dato valido viene attivata la variabile FBDone se errore di acquisizione viene attivata la variabile FBFault. Il valore acquisito nel range da 0x00 a 0xFF è trasferito nella variabile InpValue.

Definizione variabili
image4

Esempio LD (PTP116A100, LD_SysGetPhrDI)

image5

Esempio IL (PTP116A100, IL_SysGetPhrDI)

(\* Read Inp 0 to 7 from module with address 0. \*)
LD 0
ST FBData.Address
LD DI_8_LL
ST FBData.Mode
CAL FBData
LD FBData.Value
ST InpValue

Esempio ST (PTP116A100, ST_SysGetPhrDI)

(\* Read Inp 0 to 7 from module with address 0. \*)
FBData.Address:=0; (\* Module address \*)
FBData.Mode:=DI_8_LL; (\* Acquisition mode \*)
FBData(); (\* Digital input acquisition \*)
InpValue:=FBData.Value; (\* Digital input value \*)

Questo esempio è una evoluzione dell’esempio precedente. Utilizzando il blocco funzione ByteToBit lo stato degli 8 ingressi bassi (Da Inp 0 a Inp 7) del modulo con indirizzo 0, è appoggiato su di un array di BOOL.

Definizione variabili
image6

Esempio LD (PTP119A000, LD_LogicInputAcquisition)

image7

SysSetPhrDO, set peripheral digital output

image8

Type Library
FB XTarget_11_0

Questo blocco funzione esegue impostazione delle uscite digitali sui moduli periferici indirizzati con Address ed in base al comando di Mode definito.

Per non perturbare la gestione delle uscite logiche eseguita dall’immagine di processo, in Mask è possibile definire su quali output si desidera operare. In pratica l’FB opererà solo sugli output il cui relativo bit di mask è attivo.

Per gestire le uscite digitali presenti sul modulo CPU occorre definire Address 255 e Mode DO_8_LL.

Address (USINT) Occorre specificare l’indirizzo del modulo su cui eseguire l’impostazione delle uscite digitali (Range da 0 a 255). Il valore 0 indica il primo modulo di estensione, 1 il secondo e così di seguito. L’indirizzo 255 indica il modulo CPU.
Mode (USINT) Occorre specificare il modo di gestione uscite digitali, Digital output mode.
Value (UDINT) Impostare il valore da trasferire sulle uscite digitali.
Mask (UDINT) Maschera outputs da gestire.
Done (BOOL) Dato settato. Viene attivato per un loop al termine del settaggio delle uscite digitali.
Fault (BOOL) Errore. Viene attivato in caso di errore nella sequenza di settaggio.

Codici di errore

In caso di errore si attiva l’uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.

9984050 Errore allocazione blocco funzione.
9984060 Terminato spazio memoria rilocabile, non è possibile eseguire l”“FB.
9984070 Errore versione blocco funzione.
9984100 Il modulo indirizzato in Address non è presente.
9984110~8 Il modo gestione definito in Mode non è corretto.
9984200~6 Errore durante l’esecuzione gestione uscite digitali sul modulo periferico.

Esempi

Viene trasferito il valore della variabile OutValue sulla uscita Out 0 del modulo con indirizzo 0.

Definizione variabili
image9

Esempio LD (PTP116A400, LD_SysSetPhrDO)

image10

Esempio IL (PTP116A400, IL_SysSetPhrDO)

(\* Manage digital outputs Out 0 to Out 7 on module with address 0. \*
LD 0
ST FBData.Address
LD DO_8_LL
ST FBData.Mode
LD OutValue
LD FBData.Value
LD 16#00000001
LD FBData.Mask
CAL FBData

Esempio ST (PTP116A400, ST_SysSetPhrDO)

(\* Manage digital outputs Out 0 to Out 7 on module with address 0. \*
FBData.Address:=0; (\* Module address \*)
FBData.Mode:=DO_8_LL; (\* Management mode \*)
FBData.Value:=OutValue; (\* Digital ouput value \*)
FBData.Mask:=16#00000001; (\* Output mask \*)
FBData(); (\* Digital output management \*)

SysGetAnInp, get analog input

image11

Type Library
FB XTarget_07_0

Questo blocco funzione esegue l’acquisizione dell’ingresso analogico dal modulo di acquisizione. Il blocco funzione gestisce vari modi di acquisizione in funzione del modulo analogico a cui fa riferimento.

Per acquisire gli ingressi digitali presenti sul modulo CPU occorre definire Address 255 e Mode AD_VOLT_0_10_COMMON.

Address (USINT) Occorre specificare l’indirizzo di modulo da cui eseguire l’acquisizione degli ingressi analogici (Range da 0 a 255). Il valore 0 indica il primo modulo di estensione, 1 il secondo e così di seguito. L’indirizzo 255 indica il modulo CPU.
Channel (USINT) Occorre specificare l’indirizzo del canale sul modulo (Range da 0x00 a 0x0F). Se viene settato un indirizzo di canale non presente, si interrompe l’esecuzione e viene settato il bit di Fault.
Mode (USINT) Occorre specificare il modo di acquisizione analogica, Analog to digital mode.
Done (BOOL) Dato analogico acquisito, viene attivato al termine della acquisizione analogica.
Fault (BOOL) Errore di acquisizione, viene attivato in caso di errore nella sequenza di acquisizione.
Value (REAL) Ritorna il valore di acquisizione espresso nella unità definita dal modo di acquisizione. Potrebbe essere un valore NaN (Not A Number) ad indicare un problema nell’acquisizione, tipicamente sensore rotto.

Codici di errore

In caso di errore si attiva l’uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.

9983050 Errore allocazione blocco funzione.
9983060 Terminato spazio memoria rilocabile, non è possibile eseguire l”“FB.
9983070 Errore versione blocco funzione.
9983080 Impossibile inizializzare il modulo.
9983100 Il modulo indirizzato in Address non è presente.
9983110~1 Il modulo indirizzato non supporta i comandi acquisizione analogica.
9983150 Il valore ritornato dal modulo analogico non è corretto.
9983200 Il modo di acquisizione definito in Mode non è gestito dal modulo.
9983210 Errore nella acquisizione analogica dal modulo.
9983300 Il canale definito in Channel non è gestito dal modulo.

Esempi

Viene eseguita l’acquisizione analogica dal canale 0 del modulo 0 in modo 0-10 Volt. Se dato valido viene attivata l’uscita digitale Do00M00 se errore di conversione viene attivata l’uscita digitale Do01M00. Il dato analogico acquisito nel range da 0.000 a 9.999 è trasferito nella variabile AnaInp.

Definizione variabili
image14
Esempio LD (PTP116A100, LD_SysGetAnInp) |
image15

Esempio IL (PTP116A100, IL_SysGetAnInp)

(\* Acquires analog input 0 from module. \*)
LD 0
ST FBData.Address (\* Set module address \*)
LD 0
ST FBData.Channel (\* Set channel \*)
LD AD_VOLT_0_10_COMMON
ST FBData.Mode (\* Set acquisition mode \*)
CAL FBData (\* Call the SysGetAnInp function block \*)
LD FBData.Done
ST Do00M00 (\* The output is active if data is acquired \*)
LD FBData.Fault
ST Do01M00 (\* The output is active if execution fault \*)
LD FBData.Value
ST AnaInp (\* Store the acquired value \*)

Esempio ST (PTP116A100, ST_SysGetAnInp)

(\* Acquires analog input 0 from module. \*)
FBData(Address:=0, Channel:=0, Mode:=AD_VOLT_0_10_COMMON); (\* Call the SysGetAnInp FB \*)
Do00M00:=FBData .Done; (\* The output is active if data is acquired \*)
Do01M00:=FBData .Fault; (\* The output is active if execution fault \*)
VarReal:=FBData .Value; (\* Store the acquired value \*)

SysSetAnOut, set analog output

image16

Type Library
FB XTarget_07_0

Questo blocco funzione esegue il set del valore sull’uscita analogica sul modulo di uscita. Il blocco funzione gestisce vari modi di uscita in funzione del modulo analogico a cui fa riferimento.

Address (USINT) Occorre specificare l’indirizzo del modulo su cui settare il valore analogico (Range da 0x00 a 0x0F). Il valore 0x00 indica il primo modulo di estensione, 0x01 il secondo e così di seguito.
Channel (USINT) Occorre specificare l’indirizzo del canale sul modulo (Range da 0x00 a 0x0F). Se viene settato un indirizzo di canale non presente, si interrompe l’esecuzione e viene settato il bit di Fault.
Mode (USINT) Occorre specificare il modo di gestione uscita analogica, Digital to analog mode.
Value (REAL) Occorre specificare il valore di uscita espresso nella unità definita dal modo di gestione.
Done (BOOL) Dato settato. Viene attivato per un loop al termine del settaggio dell’uscita analogica.
Fault (BOOL) Errore. Viene attivato in caso di errore nella sequenza di settaggio.

Codici di errore

In caso di errore si attiva l’uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.

9982050 Errore allocazione blocco funzione.
9982060 Terminato spazio memoria rilocabile, non è possibile eseguire l”“FB.
9982070 Errore versione blocco funzione.
9982080 Impossibile inizializzare il modulo.
9982100 Il modulo indirizzato in Address non è presente.
9982110~1 Il modulo indirizzato non supporta i comandi uscita analogica.
9982150 Il valore da impostare sul modulo analogico non è corretto.
9982200 Il modo di gestione definito in Mode non è gestito dal modulo.
9982210 Errore nella gestione uscita analogica sul modulo.

Esempi

Viene eseguita l’uscita analogica dal canale 0 del modulo 0 in modo 0-10 Volt. Se dato valido viene attivata l’uscita digitale Do00M00 se errore di conversione viene attivata l’uscita digitale Do01M00. Il dato analogico da impostare in uscita nel range da 0.000 a 9.999 è presente nella variabile AnaOut.

Definizione variabili
image19
Esempio LD (PTP116A100, LD_SysSetAnOut) |
image20

Esempio IL (PTP116A100, IL_SysSetAnOut)

(\* Manage analog output 0 on module 0. \*)
LD 0
ST FBData.Address (\* Set module address \*)
LD 0
ST FBData.Channel (\* Set channel \*)
LD DA_VOLT_0_10
ST FBData.Mode (\* Set management mode \*)
LD AnaOut
ST FBData.Value (\* Store the output value \*)
CAL FBData (\* Call the SysSetAnOut function block \*)
LD FBData.Done
ST Do00M00 (\* The output is active if data is set \*)
LD FBData.Fault
ST Do01M00 (\* The output is active if execution fault \*)

Esempio ST (PTP116A100, ST_SysSetAnOut)

(\* Manage analog output 0 on module 0. \*)
FBData.Value:=AnaOut; (\* Store the ouput value \*)
FBData(Address:=0, Channel:=0, Mode:=DA_VOLT_0_10); (\* Call the SysSetAnOut function block \*)
Do00M00:=FBData.Done; (\* The output is active if data is set \*)
Do01M00:=FBData.Fault; (\* The output is active if execution fault \*)

SysGetCounter, get counter

image21

Type Library
FB XTarget_07_0

Questo blocco funzione esegue la lettura di un contatore. Il blocco funzione può essere utilizzato per acquisire il valore del contatore presente sul modulo CPU SlimLine e dai moduli che gestiscono la funzione contatore.

E” prevista la gestione del reset valore di conteggio e della inversione conteggio. In base alla definizione di Mode è possibile gestire conteggio su fronte positivo, negativo o su entrambi i fronti dell’ingresso clock del contatore. Se il modulo che gestisce il contatore lo prevede è possibile anche definire comandi hardware (Ingressi logici) di reset conteggio e di inversione conteggio.

Address (USINT)

Occorre specificare l’indirizzo di modulo da cui eseguire l’acquisizione counter (Range da 0 a 255). Il valore 0 indica il primo modulo di estensione, 1 il secondo e così di seguito. L’indirizzo 255 indica il modulo CPU.

Se viene settato un indirizzo di modulo non presente, si interrompe l’esecuzione e viene settato il bit di Fault.

Channel (USINT)

Occorre specificare l’indirizzo del canale sul modulo (Range da 0 a 15).

Se viene settato un indirizzo di canale non presente, si interrompe l’esecuzione e viene settato il bit di Fault.

Mode (UDINT)

Modo acquisizione, espresso su 32 bit secondo lo schema riportato.

Clock Input
Definisce ingresso logico da utilizzare come clock
Clock Mode
0: Conta su fronte di salita
1: Conta su fronte di discesa
2: Conta su entrambi i fronti
Reset Input | Definis
Definisce ingresso logico da utilizzare come reset
Reset Mode
0: Non è utilizzato ingresso di reset
1: Reset counter se ingresso attivo
2: Reset counter se ingresso non attivo
Reverse Input
Definisce ingresso logico da utilizzare come inversione conteggio
Reverse Mode
0: Non è utilizzato ingresso di reverse
1: Inverte conteggio di counter se ingresso attivo
2: Inverte conteggio di counter se ingresso non attivo

Per calcolare il valore di mode si applica la formula:

((Reverse mode)*2097152)+((Reverse input)*65536)+((Reset mode)*8192)+((Reset input)*256)+((Clock mode)*32)+(Clock input)

Se viene settato un valore non corretto, si interrompe l’esecuzione e viene settato il bit di Fault.

RCount (BOOL) Reverse counting, attivando questo ingresso Value viene decrementato ad ogni variazione di conteggio.
Reset (BOOL) Attivando questo ingresso si ha il reset del valore di conteggio Value.
Done (BOOL) Dato counter acquisito, viene attivato per un loop al termine della acquisizione counter.
Fault (BOOL) Errore di acquisizione, viene attivato in caso di errore nella sequenza di acquisizione.
Value (UDINT) Valore contatore.

Codici di errore

In caso di errore si attiva l’uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.

9981050 Errore allocazione blocco funzione.
9981060 Terminato spazio memoria rilocabile, non è possibile eseguire l”“FB.
9981070 Errore versione blocco funzione.
9981080 Impossibile inizializzare il modulo.
9981100 Il modulo indirizzato in Address non è presente.
9981110 Il canale definito in Channel non è gestito.
9981200~4 Il modo di gestione definito in Mode non è gestito dal modulo.
9981300~2 Errore nella gestione lettura counter dal modulo.
9981990 Non implementata nel simulatore.

Esempi

Viene eseguita l’acquisizione del contatore dal modulo CPU di SlimLine, viene eseguito il conteggio su entrambi i fronti dell’ingresso di clock. Il valore di conteggio è trasferito nella variabile Value. Su fine conversione viene attivata l’uscita digitale Do01M00 se errore di conversione viene attivata l’uscita digitale Do02M00.

Attivando l’ingresso Di00M00 viene eseguita l’inversione del conteggio ad ogni variazione dell’ingresso di clock viene decrementato il valore di Value in uscita.

Attivando l’ingresso Di01M00 viene eseguito il reset del conteggio il valore di Value in uscita è resettato.

Definizione variabili
image22

Esempio LD

image23

SysGetEncoder, get encoder input

image24

Type Library
FB XTarget_07_0

Questo blocco funzione esegue la lettura di un canale encoder. Il blocco funzione può essere utilizzato solo su sistemi che hanno moduli in grado di acquisire encoders incrementali.

E” prevista la gestione della tacca di zero e la possibilità di acquisire valori di quota all’interno di un segnale logico di gate.

Address (USINT)

Occorre specificare l’indirizzo di modulo da cui eseguire l’acquisizione encoder (Range da 0 a 15). Il valore 0 indica il primo modulo di estensione, 1 il secondo e così di seguito.

Se viene settato un indirizzo di modulo non presente, si interrompe l’esecuzione e viene settato il bit di Fault.

Channel (USINT)

Occorre specificare l’indirizzo del canale sul modulo (Range da 0 a 15).

Se viene settato un indirizzo di canale non presente, si interrompe l’esecuzione e viene settato il bit di Fault.

RCount (BOOL) Reverse counting, attivando questo ingresso si inverte l’incremento di quota EQuote in funzione della direzione di rotazione encoder.
ZeroEn (BOOL) Attivando questo ingresso si ha il reset della quota EQuote al passaggio della tacca di zero encoder.
GateEn (BOOL) Attivando questo ingresso sul fronte di variazione dell’ingresso di Gate viene trasferito il valore di EQuote in GQuote.
RGate (BOOL) Attivando questo ingresso viene gestito il fronte di disattivazione dell’ingresso Gate.
Done (BOOL) Dato encoder acquisito, viene attivato per un loop al termine della acquisizione encoder.
Fault (BOOL) Errore di acquisizione, viene attivato in caso di errore nella sequenza di acquisizione.
ZeroD (BOOL) Tacca di zero encoder acquisita, viene settata su acquisizione tacca di zero encoder, si resetta disattivando l’ingresso ZeroEn.
GateD (BOOL) Segnale di Gate acquisito, viene attivato per un loop alla acquisizione del segnale Gate.
GQuote (UINT) Quota di gate, valore di quota encoder EQuote memorizzata sul fronte selezionato del segnale Gate.
EQuote (UINT) Quota encoder, valore di quota encoder, al raggiungimento del valore minimo o massimo viene eseguito il roll over.

Codici di errore

In caso di errore si attiva l’uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.

9980050 Errore allocazione blocco funzione.
9980060 Terminato spazio memoria rilocabile, non è possibile eseguire l”“FB.
9980070 Errore versione blocco funzione.
9980100 Il modulo indirizzato in Address non è presente.
9980110~2 Il modulo indirizzato non supporta i comandi acquisizione encoder.
9980200 Il modo di gestione definito in Mode non è gestito dal modulo.
9980210~2 Errore nella gestione lettura encoder dal modulo.
9980990 Non implementata nel simulatore.

Esempi

Viene eseguita l’acquisizione dell’ingresso encoder dal canale 0 del modulo 0, il valore di quota encoder è trasferito nella variabile EncoderQte. Su fine conversione viene attivata l’uscita digitale Do00M00 se errore di conversione viene attivata l’uscita digitale Do01M00.

Definizione variabili
image25

Esempio LD (PTP116A100, LD_SysGetEncoder)

image26

Esempio IL (PTP116A100, IL_SysGetEncoder)

(\* Acquires encoder 0 from module. \*)
LD 0
ST FBData.Address (\* Set module address \*)
LD 0
ST FBData.Channel (\* Set channel \*)
LD FALSE
ST FBData.RCount (\* Reverse counting \*)
ST FBData.GateEn (\* Gate enable \*)
ST FBData.RGate (\* Reverse gate \*)
CAL FBData (\* Call the SysGetEncoder function block \*)
LD FBData.Done
ST Do00M00 (\* The output is active if data is acquired \*)
LD FBData.Fault
ST Do01M00 (\* The output is active if execution fault \*)
LD FBData.GQuote
ST GateQte (\* Gate quote \*)
LD FBData.EQuote
ST EncoderQte (\* Encoder quote \*)

Reset/Preset quota encoder

Il FB SysGetEncoder ritorna la lettura del contatore hardware a16 bits presente sulla scheda di acquisizione encoder, di cui non è possibile eseguire nè il reset né il preset.

Nella gestione della quota acquisita da un encoder molte volte è necessario gestire un valore di quota espresso su variabile a 32 bits e/o poter gestire anche il reset o il preset del valore. Tutte queste operazioni sono possibili con semplici operazioni matematiche sul valore di quota ritornato dal FB.

Nell’esempio riportato sotto vediamo come fare, il programma calcola il numero di impulsi acquisiti dall’encoder tra due esecuzioni (Può essere un valore positivo se o negativo in base alla direzione di rotazione). Il valore di impulsi viene sommato al valore di quota che è una variabile UDINT. In questo modo abbiamo una quota espressa su 32 bit ed il valore della variabile Quote può essere modificato da programma (Resettato o presettato) come si desidera.

Definizione variabili
image28

Esempio ST (PTP116A100, ST_SysGetEncoder)

(\* Execute initialization. \*)
IF (SysFirstLoop) THEN
Encoder.Address:=1; (\* Module address \*)
Encoder.Channel:=0; (\* Module channel \*)
Encoder.RCount:=FALSE; (\* Reverse count \*)
Encoder.ZeroEn:=FALSE; (\* Zero pulse enable \*)
Encoder.GateEn:=FALSE; (\* Gate enable \*)
Encoder.RGate:=FALSE; (\* Reset gate \*)
END_IF;
(\* Execute the encoder quote management. \*)
Encoder(); (\* Encode quote acquisition \*)
(\* Execute the quote management.The program counts the encoder pulses \*)
(\* between two executions and adds them to the quote value \*)
Pulses:=Encoder.EQuote-EMemo; (\* Encoder pulses \*)
EMemo:=Encoder.EQuote; (\* Encoder memo \*)
Quote:=Quote+Pulses; (\* Encoder quote \*)
(\* Beyond this point the quote value can be modified (Reset or  preset) \*)
(\* as desired. \*)

SysSetPWMOut, set PWM output

image29

Type Library
FB XTarget_07_0

Questo blocco funzione esegue l’impostazione del valore di frequenza Frequency e di duty cycle Duty sul generatore PWM indicato. Il range dei valori di frequenza e duty cycle dipendono dalla scheda utilizzata.

Impostando il valore di Frequency a 0 viene disabilitato il PWM e l’uscita viene forzata in base al valore di Duty.

Duty < 50: L’uscita viene settata a FALSE.

Duty >= 50: L’uscita viene settata a TRUE.

Address (USINT)

Occorre specificare l’indirizzo di modulo su cui eseguire la gestione del PWM (Range da 0 a 15). Il valore 0 indica il primo modulo di estensione, 1 il secondo e così di seguito. Il valore 255 indica il modulo CPU. Occorre verificare che il modulo disponga della funzione PWM ouput.

Se viene settato un indirizzo di modulo non presente, si interrompe l’esecuzione e viene settato il bit di Fault.

Channel (USINT)

Occorre specificare l’indirizzo del canale sul modulo (Range da 0 a 15).

Se viene settato un indirizzo di canale non presente, si interrompe l’esecuzione e viene settato il bit di Fault.

Frequency (REAL) Valore di frequenza in uscita (Per i limiti fare riferimento al manuale hardware della scheda utilizzata). Il valore è espresso in Hz.
Duty (REAL) Valore di duty cycle del segnale in uscita (Per i limiti fare riferimento al manuale hardware della scheda utilizzata). Il valore è espresso in %.
Done (BOOL) Generatore PWM correttamente impostato.
Fault (BOOL) Errore nella esecuzione.

Codici di errore

In caso di errore si attiva l’uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.

9951050 Errore allocazione blocco funzione.
9951070 Errore versione blocco funzione.
9951100 Il modulo indirizzato in Address non è presente.
9951110 Numero di canale non presente.
9951500 Errore esecuzione.
9951990 Non implementata nel simulatore.

Esempi

Viene impostata l’uscita Out 0 del modulo CPU per generare un segnale PWM a 100 Hz con duty cycle 50 %.

Definizione variabili
image30

Esempio LD

image31

SysPhrVRd , read variable from peripheral module

image32

Type Library
Function XTarget_07_0

Questa funzione esegue la lettura di una variabile dal modulo periferico di estensione.

Occorre definire l’indirizzo di modulo Module, l’indirizzo della variabile da leggere sul modulo periferico RdAdd, il tipo di variabile VarType e l’indirizzo del buffer dove trasferire il valore letto VarAdd.

Parametri funzione:

Module (USINT) Occorre specificare l’indirizzo di modulo da cui eseguire la lettura (Range da 0 a 15). Il valore 0 indica il primo modulo di estensione, 1 il secondo e così di seguito.
RdAdd (UINT) Indirizzo variabile da leggere come allocata sul modulo periferico.
VarType (USINT) Tipo variabile, come indicato nella tabella Variable types definition.
VarAdd (UDINT) Indirizzo variabile.

La funzione ritorna:

(BOOL) FALSE: Errore esecuzione. TRUE: Funzione eseguita correttamente.

Codici di errore

In caso di errore la funzione torna FALSE e con SysGetLastError è possibile rilevare il codice di errore.

9989100 Il modulo indirizzato in Module non è presente.
9989110 Il tipo variabile definito in VarType non è corretto.
9989200 Errore durante l’esecuzione della lettura della variabile dal modulo periferico.
9989990 Non implementata nel simulatore.

Esempi

Attivando l’ingresso Di00M00 viene eseguita la lettura della variabile UDINT da indirizzo 16 dal modulo periferico 0. Il valore della variabile è trasferito nella DB100 ad offset 8.

Definizione variabili
image33

Esempio LD

image34

SysPhrVWr , write variable to peripheral module

image35

Type Library
Function XTarget_07_0

Questa funzione esegue la scrittura di una variabile sul modulo periferico di estensione.

Occorre definire l’indirizzo di modulo Module, l’indirizzo della variabile da scrivere sul modulo periferico WrAdd, il tipo di variabile VarType e l’indirizzo del buffer dove si trova il valore da scrivere VarAdd.

Parametri funzione:

Module (USINT) Occorre specificare l’indirizzo di modulo su cui eseguire la scrittura (Range da 0 a 15). Il valore 0 indica il primo modulo di estensione, 1 il secondo e così di seguito.
WrAdd (UINT) Indirizzo variabile da scrivere come allocata sul modulo periferico.
VarType (USINT) Tipo variabile, come indicato nella tabella Variable types definition.
VarAdd (UDINT) Indirizzo variabile.

La funzione ritorna:

(BOOL) FALSE: Errore esecuzione. TRUE: Funzione eseguita correttamente.

Codici di errore

In caso di errore la funzione torna FALSE e con SysGetLastError è possibile rilevare il codice di errore.

9988100 Il modulo indirizzato in Module non è presente.
9988110 Il tipo variabile definito in VarType non è corretto.
9988200 Errore durante l’esecuzione della scrittura della variabile sul modulo periferico.
9988990 Non implementata nel simulatore.

Esempi

Attivando l’ingresso Di00M00 viene eseguita la scrittura della variabile UDINT ad indirizzo 16 sul modulo periferico 0. Il valore da scrivere è presente nella DB100 ad offset 8.

Definizione variabili
image36

Esempio LD

image37

SysI2CWrRd, writes/reads on I2C extension bus

image38

Type Library
Function XTarget_07_0

Questa funzione gestisce la scrittura/lettura sul bus I2C di estensione. L’utilizzo di questa funzione permette di poter gestire qualsiasi componente I2C connesso al bus di estensione.

Attenzione, siccome il bus I2C è utilizzato per l’accesso ai moduli di estensione per non rallentarne l’accesso si consiglia di eseguire comandi I2C non più lunghi di 4 bytes in scrittura e lettura. Nel caso serva gestire più bytes si consiglia di spezzare il comando in più comandi consecutivi.

Parametri funzione:

Address (USINT) Indirizzo dispositivo I2C range da 16#00 a 16#7F.
WrBytes (USINT) Numero di bytes dati da scrivere. 0 se solo lettura.
WrBuffer (@USINT) Indirizzo buffer memoria che contiene i dati da scrivere. NULL se solo lettura.
RdBytes (USINT) Numero di bytes dati da leggere. 0 se solo scrittura.
RdBuffer (@USINT) Indirizzo buffer memorizzazione dati letti. NULL se solo scrittura.

La funzione ritorna:

(BOOL) TRUE: Comando eseguito correttamente.

Codici di errore

In caso di errore la funzione torna FALSE e con SysGetLastError è possibile rilevare il codice di errore.

9953100 Indirizzo I2C fuori range (Valore superiore a 16#7F).
9953105 Indirizzo I2C utilizzato da un modulo di estensione.
9953990 Non implementata nel simulatore.

Esempi

E” riportato un semplice programma che esegue la lettura e scrittura di un chip I/O expander PCF9670 su bus I2C. Il chip ha indirizzo 16#38.

Definizione variabili
image39

Esempio LD

image40

StrainGaugeAcq, strain gauge acquisition

image41

Type Library
FB eLLabUtyLib_C030

Questo blocco funzione gestisce l’acquisizione da dispositivi strain gauge, all’interno viene gestito l’FB di acquisizione analogica SysGetAnInp per acquisire l’ingresso analogico di lettura strain gauge. In Address e Channel vanno definiti indirizzo ed il canale del modulo analogico di acquisizione. In Mode occorre definire il modo di acquisizione approppriato allo strain gauge da acquisire.

E” importante effettuare la taratura della acquisizione (I valori di taratura sono memorizzati nelle variabili OfsCalibration e FSCalibration). Per la taratura dell’offset collegare lo strain gauge e senza nessun peso applicato attivare per un loop DoOfsCalibration. Per la taratura del fondo scala applicare allo strain gauge un peso il più possibile prossimo al valore di fondo scala. Il valore del peso applicato va definito in FSReference, dopo un tempo di stabilizzazione lettura peso attivare per un loop DoFSCalibration.

In Mode occorre scegliere un guadagno il più alto possibile, ma facendo in modo che: (SGaugeRatio x Alim. x Mode) < Alim. dove Alim. è la tensione di alimentazione dello strain gauge. Esempio: strain gauge alimentato a 5V e con SGaugeRatio = 2mV/V. Scegliendo Mode = AD_VIN_VREF_G_128 si avrà (2mV/V * 5V * 128) = 1280mV quindi ben sotto i 5V e quindi ok.

In FilterCf è possibile definire un coefficente di filtro sulla acquisizione del peso, più il valore è grande e più il valore di peso è filtrato. Con 0, non c’è filtro lasciando la possibilità di inserire un proprio filtro personalizzato esterno.

Enable (BOOL) Abilitazione blocco funzione.
DoOfsCalibration (BOOL) Comando calibrazione offset.
DoFSCalibration (BOOL) Comando calibrazione fondo scala.
Address (USINT) Occorre specificare l’indirizzo di modulo da cui eseguire l’acquisizione dello strain gauge (Range da 0 a 15). Il valore 0 indica il primo modulo di estensione, 1 il secondo e così di seguito.
Channel (USINT) Occorre specificare l’indirizzo del canale sul modulo (Range da 0x00 a 0x0F). Se viene settato un indirizzo di canale non presente, si interrompe l’esecuzione e viene settato il bit di Fault.
Mode (USINT) Occorre specificare il modo di acquisizione analogica, Analog to digital mode.
FilterCf (REAL) Valore del coefficiente di filtro acquisizione (Nr)
FSReference (REAL) Valore riferimento utilizzato per la taratura del fondo scala dello strain gauge (Nr)
SGaugeFullScale (REAL) Valore di fondo scala dello strain gauge (Caratteristica dello strain gauge) (Nr)
SGaugeRatio (REAL) Valore del rapporto mv/V dello strain gauge (Caratteristica dello strain gauge) (Nr)
OfsCalibration (@REAL) Indirizzo variabile di appoggio valore di calibrazione offset (Deve essere RETAIN)
FSCalibration (@REAL) Indirizzo variabile di appoggio valore di calibrazione fondo scala (Deve essere RETAIN)
Enabled (BOOL) Blocco funzione abilitato.
Done (BOOL) Dato acquisito, viene attivato al termine della acquisizione strain gauge.
Fault (BOOL) Errore di acquisizione, viene attivato in caso di errore nella sequenza di acquisizione.
Value (REAL) Ritorna il valore di acquisizione espresso nella unità utilizzata per definire FSReference e SGaugeFullScale.

Codici di errore

In caso di errore viene attivato per un loop Fault e con SysGetLastError è possibile rilevare il codice di errore.

10045100 Valore di Mode acquisizione non corretto.

Esempi

Nell’esempio viene acquisita una cella di carico con fondo scala da 20 Kg e 1.956 mv/V. La cella viene tarata con un peso di riferimento da 400 grammi. Attivando Di00M00 viene abilitata l’acquisizione, gli ingressi Di01M00 e Di02M00 permettono di calibrare la cella (Attenzione le variabili OfsCalibration e FSCalibration devono essere definite RETAIN). Nella variabile Weight viene ritornato il peso. Avendo definito SGaugeFullScale in Kg anche Value sarà espresso in Kg.

Definizione variabili
image42

Esempio LD

image43