Emperor_Shun_Reading/electron/service/hardware.js

138 lines
3.6 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

'use strict';
const { Service } = require('ee-core');
// 串口的功能
const { SerialPort } = require('serialport')
// 保存串口实例
var seriaPortIns = undefined;
// 这个是处理时间的库
var moment = require('moment')
// Modbus TCP
// create an empty modbus client
const ModbusRTU = require("modbus-serial")
var client = new ModbusRTU();
// open connection to a tcp line
// 创建Modbus TCP连接IP是15.18.200.23,端口502
// client.connectTCP("15.18.200.23", { port: 502 });
//-------
/**
* hardwareservice层为单例
* @class
*/
class HardwareService extends Service {
constructor(ctx) {
super(ctx);
}
/**
* 发送消息
* @param {*} seriaPort 串口实例
*/
sendSeriaPort(args) {
const port = seriaPortIns;
const msg = args.msg;
port.write(msg, 'hex')
console.log('测试发送消息' + msg);
}
/**
* 连接串口 只执行一次
* @param {*} options 串口参数
* @param {*} event 回调.
*/
connectSeriaPort(options, event) {
if (seriaPortIns != undefined) {
console.log("SerialPort is have");
return;
}
const channel = 'controller.hardware.connectSeriaPort';
const port = new SerialPort(options, (e) => {
console.log("SerialPort open");
console.log(e);
if (e === null) {
// 打开成功 把串口发送出去
let data2 = {
type: 'connect'
}
event.reply(`${channel}`, data2)
}
})
port.on('data', (data) => {
let data2 = {
type: 'received',
data: data
}
console.log(`Received data: ${data2}`)
event.reply(`${channel}`, data2)
})
setInterval(() => {
// console.log('setInterval')
if (!port.isOpen) {
// console.log('setInterval open')
port.open();
}
}, 1000)
port.on('close', () => {
let data2 = {
type: 'close'
}
console.log(`SerialPort close: ${data2}`)
event.reply(`${channel}`, data2)
})
port.on('error', (e) => {
let data2 = {
type: 'error'
}
console.log(`SerialPort error: ${e}`)
event.reply(`${channel}`, data2)
})
seriaPortIns = port;
}
/**
* test
*/
async test(args) {
let obj = {
status: 'ok',
params: args
}
return obj;
}
// 样例 ModbusTCP
tempModbusTCP() {
//http://momentjs.cn/ 时间库
//https://www.jianshu.com/p/50954625b158
// 读取非甲烷总烃的关于总烃、甲烷、NMHC这3个寄存器寄存器地址分别为22,25,28中的浓度
// 每隔5秒钟读取保持寄存器的值从寄存器地址22开始读取读10个寄存器到data数组中
setInterval(function () {
// 要连接后才能用
client.readHoldingRegisters(22, 10, function (err, data) {
// 获取当前时间
//moment.locale('zh-cn');
// console.log("----------------------------------------------------------------------");
// console.log("数据时间是:" + moment().format('YYYY年MM月DD日 HH时mm分ss秒'));
// console.log("总烃的浓度是:" + data.data[0] * 0.01 + "ppmV"); // 总烃浓度对应的寄存器地址为22
// console.log("CH4的浓度是:" + data.data[3] * 0.01 + "ppmV"); // CH4浓度对应的寄存器地址为22
// console.log("NHMC的浓度是:" + data.data[6] * 0.01 + "ppmV"); // NHMC浓度对应的寄存器地址为22
// console.log("----------------------------------------------------------------------");
//console.log(data.data);
});
}, 5000);
}
}
HardwareService.toString = () => '[class HardwareService]';
module.exports = HardwareService;