我可能只是有你今天听到的最奇怪的错误。串口通信中的错误
我有一个(很长)的方法在一个线程内,它发送格式化数据到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