node.js로 가상 직렬 포트에 액세스하면 오류가 발생하거나 열기 이벤트가 발생하지 않습니다.

마이클 보그 워드

Windows 8 에서 http://www.hhdsoftware.com/virtual-serial-ports로 만든 가상 직렬 포트에 액세스하려고합니다 .

터미널 에뮬레이터 (Realterm)를 사용하여 포트에 액세스하면 작동하는 것 같습니다. 글쎄, 출력 파일에 입력하는 문자가 보이고 에뮬레이터 창에 입력 파일에서 아무것도 보이지 않지만 솔직히 에뮬레이터의 UI가 압도적이며 내가하는 일을 완전히 이해하지 못합니다.

하지만 실제로 node.js 직렬 포트 모듈을 사용하여 포트에 액세스하고 싶습니다. 이것은 내 JS 코드입니다.

var serialport = require("serialport");
var SerialPort = serialport.SerialPort;


var serialPort = new SerialPort("COM2", {
    // these are the default values in Realterm that seem to work there
    baudRate: 57600,
    dataBits: 8,
    stopBits: 1,
    parity: 'none',
    parser: serialport.parsers.readline("\r\n")
}, true, function(error){
  if ( error ) {
    console.log('failed to open: '+error);
  } else {
    console.log('open');
    serialPort.on('data', function(data) {
      console.log('data received: ' + data);
    });
    serialPort.write("ls\r\n", function(err, results) {
      console.log('err ' + err);
      console.log('results ' + results);
    });
  } 
});

내 문제는 위의 코드를 실행할 때 오류 만 발생한다는 것입니다.

열지 못했습니다 : 오류 : SetCommState : 알 수없는 오류 코드 87

정말 이상한 점은 Realterm으로 포트에 액세스 하기 전에 코드 실행할 때만이 오류가 발생 한다는 것입니다. Realterm을 닫은 후이 오류가 발생하지 않고 대신 출력이 없습니다. 즉, 코드가 "open"이벤트를받지 않습니다.

내가 뭘 잘못하고 있는지 아이디어가 있습니까?

에두아르도 야 네스 파라 레다

사용중인 라이브러리 직렬 포트SetCommState를 호출합니다 .

if (!SetCommState(file, &dcb)) {
    ErrorCodeToString("SetCommState", GetLastError(), data->errorString);
    return;
}

가상 직렬 포트의 통신을 구성합니다. 그런 다음 GetLastError 함수가 반환 하는 오류를 확인 합니다.

void ErrorCodeToString(const char* prefix, int errorCode, char *errorStr) {
  switch(errorCode) {

case ERROR_FILE_NOT_FOUND:
    _snprintf(errorStr, ERROR_STRING_SIZE, "%s: File not found", prefix);
    break;
  case ERROR_INVALID_HANDLE:
    _snprintf(errorStr, ERROR_STRING_SIZE, "%s: Invalid handle", prefix);
    break;
  case ERROR_ACCESS_DENIED:
    _snprintf(errorStr, ERROR_STRING_SIZE, "%s: Access denied", prefix);
    break;
  case ERROR_OPERATION_ABORTED:
    _snprintf(errorStr, ERROR_STRING_SIZE, "%s: operation aborted", prefix);
    break;
  default:
    _snprintf(errorStr, ERROR_STRING_SIZE, "%s: Unknown error code %d", prefix, errorCode);
    break;
  }
}

알 에러 (87)가 확인되지 않고, 그것은 것을 의미 INVALID PARAMETER이 포트를 개방 할 때 전달되었다. 문제는 GetLastError 함수가 오류를 일으키는 매개 변수를 명확히하기 위해 더 많은 정보를 제공하지 않는다는 것입니다.

Realterm에서 아무것도 할 수 없기 때문에 그것에서도 작동하지 않는 것 같습니다.

serialport 홈 페이지를 읽은 후 직렬 포트를 사용하는 데 사용할 수있는 두 가지 도구 인 serialportlist 및 serialportterm을 제공한다는 것을 알았습니다. 마지막으로 시도하고 거기에서 포트를 열 수 있는지 확인합니다.

직렬 포트의 가장 일반적인 오류는 전송 속도를 잘못 설정하는 것입니다. 이미 여러 속도를 시도했다고 가정하지만 그렇지 않은 경우 유효한 속도로 시도하십시오.

115200, 57600, 38400, 19200, 9600, 4800, 2400, 1800, 1200, 600, 300, 200, 150, 134, 110, 75 또는 50

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관