allora avevo pensato di fare cosi:
public delegate void Aggiorna(string argValue);
private void _Leggi()
{
while (true)
{
sp.Write(">erFF??!");
byte[] ByteLetti = new byte[1];
if (sp.BytesToRead > 0)
{
Array.Resize(ref ByteLetti, sp.BytesToRead);
sp.Read(ByteLetti, 0, ByteLetti.Length);
s_ricevi = System.Text.Encoding.ASCII.GetString(ByteLetti);
this.Invoke(new Aggiorna(_Aggiorna), s_ricevi);
this.Invoke(new Aggiorna(stato), s_ricevi);
}
Thread.Sleep(100);
}
}
questo thread invia il protocollo di lettura: ">erFF??!" dove il carattere "e" indica che viene interrogata la scheda numero 1, se si vuole interrogare la 2 sara': ">frFF??!".
come risposta, su argvalue ho un protocollo del tipo: <e000000AAAAAA000007 che contiene llo stato degli ingressi e delle uscite della scheda.
volevo aggiungere un thread che contiene questo codice:
che calcola il valore delle uscite (ODhex) di una scheda dica all altro thread di inviare al posto del solito protocollo il valore di protscritt in caso che questo sia diverso dallo stato delle uscite della scheda.
Premetto che non so quante schede ci sono, al massimo ce ne sono 256 (questo lo comunichero' al software con un file di configurazione da leggere ad ogni avvio di programma.
- e' fattibile il mio pensiero o devo fare in modo diverso?
- non ho tnta dimestichezza con i thread, se e' fattibile potreste darmi un aiutino? magari gudandomi
- secondo voi e' meglio usare lo stesso thread (il secondo) per tutte le schede (modificando "indasc") o e' meglio creare un thread per ogni scheda?
Vi ringrazio per l' aiuto che mi darete