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 <#FctSysGetLastError>`__ è 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 <#TabDIModeDefs>`__. | +-----------------------------------+-----------------------------------+ | **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 <#FctSysGetLastError>`__ è 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)* .. code-block:: none (\* 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)* .. code-block:: none (\* 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 <#FctByteToBit>`__ 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 <#TabDOModeDefs>`__. | +-----------------------------------+-----------------------------------+ | **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 <#FctSysGetLastError>`__ è 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)* .. code-block:: none (\* 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)* .. code-block:: none (\* 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 <#TabADModeDefs>`__. | +-----------------------------------+-----------------------------------+ | **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 <#FctSysGetLastError>`__ è 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)* .. code-block:: none (\* 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)* .. code-block:: none (\* 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 <#TabDAModeDefs>`__. | +-----------------------------------+-----------------------------------+ | **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 <#FctSysGetLastError>`__ è 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)* .. code-block:: none (\* 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)* .. code-block:: none (\* 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 <#FctSysGetLastError>`__ è 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 <#FctSysGetLastError>`__ è 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)* .. code-block:: none (\* 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)* .. code-block:: none (\* 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 <#FctSysGetLastError>`__ è 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 <#TabVarTypeDefs>`__. | +-----------------------------------+-----------------------------------+ | **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 <#FctSysGetLastError>`__ è 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 <#TabVarTypeDefs>`__. | +-----------------------------------+-----------------------------------+ | **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 <#FctSysGetLastError>`__ è 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 <#FctSysGetLastError>`__ è 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 <#TabADModeDefs>`__. | +-----------------------------------+-----------------------------------+ | **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 <#7.8.4.SysGetLastError, get last error|outline>`__ è 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| .. |image0| image:: media/image1.jpg :width: 1.43681in :height: 0.81528in .. |image1| image:: media/image2.jpg :width: 7.08681in :height: 0.33889in .. |image2| image:: media/image3.jpg :width: 7.08681in :height: 1.23611in .. |image3| image:: media/image4.jpg :width: 1.10625in :height: 0.91736in .. |image4| image:: media/image5.jpg :width: 7.08681in :height: 0.91319in .. |image5| image:: media/image6.jpg :width: 7.08681in :height: 1.55139in .. |image6| image:: media/image7.jpg :width: 7.08681in :height: 1.43681in .. |image7| image:: media/image8.jpg :width: 7.08681in :height: 4.43681in .. |image8| image:: media/image9.jpg :width: 1.08264in :height: 1.03125in .. |image9| image:: media/image10.jpg :width: 7.08681in :height: 0.91319in .. |image10| image:: media/image11.jpg :width: 7.08681in :height: 1.74792in .. |image11| image:: media/image12.jpg :width: 1.30347in :height: 0.87431in .. |image12| image:: media/image13.jpg :width: 7.08681in :height: 0.7125in .. |image13| image:: media/image14.jpg :width: 7.08681in :height: 1.55139in .. |image14| image:: media/image13.jpg :width: 7.08681in :height: 0.7125in .. |image15| image:: media/image14.jpg :width: 7.08681in :height: 1.55139in .. |image16| image:: media/image15.jpg :width: 1.30347in :height: 1.06319in .. |image17| image:: media/image16.jpg :width: 7.08681in :height: 0.7125in .. |image18| image:: media/image17.jpg :width: 7.08681in :height: 1.53542in .. |image19| image:: media/image16.jpg :width: 7.08681in :height: 0.7125in .. |image20| image:: media/image17.jpg :width: 7.08681in :height: 1.53542in .. |image21| image:: media/image18.jpg :width: 1.08264in :height: 1.22847in .. |image22| image:: media/image19.jpg :width: 7.08681in :height: 0.52361in .. |image23| image:: media/image20.jpg :width: 7.08681in :height: 1.83889in .. |image24| image:: media/image21.jpg :width: 1.27986in :height: 1.42917in .. |image25| image:: media/image22.jpg :width: 7.08681in :height: 0.87431in .. |image26| image:: media/image23.jpg :width: 7.08681in :height: 2.2125in .. |image27| image:: media/image24.jpg :width: 7.08681in :height: 0.91319in .. |image28| image:: media/image24.jpg :width: 7.08681in :height: 0.91319in .. |image29| image:: media/image25.jpg :width: 1.06319in :height: 1.04306in .. |image30| image:: media/image26.jpg :width: 7.08681in :height: 0.72431in .. |image31| image:: media/image27.jpg :width: 7.08681in :height: 1.81111in .. |image32| image:: media/image28.jpg :width: 1.43681in :height: 0.98056in .. |image33| image:: media/image29.jpg :width: 7.08681in :height: 0.35069in .. |image34| image:: media/image30.jpg :width: 7.08681in :height: 1.73611in .. |image35| image:: media/image31.jpg :width: 1.45694in :height: 0.99236in .. |image36| image:: media/image32.jpg :width: 7.08681in :height: 0.35069in .. |image37| image:: media/image33.jpg :width: 7.08681in :height: 1.74028in .. |image38| image:: media/image34.jpg :width: 1.62569in :height: 1.15764in .. |image39| image:: media/image35.jpg :width: 7.08681in :height: 0.89792in .. |image40| image:: media/image36.jpg :width: 7.08681in :height: 1.74792in .. |image41| image:: media/image37.jpg :width: 2.09444in :height: 2.48056in .. |image42| image:: media/image38.jpg :width: 7.08681in :height: 0.55139in .. |image43| image:: media/image39.jpg :width: 7.08681in :height: 4.1375in