修改页面逻辑 增加js

This commit is contained in:
liuwu 2023-08-09 10:03:01 +08:00
parent 4110e714c0
commit 318f6c1190
6 changed files with 836 additions and 100 deletions

View File

@ -25,28 +25,58 @@
</template>
<script>
import {dbUtils} from '../script/dbUtils.js'
import {serialPortUtil} from '../script/serialPortUtil.js'
import {CrcUt} from '../script/CRCUtils.js'
export default {
name: 'main',
data() {
return {
listData:[]
listData:[],
stopRead:true,
sendStatus:true,
dianliuInte:null,
jidianqiInte:null,
dianliu1:null,
dianliu2:null,
dianliu3:null,
dianliu4:null,
map:new Map(),
mapBefore:new Map(),
};
},
//初始化
apiready(){
const vm = this;
var db = api.require('db');
db.openDatabase({
name: 'test',
path: 'fs://Database/cqjiouzai.db'
}, function(ret, err) {
if (ret.status) {
//初始化设备表
vm.initSb(db);
}
});
const vm = this
api.addEventListener({
name: 'myEvent'
}, function(ret, err) {
if(ret.value){
vm.initAll()
}
});
vm.initAll()
},
methods: {
initAll(){
const vm = this
clearInterval(vm.data.jidianqiInte)
clearInterval(vm.data.dianliuInte)
clearInterval(vm.data.dianliu1)
clearInterval(vm.data.dianliu2)
clearInterval(vm.data.dianliu3)
clearInterval(vm.data.dianliu4)
var db = api.require('db');
db.openDatabase({
name: 'test',
path: 'fs://Database/cqjiouzai.db'
}, function(ret, err) {
if (ret.status) {
//初始化设备表
vm.initSb(db);
}
});
},
//跳转到设置页面
handleToSet(){
api.openWin({
@ -71,24 +101,305 @@ export default {
var data = ret.data;
if(undefined != data && data.length > 0){
vm.data.listData = data;
var m = new Map()
vm.data.listData.forEach(l=>{
m.set(l.sbId,l.current)
})
vm.data.map = m;
}
if (ret.status == false || err.status == false) {
dbUtils.execute(db, 'CREATE TABLE Sb(id varchar(50), circuitName varchar(50), current varchar(20), typeName varchar(30),isTypeOpen int(10))', function(ret, err) {
dbUtils.execute(db, 'CREATE TABLE Sb(id varchar(50), sbId varchar(10), circuitName varchar(50), current varchar(20), typeName varchar(30),isTypeOpen int(10))', function(ret, err) {
if (ret.status == true) {
dbUtils.execute(db, "INSERT INTO Sb (Id,circuitName,current,typeName,isTypeOpen) VALUES ('1','1','3.21','高压风冷',1);", function(ret, err) {})
dbUtils.execute(db, "INSERT INTO Sb (Id,circuitName,current,typeName,isTypeOpen) VALUES ('2','2','3.21','中压风冷',1);", function(ret, err) {})
dbUtils.execute(db, "INSERT INTO Sb (Id,circuitName,current,typeName,isTypeOpen) VALUES ('3','3','3.21','低压风冷',0);", function(ret, err) {})
dbUtils.execute(db, "INSERT INTO Sb (Id,circuitName,current,typeName,isTypeOpen) VALUES ('4','4','3.21','闭锁调压',0);", function(ret, err) {})
dbUtils.execute(db, "INSERT INTO Sb (Id,sbId,circuitName,current,typeName,isTypeOpen) VALUES ('1','0B','1','3.21','高压风冷',1);", function(ret, err) {})
dbUtils.execute(db, "INSERT INTO Sb (Id,sbId,circuitName,current,typeName,isTypeOpen) VALUES ('2','0C','2','3.21','中压风冷',1);", function(ret, err) {})
dbUtils.execute(db, "INSERT INTO Sb (Id,sbId,circuitName,current,typeName,isTypeOpen) VALUES ('3','0D','3','3.21','低压风冷',1);", function(ret, err) {})
dbUtils.execute(db, "INSERT INTO Sb (Id,sbId,circuitName,current,typeName,isTypeOpen) VALUES ('4','0E','4','3.21','闭锁调压',1);", function(ret, err) {})
console.log('创建设备表成功');
}
});
} else {
console.log('设备表已存在');
// console.log('设备表已存在');
vm.activeStatus()
// dbUtils.execute(db, "DROP TABLE Sb", function(ret, err) {
// console.log(JSON.stringify(ret))
// })
}
});
dbUtils.select(db, 'SELECT * FROM Log', function(ret, err) {
if (ret.status == false || err.status == false) {
dbUtils.execute(db, 'CREATE TABLE Log(action varchar(20), param varchar(100), time varchar(30), remark varchar(50))', function(ret, err) {
if (ret.status == true) {
console.log('创建日志表成功');
}
});
} else {
// console.log('日志表已存在');
// dbUtils.execute(db, "DROP TABLE Log", function(ret, err) {
// if(ret.status){
// console.log("删除日志表成功");
// }
// })
}
})
},
activeStatus(){
const vm = this;
//初始化串口
serialPortUtil.initSerial();
serialPortUtil.closeSerial({ index: 0 });
serialPortUtil.openSerial({ index: 0, port: '/dev/ttyS0', baudRate: '9600'}, function (ret, err) {})
serialPortUtil.addEventListener({ index: 0, revType: 'hex', stopBits:1, flowCon:2 }, function (ret, err) {
// console.log(JSON.stringify(ret));
var data = vm.data.listData;
var leng = data.length;
if (ret.dataHex.startsWith("FE0101") && ret.dataHex.length > 8) {
// console.log("读取设备状态");
var jidianqi = ret.dataHex.substr(6, 2);
jidianqi = parseInt(jidianqi, 16).toString(2);
vm.data.jidianqi = vm.forJidianqi(jidianqi);
jidianqi = vm.data.jidianqi;
// console.log("************main:"+jidianqi+"************");
vm.data.mapBefore.set("0B",jidianqi[3] === '1');
vm.data.mapBefore.set("0C",jidianqi[2] === '1');
vm.data.mapBefore.set("0D",jidianqi[1] === '1');
vm.data.mapBefore.set("0E",jidianqi[0] === '1');
for(var j=0;j<jidianqi.length;j++){
data[3-j].isTypeOpen = jidianqi[j]
}
vm.data.listData = data;
}else{
// console.log("读取设备电流");
if(ret.evenType === 'onDataReceived'){
vm.data.sendStatus=true
for(var i=0;i<leng; i++){
if(data[i] && data[i].sbId.toUpperCase() === ret.dataHex.substr(0,2).toUpperCase()){
var current = parseInt(ret.dataHex.substr(10,4),16)/100;
var sett = vm.data.map.get(data[i].sbId);
data[i].current = current
var sbId = data[i].sbId;
var beforeStatus = vm.data.mapBefore.get(sbId)
if(current >= sett){
switch(sbId){
case '0B':
// 如果之前是关闭状态,则打开
if(!beforeStatus){
vm.controle1(true);
vm.saveLog(data[i].typeName+"打开","实时电流"+current+"A,配置电流"+sett+"A","")
}
break;
case '0C':
if(!beforeStatus){
vm.controle2(true);
vm.saveLog(data[i].typeName+"打开","实时电流"+current+"A,配置电流"+sett+"A","")
}
break;
case '0D':
if(!beforeStatus){
vm.controle3(true);
vm.saveLog(data[i].typeName+"打开","实时电流"+current+"A,配置电流"+sett+"A","")
}
break;
case '0E':
if(!beforeStatus){
vm.controle4(true);
vm.saveLog(data[i].typeName+"打开","实时电流"+current+"A,配置电流"+sett+"A","")
}
break;
}
}else{
switch(sbId){
case '0B':
// 如果之前是打开状态,则关闭
if(beforeStatus){
vm.controle1(false);
vm.saveLog(data[i].typeName+"关闭","实时电流"+current+"A,配置电流"+sett+"A","")
}
break;
case '0C':
if(beforeStatus){
vm.controle2(false);
vm.saveLog(data[i].typeName+"关闭","实时电流"+current+"A,配置电流"+sett+"A","")
}
break;
case '0D':
if(beforeStatus){
vm.controle3(false);
vm.saveLog(data[i].typeName+"关闭","实时电流"+current+"A,配置电流"+sett+"A","")
}
break;
case '0E':
if(beforeStatus){
vm.controle4(false);
vm.saveLog(data[i].typeName+"关闭","实时电流"+current+"A,配置电流"+sett+"A","")
}
break;
}
}
}
}
vm.data.listData = data
}
}
})
vm.data.jidianqiInte=setInterval(function () {
if(vm.data.stopRead){
vm.sendMsg('FE 01 00 00 00 08 29 C3');
}
},2000)
// var cmdArr = [];
// vm.data.listData.forEach(s=>{
// var cmd = s.sbId+" 03 00 48 00 02";
// cmd = cmd + " " + CrcUt.GetCrc(cmd);
// cmdArr.push(cmd);
// })
api.showProgress({
title: '正在初始化...',
text: '请稍后...',
modal: true
});
vm.data.dianliu1=setInterval(function () {
if(vm.data.stopRead){
vm.data.stopRead = false
setTimeout(() => {
vm.sendMsg("0B 03 00 48 00 02 " + CrcUt.GetCrc("0B 03 00 48 00 02"));
setTimeout(() => {
vm.data.stopRead = true
}, 80);
}, 50);
}
},500)
vm.data.dianliu2=setInterval(function () {
if(vm.data.stopRead){
vm.data.stopRead = false
setTimeout(() => {
vm.sendMsg("0C 03 00 48 00 02 " + CrcUt.GetCrc("0C 03 00 48 00 02"));
setTimeout(() => {
vm.data.stopRead = true
}, 80);
}, 50);
}
},1000)
vm.data.dianliu3=setInterval(function () {
if(vm.data.stopRead){
vm.data.stopRead = false
setTimeout(() => {
vm.sendMsg("0D 03 00 48 00 02 " + CrcUt.GetCrc("0D 03 00 48 00 02"));
setTimeout(() => {
vm.data.stopRead = true
}, 80);
}, 50);
}
},1500)
vm.data.dianliu4=setInterval(function () {
if(vm.data.stopRead){
vm.data.stopRead = false
setTimeout(() => {
vm.sendMsg("0E 03 00 48 00 02 " + CrcUt.GetCrc("0E 03 00 48 00 02"));
setTimeout(() => {
vm.data.stopRead = true
}, 80);
}, 50);
}
},2000)
// vm.data.dianliuInte=setInterval(function () {
// vm.data.listData.forEach(s=>{
// var cmd = s.sbId+" 03 00 48 00 02";
// cmd = cmd + " " + CrcUt.GetCrc(cmd);
// if(vm.data.sendStatus && vm.data.stopRead){
// vm.data.sendStatus = false
// vm.sendMsg(cmd)
// console.log(cmd);
// }
// })
// }, 2000);
setTimeout(() => {
api.hideProgress();
}, 3000);
},
sendMsg(cmd){
let ret = serialPortUtil.send({
index: 0,
sendType: 'hex',
data: cmd
});
},
saveLog(action,param,remark){
const vm = this
var db = api.require('db');
dbUtils.execute(db, "INSERT INTO Log (action,param,time,remark) VALUES ('"+action+"','"+param+"','"+vm.currTimeFn(new Date())+"','"+remark+"');", function(ret, err) {
if(ret.status == false || err.status == false){
console.log(JSON.stringify(err));
// api.toast({
// msg: '日志保存失败',
// duration: 2000,
// location: 'middle'
// });
}else{
// api.toast({
// msg: '日志保存成功',
// duration: 2000,
// location: 'middle'
// });
console.log('日志保存成功');
}
})
},
controle1(status){
console.log("controle1"+status);
const vm = this;
vm.data.stopRead = false;
setTimeout(function () {
vm.sendMsg(status?'FE 05 00 00 FF 00 98 35':'FE 05 00 00 00 00 D9 C5');
setTimeout(function () {
vm.data.stopRead = true;
}, 50)
}, 80)
},
controle2(status){
console.log("controle2"+(status?'打开':'关闭'));
const vm = this;
vm.data.stopRead = false;
setTimeout(function () {
vm.sendMsg(status?'FE 05 00 01 FF 00 C9 F5':'FE 05 00 01 00 00 88 05');
setTimeout(function () {
vm.data.stopRead = true;
}, 50)
}, 80)
},
controle3(status){
console.log("controle3"+status);
const vm = this;
vm.data.stopRead = false;
setTimeout(function () {
vm.sendMsg(status?'FE 05 00 02 FF 00 39 F5':'FE 05 00 02 00 00 78 05');
setTimeout(function () {
vm.data.stopRead = true;
}, 50)
}, 80)
},
controle4(status){
console.log("controle4"+status);
const vm = this;
vm.data.stopRead = false;
setTimeout(function () {
vm.sendMsg(status?'FE 05 00 03 FF 00 68 35':'FE 05 00 03 00 00 29 C5');
setTimeout(function () {
vm.data.stopRead = true;
}, 50)
}, 80)
},
forJidianqi(jidianqi) {
if (jidianqi.length != 4) {
var l = 4 - jidianqi.length
for (var i = 0; i < l; i++) {
jidianqi = '0' + jidianqi;
}
}
return jidianqi;
},
// 获取当前时间字符串
currTimeFn(_date) {
@ -98,7 +409,8 @@ export default {
let _hour = _date.getHours() < 10 ? '0' + _date.getHours() : _date.getHours();
let _minutes = _date.getMinutes() < 10 ? '0' + _date.getMinutes() : _date.getMinutes();
let _seconds = _date.getSeconds() < 10 ? '0' + _date.getSeconds() : _date.getSeconds();
return _year + "." + _month + "." + _day + " " + _hour + ":" + _minutes + ":" + _seconds;
// return _year + "." + _month + "." + _day + " " + _hour + ":" + _minutes + ":" + _seconds;
return _year + "." + _month + "." + _day + " " + _hour + ":" + _minutes;
}
}
};

View File

@ -6,7 +6,7 @@
<view class="table_title">
<text class="table_title_item_one">动作</text>
<text class="table_title_item_two">实时参数</text>
<text class="table_title_item_one">时间</text>
<text class="table_title_item_three">时间</text>
</view>
<scroll-view
class="history_list"
@ -19,51 +19,68 @@
class="history_list_inline"
v-for="item in listData"
>
<text class="history_list_inline_item_one">{{item.name}}</text>
<text class="history_list_inline_item_two">111</text>
<text class="history_list_inline_item_one">111</text>
<text class="history_list_inline_item_one">{{item.action}}</text>
<text class="history_list_inline_item_two">{{item.param}}</text>
<text class="history_list_inline_item_three">{{item.time}}</text>
</view>
</scroll-view>
</view>
</view>
</template>
<script>
import {dbUtils} from '../../script/dbUtils.js'
export default {
name: 'history',
data() {
return{
listData:[
{name:'1'},
{name:'1'},
{name:'1'},
{name:'1'},
{name:'1'},
{name:'1'},
{name:'1'},
{name:'1'},
{name:'1'},
{name:'1'},
{name:'1'},
{name:'1'},
{name:'1'},
{name:'1'},
{name:'1'},
{name:'1'},
{name:'1'},
{name:'1'},
{name:'1'},
{name:'1'}
// {name:'高压风冷开启',cmd:'A路电流(5.2A) B路电流(0.2A) C路电流(2.4A) D路电流(1.5A)',time:'11.15 13:28:55'},
// {name:'高压风冷关闭',cmd:'A路电流(5.2A) B路电流(0.2A) C路电流(2.4A) D路电流(1.5A)',time:'12.15 13:25:55'},
// {name:'低压风冷开启',cmd:'A路电流(5.2A) B路电流(0.2A) C路电流(2.4A) D路电流(1.5A)',time:'12.15 13.25:55'},
// {name:'中压风冷开启',cmd:'A路电流(5.2A) B路电流(0.2A) C路电流(2.4A) D路电流(1.5A)',time:'12.15 13.23:55'},
// {name:'高压风冷开启',cmd:'A路电流(5.2A) B路电流(0.2A) C路电流(2.4A) D路电流(1.5A)',time:'12.15 13.21:55'},
// {name:'高压风冷开启',cmd:'A路电流(5.2A) B路电流(0.2A) C路电流(2.4A) D路电流(1.5A)',time:'12.15 13.20:55'},
// {name:'高压风冷开启',cmd:'A路电流(5.2A) B路电流(0.2A) C路电流(2.4A) D路电流(1.5A)',time:'11.15 13:28:55'},
// {name:'高压风冷关闭',cmd:'A路电流(5.2A) B路电流(0.2A) C路电流(2.4A) D路电流(1.5A)',time:'12.15 13:25:55'},
// {name:'低压风冷开启',cmd:'A路电流(5.2A) B路电流(0.2A) C路电流(2.4A) D路电流(1.5A)',time:'12.15 13.25:55'},
// {name:'中压风冷开启',cmd:'A路电流(5.2A) B路电流(0.2A) C路电流(2.4A) D路电流(1.5A)',time:'12.15 13.23:55'},
// {name:'高压风冷开启',cmd:'A路电流(5.2A) B路电流(0.2A) C路电流(2.4A) D路电流(1.5A)',time:'12.15 13.21:55'},
// {name:'高压风冷开启',cmd:'A路电流(5.2A) B路电流(0.2A) C路电流(2.4A) D路电流(1.5A)',time:'12.15 13.20:55'},
// {name:'高压风冷开启',cmd:'A路电流(5.2A) B路电流(0.2A) C路电流(2.4A) D路电流(1.5A)',time:'11.15 13:28:55'},
// {name:'高压风冷关闭',cmd:'A路电流(5.2A) B路电流(0.2A) C路电流(2.4A) D路电流(1.5A)',time:'12.15 13:25:55'},
// {name:'低压风冷开启',cmd:'A路电流(5.2A) B路电流(0.2A) C路电流(2.4A) D路电流(1.5A)',time:'12.15 13.25:55'},
// {name:'中压风冷开启',cmd:'A路电流(5.2A) B路电流(0.2A) C路电流(2.4A) D路电流(1.5A)',time:'12.15 13.23:55'},
// {name:'高压风冷开启',cmd:'A路电流(5.2A) B路电流(0.2A) C路电流(2.4A) D路电流(1.5A)',time:'12.15 13.21:55'},
// {name:'高压风冷开启',cmd:'A路电流(5.2A) B路电流(0.2A) C路电流(2.4A) D路电流(1.5A)',time:'12.15 13.20:55'},
]
}
},
apiready(){
const vm = this;
var db = api.require('db');
db.openDatabase({
name: 'test',
path: 'fs://Database/cqjiouzai.db'
}, function(ret, err) {
if (ret.status) {
dbUtils.select(db, 'SELECT * FROM Log', function(ret, err) {
var data = ret.data;
if(undefined != data && data.length > 0){
vm.data.listData = data;
}
});
}
});
},
methods: {
//返回首页
handleBackIndex(){
api.navigateBack({
delta: 2,
api.closeWin();
api.sendEvent({
name: 'myEvent',
extra: {
close: 'close',
}
});
},
//下拉刷新
@ -80,7 +97,7 @@ export default {
<style>
.history_wrap{
width: 100%;
height: 100vh;
height: 100%;
box-sizing: border-box;
padding: 20px;
background-image: url("../../image/login.png");
@ -114,19 +131,28 @@ export default {
align-items: center;
}
.table_title_item_one{
font-size: 36px;
font-size: 30px;
color: #ffffff;
border: 1px solid #ffffff;
width: 20%;
width: 17%;
box-sizing: border-box;
padding: 10px;
text-align: center;
}
.table_title_item_two{
font-size: 36px;
font-size: 30px;
color: #ffffff;
border: 1px solid #ffffff;
width: 60%;
width: 64%;
box-sizing: border-box;
padding: 10px;
text-align: center;
}
.table_title_item_three{
font-size: 30px;
color: #ffffff;
border: 1px solid #ffffff;
width: 19%;
box-sizing: border-box;
padding: 10px;
text-align: center;
@ -142,18 +168,26 @@ export default {
align-items: center;
}
.history_list_inline_item_one{
font-size: 32px;
font-size: 22px;
color: #ffffff;
border: 1px solid #ffffff;
width: 20%;
width: 17%;
box-sizing: border-box;
padding: 10px;
}
.history_list_inline_item_two{
font-size: 32px;
font-size: 22px;
color: #ffffff;
border: 1px solid #ffffff;
width: 60%;
width: 64%;
box-sizing: border-box;
padding: 10px;
}
.history_list_inline_item_three{
font-size: 22px;
color: #ffffff;
border: 1px solid #ffffff;
width: 19%;
box-sizing: border-box;
padding: 10px;
}

View File

@ -7,38 +7,37 @@
class="list_inline"
v-for="(item,index) in setList"
>
<view class="inline_item">
<!-- <view class="inline_item">
<text class="item_label">{{item.typeName}}</text>
<view class="item_content">
<view class="switch_box"><switch class="switch" index={index} :checked="item.isTypeOpen==='1'" @change="handleSwitchChange" /></view>
<input class="input" type="text" :disabled="item.isTypeOpen==='0'" placeholder="请输入电流值" />
</view>
</view>
</view> -->
<view class="inline_item">
<text class="item_label">电流通道:</text>
<view class="item_content">
<text class="item_label" @click="handleSelectChange(index)">{{item.circuitName}}路电流</text>
<text class="item_label" @click="handleSelectChange(index,item)">{{item.circuitName}}路电流</text>
<input class="input" v-model="item.current" type="number" keyboard-type="decimal" confirm-type="done" :disabled="item.isTypeOpen==='0'" placeholder="请输入电流值" />
<text class="item_label">A</text>
<button class="btn" style="display:inline" @click="setDianliu(item)">保存</button>
</view>
</view>
</view>
</view>
<text class="set_btn" @click="handleSubmitSet">保存参数</text>
<!-- <text class="set_btn" @click="handleSubmitSet">保存参数</text> -->
</view>
</scroll-view>
</template>
<script>
import {dbUtils} from '../../script/dbUtils.js'
import {serialPortUtil} from '../../script/serialPortUtil.js'
import {CrcUt} from '../../script/CRCUtils.js'
let UIMultiSelector = api.require("UIMultiSelector");
export default {
name: 'set',
data() {
return{
setList:[
// {isTypeOpen:false,setVal:'',circuitName:'请选择',typeName:'高压风冷'},
// {isTypeOpen:true,setVal:'',circuitName:'请选择',typeName:'中压风冷'},
// {isTypeOpen:false,setVal:'',circuitName:'请选择',typeName:'低压风冷'},
// {isTypeOpen:true,setVal:'',circuitName:'请选择',typeName:'闭锁调压'},
],
setList:[],
//电流通道列表
currentList: [
{
@ -62,45 +61,38 @@ export default {
},
apiready(){
const vm = this;
var db = api.require('db');
db.openDatabase({
name: 'test',
path: 'fs://Database/cqjiouzai.db'
}, function(ret, err) {
if (ret.status) {
//初始化设备表
vm.initSb(db);
}
});
vm.initDb()
},
methods: {
//初始化设备表
initSb(db) {
initDb(){
const vm = this;
dbUtils.select(db, 'SELECT * FROM Sb', function(ret, err) {
var data = ret.data;
if(undefined != data && data.length > 0){
vm.data.setList = data;
var db = api.require('db');
db.openDatabase({
name: 'test',
path: 'fs://Database/cqjiouzai.db'
}, function(ret, err) {
if (ret.status) {
dbUtils.select(db, 'SELECT * FROM Sb', function(ret, err) {
var data = ret.data;
if(undefined != data && data.length > 0){
vm.data.setList = data;
}
});
}
});
},
//返回首页
handleBackIndex(){
api.navigateBack({
delta: 2,
api.closeWin();
api.sendEvent({
name: 'myEvent',
extra: {
close: 'close',
}
});
},
//switch开关选择
handleSwitchChange(e){
let _index = e.target.attributes.index;
this.setList.forEach((item,index) => {
if(index === _index){
item.isTypeOpen = e.detail.value?'1':'0';
}
})
},
//下拉选择
handleSelectChange(selectNum) {
handleSelectChange(selectNum,item) {
let _setList = this.data.setList;
//设置下拉选项
UIMultiSelector.open({
@ -165,10 +157,43 @@ export default {
}
});
},
setDianliu(item){
var db = api.require('db');
var sql = "update Sb set current = '"+ item.current+"' where id ='"+ item.id +"'";
dbUtils.execute(db, sql, function(ret, err) {
var msg = '更新成功'
if(!ret.status){
msg = '更新失败'
}
api.toast({
msg: msg,
duration: 2000,
location: 'middle'
});
})
},
//保存参数
handleSubmitSet(){
console.log("保存参数");
}
var cmdArr = [];
const vm = this;
this.data.setList.forEach(s=>{
var cmd = s.sbId+" 03 00 48 00 02";
cmd = cmd + " " + CrcUt.GetCrc(cmd);
cmdArr.push(cmd);
})
setInterval(() => {
if(vm.data.stopRead){
vm.sendMsg('FE 01 00 00 00 08 29 C3');
}
},2000)
},
sendMsg(cmd){
let ret = serialPortUtil.send({
index: 0,
sendType: 'hex',
data: cmd
});
},
}
}
</script>
@ -193,7 +218,7 @@ export default {
left: 20px;
}
.set_list{
margin-top: 80px;
margin-top: 60px;
display: flex;
align-items: center;
}
@ -204,7 +229,7 @@ export default {
margin: 10px 0;
}
.inline_item{
margin: 0 40px;
margin: 0 20px;
display: flex;
flex-direction: row;
align-items: center;
@ -234,11 +259,21 @@ export default {
padding: 5px;
border: 1px solid silver;
font-size: 32px;
height: 60px;
width: 200px;
height: 100px;
width: 140px;
margin-left: 20px;
border-radius: 10px;
}
.btn {
padding: 5px;
border-radius: 10px;
font-size: 32px;
width: 90px;
height: 100px;
margin-left: 20px;
color: #fff;
background-image: linear-gradient(to bottom, #00b, #006);
}
.set_btn{
font-size: 40px;
color: #5199FF;

159
script/CRC-16.js Normal file
View File

@ -0,0 +1,159 @@
export {
crcUtils
}
var CRC = {};
var crcUtils = {
GetCrc:function(cmd){
return ToModbusCRC16(cmd)
},
}
CRC._auchCRCHi = [
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
];
CRC._auchCRCLo = [
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,
0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,
0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,
0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,
0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,
0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,
0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,
0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,
0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,
0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,
0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,
0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,
0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,
0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,
0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,
0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,
0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,
0x43, 0x83, 0x41, 0x81, 0x80, 0x40
];
function ToModbusCRC16(str){
console.log(str);
console.log(CRC._auchCRCLo);
return CRC.CRC16(CRC.isArray(str) ? str : CRC.strToHex(str));
}
CRC.CRC16 = function (buffer) {
var hi = 0xff;
var lo = 0xff;
for (var i = 0; i < buffer.length; i++) {
var idx = hi ^ buffer[i];
hi = (lo ^ CRC._auchCRCHi[idx]);
lo = CRC._auchCRCLo[idx];
}
return CRC.padLeft((hi << 8 | lo ).toString(16).toUpperCase(), 4, '0');
};
CRC.isArray = function (arr) {
return Object.prototype.toString.call(arr) === '[object Array]';
};
CRC.strToHex = function (hex, isFilterChinese) {
hex = isFilterChinese ? CRC.filterChinese(hex).join('') : CRC.convertChinese(hex).join('');
//清除所有空格
hex = hex.replace(/\s/g, "");
//若字符个数为奇数,补一个空格
hex += hex.length % 2 != 0 ? " " : "";
var c = hex.length / 2, arr = [];
for (var i = 0; i < c; i++) {
arr.push(parseInt(hex.substr(i * 2, 2), 16));
}
return arr;
};
CRC.ToCRC16 = function (str) {
return CRC.CRC16(CRC.isArray(str) ? str : CRC.strToByte(str));
};
CRC.strToByte = function (str) {
var tmp = str.split(''), arr = [];
for (var i = 0, c = tmp.length; i < c; i++) {
var j = encodeURI(tmp[i]);
if (j.length == 1) {
arr.push(j.charCodeAt());
} else {
var b = j.split('%');
for (var m = 1; m < b.length; m++) {
arr.push(parseInt('0x' + b[m]));
}
}
}
return arr;
};
CRC.convertChinese = function (str) {
var tmp = str.split(''), arr = [];
for (var i = 0, c = tmp.length; i < c; i++) {
var s = tmp[i].charCodeAt();
if (s <= 0 || s >= 127) {
arr.push(s.toString(16));
}
else {
arr.push(tmp[i]);
}
}
return arr;
};
CRC.filterChinese = function (str) {
var tmp = str.split(''), arr = [];
for (var i = 0, c = tmp.length; i < c; i++) {
var s = tmp[i].charCodeAt();
if (s > 0 && s < 127) {
arr.push(tmp[i]);
}
}
return arr;
};
CRC.padLeft = function (s, w, pc) {
if (pc == undefined) {
pc = '0';
}
for (var i = 0, c = w - s.length; i < c; i++) {
s = pc + s;
}
return s;
};

157
script/CRCUtils.js Normal file
View File

@ -0,0 +1,157 @@
var CrcUt = {
GetCrc:function(cmd){
return CRC.ToModbusCRC16(cmd,true) //输出 3039
},
}
export {
CrcUt
}
var CRC = {};
CRC._auchCRCHi = [
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
];
CRC._auchCRCLo = [
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,
0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,
0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,
0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,
0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,
0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,
0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,
0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,
0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,
0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,
0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,
0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,
0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,
0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,
0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,
0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,
0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,
0x43, 0x83, 0x41, 0x81, 0x80, 0x40
];
CRC.CRC16 = function (buffer) {
var hi = 0xff;
var lo = 0xff;
for (var i = 0; i < buffer.length; i++) {
var idx = hi ^ buffer[i];
hi = (lo ^ CRC._auchCRCHi[idx]);
lo = CRC._auchCRCLo[idx];
}
return CRC.padLeft((hi << 8 | lo).toString(16).toUpperCase(), 4, '0');
};
CRC.isArray = function (arr) {
return Object.prototype.toString.call(arr) === '[object Array]';
};
CRC.ToCRC16 = function (str) {
return CRC.CRC16(CRC.isArray(str) ? str : CRC.strToByte(str));
};
CRC.ToModbusCRC16 = function (str) {
return CRC.CRC16(CRC.isArray(str) ? str : CRC.strToHex(str));
};
CRC.strToByte = function (str) {
var tmp = str.split(''), arr = [];
for (var i = 0, c = tmp.length; i < c; i++) {
var j = encodeURI(tmp[i]);
if (j.length == 1) {
arr.push(j.charCodeAt());
} else {
var b = j.split('%');
for (var m = 1; m < b.length; m++) {
arr.push(parseInt('0x' + b[m]));
}
}
}
return arr;
};
CRC.convertChinese = function (str) {
var tmp = str.split(''), arr = [];
for (var i = 0, c = tmp.length; i < c; i++) {
var s = tmp[i].charCodeAt();
if (s <= 0 || s >= 127) {
arr.push(s.toString(16));
}
else {
arr.push(tmp[i]);
}
}
return arr;
};
CRC.filterChinese = function (str) {
var tmp = str.split(''), arr = [];
for (var i = 0, c = tmp.length; i < c; i++) {
var s = tmp[i].charCodeAt();
if (s > 0 && s < 127) {
arr.push(tmp[i]);
}
}
return arr;
};
CRC.strToHex = function (hex, isFilterChinese) {
hex = isFilterChinese ? CRC.filterChinese(hex).join('') : CRC.convertChinese(hex).join('');
//清除所有空格
hex = hex.replace(/\s/g, "");
//若字符个数为奇数,补一个空格
hex += hex.length % 2 != 0 ? " " : "";
var c = hex.length / 2, arr = [];
for (var i = 0; i < c; i++) {
arr.push(parseInt(hex.substr(i * 2, 2), 16));
}
return arr;
};
CRC.padLeft = function (s, w, pc) {
if (pc == undefined) {
pc = '0';
}
for (var i = 0, c = w - s.length; i < c; i++) {
s = pc + s;
}
// return s;
return s.substr(0,2)+" "+ s.substr(2,4);
};

39
script/serialPortUtil.js Normal file
View File

@ -0,0 +1,39 @@
var serialPortPlus = null
var serialPortUtil = {
initSerial:function(){
serialPortPlus = api.require('serialPortPlus');
},
getAllDevices:function(params){
var ret = serialPortPlus.getAllDevices(params);
return ret;
},
getAllDeicesPath:function(params){
var ret = serialPortPlus.getAllDeicesPath(params);
return ret;
},
addEventListener:function(params,callback){
serialPortPlus.addEventListener(params,function(ret, err) {
callback(ret,err)
});
},
openSerial:function(param,callback){
serialPortPlus.open(param,function(ret, err) {
callback(ret,err)
});
},
send:function(params){
params.data = params.data.replace(/\s+/g,"");
var ret = serialPortPlus.send(params);
return ret
},
closeSerial:function(params){
var ret = serialPortPlus.close(params);
return ret
// console.log(JSON.stringify(ret));
}
}
export {
serialPortUtil
}