Files
python_tools/web/layui/Epro-JCmd.js

1264 lines
34 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

var eproj_oper = {
cmd: 0,
comm_port: "",
comm_baud: "",
comm_parity: -1,
comm_stopbit: -1,
uid: "581900230A00801",
pwd: "85 AC AD AA",
delayfire: -1,
check_voltage: 25,
h_voltage: 85,
m_voltage: 75,
commaddr: 0,
boom_endaddr: 420,
boom_bgaddr: 21,
uidscan_count: 400,
uidscan_netbeg: 21,
amend_netbeg:21,
amend_count:400,
otp_r_bgaddr: 0, //0x3C00,
otp_r_len: 8,
otp_w_addr: 0, //0x3C00,
otp_w_data: "",
sys_states: "",
firmware: "",
inspecttype: 16,
run_cfg_value: "",
cycle_bgaddr: 0,
cycle_endaddr: 500,
cycle_group_count: 100,
cycle_bgdelay: 0,
cycle_stepdelay: 50,
cycle_bguid: "581900230A00801",
cycle_rundelay: 10,
cycle_runcount: 1,
cycle_test: 0,
};
var epj_qthandle = null;
var epj_excuedcmd;
var epj_excued_rtv;
var epj_cmd_excue_busy = 0
var epj_recive_buf = [];
var epj_bus_heartbeat = 1;
var epj_log_flag;
var epj_rec_plugin = null;
var epj_dac_voltage = [4.8, 5.3, 5.7, 6.1, 6.6, 7.0, 7.4, 7.9, 8.3, 8.8, 9.2, 9.6, 10.1, 10.5, 11.0, 11.4, 11.8, 12.3,
12.7, 13.1, 13.6, 14.0, 14.5, 14.9, 15.3, 15.8, 16.2, 16.6, 17.1, 17.5, 18.0, 18.4
];
var epj_wotp_cmd = 23;
function Epj_Start_Comm() {
console.log("Epj_Start_Comm ");
if (typeof(epj_qthandle) != "undefined" && epj_qthandle != null) {
epj_qthandle.SearchCommport();
console.log("SearchCommport ");
}
}
function Epj_Open_CommPort(main_serial) {
eproj_oper.comm_port = main_serial.comm_port;
eproj_oper.comm_baud = main_serial.comm_baud;
eproj_oper.comm_parity = main_serial.comm_parity;
eproj_oper.comm_stopbit = main_serial.comm_stopbit;
Main_Close_CommPort_Select();
var json_str = JSON.stringify(eproj_oper);
console.log(json_str);
if (typeof(epj_qthandle) != "undefined" && epj_qthandle != null) {
epj_qthandle.OpenCommPort(json_str);
}
}
async function epj_cmd(cmd) {
if (epj_cmd_excue_busy > 0) {
ShowCommMes("正在执行命令", MesgType.MESG_TYPE_INFO);
return;
}
epj_cmd_excue_busy = 1;
eproj_oper.cmd = cmd;
eproj_oper.uid = $("#epj_uid").val();
eproj_oper.pwd = $("#epj_pwd").val();
eproj_oper.delayfire = parseInt($("#epj_delayfire").val(), 10);
eproj_oper.commaddr = parseInt($("#epj_commaddr").val(), 10);
eproj_oper.otp_r_bgaddr = parseInt($("#epj_otp_r_bgaddr").val(), 10);
eproj_oper.otp_r_len = parseInt($("#epj_otp_r_len").val(), 10);
eproj_oper.otp_w_addr = parseInt($("#epj_otp_w_addr").val(), 10);
eproj_oper.otp_w_data = $("#epj_otp_w_data").val();
eproj_oper.auset_addr_fac = parseInt($("#epj_auset_addr_fac").val(), 10);
eproj_oper.run_cfg_value = $("#epj_run_cfg_value").val();
eproj_oper.cycle_bgaddr = parseInt($("#epj_cycle_bgaddr").val(), 10);
eproj_oper.cycle_endaddr = parseInt($("#epj_cycle_endaddr").val(), 10);
eproj_oper.cycle_group_count = parseInt($("#epj_cycle_group_count").val(), 10);
eproj_oper.cycle_bgdelay = parseInt($("#epj_cycle_bgdelay").val(), 10);
eproj_oper.cycle_stepdelay = parseInt($("#epj_cycle_stepdelay").val(), 10);
eproj_oper.cycle_bguid = $("#epj_cycle_bguid").val();
eproj_oper.cycle_rundelay = parseInt($("#epj_cycle_rundelay").val(), 10);
eproj_oper.cycle_runcount = parseInt($("#epj_cycle_runcount").val(), 10);
eproj_oper.h_voltage = parseInt($("#epj_h_voltage").val(), 10);
eproj_oper.m_voltage = parseInt($("#epj_m_voltage").val(), 10);
eproj_oper.uidscan_netbeg = parseInt($("#epj_uidscan_netbeg").val(), 10);
eproj_oper.uidscan_count = parseInt($("#epj_uidscan_count").val(), 10);
eproj_oper.boom_bgaddr = parseInt($("#epj_boom_bgaddr").val(), 10);
eproj_oper.boom_endaddr = parseInt($("#epj_boom_endaddr").val(), 10);
eproj_oper.check_voltage = parseInt($("#epj_check_voltage").val(), 10);
eproj_oper.amend_count = parseInt($("#epj_amend_count").val(), 10);
eproj_oper.amend_netbeg = parseInt($("#epj_amend_netbeg").val(), 10);
//eproj_oper.inspecttype = parseInt($("#epj_inspecttype").val(), 16);
await Epj_ExcueOperCmd();
epj_cmd_excue_busy = 0;
}
function EPj_ShowDef() {
$("#epj_uid").val(eproj_oper.uid);
$("#epj_pwd").val(eproj_oper.pwd);
if (eproj_oper.delayfire >= 0 && eproj_oper.delayfire < 30000) {
$("#epj_delayfire").val(eproj_oper.delayfire);
} else {
$("#epj_delayfire").val('');
}
$("#epj_commaddr").val(eproj_oper.commaddr);
$("#epj_otp_r_bgaddr").val(eproj_oper.otp_r_bgaddr);
$("#epj_otp_r_len").val(eproj_oper.otp_r_len);
$("#epj_otp_w_addr").val(eproj_oper.otp_w_addr);
$("#epj_otp_w_data").val(eproj_oper.otp_w_data);
$("#epj_auset_addr_fac").val(eproj_oper.auset_addr_fac);
$("#epj_run_cfg_value").val(eproj_oper.run_cfg_value);
$("#epj_cycle_bgaddr").val(eproj_oper.cycle_bgaddr);
$("#epj_cycle_endaddr").val(eproj_oper.cycle_endaddr);
$("#epj_cycle_group_count").val(eproj_oper.cycle_group_count);
$("#epj_cycle_bgdelay").val(eproj_oper.cycle_bgdelay);
$("#epj_cycle_stepdelay").val(eproj_oper.cycle_stepdelay);
$("#epj_cycle_bguid").val(eproj_oper.cycle_bguid);
$("#epj_cycle_rundelay").val(eproj_oper.cycle_rundelay);
$("#epj_cycle_runcount").val(eproj_oper.cycle_runcount);
$("#epj_sys_amend").val(eproj_oper.amend_v);
$("#epj_sys_states").val(eproj_oper.sys_states);
$("#epj_firmware").val(eproj_oper.firmware);
$("#epj_h_voltage").val(eproj_oper.h_voltage);
$("#epj_m_voltage").val(eproj_oper.m_voltage);
$("#epj_uidscan_netbeg").val(eproj_oper.uidscan_netbeg);
$("#epj_uidscan_count").val(eproj_oper.uidscan_count);
$("#epj_boom_bgaddr").val(eproj_oper.boom_bgaddr);
$("#epj_boom_endaddr").val(eproj_oper.boom_endaddr);
$("#epj_check_voltage").val(eproj_oper.check_voltage);
$("#epj_amend_count").val(eproj_oper.amend_count);
$("#epj_amend_netbeg").val(eproj_oper.amend_netbeg);
//$("#epj_inspecttype").val(Bytes2Str(eproj_oper.inspecttype));
}
function Epj_Init() {
var form = layui.form;
form.render();
form.on('switch', function(data) {
var id = data.elem.id;
if (id == "mes_save_log") {
layer.tips('日志记录 ' + (this.checked ? ' 启动' : ' 关闭'), data.othis);
epj_log_flag = 0;
if (this.checked)
epj_log_flag = 1;
}
});
form.on('checkbox', function(data) {
var value = data.value;
if (value == "epj_cycle_test") {
layer.tips('循环测试 ' + (this.checked ? '启动' : '关闭'), data.this)
}
});
$("#epj_check_vol_btn").mouseover(function() {
var dac = parseInt($("#epj_check_voltage").val());
if (dac > 31) {
dac = 31;
} else if (dac >= 0 && dac <= 31) {
dac = dac;
} else {
dac = 0;
}
$("#epj_check_voltage").val(dac);
layer.tips('检测电压 ' + epj_dac_voltage[dac], this);
});
var dropdown = layui.dropdown;
dropdown.render({
elem: '#epj_inspecttype',
data: [
{ title: '充满',id: 0x80 },
{title: '对码' ,id: 0x40},
{title: '起爆使能',id: 0x20 },
{ title: '校准' ,id: 0x02},
{ title: '在线' ,id: 0x10},
],
click: function(obj){
// layer.tips('点击了:'+ obj.title, this.elem, {tips: [1, '#5FB878']})
$('#epj_inspecttype').text(obj.title);
eproj_oper.inspecttype = obj.id;
}
});
if (typeof(qchannel) != "undefined" && qchannel != null) {
if(epj_qthandle != null && typeof(epj_qthandle) != "undefined")
{
console.log("Ep1_Inited OK ---");
}else{
epj_qthandle = qchannel.objects.epj_qthandle;
if ((typeof(epj_qthandle) != "undefined") && (epj_qthandle != null)) {
console.log("Epj_Init OK ---");
epj_qthandle.ShowCommMes.connect(function(mesg, type) {
ShowCommMes(mesg, type);
});
epj_qthandle.ShowCommport.connect(function(jsoninfo) {
Main_ShowCommport(jsoninfo);
});
epj_qthandle.EPJComm_Recive.connect(function(jsoninfo) {
EPJComm_Recive(jsoninfo);
});
}
}
}
EPj_ShowDef();
PrapareUIDFeatrue(Str2Bytes(eproj_oper.uid));
//console.log(Int2HexStr(65536,"0x",0));
}
function Epj_HeartBeat() {
var bus_volate = epj_recive_buf[5] + (epj_recive_buf[6] << 8);
bus_volate = bus_volate / 10;
bus_volate = bus_volate.toFixed(1);
var bus_current = epj_recive_buf[7] + (epj_recive_buf[8] << 8) + (epj_recive_buf[9] << 16) + (epj_recive_buf[10] <<
24);
bus_current = bus_current / 1000;
bus_current = bus_current.toFixed(2);
var mbus_volate = epj_recive_buf[11] + (epj_recive_buf[12] << 8);
mbus_volate = mbus_volate / 10;
mbus_volate = mbus_volate.toFixed(1);
var mes = "总线电压 " + bus_volate + "V 中电平电压 " + mbus_volate + "V 总线电流 " + bus_current + "mA"
ShowCommMes(mes, MesgType.MESG_TYPE_INFO);
}
function EPJComm_Recive(jsoninfo) {
var frame = JSON.parse(jsoninfo);
epj_recive_buf = frame;
epj_excuedcmd = frame[4];
if(epj_rec_plugin != null)
{
eval(plugin_func+"(epj_recive_buf);");
}
var frame_str = "Rx: " + Bytes2Str(frame);
if (epj_excuedcmd == 0xFE) {
ShowCommMes(frame_str, MesgType.MESG_TYPE_INFO);
Epj_HeartBeat();
} else {
epj_excued_rtv = frame[5];
ShowCommMes(frame_str, MesgType.MESG_TYPE_INFO, ep1_log_flag);
BTInfoCount(1);
if (epj_excued_rtv != 0) {
BTErrorCount(1);
}
}
}
var Epj_Cmd_Head = "ESJ";
function Epj_SendCmd(cmd_buf) {
var buf = Str2Bytes(Epj_Cmd_Head);
buf[3] = 0; //数据长度
buf[4] = eproj_oper.cmd;
for (var index = 0; index < cmd_buf.length; index++) {
buf[5 + index] = cmd_buf[index];
}
buf[3] = buf.length;
var json_str = JSON.stringify(buf);
console.log(json_str);
if (typeof(epj_qthandle) != "undefined" && epj_qthandle != null) {
epj_qthandle.Epj_SendData(json_str);
}
var mes = "Tx:" + Bytes2Str(buf);
ShowCommMes(mes, MesgType.MESG_TYPE_INFO);
}
//同步非阻塞延时
async function Epj_WaitCmdExcu(cmd, time_out) {
if (time_out == 0)
return 0;
time_out = parseInt((time_out + 19) / 20);
epj_excued_rtv = 0;
while ((time_out > 0) && (epj_excued_rtv < 1)) {
if (epj_excuedcmd == cmd) {
break;
}
await TransSleep(20);
time_out--;
}
if (epj_excued_rtv != 0) {
ShowCommMes("命令执行失败", MesgType.MESG_TYPE_ERROR);
return 2;
}
if (time_out > 0) {
return 0;
} else {
ShowCommMes("通信超时", MesgType.MESG_TYPE_ERROR);
return 1;
}
}
async function Epj_WriteOTPCmd(regaddr, w_len, param) {
var cmd_buf = [];
cmd_buf[0] = regaddr & 0xFF;
cmd_buf[1] = w_len;
for (var index = 0; index < param.length; index++) {
cmd_buf[2 + index] = param[index];
}
Epj_SendCmd(cmd_buf);
var rtv = await Epj_WaitCmdExcu(eproj_oper.cmd, w_len*125+1000);
return rtv;
}
async function Epj_ReadOTPCmd(comaddr, regaddr, r_len) {
var cmd_buf = [];
cmd_buf[0] = comaddr & 0xFF;
cmd_buf[1] = (comaddr >> 8) & 0xFF;
cmd_buf[2] = regaddr & 0xFF;
cmd_buf[3] = r_len;
epj_excuedcmd = 0;
Epj_SendCmd(cmd_buf);
var rtv = await Epj_WaitCmdExcu(eproj_oper.cmd, 1000);
var read_buf = [];
if (rtv == 0) {
len = epj_recive_buf[3] - 6;
if (len != r_len)
return read_buf;
read_buf = ArrayCopy(epj_recive_buf, read_buf, 6, len);
//read_buf = [0x35, 0x38, 0x31, 0x39, 0x30, 0x30, 0x32, 0x33];
}
return read_buf;
}
async function Epj_PowerSet(power_sw) {
var cmd_buf = [];
cmd_buf[0] = power_sw;
cmd_buf[1] = eproj_oper.h_voltage & 0xFF;
cmd_buf[2] = (eproj_oper.h_voltage >> 8) & 0xFF;
cmd_buf[3] = eproj_oper.m_voltage & 0xFF;
cmd_buf[4] = (eproj_oper.m_voltage >> 8) & 0xFF;
epj_excuedcmd = 0;
Epj_SendCmd(cmd_buf);
var rtv = await Epj_WaitCmdExcu(eproj_oper.cmd, 5000);
var read_buf = [];
if (rtv == 0) {
var mes_ = "设置高电平电压 " + eproj_oper.h_voltage + " 中电平电压 " + eproj_oper.m_voltage;
ShowCommMes(mes_, MesgType.MESG_TYPE_INFO);
}
return read_buf;
}
async function Epj_SwitchHeartBeat() {
var mes_ = ""
var param = [0];
if (epj_bus_heartbeat == 0) {
param[0] = 1;
epj_bus_heartbeat = 1;
mes_ = "开心跳";
} else {
param[0] = 0;
epj_bus_heartbeat = 0;
mes_ = "关心跳";
}
epj_excuedcmd = 0;
Epj_SendCmd(param);
var rtv = await Epj_WaitCmdExcu(eproj_oper.cmd, 1000);
if (rtv == 0) {
ShowCommMes(mes_, MesgType.MESG_TYPE_INFO);
}
return rtv;
}
async function Epj_ReadChipCod(addr) {
var param = [];
var cmd_buf = [];
cmd_buf[0] = addr & 0xFF;
cmd_buf[1] = (addr >> 8) & 0xFF;
epj_excuedcmd = 0;
Epj_SendCmd(cmd_buf);
var rtv = await Epj_WaitCmdExcu(eproj_oper.cmd, 1000);
if (rtv == 0) {
ArrayCopy(epj_recive_buf, param, 7, 2);
eproj_oper.firmware = Bytes2Str(param);
var mes = "地址 " + addr + " 芯片代码 " + eproj_oper.firmware;
ShowCommMes(mes, MesgType.MESG_TYPE_INFO);
$("#epj_firmware").val(eproj_oper.firmware);
}
return rtv;
}
async function Epj_ReadSysStatesCmd(addr) {
var param = [];
var cmd_buf = [];
cmd_buf[0] = addr & 0xFF;
cmd_buf[1] = (addr >> 8) & 0xFF;
epj_excuedcmd = 0;
Epj_SendCmd(cmd_buf);
var rtv = await Epj_WaitCmdExcu(eproj_oper.cmd, 1000);
if (rtv == 0) {
ArrayCopy(epj_recive_buf, param, 6, 1);
eproj_oper.sys_states = Bytes2Str(param);
var mes = "地址 " + addr + " 状态码 " + eproj_oper.sys_states;
ShowCommMes(mes, MesgType.MESG_TYPE_INFO);
$("#epj_sys_states").val(eproj_oper.sys_states);
}
return rtv;
}
async function Epj_ClkAmend(delaytime) {
var cmd_buf = [];
cmd_buf[0] = delaytime & 0xFF;
cmd_buf[1] = (delaytime >> 8) & 0xFF;
epj_excuedcmd = 0;
Epj_SendCmd(cmd_buf);
var rtv = await Epj_WaitCmdExcu(eproj_oper.cmd, 1000);
return rtv;
}
/*
* type 巡检类型 0 起爆巡检 1 在线巡检
*/
function Epj_InspectAnsy(databuf) {
var ok_addr_buf = [];
var index = 0;
var ok_index = 0;
while (index < databuf.length) {
var data = databuf[index]; //?待定
index++;
for (var i = 0; i < 8; i++) {
if ((data & 0x80) > 0) {
ok_addr_buf[ok_index++] = 1;
} else {
ok_addr_buf[ok_index++] = 0;
}
data <<= 1;
}
}
return ok_addr_buf;
}
async function Epj_Charge() {
var cmd_buf = [];
var bgaddr = eproj_oper.cycle_bgaddr;
var endaddr = eproj_oper.cycle_endaddr;
var group = eproj_oper.cycle_group_count;
while (endaddr > bgaddr) {
endaddr -= group;
if(endaddr < 0)
endaddr = 0;
cmd_buf[0] = (endaddr & 0x0FF);
cmd_buf[1] = (endaddr >> 8 & 0x0FF);
Epj_SendCmd(cmd_buf);
epj_excuedcmd = 0;
var rtv = await Epj_WaitCmdExcu(eproj_oper.cmd, 2000);
if (rtv != 0) {
return;
}
await TransSleep(eproj_oper.cycle_rundelay);
}
ShowCommMes("执行充电成功", MesgType.MESG_TYPE_INFO);
}
async function Epj_EnOTPWrite() {
var cmd_buf = [];
Epj_SendCmd(cmd_buf);
epj_excuedcmd = 0;
var rtv = await Epj_WaitCmdExcu(eproj_oper.cmd, 1000);
if (rtv == 0) {
ShowCommMes("OTP写使能成功", MesgType.MESG_TYPE_INFO);
}
}
async function Epj_DisCharge() {
var cmd_buf = [];
Epj_SendCmd(cmd_buf);
epj_excuedcmd = 0;
var rtv = await Epj_WaitCmdExcu(eproj_oper.cmd, 1000);
if (rtv == 0) {
ShowCommMes("执行放电成功", MesgType.MESG_TYPE_INFO);
}
}
async function Epj_EnBoom() {
var cmd_buf = [];
Epj_SendCmd(cmd_buf);
epj_excuedcmd = 0;
var rtv = await Epj_WaitCmdExcu(eproj_oper.cmd, 1000);
if (rtv == 0) {
ShowCommMes("执行起爆使能成功", MesgType.MESG_TYPE_INFO);
}
}
async function Epj_Reset() {
var cmd_buf = [];
Epj_SendCmd(cmd_buf);
epj_excuedcmd = 0;
var rtv = await Epj_WaitCmdExcu(eproj_oper.cmd, 1000);
if (rtv == 0) {
ShowCommMes("芯片复位执行成功", MesgType.MESG_TYPE_INFO);
}
}
async function Epj_Boom() {
var cmd_buf = [];
cmd_buf[0] = 1;
Epj_SendCmd(cmd_buf);
epj_excuedcmd = 0;
var rtv = await Epj_WaitCmdExcu(eproj_oper.cmd, 1500);
if (rtv == 0) {
ShowCommMes("起爆成功", MesgType.MESG_TYPE_INFO);
}
}
async function Epj_CheckSelfCmd(voltage) {
var cmd_buf = [];
cmd_buf[0] = voltage;
Epj_SendCmd(cmd_buf);
epj_excuedcmd = 0;
var rtv = await Epj_WaitCmdExcu(eproj_oper.cmd, 1500);
if (rtv == 0) {
ShowCommMes("检测DAC设置成功", MesgType.MESG_TYPE_INFO);
}
}
async function Epj_BoomInspect(bgaddr, endaddr) {
var cmd_buf = [];
cmd_buf[0] = 2;
Epj_SendCmd(cmd_buf);
epj_excuedcmd = 0;
var rtv = await Epj_WaitCmdExcu(eproj_oper.cmd, 1500);
if (rtv != 0) {
ShowCommMes("巡检起爆失败", MesgType.MESG_TYPE_INFO);
}
var databuf = [];
ArrayCopy(epj_recive_buf, databuf, 6, databuf.length - 6);
var ok_buf = Epj_InspectAnsy(databuf);
var ok_mes = "";
var ng_mes = "";
endaddr -= 2;
bgaddr -= 1;
for (var i = bgaddr; i < endaddr; i++) {
if (ok_buf[i] > 0) {
ok_mes += (i+2) + " ";
} else {
ng_mes += (i+2) + " ";
}
}
if (ok_mes.length > 1) {
ok_mes = "起爆成功: " + ok_mes;
ShowCommMes(ok_mes, MesgType.MESG_TYPE_INFO);
}
if (ng_mes.length > 1) {
ng_mes = "起爆失败: " + ng_mes;
ShowCommMes(ng_mes, MesgType.MESG_TYPE_ERROR);
}
}
async function Epj_Inspect_Task(type,netbgn,count) {
var cmd_buf=[];
var maxcount = count+netbgn+1;
cmd_buf[0] = type;
cmd_buf[1] = (maxcount & 0x0FF);
cmd_buf[2] = ((maxcount >> 8) & 0x0FF);
Epj_SendCmd(cmd_buf);
epj_excuedcmd = 0;
var rtv = await Epj_WaitCmdExcu(eproj_oper.cmd, 1500);
if(rtv != 0)
{
ShowCommMes("巡检命令执行失败", MesgType.MESG_TYPE_ERROR);
return;
}
var databuf = [];
ArrayCopy(epj_recive_buf, databuf, 6, databuf.length - 6);
var ok_buf = Epj_InspectAnsy(databuf);
var ok_mes = "";
var ng_mes = "";
for (var i = netbgn; i < ok_buf.length; i++) {
if (ok_buf[i] > 0) {
ok_mes += i + " ";
} else {
ng_mes += i + " ";
}
}
if (ok_mes.length > 1) {
ok_mes = "巡检成功: " + ok_mes;
ShowCommMes(ok_mes, MesgType.MESG_TYPE_INFO);
}
if (ng_mes.length > 1) {
ng_mes = "巡检失败: " + ng_mes;
ShowCommMes(ng_mes, MesgType.MESG_TYPE_ERROR);
}
}
async function Epj_ReadUID() {
var cmd_buf = await Epj_ReadOTPCmd(eproj_oper.commaddr, 3, 8);
if (cmd_buf.length != 8) {
ShowCommMes("读UID失败", MesgType.MESG_TYPE_ERROR);
} else {
var rtv = UidCode_JQ2YM(cmd_buf);
if (!rtv.rtv) {
ShowCommMes("读UID失败", MesgType.MESG_TYPE_ERROR);
return;
}
eproj_oper.uid = rtv.uid;
var mes = "地址 " + eproj_oper.commaddr + " UID" + eproj_oper.uid;
ShowCommMes(mes, MesgType.MESG_TYPE_INFO);
$("#epj_uid").val(eproj_oper.uid);
}
}
async function Epj_WriteUID() {
var cmd_buf = Str2Bytes(eproj_oper.uid);
cmd_buf = UidCode_YM2JQ(cmd_buf);
//var rtv = UidCode_JQ2YM(cmd_buf);
eproj_oper.cmd = epj_wotp_cmd;
var rtv = await Epj_WriteOTPCmd(3, 8, cmd_buf)
if (rtv == 0) {
ShowCommMes("写UID成功", MesgType.MESG_TYPE_INFO);
} else {
ShowCommMes("写UID失败", MesgType.MESG_TYPE_ERROR);
}
}
async function Epj_ReadPWD() {
cmd_buf = await Epj_ReadOTPCmd(eproj_oper.commaddr, 11, 4);
if (cmd_buf.length != 4) {
ShowCommMes("读PWD失败", MesgType.MESG_TYPE_ERROR);
} else {
eproj_oper.pwd = Bytes2Str(cmd_buf);
var mes = "地址 " + eproj_oper.commaddr + " PWD" + eproj_oper.pwd;
ShowCommMes(mes, MesgType.MESG_TYPE_INFO);
$("#epj_pwd").val(eproj_oper.pwd);
}
}
async function Epj_WritePWD() {
var cmd_buf;
if (eproj_oper.pwd.length < 4) {
cmd_buf = Str2Bytes(eproj_oper.uid);
cmd_buf = Epj_Uid2Pwd(cmd_buf);
} else {
cmd_buf = HexString2ByteArray(eproj_oper.pwd);
if (cmd_buf.length != 4) {
ShowCommMes("密码数据错误", MesgType.MESG_TYPE_ERROR);
return;
}
}
eproj_oper.cmd = epj_wotp_cmd;
var rtv = await Epj_WriteOTPCmd(11, 4, cmd_buf)
Epj_SendCmd(cmd_buf);
epj_excuedcmd = 0;
var rtv = await Epj_WaitCmdExcu(eproj_oper.cmd, 1000);
if (rtv == 0) {
ShowCommMes("写密码成功", MesgType.MESG_TYPE_INFO);
}else{
ShowCommMes("写密码失败", MesgType.MESG_TYPE_ERROR);
}
}
async function Epj_VerifiPwdCmd(type,infodata)
{
var cmd_buf = [];
if(type == 1)
{
cmd_buf = Str2Bytes(infodata);
cmd_buf = Epj_Uid2Pwd(cmd_buf);
}else {
cmd_buf = HexString2ByteArray(infodata);
if(cmd_buf.length != 4)
{
ShowCommMes("密码数据错误", MesgType.MESG_TYPE_ERROR);
return;
}
}
epj_excuedcmd = 0;
Epj_SendCmd(cmd_buf);
var rtv = await Epj_WaitCmdExcu(eproj_oper.cmd, 1000);
if(rtv == 0)
{
ShowCommMes("密码对比执行成功", MesgType.MESG_TYPE_INFO);
}else{
ShowCommMes("密码对比执行失败", MesgType.MESG_TYPE_INFO);
}
return rtv;
}
async function Epj_ScanUID(bgaddr, count) {
var cmd_buf = [];
cmd_buf[0] = bgaddr & 0xFF;
cmd_buf[1] = (bgaddr >> 8) & 0xFF;
cmd_buf[2] = count & 0xFF;
cmd_buf[3] = (count >> 8) & 0xFF;
Epj_SendCmd(cmd_buf);
var commaddr = 0;
while (true) {
epj_excuedcmd = 0;
var rtv = await Epj_WaitCmdExcu(eproj_oper.cmd, 2000);
if (rtv != 0) {
ShowCommMes("扫描结束", MesgType.MESG_TYPE_INFO);
return;
}
rtv = epj_recive_buf[6];
if (rtv == 1) {
ShowCommMes("扫描结束", MesgType.MESG_TYPE_INFO);
return;
}
var param = [];
var param2 = [];
commaddr = (epj_recive_buf[8] << 8) | epj_recive_buf[7];
ArrayCopy(epj_recive_buf, param, 9, 8);
for (var i = 0; i < param.length; i++) {
param2[i] = param[param.length - 1 - i];
}
rtv = UidCode_JQ2YM(param2);
var mes = "地址: " + commaddr;
if (!rtv.rtv) {
mes += " 解析失败";
ShowCommMes(mes, MesgType.MESG_TYPE_ERROR);
} else {
mes += " UID " + rtv.uid;
eproj_oper.uid = rtv.uid;
ShowCommMes(mes, MesgType.MESG_TYPE_INFO);
}
}
}
async function Epj_WritOTPTask() {
var w_data = HexString2ByteArray(eproj_oper.otp_w_data);
await Epj_WriteOTPCmd(eproj_oper.commaddr, eproj_oper.otp_w_addr, w_data.length, w_data);
}
async function Epj_ReadDelay() {
var cmd_buf = [];
cmd_buf[0] = eproj_oper.commaddr & 0x0FF;
cmd_buf[1] = (eproj_oper.commaddr >> 8) & 0x0FF;
Epj_SendCmd(cmd_buf);
epj_excuedcmd = 0;
var rtv = await Epj_WaitCmdExcu(eproj_oper.cmd, 1000);
if (rtv == 0) {
var delay_ = epj_recive_buf[7];
delay_ <<= 8;
delay_ |= epj_recive_buf[6];
mes = "地址:" + eproj_oper.commaddr + " 延时为 " + delay_;
$("#epj_delayfire").val(delay_);
eproj_oper.delayfire = delay_;
ShowCommMes(mes, MesgType.MESG_TYPE_INFO);
}
}
async function Epj_WriteDelay() {
var cmd_buf = [];
cmd_buf[0] = eproj_oper.commaddr & 0x0FF;
cmd_buf[1] = (eproj_oper.commaddr >> 8) & 0x0FF;
cmd_buf[2] = eproj_oper.delayfire & 0x0FF;
cmd_buf[3] = (eproj_oper.delayfire >> 8) & 0x0FF;
Epj_SendCmd(cmd_buf);
epj_excuedcmd = 0;
var rtv = await Epj_WaitCmdExcu(eproj_oper.cmd, 1000);
if (rtv == 0) {
ShowCommMes("地址 " + eproj_oper.commaddr + " 延时设置成功", MesgType.MESG_TYPE_INFO);
}
}
async function Epj_ReadFirmwareCmd(addr)
{
var cmd_buf = [];
cmd_buf[0] = addr & 0x0FF;
cmd_buf[1] = (addr >> 8) & 0x0FF;
Epj_SendCmd(cmd_buf);
epj_excuedcmd = 0;
var rtv = await Epj_WaitCmdExcu(eproj_oper.cmd, 1000);
if (rtv == 0) {
var param = [];
param[0] = epj_recive_buf[6];
param[1] = epj_recive_buf[7];
eproj_oper.firmware = Bytes2Str(param);
$("#epj_firmware").val(eproj_oper.firmware);
ShowCommMes("地址 " + eproj_oper.commaddr + " 芯片ID "+ eproj_oper.firmware, MesgType.MESG_TYPE_INFO);
}else{
ShowCommMes("地址 " + eproj_oper.commaddr + " 读芯片ID失败 " , MesgType.MESG_TYPE_ERROR);
}
}
function Epj_Beep(delay_h,delay_m,count)
{
var cmd_buf = [delay_h&0x0FF,(delay_h>>8)&0x0FF,delay_m&0x0FF,(delay_m>>8)&0x0FF,count&0x0FF,(count>>8)&0x0FF];
Epj_SendCmd(cmd_buf);
}
async function Epj_ExcueOperCmd() {
switch (eproj_oper.cmd) {
case 1:
await Epj_Charge();
break;
case 2:
await Epj_DisCharge();
break;
case 3:
await Epj_EnBoom();
break;
case 4:
await Epj_Reset();
break;
case 5:
await Epj_Boom();
break;
case 6:
await Epj_CheckSelfCmd(eproj_oper.check_voltage);
break;
case 7:
await Epj_SwitchHeartBeat();
break;
case 8:
await Epj_BoomInspect(eproj_oper.boom_bgaddr, eproj_oper.boom_endaddr);
break;
case 9:
await Epj_PowerSet(1);
break;
case 10:
await Epj_PowerSet(0);
break;
case 11:
eproj_oper.cmd = 21;
await Epj_ReadUID();
break;
case 12:
await Epj_WriteUID();
break;
case 13:
eproj_oper.cmd = 21;
await Epj_ReadPWD();
break;
case 14:
await Epj_WritePWD();
break;
case 15:
await Epj_VerifiPwdCmd(1,eproj_oper.uid);
break;
case 16:
await Epj_VerifiPwdCmd(2,eproj_oper.pwd);
break;
case 17:
await Epj_ScanUID(eproj_oper.commaddr, 1);
break;
case 18:
await Epj_ClkAmend(eproj_oper.delayfire);
break;
case 19:
await Epj_ReadDelay();
break;
case 20:
await Epj_WriteDelay();
break;
case 21:
await Epj_ReadOTPCmd(eproj_oper.commaddr, eproj_oper.otp_r_bgaddr, eproj_oper.otp_r_len);
break;
case 22:
await Epj_EnOTPWrite();
break;
case 23:
await Epj_WritOTPTask();
break;
case 24:
await Epj_ReadSysStatesCmd(eproj_oper.commaddr);
break;
case 25:
await Epj_ReadFirmwareCmd(eproj_oper.commaddr);
break;
case 26:
await Epj_Inspect_Task(eproj_oper.inspecttype,eproj_oper.amend_netbeg,eproj_oper.amend_count);
break;
case 27:
await Epj_ScanUID(eproj_oper.uidscan_netbeg, eproj_oper.uidscan_count);
break;
}
}
//JQuid 转 YM uid
function UidCode_JQ2YM(u8ArrayJQUidCode) {
var i = 0;
var u16Year = 0;
var u16Month = 0;
var u8Day = 0;
var u16Date = 0;
var ucArrayYMUidCode = [];
if (u8ArrayJQUidCode[7] != Epj_CalcCrc8(u8ArrayJQUidCode, 7))
return false;
ucArrayYMUidCode[0] = parseInt(u8ArrayJQUidCode[0] / 10) + 0x30;
ucArrayYMUidCode[1] = u8ArrayJQUidCode[1] % 10 + 0x30;
ucArrayYMUidCode[4] = u8ArrayJQUidCode[1]; //特征码
if(ucArrayYMUidCode[4] == 0 )
{
ucArrayYMUidCode[4] = 0x30;
}
u16Date = u8ArrayJQUidCode[2];
u16Date = u16Date << 8 | u8ArrayJQUidCode[3];
u16Year = (u16Date >> 9) & 0x7F;
u16Month = (u16Date >> 5) & 0x0F;
u8Day = u16Date & 0x1F;
ucArrayYMUidCode[2] = parseInt(u16Year / 10) + 0x30;
ucArrayYMUidCode[3] = u16Year % 10 + 0x30;
ucArrayYMUidCode[5] = parseInt(u16Month / 10) + 0x30;
ucArrayYMUidCode[6] = u16Month % 10 + 0x30;
ucArrayYMUidCode[7] = parseInt(u8Day / 10) + 0x30;
ucArrayYMUidCode[8] = u8Day % 10 + 0x30;
var stSerialCode = 0;
stSerialCode |= (u8ArrayJQUidCode[4] << 8) & 0x00FF00;
stSerialCode |= (u8ArrayJQUidCode[5] << 16) & 0xFF0000;
stSerialCode |= (u8ArrayJQUidCode[6] << 24) & 0xFF000000;
stSerialCode = UINT32_ENDIAN_CHANGE(stSerialCode);
ucArrayYMUidCode[9] = (stSerialCode >> 17) & 0x7F;
if(ucArrayYMUidCode[9] == 0)
{
ucArrayYMUidCode[9] = 0x30;
}
stSerialCode = stSerialCode & 0x1FFFF;
for (i = 14; i >= 10; i--) {
ucArrayYMUidCode[i] = (stSerialCode % 10 + 0x30);
stSerialCode = parseInt(stSerialCode / 10);
}
var rtv = {
uid: "",
rtv: false,
}
if (!YMUid_Valid_check(ucArrayYMUidCode))
return rtv;
rtv.uid = String.fromCharCode.apply(null, ucArrayYMUidCode);
rtv.rtv = true;
return rtv;
}
function UidCode_JQ2YM_NoBackwardSequence(u8ArrayJQUidCode)
{
var i=0;
var ucYear = 0;
var ucMonth = 0;
var ucDay = 0;
var ulNumber =0;
var ucTeZhengMa = 0;
var usBoxCode = 0;
var ucIndexCode = 0;
var len = 16;
var ucArrayYMUidCode = [];
var result = {
uid:"",
rtv:false,
};
if(u8ArrayJQUidCode[7] != Epj_CalcCrc8(u8ArrayJQUidCode,7))
{
return result;
}
var temp_array = [];
temp_array[0] = u8ArrayJQUidCode[0];
temp_array[1] = u8ArrayJQUidCode[1];
temp_array = Bytes2ChartArray(temp_array);
for(var index_ = 0; index_ < 4; index_++)
{
ucArrayYMUidCode[index_] = parseInt(temp_array[index_].charCodeAt(0),10);
}
ucArrayYMUidCode[4] = ucArrayYMUidCode[2];
ucArrayYMUidCode[5] = ucArrayYMUidCode[3];
ucYear = u8ArrayJQUidCode[2]>>1;
ucArrayYMUidCode[2] = parseInt(ucYear/10)+0x30;
ucArrayYMUidCode[3] = parseInt(ucYear%10)+0x30;
ucMonth = ((u8ArrayJQUidCode[2]&0x01)<<3)|((u8ArrayJQUidCode[3]>>5));
ucArrayYMUidCode[6] = parseInt(ucMonth/10)+0x30;
ucArrayYMUidCode[7] = parseInt(ucMonth%10)+0x30;
ucDay = (u8ArrayJQUidCode[3]&0x1F);
ucArrayYMUidCode[8] = parseInt(ucDay/10)+0x30;
ucArrayYMUidCode[9] = parseInt(ucDay%10)+0x30;
ulNumber = u8ArrayJQUidCode[4];
ulNumber <<= 8;
ulNumber |= u8ArrayJQUidCode[5];
ulNumber <<= 8;
ulNumber |= u8ArrayJQUidCode[6];
ucTeZhengMa = parseInt(ulNumber/100000);
ucArrayYMUidCode[10] = ucTeZhengMa;
ulNumber = parseInt(ulNumber%100000);
usBoxCode = parseInt( ulNumber/100);
ucArrayYMUidCode[11] = parseInt(usBoxCode/100) + 0x30;
usBoxCode%=100;
ucArrayYMUidCode[12] = parseInt(usBoxCode/10)+0x30;
ucArrayYMUidCode[13] =parseInt( usBoxCode%10) + 0x30;
ucIndexCode = parseInt(ulNumber%100);
ucArrayYMUidCode[14] =parseInt(ucIndexCode/10)+0x30;
ucArrayYMUidCode[15] =parseInt(ucIndexCode%10) + 0x30;
if(!YMUid_Valid_check_2(ucArrayYMUidCode))
{
return result;
}
ucArrayYMUidCode = String.fromCharCode.apply(null, ucArrayYMUidCode);
result.rtv = true;
result.uid = ucArrayYMUidCode;
return result;
}
//AD23000628A00004
//hex AD 00 2E DC 63 2E A4 9B
function UidCode_YM2JQ_2(ucArrayYMUidCode)
{
var i=0;
var usYear = 0;
var usMonth = 0;
var usDay = 0;
var ulNumber =0;
var usBoxCode = 0;
var ucIndexCode = 0;
var dataLen = 0;
var u8ArrayJQUidCode = [];
if(!YMUid_Valid_check_2(ucArrayYMUidCode))
return u8ArrayJQUidCode;
//string2hex((char *)pstYMUID->ucArrayYMUidCode,6,(char *)pstJQUID->u8ArrayJQUidCode,&dataLen); //0xAD 0x23 0x58
var str_temp = String.fromCharCode.apply(null,ucArrayYMUidCode.slice(0,6));
var data_buf = HexStr2Bytes(str_temp);
//0xAD 0x58
u8ArrayJQUidCode[0] = data_buf[0];
u8ArrayJQUidCode[1] = data_buf[2];
//转换 年 月 日
usYear = (ucArrayYMUidCode[2]-0x30)*10 + (ucArrayYMUidCode[3]-0x30);
usMonth = (ucArrayYMUidCode[6]-0x30)*10 + (ucArrayYMUidCode[7]-0x30);
usDay = (ucArrayYMUidCode[8]-0x30)*10 + (ucArrayYMUidCode[9]-0x30);
usYear = usYear<<9|usMonth<<5|usDay;
u8ArrayJQUidCode[2] = (usYear&0xFF00)>>8;
u8ArrayJQUidCode[3] = (usYear&0xFF);
ulNumber = ucArrayYMUidCode[10]*100000;
usBoxCode = (ucArrayYMUidCode[11]-0x30)*100+ (ucArrayYMUidCode[12]-0x30)*10+(ucArrayYMUidCode[13]-0x30);
ucIndexCode = (ucArrayYMUidCode[14]-0x30)*10+(ucArrayYMUidCode[15]-0x30);
ulNumber += usBoxCode*100+ucIndexCode;
u8ArrayJQUidCode[4] = (ulNumber&0xFF0000)>>16;
u8ArrayJQUidCode[5] = (ulNumber&0xFF00)>>8;
u8ArrayJQUidCode[6] = (ulNumber&0xFF);
u8ArrayJQUidCode[7] = Epj_CalcCrc8(u8ArrayJQUidCode,7);
return u8ArrayJQUidCode;
}
function UidCode_YM2JQ(ucArrayYMUidCode) {
var i = 0;
var u16Year = 0;
var u16Month = 0;
var u8Day = 0;
var u16Date = 0;
if (!YMUid_Valid_check(ucArrayYMUidCode))
return false;
var u8ArrayJQUidCode = [];
u8ArrayJQUidCode[0] = (ucArrayYMUidCode[0] - 0x30) * 10 + (ucArrayYMUidCode[1] - 0x30); //企业代码
u8ArrayJQUidCode[1] = ucArrayYMUidCode[4]; //特征码
u16Year = (ucArrayYMUidCode[2] - 0x30) * 10 + (ucArrayYMUidCode[3] - 0x30);
u16Month = (ucArrayYMUidCode[5] - 0x30) * 10 + (ucArrayYMUidCode[6] - 0x30);
u8Day = (ucArrayYMUidCode[7] - 0x30) * 10 + (ucArrayYMUidCode[8] - 0x30);
u16Date = (u16Year & 0x7F) << 9 | (u16Month & 0x0F) << 5 | (u8Day & 0x1F);
u8ArrayJQUidCode[2] = (u16Date & 0xFF00) >> 8;
u8ArrayJQUidCode[3] = (u16Date & 0x00FF);
var stSerialCode = 0;
for (i = 10; i < 15; i++) {
stSerialCode = stSerialCode * 10 + (ucArrayYMUidCode[i] - 0x30);
}
stSerialCode |= ucArrayYMUidCode[9] << 17;
stSerialCode = UINT32_ENDIAN_CHANGE(stSerialCode);;
u8ArrayJQUidCode[4] = (stSerialCode >> 8) & 0x0FF;
u8ArrayJQUidCode[5] = (stSerialCode >> 16) & 0x0FF;
u8ArrayJQUidCode[6] = (stSerialCode >> 24) & 0x0FF;
u8ArrayJQUidCode[7] = Epj_CalcCrc8(u8ArrayJQUidCode, 7);
return u8ArrayJQUidCode;
}
function Epj_CalcCrc8(Ptr, num) {
var i, j, crc = 0;
for (j = 0; j < num; j++) {
crc &= 0x0FF;
crc ^= Ptr[j];
for (i = 0; i < 8; i++) {
if ((crc & 0x01) != 0) {
crc >>= 1;
crc ^= 0x8c;
} else {
crc >>= 1;
}
}
}
return crc;
}
function YMUid_Valid_check(u8ArrayYMUid) {
var i = 0;
var u8ValidDataCounter = 0;
for (i = 0; i < 15; i++) {
if (u8ArrayYMUid[i] >= 48 && u8ArrayYMUid[i] <= 57) {
u8ValidDataCounter++;
continue;
}
if (u8ArrayYMUid[i] >= 65 && u8ArrayYMUid[i] <= 90) {
u8ValidDataCounter++;
continue;
}
if (u8ArrayYMUid[i] >= 97 && u8ArrayYMUid[i] <= 122) {
u8ValidDataCounter++;
continue;
}
}
if (u8ValidDataCounter < 7)
return false;
return true;
}
function YMUid_Valid_check_2(u8ArrayYMUid)
{
var i=0;
var u8ValidDataCounter = 0;
for(i=0;i<16;i++)
{
if(u8ArrayYMUid[i] >= 48 && u8ArrayYMUid[i] <= 57)
{
u8ValidDataCounter++;
continue;
}
if(u8ArrayYMUid[i] >= 65 && u8ArrayYMUid[i] <= 90)
{
u8ValidDataCounter++;
continue;
}
if(u8ArrayYMUid[i] >= 97 && u8ArrayYMUid[i] <= 122)
{
u8ValidDataCounter++;
continue;
}
}
if(u8ValidDataCounter < 7)
return false;
return true;
}
function Epj_GetSpecialCodeIndex(specialcode) {
if (specialcode >= 0x30 && specialcode <= 0x39) {
return specialcode - 0x30;
} else if (specialcode >= 65 && specialcode <= 90) {
return specialcode - 65+10;
} else if (specialcode >= 97 && specialcode <= 122) {
return specialcode - 97+36;
}
}
function UINT32_ENDIAN_CHANGE(val) {
var temp_val = ((val & 0x000000ff) << 24);
temp_val |= ((val & 0x0000ff00) << 8);
temp_val |= ((val & 0x00ff0000) >> 8);
temp_val |= ((val & 0xff000000) >>24) & 0x0FF;
return temp_val;
}
function Epj_GetiDateInfo(uidarray, index) {
var month = (uidarray[index] - 48) * 10 + (uidarray[index + 1] - 48);
var day = (uidarray[index + 2] - 48) * 10 + (uidarray[index + 3] - 48);
return ((month << 5) | day);
}
function Epj_Uid2Pwd(uidarray) {
var pwdbuf = [];
if (uidarray.length != 15) {
return pwdbuf;
}
var ssp = uidarray[9];
var flownum = 0;
var index = 10;
while (index < 15) {
flownum *= 10;
flownum += ((uidarray[index] - 48) & 0x0FF);
index++;
}
code = ((Epj_GetiDateInfo(uidarray, 5) & 0x01FF) << 23);
code = code | ((Epj_GetSpecialCodeIndex(ssp) & 0x03F) << 17);
code |= (flownum & 0x01FFFF);
for (index = 0; index < 4; index++) {
pwdbuf[index] = code & 0x0FF;
code >>= 8;
}
return pwdbuf;
}