2011-01-24 3 views
0

VB.NET 2010, .NET 4VB.NET 구문 분석 직렬 데이터 비동기, 나는이의 논리와 고투 한 경우

안녕하세요,

에 공유 기능에서 데이터를 가져 오는 동안과 약간의 통찰력을 기대했다.

저는 컴퓨터에 연결된 많은 장치로 구성된 산업 기계를 제어하기위한 응용 프로그램을 개발 중입니다. 합리적인면에서 가장 좋지만 RS-232 장치에 대해 생각하는 데 어려움을 겪고 있습니다. RS-232 장치 중 하나는 많은 기능을 갖춘 멋진 전원 공급 장치입니다. 현재 적절한 것은 전압 읽기, 전압 쓰기, 전류 읽기 및 전류 쓰기입니다.

내가 구현하기 위해 노력하고있어 디자인 패턴은 각 연결 장치가이 전원 공급 장치에 대한 읽기/등 및 COM 포트 같은 것들에 대한 속성 작성 등

방법이있는 객체로 표현되는 하나입니다 포트 참조를 인스턴스간에 공유해야하므로 Protected Shared Property Port As IO.Ports.SerialPort라는 기본 클래스 (예 : PowerSupply)가 있습니다. 그런 다음이 클래스에서 상속받은 PowerSupplyVoltage 및 PowerSupplyCurrent 클래스에 대해 읽기/쓰기 메서드와 속성을 정의하여 마지막 읽기/쓰기 값을 유지합니다.

내 문제는 공유 SerialPort 개체의 Port.DataRecieved 이벤트를 사용하여 전원 공급 장치의 응답을 구문 분석하는 것입니다. 전원 공급 장치가 사용하는 프로토콜은 각 응답 패킷에서 보내는 데이터를 지정합니다. 그래서, 기본적으로 "전압이 100V"또는 "전류가 1A"또는 "전압이 150V로 설정되었습니다"와 같은 것을 말합니다.

공유 기능에서 이것을 분석하려고합니다. . 구문 분석 프로세스 중에 만 인스턴스의 업데이트 할 읽기/쓰기 값을 결정합니다. 공유 함수 내에서 인스턴스의 읽기/쓰기 값 속성에 액세스 할 수 없습니다. 내 두뇌는이 일을 올바르게 수행하는 방법을 생각하려고 애 쓰고 있습니다. 공유 포트 및 DataRecievedHandler 함수와 함께 PowerSupplyVoltage 및 PowerSupplyCurrent 인스턴스에 대한 참조를 유지하는 일종의 PowerSupplyCommunicator 개체를 만드는 것이 가장 좋습니다. 이것은 일종의 kludgy 보인다. 이것에 대해 영리하게 생각하는 어떤 생각?

미리 감사, 브라이언

답변

1

내가 공유 객체가 매개 변수 메시지는 직렬 포트를 통해 제공 할 때마다 제기 될 이벤트를 내보낼 가진 건의 할 것입니다. 그런 다음 다양한 객체 인스턴스가 이벤트를 구독하고 적절하게 업데이트 할 수 있습니다.

이 접근법의 약간의 변형은 공유 객체가 메시지가 들어올 때 공유 객체 호출을 원할 때 대리인을 제공 할 수있는 "등록"방법을 제공하는 것입니다. 개념적으로 이는 공유 객체가 들어오는 메시지를 검사하고 자신이 지시 한 인스턴스의 대리자 만 호출 할 수 있다는 점을 제외하면 이벤트와 매우 유사합니다.

세 번째 변형은 개체 인스턴스가 INotifyVoltageChanged, INotifyCurrentChanged 등과 같은 하나 이상의 인터페이스를 지원하고 공유 개체의 일부 메서드를 호출하여 개체를 등록하는 것입니다.

그러나 이러한 접근법 중 하나를 사용할 때는 개별 객체 인스턴스 중 하나를 포기하면 공유 객체가 해당 객체에 대한 참조를 영원히 유지할 수 있습니다. 접근 # 3이 사용되면 공유 객체는 일반 ("강") 참조가 아닌 객체에 WeakReference를 보유 할 수 있습니다.이렇게하면 업데이트 알림 처리가 약간 느려지지만 포기 된 개체를 영원히 살게하는 위험을 피할 수 있습니다. 물론 개별 객체 인스턴스는 IDisposable을 구현해야하며 Disposed 일 때 알림을 수신 거부해야합니다. 그러나 약한 참조가 사용되지 않으면 Dispose를 실제로 호출해야한다는 명령이 다른 여러 유형의 객체보다 강력합니다. 약한 참조가 사용되지 않으면 Finalizer는 쓸모가 없습니다.

+0

통찰력을 가져 주셔서 감사합니다. 나는 너의 제안에 대해 머리를 감싸려고 노력할 것이다. –