Acquisizione di ingressi analogici con il pLtouch 101g

Il video ed il progetto d’esempio che vi vogliamo presentare in questo post riguarda un esempio di Automazione Industriale con Android.

In particolare verrà spiegato come leggere valori analogici e rappresentarli a video utilizzazando il pLtouch 101gVi voglio ricordare appunto che il pLtouch 101g ha di serie 12 ingressi digitali, 8 uscite a relè, 2 uscite analogiche e 4 ingressi analogici.

Passiamo all’esempio pratico:
Colleghiamo il nostro dispositivo in corrente come in figura ( noi utlizziamo trasduttore di pressione mod. bmTR01), non esclude comunque il collegamento di tutti i dispositivi in corrente a due o tre fili (per il collegamento degli ingressi vedi pagina wiki).
Alimentiamo il pLtocuch 101g a 24Vdc tramite i morsetti estraibili nel retro del case.

Fatto questo apriamo l’IDE di eclipse.
Supponiamo abbiate già creato un progetto Android, se così non fosse prego di leggere il blog, importato e inizializzata la libreria Pltouch (leggete il nostro articolo in merito). Ciò serve a far implementare alla vostra Activity l’interfaccia PltouchListener. Grazie a questo potete mettere il vostro codice all’interno della callback onLogicExecution, come per esempio:

public class MainActivity extends Activity implements PlTouchListener, OnClickListener {
	private int val1,val2,val3,val4;
	private PltouchManager pManager;
	private TextView analog1,analog1_mA;
	private TextView analog2,analog2_mA;
	private int index;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		pManager = new PltouchManager(this);
		pManager.setDebug(true);
		pManager.initialize();
		pManager.addListener(this);

         };

Il codice inserito all’interno della callback onLogicExecution sarà eseguito in maniera sequenziale, un numero infinito di volte indipendentemente da tutto il resto. Una cosa importante da sapere è che tutte le chiamate inserite all’interno del metodo saranno eseguite in un thread diverso da quello della UI: Ciò implica che se volete aggiornare un qualche widget grafico dall’interno della onLogicExecution, dovete utilizzare una chiamata a runOnUiThread, come nell’esempio che segue:

@Override
	public void onLogicExecution() {
		Log.d("Pltouch", "on logic execution");

		runOnUiThread(new Runnable() {

		@Override
			public void run() {
				analog1= (TextView) findViewById(R.id.textView1);
				analog1_mA= (TextView) findViewById(R.id.textView2);

				analog2= (TextView) findViewById(R.id.textView6);
				analog2_mA= (TextView) findViewById(R.id.textView8);

				try {
					// read analog value
					val1 = pManager.analogRead(1);
					val2 = pManager.analogRead(2);
					val3 = pManager.analogRead(3);
					val4 = pManager.analogRead(4);

			} catch (IndexOutOfBounds e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (ConnectionError e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

				analog1.setText(String.valueOf(val1));
				double mA1 = (val1/202.60)+0.02;
				DecimalFormat df = new DecimalFormat("#.00");
				analog1_mA.setText(String.valueOf(df.format((double)mA1/1.00)));

				analog2.setText(String.valueOf(val2));
				double mA2 = (val2/202.60);
				analog2_mA.setText(String.valueOf(df.format((double)mA2/1.00)));
			}
		});
	}

Ho volutamente scelto di non concentrarmi su aspetti di design delle interfacce, ma bensì sugli aspetti più tecnici del progetto. Potreste essere voi, lettori, che attraverso la vostra fantasia create la miglior interfaccia che risponda alle vostre necessità.

Andiamo ad analizzare il codice nel dettaglio:
Andiamo a leggere il valore degli ingressi analogici e li appoggiamo su quattro variabili val1, val2, val3, val4 che poi ci tornano utili per convertire il valore in corrente e rappresentarlo a video.

val1 = pManager.analogRead(1);
val2 = pManager.analogRead(2);
val3 = pManager.analogRead(3);
val4 = pManager.analogRead(4);

Come si vede basta semplicemente richiamare la libreria pManager.analogRead e assegnargli il riferimento dell’ingresso analogico.

Come da figura :

1 = primo ingresso analogico morsetto VA0
2 = secondo ingresso analogico morsetto VA1
3 = terzo ingresso analogico morsetto VA2
4 = quarto ingresso analogico morsetto VA3

Rappresentiamo a video il valore letto a 12 bit degli ingressi analogici:

analog1.setText(String.valueOf(val1));

Per convertirlo proporzionalmente al valore di corrente andiamo a dividerlo per 202,60 e poi lo rappresentiamo a video .

double mA2 = (val2/202.60);
analog2_mA.setText(String.valueOf(df.format((double)mA2/1.00)));

Da questo punto potete ampliare il progetto creando delle logiche in funzione degl ingressi analogici.
Nel prossimo blog vi presenteremo l’aquisizione degli ingressi digitali.