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 Power x Mode) < Power dove Power è 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.
Descrizione
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).
Mode (AI_MODE) Occorre specificare il modo di acquisizione analogica (Definizione). Sono utilizzabili solo i modi AD_VIN_VREF_G_x.
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 del sensore, cioè carico massimo nominale misurabile, dipende dal sensore (kg, N, t, ecc.).
SGaugeRatio (REAL) Sensibilità dello strain gauge espressa in mV/V (millivolt per volt). È il rapporto tra il segnale di uscita a fondo scala e la tensione di alimentazione del ponte estensimetrico (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.

Come funziona il FB
Il FB acquisisce la tensione di uscita dello strain gauge e la confronta con la sua tensione di alimentazione tramite una misura ratiometrica. La tensione acquisita utilizzata per il calcolo del peso è definita dalla seguente formula:
VAcq=(VOut/VPower)*Gain
- VAcq: Voltage acquired, tensione acquisita
- VOut: Voltage output, tensione in uscita strain gauge
- VPower: Voltage power, tensione alimentazione strain gauge
- Gain: Guadagno acquisizione A/D
Dal valore acquisito utilizzando la caratteristica dello strain gauge è possibile ricavare il peso con la formula:
Weight=(VAcq/(Gain*SGaugeRatio))*SGaugeFullScale
- Weight: Peso acquisito
- VAcq: Voltage acquired, tensione acquisita
- Gain: Guadagno acquisizione A/D
- SGaugeRatio: Sensibilità (mV/V) dello strain gauge
- SGaugeFullScale: Valore di fondo scala dello strain gauge
Calibrazione acquisizione
Calibrazione offset: Questa calibrazione permette di correggere eventuali errori di offset sullo strain gauge e sul canale di acquisizione. Occorre avere lo strain gauge in condizione di riposo (Nessuna forza applicata), attivando DoOfsCalibration il valore di offset verrà salvato nella variabile indirizzata da OfsCalibration (Deve essere RETAIN) ed utilizzato per la correzione dell’offset in acquisizione.
Calibrazione scala: Questa calibrazione permette di correggere eventuali errori di scala sullo strain gauge e sul canale di acquisizione. Occorre aplicare sullo strain gauge una forza (Peso, pressione, ecc) il più vicino possibile al suo valore di fondo scala, attivando DoFSCalibration il valore rilevato verrà salvato nella variabile indirizzata da FSCalibration (Deve essere RETAIN) ed utilizzato per la correzione della scala in acquisizione.
Collegamento StrainGauge su PCB126
Il cablaggio degli strain gauges è una delle fasi più critiche poiché il sensore varia la sua resistenza di frazioni millesimali di ohm, qualsiasi errore di cablaggio introduce rumore che ne compromette la misura. I cavi di collegamento possono trasformarsi in “sensori parassiti” se non scelti correttamente, quindi usare sempre cavi schermati e a coppie attorcigliate (twisted pair) per proteggere il segnale dai disturbi elettromagnetici (EMI), specialmente se i cavi passano vicino a motori o inverter.
Gli ingressi a cui è collegato lo strain gauge devono essere configurati per acquisizione 0-1V come da schema a lato. L’ingresso Ai03 è utilizzato dal FB per l’acquisizione alimentazione dello strain gauge, anche se configurato per acquisizione 0-1V può acquisire tensioni fino a 5V. L’ingresso di è unico per tutti i canali, quindi se sono acquisiti più strain gauges devono avere tutti la stessa alimentazione.
I canali non utilizzati per l’acquisizione dello strain gauge possono essere configurati ed utilizzati per tuti gli altri tipi di acquisizione.
Errori
In caso di errore eseguendo immediatamente dopo la funzione SysGetLastError è possibile rilevare il codice di errore.
Esempi
ST_StrainAcqTest: Viene configurata una acquisizione di test per permettere di fornire una tensione da 0 a 1V all’ingresso Ai00 e rilevare i rispettivi valori di peso.
ST_StrainGaugeAcq: 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. Per la calibrazione agire da debug sui segnali DoOfsCalibration e DoFSCalibration attenzione alla definizione delle variabili OfsCalibration e FSCalibration che devono essere definite RETAIN (Nell’esempio per semplicità non lo sono). In Value viene ritornato il peso acquisito, avendo definito SGaugeFullScale in Kg il peso verrà ritornato in Kg.
LogicLab (Ptp114, ST_StrainAcqTest)
PROGRAM ST_StrainAcqTest
VAR
OfsCalibration : REAL; (* Offset calibration buffer *)
FSCalibration : REAL; (* Full scale calibration buffer *)
AOut : SysSetAnOut; (* Analog output management *)
SGAcq : StrainGaugeAcq; (* Strain gauge acqisition *)
END_VAR
// *****************************************************************************
// PROGRAM "ST_StrainAcqTest"
// *****************************************************************************
// This program tests a strain gauge acquisition system. The strain gauge is
// powered at 5V and the FB parameters are set as follows:
//
// SGaugeFullScale and FSReference are set to 20 Kg.
// SGaugeRatio is set to 1000 mV/V.
// OfsCalibration variable is set to 0.0 to disable offset correction.
// FSCalibration variable is set to 20 kg, matching the value of SGaugeFullScale.
// SGAcq.Mode:=AI_MODE#AD_VIN_VREF_G_1 set acquisition gain to 1.
//
// With Ai00 at 5V, weight corresponds to the strain gauge full scale (20 kg).
// The equivalent weight at different Ai00 voltage values can be calculated
// using the formula: (SGaugeFullScale/PowerVoltage)*Ai00Voltage
//
// Here are some weight acquisition examples with different voltages on Ai00:
//
// With 100 mV, the weight will be 0.4 kg.
// With 500 mV, the weight will be 2.0 kg.
// With 1 V, the weight will be 4.0 kg.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// INITIALIZATION
// -------------------------------------------------------------------------
// Program initializations.
IF (SysFirstLoop) THEN
OfsCalibration:=0.0; //Offset calibration buffer
FSCalibration:=20.0; //Full scale calibration buffer
// Strain gauge acquisition.
SGAcq.Enable:=TRUE; //Enable
SGAcq.Address:=0; //Module address
SGAcq.Channel:=0; //Acquisition channel
SGAcq.Mode:=AI_MODE#AD_VIN_VREF_G_1; //Acquisition mode
SGAcq.FilterCf:=100.0; //Filter coefficent
SGAcq.FSReference:=20; //Full scale reference
SGAcq.SGaugeFullScale:=20.0; //Full scale strain gauge
SGAcq.SGaugeRatio:=1000.0; //Strain gauge ratio mV/V
SGAcq.OfsCalibration:=ADR(OfsCalibration); //Offset calibration buffer
SGAcq.FSCalibration:=ADR(FSCalibration); //Full scale calibration buffer
// Power output.
AOut.Address:=0; //Module address
AOut.Channel:=0; //Module channel
AOut.Mode:=AO_MODE#DA_VOLT_0_10; //Output mode
AOut.Value:=5.0; //Output value
END_IF;
// -------------------------------------------------------------------------
// STRAIN GAUGE ACQUISITION
// -------------------------------------------------------------------------
// Strain gauge acquisition
AOut(); //Analog output management
SGAcq(); //Strain gauge acqisition
// [End of file]
LogicLab (Ptp114, ST_StrainGaugeAcq)
PROGRAM ST_StrainGaugeAcq
VAR
OfsCalibration : REAL; (* Offset calibration buffer *)
FSCalibration : REAL; (* Full scale calibration buffer *)
SGAcq : StrainGaugeAcq; (* Strain gauge acqisition *)
AOut : SysSetAnOut; (* Analog output management *)
END_VAR
// *****************************************************************************
// PROGRAM "ST_StrainGaugeAcq"
// *****************************************************************************
// This program acquires data from a strain gauge. An analog I/O module is used
// to power the strain gauge.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// INITIALIZATION
// -------------------------------------------------------------------------
// Program initializations.
IF (SysFirstLoop) THEN
// Strain gauge acquisition.
SGAcq.Address:=0; //Module address
SGAcq.Channel:=0; //Acquisition channel
SGAcq.Mode:=AI_MODE#AD_VIN_VREF_G_128; //Acquisition mode
SGAcq.FilterCf:=100.0; //Filter coefficent
SGAcq.FSReference:=0.4; //Full scale reference
SGAcq.SGaugeFullScale:=20.0; //Full scale strain gauge
SGAcq.SGaugeRatio:=1956.0; //Strain gauge ratio
SGAcq.OfsCalibration:=ADR(OfsCalibration); //Offset calibration buffer
SGAcq.FSCalibration:=ADR(FSCalibration); //Full scale calibration buffer
// Power output.
AOut.Address:=0; //Module address
AOut.Channel:=0; //Module channel
AOut.Mode:=AO_MODE#DA_VOLT_0_10; //Output mode
AOut.Value:=5.0; //Output value
END_IF;
// -------------------------------------------------------------------------
// STRAIN GAUGE ACQUISITION
// -------------------------------------------------------------------------
// Strain gauge acquisition
SGAcq(); //Strain gauge acqisition
AOut(); //Analog output management
// [End of file]
