0

VB.NET SerialPort 클래스로 작업하고 있으며 하드웨어 구성을 나타내는 객체 컬렉션을 만들어서 구성을 변경하고 USB 가상 직렬 포트를 통해 장치를 업데이트 할 수 있습니다. 이러한 개체는 다형성을 가지며 결국 각 장치는 COM IO를 처리하는 CmdSender라는 클래스를 상속받습니다. 마지막으로 알려진 버그를 모두 제거하고 Visual Studio가 아닌 .NET 런타임이 설치된 다른 PC에 응용 프로그램을 게시하면 가끔 내 코드에서 SerialPort.Write (string)를 호출 할 때 catch 할 수없는 예외가 발생합니다.VB.NET SerialPort.Write (string)는 uncatchable exception을 발생시키고 COM 포트를 끊습니다.

오류 메시지와 스택 트레이스의 맨 위 부분입니다.

System.IO.IOException : 시스템에 연결된 장치가 작동하지 않습니다. 입니다.

System.IO.Ports.SerialStream.Write에서 System.IO.Ports.SerialStream.EndWrite에서 System.IO.Ports.InternalResources.WinIOError (INT32의 errorCode, 문자열 STR) (IAsyncResult를 asyncResult)에서

(바이트 [ ] 배열 INT32 오프셋, INT32 TDDevice.CmdSender.SendPure에서 System.IO.Ports.SerialPort.Write (문자열 텍스트)에 INT32 초과) (문자열 CMD를 부울 AddCheckSum)

I 수 카운트 이 문제에 대한 온라인 솔루션을 찾을 수 없습니다. 또한이 예외가 발생하면 응용 프로그램을 다시 시작할 수 없지만 (여전히 이상적이지는 않지만) USB COM 장치를 제거한 다음 컴퓨터에 다시 삽입해야합니다.이 응용 프로그램을 사용하지 않고도 COM 포트를 찾을 수 있습니다 (내가 내장 된 수표),이. NET에서 COM 포트와 상호 작용할 수 없다는 것을 나에게 말하고있다, 나는 아직 다른 API가이 포트를 사용할 수 있는지 여부를 테스트하고있다. 해당 문제가 .NET 또는 포트 자체에 영향을 미치는지 확인하십시오 (그러나 장치 관리자는 여전히 포트를 나열 함).

제 질문은 왜 이런 일이 일어나고 있으며 어떻게 예방할 수 있습니까? (잘하면 번역 할 수 있지만 VB는 감사하겠습니다.) #

+0

장치는 FTDI의 USB 시리얼 컨버터, 그리고 장치로 완벽하게 정상적으로 작업을 제공하는 드라이버가 다른 프레임 워크에 의해 구동 다른 소프트웨어를 통해와 인터페이스 할 수 있습니다를 얻을 문제 없음. "갑자기 항구를 사용하는 동안 그 항구가 사라졌습니다." 나는 포트가 사라지지 않았고 시스템에 여전히 나열되어 있지만 .NET Framework에서는 찾을 수 없다고 말했지만 SerialPort.GetPortNames()에 대한 호출을 통해 시도됩니다 또한 장치는 VB.NET SerialPort (겉으로보기) 무작위로이 예외를 던질 것입니다 ... 때때로 5 분 후, 때로는 한 시간 후 – TheBeardedQuack

답변

0

PIC 마이크로 컨트롤러와 통신하는 직렬 포트로 약간의 작업을했는데 이와 같은 오류가 발생했습니다. 그 당시의 나의 해결책은 데이터를 보낸 후에 포트를 닫고 다시 보낼 필요가있을 때 다시 열어 보는 것이 었습니다. 나는 USB 컨버터가 기기가 수면 모드 또는 유사한 모드로 들어갈 수 있다고 생각한다.

sendData(){ 
    open port 
    send data 
    wait for response if needed 
    close port 
    } 
코드를 게시하지 미안

하지만 당신은 ideea의