Domanda

Ho un dispositivo (indicatore digitale) che sto comunicando con utilizzando la classe SerialPort. La documentazione del dispositivo afferma che ho bisogno di avere un ritardo di 250 millisecondi tra le operazioni di scrittura. C'è un modo per far rispettare questo senza mettere ritardo extra nel sistema? So che questo suona forse come sto preoccuparsi troppo di qualcosa che è veramente piccolo, ma ci sono tre di questi indicatori ed è una lettura di loro molto spesso, ma non tutto il tempo. In sostanza, c'è un buon modo per far rispettare che non inviare di nuovo in meno di 250 millisecondi, ma se è stato 5 secondi e cerco di inviare, non voglio ritardare altri 250 millisecondi per nessun motivo.

Pensieri?

È stato utile?

Soluzione

Si dovrebbe avere una sorta di classe per lo scopo di scrivere alla porta seriale, forse un unico punto di scrittura (una funzione WriteToPort o qualcosa del genere).

In questo, si potrebbe risparmiare il tempo corrente ogni volta che si scrive, quindi utilizzare la logica sul ritardo per questo. SO:

DateTime lastWritten;
TimeSpan timeBetweenWrites = new Timespan(0,0,0,0,250);
void WriteToDevice(string data)
{
    TimeSpan sinceLastWrite=DateTime.Now-lastWritten;
    if(sinceLastWrite<timeBetweenWrites)
        Thread.Sleep(timeBetweenWrites-sinceLastWrite);
    SerialPort.Write(data);
    lastWritten=DateTime.Now;
}

Altri suggerimenti

Sospendere il filo dovrebbe funzionare per voi:

System.Threading.Thread.Sleep(250);

Tuttavia, questo può essere un po 'imprecisi in quanto non è possibile garantire la prossima volta che il thread sta per essere programmato. Se avete bisogno di tempi precisi, è meglio utilizzare attese di spin.

Fetch un timestamp prima di ogni trasmissione. Sonno per i 250 (ora - allora) millisecondi (bloccato a zero, ovviamente). Che sembra essere quello che stai chiedendo.

Se, invece, siete preoccupati per le cose come problemi di pianificazione del sistema operativo fare tempi che non sono 250ms in media, o più che un pochino fuori dal 250ms esattamente, allora avete un problema più difficile per la nostra mano e di cui avrete bisogno di leggere su tecniche di hard real time (e forse l'acquisto di hardware aggiuntivo).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top