2013-02-19 3 views
5

.NET 클라이언트는 정기적으로 (보통 하루에 한 번) 직렬 포트를 통해 외부 장치와 통신합니다. 모든 서비스의 모든 잘 작동하지만, 그럴 땐 한 고객을 위해, SerialPort.Open()에 대한 호출은 다음과 같은 예외가 발생합니다 : 예외를 바탕으로SerialPort.Open() throws IOException - 요청 된 서비스를 완료하는 데 필요한 시스템 리소스가 충분하지 않습니다.

System.IO.IOException: Insufficient system resources exist to complete the requested service. 
at System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str) 
at System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace) 
at System.IO.Ports.SerialPort.Open() 

, 서버는 자원 부족하고 있다고 생각 할 것을 그러나 그것은 그럴 듯하지 않습니다. CPU가 다소 유휴 상태이며 충분한 메모리와 디스크가 있습니다.

다른 IOException을 던지는 SerialPort.Open() 온라인 묵시록이 많이 있으며 구현 된 Zach Saw's SerialPortFixer이지만 다른 문제가 수정 된 것으로 보입니다.

다음은 내가하는 일의 예입니다 (크게 단순화). 이 클래스의 두 인스턴스 (다른 직렬 포트 이름 사용)는 항상 메모리에 저장되어 있으며 각 인스턴스에 대해 하루에 약 한 번 Run() 메서드가 호출됩니다.

public class Collector 
{ 
    private SerialPort _port; 
    private string _portName; 

    public void Run() 
    { 
     try 
     { 
      // Run Zach Saw's IOException workaround 
      SerialPortFixer.Execute(_portName); 

      using (_port = new SerialPort(_portName, 9600, Parity.None, 8, StopBits.One)) 
      { 
       _port.DataReceived += PortDataReceived; 
       _port.ErrorReceived += PortErrorReceived; 
       _port.Handshake = Handshake.None; 
       _port.DtrEnable = true; 
       _port.RtsEnable = true; 

       _port.Open(); 
       // Do the stuff 
       _port.Close(); 
      } 
     } 
     catch (Exception e) 
     { 
      // Handle exception 
     } 
    } 

    private void PortDataReceived(object sender, SerialDataReceivedEventArgs e) 
    { 
     // Do other stuff 
    } 

    private void PortErrorReceived(object sender, SerialErrorReceivedEventArgs e) 
    { 
     // Log error 
    } 
} 

어떤 도움을 주시면 감사하겠습니다.

+0

이 오류의 서브넷에서 TCP/IP 주소를 추가 장치 드라이버에서 온다. 그가 지금 가지고있는 USB 에뮬레이터를 버리고 다른 제조업체의 다른 USB 에뮬레이터를 구하십시오. –

+0

사실 그들은 [다음] (http://www.moxa.com/product/nport_5110.htm) 중 하나를 사용하고 있으며 최고가 되야합니다. –

답변

2

이 질문에 대한 대답은 클라이언트가 사용하는 직렬 포트 서버가 wi-fi 버전 (Moxa NPort W2150 Plus)이었고 직렬 포트 서버에 wi-fi 연결 문제가있을 때 예외가 발생한다는 것입니다.

0

NPort 5150과 동일한 문제가있었습니다. NPort 관리자에서 네트워크 시간 초과를 늘리면 내 문제가 해결되었습니다.

0

최근에 같은 문제가 생겼습니다. 저의 해결책은 널 모뎀 DB9 케이블이 필요한 장치로 실수로 직선형 DB9 케이블을 사용하고 있다는 것입니다. 널 모뎀 케이블로 바꾼 후에는 오류가 사라지고 장치가 제대로 작동합니다. 나는 뜸이라고하면

, 그들은이 문제로 이어질 수있는 것을 시도 할 수있는 몇 가지 다른 팁을 제안 :

  • 안티 바이러스 소프트웨어는
  • 이 드라이버 관리자 유틸리티를 사용하여 시도보다는 통신을 방해 할 수
      N 포트 관리자 (Windows 컴퓨터에서) COM 포트를 설정할 때
  • 0

    이 오류가 발생하여 NPort Administration에서 직렬 포트를 찾아 프로그래밍했지만 네트워크 카드의 IP4 주소가 DHCP. 시스템 업데이트 중에 이런 일이 일어난 것 같습니다. 그에서

    복구 :

    1. 네트워크 인터페이스
    2. 에서 NPort 관리에 직렬 포트를 재 할당