오늘 들었던 가장 이상한 버그가있을 수 있습니다.직렬 포트 통신의 버그
나는 형식이 지정된 데이터를 RS232 LED 디스플레이로 전송하는 스레드 안에이 (매우 긴) 방법을 가지고 있습니다.
그것은 잘이
TITLE
SUBTITLE 1
ELEMENT 1
ELEMENT 2
SUBTITLE 2
ELEMENT 1
ELEMENT 2
ELEMENT 3
, 그것의 자신의 메시지에 각각 같은 것을 표시해야합니다.
각 메시지 다음에 Thread.Sleep (N)이 호출됩니다 (각 메시지가 N 번 표시되도록).
- 는 N은
좋아, 모두가 지금까지 괜찮 초되고. 나는 메시지를 보낼 때
TITLE
TITLE
TITLE
TITLE
TITLE
TITLE
TITLE
TITLE
내가 경고음을들을 수 있습니다 : 문제는 (10 <= N <= 20)
만약 내가 다음과 같은 출력을 얻을 수 있다는 것입니다. 나는 심지어 내가 보낸 정보가 똑같은지 확인하기 위해 시리얼 포트 모니터를 설치했다.
쓰기를 직렬 포트에 N에 대한 < = 9 잘못된 출력을 생성합니다 사이에서 N> = 20 건을 실을 자고 후 출력 캐시 또는 뭔가했다 작동하는 경우처럼
이것은 무엇입니까?
업데이트
- 좋아, 내가 System.Threading.Sleep 인수로 밀리 초 소요 알고있다. 그 숫자에 1000을 곱하면됩니다.
- LED 디스플레이가 잘 형식화 된 새로운 메시지를 수신 할 때마다 경고음이납니다. 나는 그것을 분명히해야만했다. 여기
은 내가 LedScreen 클래스를 작성 (이것은 첫 타이틀을 전송)
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);
코드 조각입니다. 쓰기 방법은 이것이다 : 나는 마침내 그것이 작동있어 2
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();
}
}
업데이트 각 전에
직렬 포트에 쓰기, 내가 보내 (추한 수정하지만, MEH합니다.) 지체없이 "공백"메시지. 실제 메시지를 보내기 전에 화면을 지 웁니다. 만세! 그리고 그것은 내가 잠드는 시간 (초)에 상관없이 작동합니다.
수면을 감추고 직렬 메시지를 보내는 코드 스 니펫을 게시 할 수 있습니까? –
.NET 2.0 이후 직렬 통신 구성 요소에는 알려진 문제점이 있습니다 ... .NET 3.5에서 해결 될 것으로 기대되었지만 희망이 없습니다 ... – t0mm13b
문제가 누구인지 진단 할 수있는 질문은 없습니다 아마도. "삐"가 무엇을 의미하는지 알아보십시오. SerialPort는 신호음을 내지 않습니다. –