我可能只是有你今天聽到的最奇怪的錯誤。串口通信中的錯誤
我有一個(很長)的方法在一個線程內,它發送格式化數據到RS232 LED顯示。
它應該顯示像這樣
TITLE
SUBTITLE 1
ELEMENT 1
ELEMENT 2
SUBTITLE 2
ELEMENT 1
ELEMENT 2
ELEMENT 3
很好,每一個在它自己的消息。
我在每條消息之後調用Thread.Sleep(N)(因此每條消息都顯示N次)。
- N爲秒數
好,一切都很好直到現在。問題是,如果(10 <= N <= 20)
我得到以下輸出:
TITLE
TITLE
TITLE
TITLE
TITLE
TITLE
TITLE
TITLE
我能聽到嗶當我發送消息。我甚至安裝了串口監視器,以檢查我發送的信息是否相同。
所以纔來概括:
寫作上的串行端口工作沉睡線程對於n = < 9或N> = 20任何東西之間會產生錯誤的輸出,後一樣,如果輸出被緩存或東西
這是什麼?
更新
- 好吧,我知道System.Threading.Sleep採用毫秒作爲參數。只需將數字乘以1000即可。
- 每當led顯示屏收到格式良好的新消息時,都會發出嘟嘟聲。我應該澄清一點。
這裏是一個片段(這發出了第一個冠軍)
using (var ld = new LedScreen(COM))
{
ld.AddEffect(LedScreen.Effects.Snow);
ld.AddText(LedScreen.Colors.Red, titulos[ThreadControl.Fase]);
ld.AddEffect(LedScreen.Effects.DSnow);
ld.Write();
}
//Console.WriteLine(titulos[ThreadControl.Fase]);
//esperamos N tiempo (titulo)
Thread.Sleep(TiempoTitulo);
我寫的LedScreen類。 write方法是這樣的一個:
public void Write()
{
//caracteres de terminacion
buffer.AddRange(new byte[] { 0xBF, 0xB1 });
try
{
if (!sp.IsOpen) sp.Open();
sp.Write(buffer.ToArray(), 0, buffer.Count);
}
finally
{
sp.Close();
}
}
更新2
我終於得到它的工作
每個之前寫串口,我送(醜陋的修復,但MEH)。一個沒有延遲的「空白」信息。這會在發送實際消息之前清除屏幕。萬歲!它適用於任何數量的秒我睡覺線程
你能發佈一個圍繞睡眠和發送串行消息的代碼片段嗎? – 2010-02-09 20:43:00
從.NET 2.0開始,串行通信組件有一個已知的問題......它希望它可以在.NET 3.5中解決,但是不會...... – t0mm13b 2010-02-09 20:43:49
在你的問題中沒有任何東西可以讓任何人診斷出什麼問題可能。找出「嘟嘟」的含義。 SerialPort不會發出嗶聲。 – 2010-02-09 20:44:59