使用node.js访问虚拟串行端口会导致错误或无法打开事件

我试图访问在Windows 8上使用http://www.hhdsoftware.com/virtual-serial-ports创build的虚拟串行端口。

当我使用terminal仿真器(Realterm)来访问端口时,它似乎工作; 好吧,我看到input文件中input的字符,在模拟器窗口中我没有看到input文件中的任何内容,但说实话,模拟器的用户界面是压倒性的,我不完全明白我在做什么。

但是我实际上想要使用node.js的serialport模块访问端口。 这是我的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访问端口之前运行代码时,我只会得到这个错误。 closuresRealterm后,我没有得到这个错误,而是没有输出,即代码没有收到“打开”事件。

任何想法我做错了什么?

您正在使用的库串行端口调用SetCommState :

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

configuration您的虚拟串行端口的通信。 然后它检查函数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未被检查,但意味着在打开端口时已经通过无效参数 。 问题是, GetLastError函数不会给出更多的信息来澄清哪个参数导致错误。

既然你不能在Realterm上做任何事情,我认为它也不能用。

阅读串口主页后,我发现它提供了两个串口工具:serialportlist和serialportterm,尝试最后一个,看看你是否可以从那里打开端口。

串口最常见的错误是设置错误的波特率。 我想你已经尝试了几种速度,但是如果你不这样做的话,试试这些有效的速度:

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