util.js
2.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/**
* 工具方法库
*/
import config from '../config';
import log4js from 'log4js';
import _ from 'lodash';
log4js.loadAppender('file');
log4js.addAppender(log4js.appenders.file(config.log), 'log');
let loger = log4js.getLogger('log');
loger.setLevel(config.logLevel); //配置日志
/**
* 日志
*/
export let log = loger;
/**
* 无符号转16进制
*/
export let tenToHex = function (number) {
return (parseInt(number, 10) >>> 0).toString(16);
}
/**
* 无符号16进制转10进制
*/
export let hexToTen = function (number, minus) {
if (minus) {
return parseInt('FFFF' + number, 16) >> 0;
} else {
return parseInt(number, 16);
}
}
/**
* 转16进制
*/
export let toHex = function (data) {
let arr = [];
for (let i = 0; i < data.length; i++) {
arr[i] = tenToHex(data.readUIntLE(i));
}
return arr;
};
/**
* 处理返回码
*/
export let returnProc = function (data, ip, output) {
if (!_.isArray(data) || _.size(data) < 1) {
return false;
}
let ret = data.join('');
if (!output[ret]) {
return false;
}
log.info("读写器(" + ip + ")返回:" + output[ret].message + " 返回码:" + ret);
output[ret].hex = data;
return output[ret];
}
/**
* 返回结果拆分
*/
export let spliteRet = function (mq, data) {
let indexes = [],
rets = [],
i,
k,
j,
leftMq = [],
prevIndex = -1;
for (i = 0; i < mq.length; i++) {
prevIndex = _.indexOf(data, mq[i], prevIndex + 1);
if (prevIndex < 0) {
leftMq = mq.slice(i);
break;
}
indexes.push(prevIndex);
}
for (k = 0; k < indexes.length; k++) {
if (indexes[k + 1]) {
rets.push(data.slice(indexes[k], indexes[k + 1]));
} else {
rets.push(data.slice(indexes[k]));
break;
}
}
if (indexes.length < 2) {
rets = [data];
}
let allRets = [];
for (j = 0; j < rets.length; j++) {
if (rets[j][0] == 'f1' || rets[j][1] != '2') { //盘点特殊处理
let length = hexToTen(rets[j][1]);
let allLength = rets[j].length;
if (allLength > length + 2) {
allRets.push(rets[j].slice(0, length + 2));
allRets.push(rets[j].slice(length + 2));
} else {
allRets.push(rets[j]);
}
} else {
allRets.push(rets[j]);
}
}
return {
rets: allRets,
mq: leftMq,
};
}
/**
* 定位指令名称
*/
export let locateOrder = function (orders, data) {
let orderRet = {};
_.forIn(orders, function (val, key) {
var order = val.input.toLowerCase();
var prefix = data[0].toLowerCase();
if (_.startsWith(order, prefix)) {
orderRet.name = key;
orderRet.val = val;
}
});
return orderRet;
}