0

RS-232 직렬 포트를 통해 통신하는 산업용 계측기를 제어하는 ​​프로젝트를 시작했습니다. 통신 속도는 9600 ... 상당히 느립니다.직렬 통신 기반 계측기 제어 애플리케이션을위한 아키텍처 제안

이 계측기는 폴링 모드 (PC가 요청을 보내고 계측기가 데이터로 응답하는 모드)에서 작동 할 수 있습니다. 또는 계측기가 일정한 스트림 데이터를 전송하는 연속적입니다. 데이터를 ASCII에서 부동 소수점 숫자로 변환하고 플롯해야합니다.

SerialPort DataRecieved 이벤트를 사용하는 샘플 프로그램을 사용한 나의 초기 실험은 길조가 아니 었습니다 ... 계측기의 연속 전송으로 인해 사용자 인터페이스가 응답하지 않게하는 것이 매우 쉬웠습니다.

별도의 작업 등을 생성하는 다른 샘플 프로젝트를 살펴 봤지만 모두 상당히 복잡해 보였습니다. 특히 최신 .NET 런타임 (4.5 버전)의 기능이 더 좋은지 궁금합니다. .1 내가 이것을 쓴 것처럼).

비동기 API 및 데이터 흐름은 특히 이러한 유형의 응용 프로그램에 유망한 것으로 보입니다. 데이터 수신을 위해 Async API를 실험하기 시작했습니다. 코드는 매우 간단하지만 강력하게 만드는 데 문제가 있습니다 (예외 처리).

가장 간단한 접근법은 비동기 메서드를 사용하여 데이터를 일종의 스레드 안전 큐로 구문 분석하는 것입니다.이 대기열은 플로팅을 위해 UI에 이벤트를 발생시킵니다. 그러나 나는 아직도 세부 사항을 연구 중이다.

이 문제를 해결하는 가장 좋은 방법에 대한 제안을 찾고 있습니다.

+0

, 사용자 인터페이스가 응답하게 종류를이 문서를 추천 할 것입니다. 그건 highfalutin 아키텍처는 필요 없지만 단순히 코드를 수정하면됩니다. 우리는 그것을 볼 수 없다. –

답변

1

할 일이 많지 않으므로 TPL-Dataflow 위에 구축 된 Rx (Reactive) 프레임 워크를 사용하는 것이 좋습니다. Rx는 데이터 스트림을 처리하는 측면에서 훨씬 더 많은 유연성을 제공합니다 (이벤트 스트림의 경우 Linq로 생각하십시오). 반면 DataFlow는 동시성을 미세하게 제어하려는 데이터 파이프 라인을 설정하는 데 더 적합합니다.

최근 GPS 리더를 연결, 비슷한 문제에 직면하는 데, 나는 다음과 같은 아키텍처 ....

  • 악기에 인터페이스 할 수있는 독립 스레드를 설정을 건의 할 것입니다.
  • 이 스레드의 이벤트 처리기를 통해 새 판독 값을 노출 할 수 있습니다.
  • 그런 다음 Observable.FromEventPattern 메서드를 사용하여 Rx ​​Observable 스트림을 구성 할 수 있습니다.
  • 이 스트림의 구독자는 원시 데이터를 원하는 형식으로 변경할 수 있습니다. 실제로 다른 가입자가 필요에 따라 완전히 다른 형태로 변형시킬 수 있습니다.
  • 궁극적으로 UI로 끝나기 때문에 구독자가 UI와 상호 작용할 시점에서 ObserveOnDispatcher를 사용해야합니다.

더 자세한 내용은, 난 강력하게 ... 나쁜 코드를 작성하는 것은 매우 쉽습니다 http://go.microsoft.com/fwlink/?LinkId=208528