使用node-serialport的NodeJS有时会变得没有响应

时间:2013-06-14 16:40:39

标签: node.js serial-port node-serialport

我正在使用NodeJS将条形码扫描仪连接到网络前端。条形码扫描器的串行端口通过USB转串口转换器运行到PC(Windows7 pro x64)。我正在使用node-serialport。此设置在博物馆的安装中运行。

计算机每天重启,有时条形码扫描仪一整天都能正常工作,但大约25%的时间它会在一天内停止工作。停止工作我的意思是NodeJS不再中继传入的串行流。条形码扫描仪本身似乎做得很好,它仍然愉快地哔哔声,重新启动后它将正常运行..直到NodeJS再次停止工作。

当扫描仪停止工作时,NodeJS窗口不显示任何错误代码,但到那时它完全没有响应。到那时,似乎无法关闭NodeJS实例。我尝试过Ctrl-C,通过任务管理器结束进程,并使用taskkill从CMD窗口中杀死NodeJS的PID。它们都有零效应。使用Taskkill时,CMD窗口会很高兴地说该进程被终止,但NodeJS窗口不会关闭,并且仍然存在于任务管理器中。只有强力重启才能“解决”这个问题。

我觉得我的信息很少。我会喜欢下一步尝试的一些提示。

1 个答案:

答案 0 :(得分:0)

我的代码存在问题,因为serialport.write命令在3次尝试后会失败。看起来问题是我的serialport.write函数在写入后等待响应。但是我也有一些同步代码..(console.log)无法执行,因为在运行serialport触发的操作之前,回调响应函数不会运行。这似乎混淆了nodejs,似乎你不能在同一个例程中混合异步回调和同步代码

global.serialPort.write("a", function(err, results) {

   console.log('results ' + results);  });

console.log('completed');

删除最后一行意味着该例程有效。 看看你的代码,看看你是否有这种混合