最近转入零售行业开发了一系列产品,包含便利店收银软件、会员系统、供应链系统。为了追赶潮流,收银软件使用了electron平台开发,界面效果、开发效率确实不错;但是涉及到串口通讯时遇到了麻烦,electron不能直接使用node.js的串口模块。网上有一些文章推荐编译electron源码来实现串口模块的集成,向这条路走的过程中发现困难重重,尝试多次都没有成功,于是放弃。
经过一系列的google并测试后,终于通过调用第三方应用程序的方式实现:electron启动C#开发的程序、C#程序直接与串口通讯并将串口接收的内容返回给electron。经过一段时间使用,程序表现稳定,终于了却一桩心事。下面分享一下心得。
electron与串口的通信原理比较简单,分三步完成:
1. electron应用中启动命令行程序(c#实现),并监听命令行输出;
2. 从electron中给命令行发送指令;
3. 命令行程序打开串口,并监听串口返回与用户输入指令,实时将操作结果与串口输出到命令行;
electron中程序段:
const spawn = require('child_process').spawn, var childProcess = spawn('D:\\SerialPortDemo.exe', ['COM4',9600]); // 启动serialPortDemo.exe程序(C#开发),并传入两个参数:串口号与波特率; childProcess.stdout.on('data', (data) => { console.log(""+data); }); // 监听serialPortDemo.exe的输出,并将输出打印出来 // 让下方程序休眠一段时间后执行,可以看到C#的输出; setTimeout(function(){ childProcess.stdin.write('quit'); // 给C#程序输入'quit'命令 childProcess.stdin.end(); // 完成输入后必须调用end方法,否则C#程序无法监听到用户输入 }, 30000)