Pergunta

Eu tenho um dispositivo (indicador digital) que estou me comunicando com o uso da classe Serialport. A documentação do dispositivo afirma que preciso ter um atraso de 250 milissegundos entre as gravações. Existe uma maneira de aplicar isso sem colocar atraso extra no sistema? Eu sei que isso provavelmente parece que estou me preocupando muito com algo muito pequeno, mas há três desses indicadores e está lendo -os com bastante frequência, mas não o tempo todo. Basicamente, existe uma boa maneira de aplicar que você não envia novamente em menos de 250 milissegundos, mas se tiver sido 5 segundos e eu tento enviar, não quero adiar 250 milissegundos adicionais sem motivo.

Pensamentos?

Foi útil?

Solução

Você deve ter algum tipo de classe com o objetivo de escrever na porta serial, talvez um único ponto de escrita (uma função de WritEtoport ou algo assim).

Nisso, você pode economizar o horário atual toda vez que escrever e usar a lógica no atraso para isso. ASSIM:

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;
}

Outras dicas

A suspender do tópico deve funcionar para você:

System.Threading.Thread.Sleep(250);

No entanto, isso pode ser um pouco impreciso, pois você não pode garantir a próxima vez que seu tópico for agendado. Se você precisar de horários precisos, é melhor usar o Spin Waits.

Pegue um registro de data e hora antes de cada transmissão. Durma para os milissegundos de 250 (agora - então) (presos em zero, obviamente). Parece ser o que você está pedindo.

Se, em vez disso, você estiver preocupado com coisas como problemas de agendamento do sistema operacional, fazendo horários que não são 250ms, em média, ou mais do que um pouquinho de 250ms exatamente, então você tem um problema mais difícil em nossa mão e precisará ler em técnicas difíceis em tempo real (e talvez compre algum hardware extra).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top