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

1264 lines
34 KiB
JavaScript
Raw Normal View History

2024-01-14 22:38:04 +08:00
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;
2024-01-14 22:38:04 +08:00
}
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;
}