Files
python_tools/web/layui/EproCmd.js
2024-01-14 22:38:04 +08:00

1119 lines
35 KiB
JavaScript
Raw Permalink 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 cmd_excute_rt = 0;
var cmd_excute = 0;
var cycledelay_flag = false;
var heart_beat_delay = 1000;
var wait_ack_cmdmap = new Map();
function EShotCmdRecv(frame)
{
var cmd_ = frame[5] & 0xFF;
var ack = frame[8] & 0xFF;
var log_mes = "";
if(cycledelay_flag)
{
cmd_excute_rt = ack;
cmd_excute = cmd_;
ShowCommMes(rec,MesgType.MESG_TYPE_INFO);
return;
}
if((cmd_ != EProCmdV.MASTER_HARTBEAT_ ) &&
(ack == 0x0A) &&
(frame[9] == 0 )&&
(frame[10] == 0)){
ack = 0;
}
if((BtOper_Json.cycletest > 0) && (cmd_ != EProCmdV.MASTER_HARTBEAT_))
{
if(ack != 0)
{
log_show = "模块通讯错误 Rx: ";
log_show += Bytes2Str(frame);
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
}else{
log_show = "Rx: "+Bytes2Str(frame);
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
}
}
switch(cmd_)
{
case EProCmdV.WRITE_UID_: if(ack == 0){
log_show = "地址: "+BtOper_Json.commaddr+" 写入的UID是"+ BtOper_Json.uid;
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
}else{
log_show = "地址:"+BtOper_Json.commaddr+" 写入失败UID是"+BtOper_Json.uid;
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
}break;
case EProCmdV.WRITE_PWD_: if(ack == 0)
{
log_show = "地址:"+BtOper_Json.commaddr+" 写入的密码是:"+ BtOper_Json.pwd;
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
}else{
log_show = "地址:"+BtOper_Json.commaddr+" 写入失败,密码:"+ BtOper_Json.pwd;
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
}break;
case EProCmdV.READ_UID_:
if(ack == 0){
BtOper_Json.uid = String.fromCharCode.apply(null,frame.slice(11,26));
log_show = "地址: "+BtOper_Json.commaddr + " UID: "+BtOper_Json.uid;
ShowBtUID(BtOper_Json.uid);
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
}else {
log_show = "地址:"+ BtOper_Json.commaddr + " 读UID失败";
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
}break;
case EProCmdV.READ_PWD_: if(ack == 0)
{
BtOper_Json.pwd = String.fromCharCode.apply(null,frame.slice(9,17));
log_show = BtOper_Json.uid + "的密码是:"+BtOper_Json.pwd;
ShowBtPWD(BtOper_Json.pwd);
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
}else{
log_show = BtOper_Json.uid + " 读密码失败";
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
}break;
case EProCmdV.VERIFY_UID_:
var transaddr = frame[10];
transaddr = (transaddr & 0xFF) << 8;
transaddr += frame[9] & 0x0FF;
BtOper_Json.commaddr = transaddr;
if(ack == 0){
log_show = "地址 "+BtOper_Json.commaddr +" UID验证成功"
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
}else{
log_show = "地址 "+ BtOper_Json.commaddr +" UID验证失败"
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
}break;
case EProCmdV.VERIFY_PWD_:
var transaddr = frame[10];
transaddr = (transaddr & 0xFF) << 8;
transaddr += frame[9] & 0x0FF;
BtOper_Json.commaddr = transaddr;
if(ack == 0)
{
log_show = "地址 "+BtOper_Json.commaddr+" 密码验证成功"
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
}else{
log_show = "地址 "+BtOper_Json.commaddr+" 密码验证失败"
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
}break;
case EProCmdV.READ_STATE_:
var transaddr = frame[10];
transaddr = (transaddr & 0xFF) << 8;
transaddr += frame[9] & 0x0FF;
BtOper_Json.commaddr = transaddr;
if(ack == 0){
BtOper_Json.state_v = frame.slice(11,15);
BtOper_Json.state_str = Bytes2Str(frame.slice(11,13));
log_show = "地址 "+ BtOper_Json.commaddr +" 的状态值是 "+BtOper_Json.state_str;
ShowBtState(BtOper_Json.state_str);
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
}else{
log_show = "读地址 "+BtOper_Json.commaddr+" 状态失败";
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
}break;
case EProCmdV.SET_DELAY_:
var transaddr = frame[10];
transaddr = (transaddr & 0xFF) << 8;
transaddr += frame[9] & 0x0FF;
BtOper_Json.commaddr = transaddr;
if(ack == 0){
log_show = "地址 "+ BtOper_Json.commaddr +" 的设置的延时是 "+BtOper_Json.setdelay;
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
}else{
log_show = "地址 "+ BtOper_Json.commaddr +" 设置延时失败 ";
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
}break;
case EProCmdV.WRITE_ADDR_: if(ack == 0){
log_show = "UID "+BtOper_Json.uid+" 设置的地址是 "+ BtOper_Json.commaddr;
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
}else{
log_show = "UID "+BtOper_Json.uid+" 设置地址失败";
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
};break;
case EProCmdV.READ_AMEND_V_: if(ack == 0){
BtOper_Json.amendv = Bytes2UShort(frame.slice(11,13));
log_show = "地址 "+BtOper_Json.commaddr+" 的校准值是 "+BtOper_Json.amendv;
ShowBtAmendV(BtOper_Json.amendv);
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
}else{
log_show = "读地址 "+BtOper_Json.commaddr+" 校准值失败";
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
}break;
case EProCmdV.INSPECT_SLAVE_: if(ack == 0)
{
BtOper_Json.inspect_buf = frame.slice(9,frame.length-2);
log_show = "巡检成功";
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
}else{
log_show = "巡检失败";
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
}break;
case EProCmdV.READ_FIRWARE_: if(ack == 0){
BtOper_Json.firmware = Bytes2Str(frame.slice(9,13));
log_show = "地址 "+BtOper_Json.commaddr+" 固件版本 "+ BtOper_Json.firmware;
ShowBtFirmware(BtOper_Json.firmware);
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
}else{
log_show = "读地址 "+BtOper_Json.commaddr+" 固件版本失败";
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
ShowBtFirmware(" ");
}break;
case EProCmdV.READ_ADDR_: if(ack == 0){
var transaddr = frame[10];
transaddr = (transaddr & 0xFF) << 8;
transaddr += frame[9] & 0x0FF;
BtOper_Json.commaddr = transaddr;
log_show = BtOper_Json.uid + " 的地址是 "+BtOper_Json.commaddr;
ShowBtAddr(BtOper_Json.commaddr);
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
}else {
log_show = " 读UID "+BtOper_Json.uid+" 地址失败";
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
} break;
case EProCmdV.READ_DELAY_: if(ack == 0){
var delay_ = frame[10];
delay_ = (delay_ & 0xFF) << 8;
delay_ += frame[9]& 0x0FF;
delay_ -= 5;
BtOper_Json.setdelay = delay_;
log_show = "地址 "+BtOper_Json.commaddr+" 的延时是 "+BtOper_Json.setdelay+"ms";
ShowBtDelay(BtOper_Json.setdelay);
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
}else{
log_show = "地址 "+BtOper_Json.commaddr+" 读延时失败";
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
}break;
case EProCmdV.READ_S_BUS_V_:if(ack == 0){
var voltage = frame[10];
voltage = (voltage & 0x0F) << 8;
voltage += frame[9] & 0x0FF;
BtOper_Json.cfir_v = (voltage * 3.3 *3.43)/(4096 * 0.43);
BtOper_Json.cfir_v = BtOper_Json.cfir_v.toFixed(2);
log_mes = "地址 "+BtOper_Json.commaddr+" 的电压是 "+BtOper_Json.cfir_v+"v";
ShowBtBusV(BtOper_Json.cfir_v);
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
}else{
log_mes = " 地址 "+BtOper_Json.commaddr+" 读电压失败";
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
}break;
case EProCmdV.EQUEL_UID_FEA:if(ack == 0){
var transaddr = frame[10];
transaddr = (transaddr & 0x0F) << 8;
transaddr += frame[9] & 0x0FF;
log_show = "UID "+BtOper_Json.uid+" 的地址是 "+BtOper_Json.commaddr;
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
}else{
log_show = "UID "+BtOper_Json.uid+" 特征码设置地址失败";
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
}break;
case EProCmdV.SET_PSWD_FLAG:if(ack == 0){
var transaddr = frame[10];
transaddr = (transaddr & 0x0F) << 8;
transaddr += frame[9] & 0x0FF;
log_show = "地址 "+BtOper_Json.commaddr+" 强制置位密码验证";
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
}else{
log_show = "地址 "+BtOper_Json.commaddr+" 强制置位密码验证失败";
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
}break;
case EProCmdV.CHARGE_: if(ack == 0){
log_show = "发送充电命令";
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
};break;
case EProCmdV.ALL_SLEEP: if(ack == 0){
log_show = "发送充休眠命令";
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
};break;
case EProCmdV.BASE_CHECK_:if(ack == 0){
log_show = "发送检测命令";
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
};break;
case 0x21: if(ack == 0)
{
if(BtOper_Json.busmode == 1)
{
log_show = "开启总线";
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
}else{
log_show = "关闭总线";
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
}
}break;
case EProCmdV.MASTER_HARTBEAT_: AnalyHartBeat(frame); ack = 0;break;
case EProCmdV.SLAVE_BUS_CMD: if(ack == 0){
log_show = "命令直传成功";
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
}else{
log_show = "命令直传失败";
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
}
break;
default : if(ack == 0){
log_show = "操作成功";
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
} else{
log_show = "操作失败";
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
}break;
}
cmd_excute_rt = ack;
cmd_excute = cmd_;
SendWaitSignal(cmd_,ack);
if(ack != 0)
BTErrorCount( 1 );
else
BTInfoCount( 1 ) ;
}
function AnalyHartBeat(frame)
{
var cmd_ = frame[5] & 0xFF;
var log_show = "";
if(cmd_ != EProCmdV.MASTER_HARTBEAT_)
return null;
if(frame.length < 22)
{
log_show = "关闭心跳包";
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
return ;
}
var batter_state = frame[8];
var bat_buf = new ArrayBuffer(4);
var dataview = new DataView(bat_buf);
dataview.setUint8(0, frame[12]);
dataview.setUint8(1, frame[11])
dataview.setUint8(2, frame[10])
dataview.setUint8(3, frame[9])
bat_v = dataview.getFloat32(0);
bat_v = bat_v.toFixed(2);
var bus_switch = frame[15];
var bus_mode = frame[16];
var bus_v = Bytes2ULong(frame.slice(17,19)) / 10.0;
bus_v = bus_v.toFixed(1);
var bus_c = Bytes2ULong(frame.slice(19,23)) / 10000.0;
bus_c = bus_c.toFixed(2);
log_show = "电池电量 "+batter_state+"% 电压"+bat_v+"V";
BtOper_Json.bat_v = bat_v;
if(bus_switch == 0)
{
log_show += "未开启总线 ";
}else{
if(bus_mode == 1)
{
log_show += "注册模式 ";
}else{
log_show += "起爆模式 ";
}
}
log_show += "总线电压 "+bus_v+"V"
log_show += "总线电流 "+bus_c+"mA"
BtOper_Json.bus_v = bus_v;
BtOper_Json.bus_c = bus_c;
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
}
function RestWaitSignal( cmd)
{
wait_ack_cmdmap.set(cmd,0xFFFF);
}
function GetWaitSignal( cmd)
{
if(wait_ack_cmdmap.has(cmd))
return wait_ack_cmdmap.get(cmd);
else
return -1;
}
function SendWaitSignal( cmd, ack)
{
wait_ack_cmdmap.set(cmd,ack);
}
function ReleasWaitSignal( cmd)
{
wait_ack_cmdmap.delete(cmd);
}
function TransSleep_delay(delay) {
return new Promise((resolve, reject) => {
setTimeout(function(){
resolve("done");
}, delay);
});
};
async function TransSleep(delay)
{
await TransSleep_delay(delay);
}
async function WaitCmdExcu( cmd, time_out)
{
var wait_signal = -1;
RestWaitSignal(cmd);
if(time_out == 0)
return 0;
time_out = parseInt ( (time_out+19)/20);
while(time_out > 0)
{
wait_signal = GetWaitSignal(cmd);
if(wait_signal != 0xFFFF)
{
break;
}
await TransSleep(20);
time_out--;
}
cmd_excute = 0;
ReleasWaitSignal(cmd);
if(time_out > 0 && wait_signal == 0 )
{
return 0;
}
if(time_out == 0)
{
ShowCommMes("通信超时",MesgType.MESG_TYPE_ERROR);
return -1;
}
else
return cmd_excute_rt;
}
async function WriteByAddr_ ( cmd, addr, param, waitexcue, logflag, timeout)
{
var rtv = 0;
cmd_excute = 0;
BtSendBytes(PBCmd.AddrWriteCmd(cmd,addr,param),logflag);
if(waitexcue)
{
rtv = await WaitCmdExcu(cmd,timeout);
}
return rtv;
}
async function WriteByAddr(logflag)
{
if(BtOper_Json.cycletest < 1)
{
await WriteByAddr_(BtOper_Json.opercmd,BtOper_Json.commaddr,BtOper_Json.setparam,BtOper_Json.waitack,logflag,BtOper_Json.waittimeout);
}else{
var count = 0;
while((count < BtOper_Json.cycletimes) && (BtOper_Json.cycletest > 0))
{
count++;
var index = 0;
while((index < BtOper_Json.groupcount)
&& (BtOper_Json.cycletimes > 0 )
&& (BtOper_Json.cycletest > 0))
{
BtOper_Json.commaddr = BtOper_Json.begaddr + index;
await WriteByAddr_(BtOper_Json.opercmd,BtOper_Json.commaddr,BtOper_Json.setparam,BtOper_Json.waitack,logflag,BtOper_Json.waittimeout);
index++;
await TransSleep(BtOper_Json.rundelay);
}
}
}
}
async function WriteUID( logflag)
{
if(BtOper_Json.cycletest < 1)
{
BtOper_Json.setparam = Str2Bytes( BtOper_Json.uid);
await WriteByAddr_(BtOper_Json.opercmd,BtOper_Json.commaddr,BtOper_Json.setparam,BtOper_Json.waitack,logflag,BtOper_Json.waittimeout);
}else{
var count = 0;
var flow_str = BtOper_Json.beguid.slice(11,15);
var uidhead = BtOper_Json.beguid.slice(0,11);
var flow_num = (flow_str);
if(flow_num = NaN || flow_num == undefined)
{
var log_show = "循环写入UID流水号解析错误";
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
}
while((count < BtOper_Json.cycletimes) && (BtOper_Json.cycletest > 0))
{
count++;
index = 0;
while((index < BtOper_Json.groupcount)
&& (BtOper_Json.cycletimes > 0 )
&& (BtOper_Json.cycletest > 0))
{
BtOper_Json.uid = uidhead + IntFormat(4,flow_num+index);
BtOper_Json.setparam = Str2Bytes( BtOper_Json.uid);
BtOper_Json.commaddr = BtOper_Json.begaddr + index;
await WriteByAddr_(BtOper_Json.opercmd,BtOper_Json.commaddr,BtOper_Json.setparam,BtOper_Json.waitack,logflag,BtOper_Json.waittimeout);
index++;
await TransSleep(BtOper_Json.rundelay);
}
}
}
}
async function WritePwd_( pwd, addr, waitexcue, logflag, timeout)
{
var pwd_arr = Str2Bytes(pwd);
var rtv = 0;
BtSendBytes(pbcmd.AddrWriteCmd(EProCmdV.WRITE_PWD_,addr,pwd_arr),logflag);
cmd_excute = 0;
if(waitexcue)
{
rtv = await WaitCmdExcu(EProCmdV.WRITE_PWD_,timeout);
}
return rtv;
}
async function WritePwd( logflag)
{
if(BtOper_Json.cycletest < 1)
{
BtOper_Json.setparam = Str2Bytes( BtOper_Json.pwd);
await WriteByAddr_(BtOper_Json.opercmd,BtOper_Json.commaddr,BtOper_Json.setparam,BtOper_Json.waitack,logflag,BtOper_Json.waittimeout);
}else{
var count = 0;
while((count < BtOper_Json.cycletimes) && (BtOper_Json.cycletest > 0))
{
count++;
var index = 0;
while((index < BtOper_Json.groupcount)
&& (BtOper_Json.cycletimes > 0 )
&& (BtOper_Json.cycletest > 0))
{
BtOper_Json.commaddr = BtOper_Json.begaddr + index;
BtOper_Json.setparam = Str2Bytes( BtOper_Json.pwd);
await WriteByAddr_(BtOper_Json.opercmd,BtOper_Json.commaddr,BtOper_Json.setparam,BtOper_Json.waitack,logflag,BtOper_Json.waittimeout);
index++;
await TransSleep(BtOper_Json.rundelay);
}
}
}
}
async function WriteAddr_( uid, cmd, addr, waitexcue, logflag, timeout)
{
var rtv = 0;
var uid_arr = Str2Bytes(uid);
cmd_excute = 0;
BtSendBytes(PBCmd.UidWriteAddr(uid_arr,addr,cmd),logflag);
if(waitexcue)
{
rtv = await WaitCmdExcu(cmd,timeout);
}
return rtv;
}
async function WriteAddr( logflag)
{
if(BtOper_Json.cycletest < 1)
{
await WriteAddr_(BtOper_Json.uid,BtOper_Json.opercmd,BtOper_Json.commaddr,BtOper_Json.waitack,logflag,BtOper_Json.waittimeout);
}else{
var count = 0;
var flow_str = BtOper_Json.beguid.slice(11,15);
var uidhead = BtOper_Json.beguid.slice(0,11);
var flow_num = (flow_str);
if(flow_num = NaN || flow_num == undefined)
{
var log_show = "循环写入UID流水号解析错误";
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
}
while(count < BtOper_Json.cycletimes && (BtOper_Json.cycletest > 0))
{
var index = 0;
while((index < BtOper_Json.groupcount)
&& (BtOper_Json.cycletimes > 0 )
&& (BtOper_Json.cycletest > 0))
{
BtOper_Json.uid = uidhead + IntFormat(4,flow_num+index);
BtOper_Json.commaddr = BtOper_Json.begaddr + index;
await WriteAddr_(BtOper_Json.uid,BtOper_Json.opercmd,BtOper_Json.commaddr,BtOper_Json.waitack,logflag,BtOper_Json.waittimeout);
index++;
await TransSleep(BtOper_Json.rundelay);
}
count++;
}
}
}
async function WriteDelay(logflag)
{
if(BtOper_Json.cycletest < 1)
{
var param = [];
param[0] = BtOper_Json.setdelay & 0xFF;
param[1] = (BtOper_Json.setdelay >> 8) & 0xFF;
BtOper_Json.setparam = param;
await WriteByAddr_(BtOper_Json.opercmd,BtOper_Json.commaddr,BtOper_Json.setparam,BtOper_Json.waitack,logflag,BtOper_Json.waittimeout);
}else{
var count = 0;
var param = [];
while(count < BtOper_Json.cycletimes && (BtOper_Json.cycletest > 0))
{
count++;
var index = 0;
while((index < BtOper_Json.groupcount)
&& (BtOper_Json.cycletest > 0))
{
BtOper_Json.setdelay = BtOper_Json.begdelay+BtOper_Json.delaysetp*index;
BtOper_Json.commaddr = BtOper_Json.begaddr + index;
param[0] = BtOper_Json.setdelay & 0xFF;
param[1] = (BtOper_Json.setdelay >> 8) & 0xFF;
BtOper_Json.setparam = param;
await WriteByAddr_(BtOper_Json.opercmd,BtOper_Json.commaddr,BtOper_Json.setparam,BtOper_Json.waitack,logflag,BtOper_Json.waittimeout);
index++;
await TransSleep(BtOper_Json.rundelay);
}
}
}
}
async function ReadPwd_( uid, waitexcue, logflag, timeout)
{
var rtv = 0;
cmd_excute = 0;
var uid_arr = Str2Bytes(BtOper_Json.uid);
BtSendBytes(PBCmd.PBGetSendCmd(EProCmdV.READ_PWD_,uid_arr),logflag);
if(waitexcue)
{
rtv = await WaitCmdExcu(EProCmdV.READ_PWD_,timeout);
}
return rtv;
}
async function ReadAddr_( uid, waitexcue, logflag, timeout)
{
var rtv = 0;
cmd_excute = 0;
var uid_arr = Str2Bytes(BtOper_Json.uid);
BtSendBytes(PBCmd.PBGetSendCmd(EProCmdV.READ_ADDR_,uid_arr),logflag);
if(waitexcue)
{
rtv = await WaitCmdExcu(EProCmdV.READ_PWD_,timeout);
}
return rtv;
}
async function ReadBusCurrent( waitexcue, logflag, timeout)
{
var nulldata= [];
var rtv = 0;
cmd_excute = 0;
BtSendBytes(PBCmd.PBGetSendCmd(EProCmdV.READ_S_BUS_C_,nulldata),logflag);
if(waitexcue)
{
rtv = await WaitCmdExcu(EProCmdV.READ_S_BUS_C_,timeout);
}
return rtv;
}
async function ReadByAddr_( cmd, addr, waitexcue, logflag, timeout)
{
var rtv = 0;
cmd_excute = 0;
var cmd_buf = PBCmd.AddrReadCmd(cmd,addr);
BtSendBytes(cmd_buf,logflag);
if(waitexcue)
{
rtv = await WaitCmdExcu(cmd,timeout);
}
return rtv;
}
async function ReadByAddr(logflag)
{
if(BtOper_Json.cycletest < 1)
{
await ReadByAddr_(BtOper_Json.opercmd,BtOper_Json.commaddr,BtOper_Json.waitack,logflag,BtOper_Json.waittimeout);
}else{
var count = 0;
while((count < BtOper_Json.cycletimes) && (BtOper_Json.cycletest > 0))
{
count++;
var index = 0;
while((index < BtOper_Json.groupcount)
&& (BtOper_Json.cycletimes > 0 )
&& (BtOper_Json.cycletest > 0))
{
BtOper_Json.commaddr = BtOper_Json.begaddr + index;
await ReadByAddr_(BtOper_Json.opercmd,BtOper_Json.commaddr,BtOper_Json.waitack,logflag,BtOper_Json.waittimeout);
index++;
await TransSleep(BtOper_Json.rundelay);
}
}
}
}
async function AddrCmd_( cmd, addr, waitexcue, logflag, timeout)
{
var rtv = await ReadByAddr_(cmd, addr, waitexcue, logflag, timeout);
return rtv;
}
async function AddrCmd( logflag)
{
var rtv = await ReadByAddr(logflag);
return rtv;
}
async function ReadByUID_(cmd, uid, waitexcue, logflag, timeout)
{
var rtv = 0;
var uid_arr = Str2Bytes(uid);
cmd_excute = 0;
BtSendBytes(PBCmd.PBGetSendCmd(cmd,uid_arr),logflag);
if(waitexcue)
{
rtv = await WaitCmdExcu(cmd,timeout);
}
return rtv;
}
async function ReadByUid(logflag)
{
if(BtOper_Json.cycletest < 1)
{
await ReadByUID_(BtOper_Json.opercmd,BtOper_Json.uid,BtOper_Json.waitack,logflag,BtOper_Json.waittimeout);
}else{
var count = 0;
var flow_str = BtOper_Json.beguid.slice(11,15);
var uidhead = BtOper_Json.beguid.slice(0,11);
var flow_num = (flow_str);
if(flow_num = NaN || flow_num == undefined)
{
var log_show = "循环写入UID流水号解析错误";
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
}
while((count < BtOper_Json.cycletimes) && (BtOper_Json.cycletest > 0))
{
var index = 0;
while((index < BtOper_Json.groupcount)
&& (BtOper_Json.cycletimes > 0 )
&& (BtOper_Json.cycletest > 0))
{
BtOper_Json.uid = uidhead + IntFormat(4,flow_num+index);
await ReadByUID_(BtOper_Json.opercmd,BtOper_Json.uid,BtOper_Json.waitack,logflag,BtOper_Json.waittimeout);
index++;
await TransSleep(BtOper_Json.rundelay);
}
count++;
}
}
}
async function WaitSlaveAck( addr, waitexcue, logflag, timeout)
{
var rtv = 0;
cmd_excute = 0;
BtSendBytes(PBCmd.AddrReadCmd(EProCmdV.SLAVE_ONLINE_,addr),logflag);
if(waitexcue)
{
rtv = await WaitCmdExcu(EProCmdV.SLAVE_ONLINE_,timeout);
}
return rtv;
}
async function VerifyUID_( addr, uid, waitexcue, logflag, timeout)
{
var rtv = 0;
cmd_excute = 0;
var uid_arr = Str2Bytes(uid);
BtSendBytes(PBCmd.AddrWriteCmd(EProCmdV.VERIFY_UID_,addr,uid_arr),logflag);
if(waitexcue)
{
rtv = await WaitCmdExcu(EProCmdV.VERIFY_UID_,timeout);
}
return rtv;
}
async function VerifyUID( logflag)
{
if(BtOper_Json.cycletest < 1)
{
await VerifyUID_(BtOper_Json.commaddr,BtOper_Json.uid, BtOper_Json.waitack,logflag, BtOper_Json.waittimeout);
}else{
var count = 0;
var flow_str = BtOper_Json.beguid.slice(11,15);
var uidhead = BtOper_Json.beguid.slice(0,11);
var flow_num = (flow_str);
if(flow_num = NaN || flow_num == undefined)
{
var log_show = "循环写入UID流水号解析错误";
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
}
while((count < BtOper_Json.cycletimes) && (BtOper_Json.cycletest > 0))
{
var index = 0;
while((index < BtOper_Json.groupcount)
&& (BtOper_Json.cycletimes > 0 )
&& (BtOper_Json.cycletest > 0))
{
BtOper_Json.uid = uidhead + IntFormat(4,flow_num+index);
await VerifyUID_(BtOper_Json.commaddr,BtOper_Json.uid, BtOper_Json.waitack,logflag, BtOper_Json.waittimeout);
index++;
await TransSleep(BtOper_Json.rundelay);
}
count++;
}
}
}
async function VerifyPwd_(addr, pwd, waitexcue, logflag, timeout)
{
var rtv = 0;
var pwd_arr = Str2Bytes(pwd);
cmd_excute = 0;
BtSendBytes(PBCmd.AddrWriteCmd(EProCmdV.VERIFY_PWD_,addr,pwd_arr),logflag);
if(waitexcue)
{
rtv = await WaitCmdExcu(EProCmdV.VERIFY_PWD_,timeout);
}
return rtv;
}
async function VerifyPwd( logflag)
{
if(BtOper_Json.cycletest < 1)
{
await VerifyPwd_(BtOper_Json.commaddr,BtOper_Json.pwd, BtOper_Json.waitack,logflag, BtOper_Json.waittimeout);
}else{
var count = 0
while((count < BtOper_Json.cycletimes) && (BtOper_Json.cycletest > 0))
{
var index = 0;
while((BtOper_Json.cycletimes > 0 )
&& (BtOper_Json.cycletest > 0))
while(index < BtOper_Json.groupcount )
{
await VerifyPwd_(BtOper_Json.commaddr + index,BtOper_Json.pwd, BtOper_Json.waitack,logflag, BtOper_Json.waittimeout);
index++;
await TransSleep(BtOper_Json.rundelay);
}
count++;
}
}
}
async function TimerAmend_( bgaddr, endaddr, waitexcue, logflag, timeout)
{
var rtv = 0;
cmd_excute = 0;
var log_show = "时钟校准地址范围" + bgaddr +" 到 " + endaddr;
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
var datas = new Array();
datas.push((bgaddr & 0xFF));
datas.push(((bgaddr >>8) & 0xFF));
datas.push((endaddr & 0xFF));
datas.push(((endaddr >>8) & 0xFF));
cmd_excute = 0;
BtSendBytes(PBCmd.PBGetSendCmd(EProCmdV.AMEND_,datas),logflag);
if(waitexcue)
{
rtv = await WaitCmdExcu(EProCmdV.AMEND_,timeout);
}
return rtv;
}
async function TimerAmend( logflag)
{
var amend_endaddr = BtOper_Json.begaddr + BtOper_Json.amendcount;
cyclerun_flag = true;
var count = 0;
do
{
var bgaddr = BtOper_Json.begaddr;
do
{
var endaddr = bgaddr + BtOper_Json.groupcount;
await TimerAmend_(bgaddr,endaddr,true,logflag,1200);
await TransSleep(BtOper_Json.rundelay);
bgaddr = endaddr;
}while((endaddr < amend_endaddr) && (BtOper_Json.cycletest > 0));
count ++;
} while((count < BtOper_Json.cycletimes) && (BtOper_Json.cycletest > 0))
return 0;
}
async function InspectSlave_( bgaddr, endaddr, waitexcue, logflag, timeout)
{
var log_show = "巡检地址范围" + bgaddr +" 到 " + (endaddr -1);
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
var datas = new Array();
datas.push((bgaddr & 0xFF));
datas.push(((bgaddr >>8) & 0xFF));
datas.push((endaddr & 0xFF));
datas.push(((endaddr >>8) & 0xFF));
BtSendBytes(PBCmd.PBGetSendCmd(EProCmdV.INSPECT_SLAVE_,datas),logflag);
if(!waitexcue)
return 0;
cmd_excute = 0;
var state_addr;
var rtv = await WaitCmdExcu(EProCmdV.INSPECT_SLAVE_,timeout);
if(rtv == 0)
{
if(BtOper_Json.inspect_buf.length > 0)
{
PBCmd.InspectAnaly(bgaddr,endaddr-bgaddr,BtOper_Json.inspect_buf) ;
var log_show = "准备起爆有 " + PBCmd.ok_addr.length + "发";
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
var index = 0;
log_show = "";
while(index < PBCmd.ok_addr.length)
{
state_addr = PBCmd.ok_addr[index++];
if(state_addr > endaddr)
continue;
log_show += state_addr + " ";
}
if(log_show.length > 2)
ShowCommMes(log_show,MesgType.MESG_TYPE_INFO);
log_show = "无法起爆有 " +PBCmd.ng_addr.length + "发";
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
index = 0;
log_show = "";
while(index < PBCmd.ng_addr.length)
{
state_addr = PBCmd.ng_addr[index++] ;
if(state_addr > endaddr)
continue;
log_show += state_addr + " ";
}
if(log_show.length > 1)
ShowCommMes(log_show,MesgType.MESG_TYPE_ERROR);
}
}
return 0;
}
async function InspectSlave(logflag)
{
var cycleInspectRunCount = parseInt(((BtOper_Json.inspectcount + BtOper_Json.groupcount-1) / BtOper_Json.groupcount));
var count = 0;
var bgaddr ;
var endaddr;
do
{
var runcount = 0;
bgaddr = BtOper_Json.begaddr;
do
{
endaddr = BtOper_Json.groupcount + bgaddr;
if(endaddr > 1023)
{
endaddr = 1023;
}
await InspectSlave_(bgaddr,endaddr,true,logflag,BtOper_Json.waittimeout);
runcount ++;
bgaddr = endaddr;
await TransSleep(BtOper_Json.rundelay);
}while(runcount < cycleInspectRunCount && (BtOper_Json.cycletest > 0));
count ++;
}while ((count < BtOper_Json.cycletimes) && (BtOper_Json.cycletest > 0));
return 0;
}
async function SlaveCheckSelf( type, waitexcue, logflag, timeout)
{
var rtv = 0;
var data = [];
data[0] = type & 0xFF;
cmd_excute = 0;
BtSendBytes(PBCmd.PBGetSendCmd(EProCmdV.BASE_CHECK_,data),logflag);
if(waitexcue)
{
rtv = await WaitCmdExcu(EProCmdV.BASE_CHECK_,timeout);
}
return rtv;
}
async function BroadCastCmd_( cmd, waitexcue, logflag, timeout)
{
var data_null = [];
var rtv = 0;
data_null = PBCmd.PBGetSendCmd(cmd,data_null);
cmd_excute = 0;
BtSendBytes(data_null,logflag);
if(waitexcue)
{
rtv = await WaitCmdExcu(cmd,timeout);
}
return rtv;
}
async function BroadCastCmd(logflag)
{
await BroadCastCmd_(BtOper_Json.opercmd,BtOper_Json.waitack,logflag,BtOper_Json.waittimeout);
}
async function BroadCastCmdSet( cmd, param, waitexcue, logflag, timeout)
{
var rtv = 0;
var data = PBCmd.PBGetSendCmd(cmd,param);
cmd_excute = 0;
BtSendBytes(data,logflag);
if(waitexcue)
{
rtv = await WaitCmdExcu(cmd,timeout);
}
return rtv;
}
async function BusMode( mode, s_flag, waitexcue, logflag, timeout)
{
var rtv = 0;
var data = new Array();
if(BtOper_Json.busmode == 2)
{
data.push(0x01);
BtOper_Json.busmode = 1;
}else{
BtOper_Json.busmode = 2;
data.push(0x02);
}
SwitchBusMode(BtOper_Json.busmode);
data.push(mode);
data = PBCmd.PBGetSendCmd(EProCmdV.SET_BUS_MODE_,data);
BtSendBytes(data,logflag);
cmd_excute = 0;
if(waitexcue)
{
rtv = await WaitCmdExcu(EProCmdV.SET_BUS_MODE_,timeout);
}
return rtv;
}
async function SetHartBeat(logflag)
{
var heart_beat_delay = 0;
var data = [];
if(BtOper_Json.heartbeat == 1)
{
heart_beat_delay = 0xFFFF;
BtOper_Json.heartbeat = 0;
}
else{
heart_beat_delay = parseInt(BtOper_Json.rundelay / 10);
BtOper_Json.heartbeat = 1;
}
SwitchHartBeat(BtOper_Json.heartbeat);
data[0] = heart_beat_delay & 0xFF;
data[1] = (heart_beat_delay >> 8 ) & 0xFF;
data = PBCmd.PBGetSendCmd(EProCmdV.MASTER_HARTBEAT_,data);
BtSendBytes(data,logflag);
}
//addr 通讯地址
//code 功能码
//cmd 功能码参数 没有传入负数
//frame_type 数据帧类型 0 非广播帧 1 广播帧
//ack_len 读取数据长度 0 读取应答位 大于0 数据长度
//param 命令码或功能码参数
//ack_wait 起始读信号等待时间
//ack_try 超时尝试次数
//waitexcue 等待命令执行完成
//timeout 命令超时时间ms
async function SlaveCmd( addr, code, cmd, frame_type, ack_len, param, ack_wait, ack_try, waitexcue, logflag, timeout)
{
var cmd_buf = new Array();
var c_slavecheck = 0;
var rtv = 0;
cmd_buf = PBCmd.SlaveCmd(code,cmd,addr,param);
c_slavecheck = PBCmd.SlaveCheck(cmd_buf);
while(true)
{
if(((cmd_buf.length +1) % 4) == 0)
{
break;
}
cmd_buf.push(0x00);
}
cmd_buf.push(c_slavecheck);
cmd_buf = PBCmd.PBSlaveSendBuf(frame_type,ack_len,ack_wait,ack_try,cmd_buf);
cmd_excute = 0;
BtSendBytes(cmd_buf,logflag);
if(waitexcue)
{
rtv = await WaitCmdExcu(EProCmdV.SLAVE_BUS_CMD,timeout);
}
return rtv;
}
async function BroadCast_SetAddr(logflag)
{
var data = [];
data[0] = BtOper_Json.commaddr & 0xFF;
data[1] = (BtOper_Json.commaddr >> 8) & 0xFF;
await BroadCastCmdSet(EProCmdV.BC_WRITE_ADDR_,data, BtOper_Json.waitack, logflag, BtOper_Json.waittimeout);
}
async function SetSuperTime(logflag)
{
var param = [];
param[0] = BtOper_Json.setdelay & 0xFF;
param[1] = (BtOper_Json.setdelay >> 8) & 0xFF;
BtOper_Json.setparam = param;
WriteByAddr_(BtOper_Json.opercmd,BtOper_Json.commaddr,BtOper_Json.setparam,BtOper_Json.waitack,logflag,BtOper_Json.waittimeout);
}
async function SendCmd(txflag)
{
switch(BtOper_Json.opercmd)
{
case EProCmdV.WRITE_UID_: await WriteUID(txflag);break;
case EProCmdV.WRITE_PWD_: await WritePwd(txflag);break;
case EProCmdV.READ_UID_: await ReadByAddr(txflag) ;break;
case EProCmdV.READ_PWD_: await ReadByUid(txflag) ;break;
case EProCmdV.VERIFY_UID_: await VerifyUID(txflag); break;
case EProCmdV.VERIFY_PWD_: await VerifyPwd(txflag);break;
case EProCmdV.READ_STATE_: await ReadByAddr(txflag) ;break;
case EProCmdV.SET_DELAY_: await WriteDelay(txflag) ;break;
case EProCmdV.SET_DELAY_ALL_: await WriteDelay(1,BtOper_Json.setdelay ,BtOper_Json.waitack,BtOper_Json.waittimeout) ;break;
case EProCmdV.WRITE_ADDR_: await WriteAddr(txflag);break;
case EProCmdV.EQUEL_UID_FEA: await WriteAddr(txflag);break;
case EProCmdV.CHARGE_: await BroadCastCmd(txflag);break;
case EProCmdV.AMEND_: await TimerAmend(txflag);break;
case EProCmdV.READ_ADDR_: await ReadByUid(txflag) ;break;
case EProCmdV.BOOM_: await BroadCastCmd(txflag);break;
case EProCmdV.READ_AMEND_V_: await ReadByAddr(txflag) ;break;
case EProCmdV.SLAVE_ONLINE_: await ReadByAddr(txflag);break;
case EProCmdV.ALL_SLEEP: await AddrCmd(txflag);break;
case EProCmdV.DISCHARGE_: await BroadCastCmd(txflag);break;
case EProCmdV.INSPECT_SLAVE_: await InspectSlave(true);break;
case EProCmdV.BASE_CHECK_: await SlaveCheckSelf(BtOper_Json.setparam[0],BtOper_Json.waitack,txflag,BtOper_Json.waittimeout);break;
case EProCmdV.READ_DELAY_: await ReadByAddr(txflag) ;break;
case EProCmdV.READ_S_BUS_V_: await ReadByAddr(txflag) ;break;
case EProCmdV.READ_FIRWARE_: await ReadByAddr(txflag);break;
case EProCmdV.SET_PSWD_FLAG: await ReadByAddr(txflag);break;
case /*BUS_MODE_B_*/ EProCmdV.SET_BUS_MODE_: await BusMode(2,true,BtOper_Json.waitack,txflag,BtOper_Json.waittimeout);break;
//case BUS_MODE_R_:BusMode(1,true,cmdclass.waitack,txflag,cmdclass.timeout);break;
case EProCmdV.MASTER_HARTBEAT_: await SetHartBeat(txflag);break;
case EProCmdV.WAIT_ONLINE_: await WaitSlaveOnline(timeout);break;
case EProCmdV.WAIT_RELEASE_: await WaitSlaveRelease(timeout);break;
case EProCmdV.TRANS_DELAY_: await await TransSleep(BtOper_Json.setdelay);break;
case EProCmdV.SET_SUPER_T_: await SetSuperTime(txflag) ;break;
case EProCmdV.BC_WRITE_ADDR_: await BroadCast_SetAddr(true);break;
default:break;
}
}