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

395 lines
9.5 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 SlaveCtr = new Object;
SlaveCtr.delay = 0;
SlaveCtr.superdelay = 20000;
SlaveCtr.uid = [];
SlaveCtr.pwd = [];
SlaveCtr.addr = 1;
SlaveCtr.state = [];
SlaveCtr.firmware = [];
SlaveCtr.amendv = 0;
SlaveCtr.regv = [];
SlaveCtr.cfire = 0.0;
var SlaveCmd = {
A_ERROR_S : 0 , //从机应答错误状态
RA_WRITE_ID : 1 , //主机写入UUID param=15字节
RA_WRITE_PSW : 2 , //主机写入密码 param=8字节
RA_EQUAL_ID : 3 , //主机验证UUID param=15字节
RA_EQUAL_PSW : 4 , //主机验证密码 param=8字节
RA_SET_DELAY : 5 , //主机设置单发雷管的延时 param=2字节
RA_SET_ADDR : 7 , //设置从机的通讯地址 param=2字节 或 15+2广播通过UID设置地址
RA_OPER_CMD : 8 , //主机发送操作命令 param=1字节
RA_REQUEST_ACK : 9 , //主机发送的应答请求 param=0字节
RA_SET_BAUDRATE: 10, //设置通讯速率 param=2字节
R_SET_LOCAL : 11, //设置使用位置 param=8字节
R_SET_USETIME : 12, //设置使用时间 param=2字节
R_HEARTBEAT : 13, //心跳包 param=0字节
R_FACTORY_SET : 14, //释放工厂模式 param=4字节
UID_REQUEST : 15, //利用UID进行访问只能用广播访问 param = {UID+(10bit地址+6bit功能码)+功能码参数}
//#define UID_SEARCH 16 //UID搜索功功能码
RA_EQUAL_UID_F : 17, //UID特征码验证
RA_SETSUPER_T : 18,//设置复位保存延时起爆时间
RA_RAMSETTING : 19, //运行配置 param = 4字节 bit0 应答数据1有效
RA_REGISTER : 62, //读寄存器
WA_REGISTER : 63, //写4字节寄存器
//操作命令
CMD_READ_ID : 1, //主机读取UUID
CMD_READ_PSW : 2, //主机读取PSWD
CMD_READ_SYS_S : 3, //主机读取系统状态
CMD_READ_VERSION : 4, //主机读取系统版本
CMD_READ_LOCAL : 5, //读取位置信息
CMD_READ_OPERTIME: 6, //读取操作时间
CMD_READ_ADDR : 7, //读取通讯地址
CMD_READ_DELAY : 8, //主机读取延时设置
CMD_READ_SYS_F : 9, //读取备份区的状态信息
CMD_CHARGE : 10, //充电
CMD_DISCHARGE : 11, //放电
CMD_CLK_CHECK : 12, //时钟校准
CMD_BLAST : 13, //起爆
CMD_SLEEP : 14, //强制休眠,不在监听总线
CMD_INSPECT : 15, //巡检
CMD_SYS_CHECK : 16, //执行自检
CMD_READ_FEATURE : 17, //读特征值
CMD_STOP_CHARGE : 18, //停止充电
CMD_FAC_CHECK1 : 19, //工厂自检
CMD_FAC_CHECK2 : 20, //工厂自检
CND_READ_AMEND : 21, //读校准值
CMD_FAC_CHECK3 : 22, //工厂自检
CMD_READ_BUSV : 23, //读总线电压
CMD_EQUEL_PWD : 24, //密码验证置位
CMD_READ_COM : 25, //
CMD_BOOTLOADER_RUN : 0xFE, //运行bootloader
CMD_APP_ERASE : 0xFC, //擦除APP
CMD_APP_RUN : 0xFD, //运行APP
};
/*
* 异或校验
*/
SlaveCtr.Check8 = function (src_data)
{
var check = 0X00;
for(i = 0; i < src_data.length; i++)
{
check ^= src_data[i];
check &= 0xFF;
}
return check;
}
/*
* 校验验证
*/
SlaveCtr.isCheck = function (src_data)
{
var check = SlaveCheck8(src_data);
if(check != 0)
{
return 0x0A;
}
}
/*
* rec_data 接收源
* send_data 发送源
* rtv 0x05 超时 0x00 通过 0x0A校验错误
*/
SlaveCtr.isAck = function (rec_data,send_data)
{
if(rec_data.length < 2)
return 0x05;
if(rec_data[0] == 0 && rec_data[1] == 0)
return 0x00;
if(rec_data[0] == send_data[0] && rec_data[1] == send_data[1])
return 0x00;
return 0X0A;
}
/*
* addr 通讯地址
* code 功能码
* cmd 命令码
* param 参数
*/
SlaveCtr.GetSlaveSendData = function (addr,code,cmd,param)
{
var head = 0xFFFF & ((addr << 6)|(code & 0X3F))
var cmd_buf = [];
cmd_buf[0] = head & 0xFF;
cmd_buf[1] = (head >> 8) & 0xFF;
if(code == 8)
{
cmd_buf[2] = cmd;
}
for(i = cmd_buf.length, count = 0; count < param.length;count++,i++)
{
cmd_buf[i] = param[count];
}
cmd_buf[cmd_buf.length] = SlaveCheck8(cmd_buf);
return cmd_buf;
}
SlaveCtr.Uint16ToArray = function(u16data)
{
var param = [];
param[0] = u16data & 0xFF;
param[1] = (u16data >> 8 )& 0xFF;
return param;
}
SlaveCtr.ArrayToUint16 = function(buf,offset)
{
var data = 0;
data = (buf[offset + 1] & 0xFF)<< 8;
data |= (buf[offset] & 0xFF);
return data;
}
/*
* RA_WRITE_ID
*
*/
SlaveCtr.WriteUID = function(addr,uid)
{
return this.GetSlaveSendData(addr,SlaveCmd.RA_WRITE_ID,0,uid);
}
SlaveCtr.WritePwd = function(addr,pwd)
{
return this.GetSlaveSendData(addr,SlaveCmd.RA_WRITE_PSW,0,pwd);
}
SlaveCtr.EquelUID = function(addr,ui)
{
return this.GetSlaveSendData(addr,SlaveCmd.RA_EQUAL_ID,0,uid);
}
SlaveCtr.EquelPwd = function(addr,pwd)
{
return this.GetSlaveSendData(addr,SlaveCmd.RA_EQUAL_PSW,0,pwd);
}
SlaveCtr.SetDelay = function(addr,delay)
{
var param = this.Uint16ToArray(delay);
return this.GetSlaveSendData(addr,SlaveCmd.RA_SET_DELAY,0,param);
}
SlaveCtr.SetAddr = function(slave_addr,uid)
{
var param = this.Uint16ToArray(slave_addr);
var len = uid.length;
uid[len] = param[0];
uid[len+1] = param[1];
return this.GetSlaveSendData(0,SlaveCmd.RA_SET_ADDR,0,uid);
}
SlaveCtr.OperCmd = function(addr,cmd)
{
var param = [];
return this.GetSlaveSendData(addr,SlaveCmd.RA_OPER_CMD,0,param);
}
SlaveCtr.RequestAck = function(addr)
{
var param = [];
return this.GetSlaveSendData(addr,SlaveCmd.RA_REQUEST_ACK,0,param);
}
SlaveCtr.UIDRequest = function(uid,code,cmd,param)
{
var param = [];
var len = uid.length;
uid[len++] = code;
if(code == 8)
{
uid[len++] = cmd;
}
for(count = 0; count < param.length;count++)
{
uid[len++] = param[count];
}
return this.GetSlaveSendData(0,SlaveCmd.UID_REQUEST,0,uid);
}
SlaveCtr.EquelUIDFutrue = function(slave_addr,uid)
{
var index1 = 0;
var us_temp = 0;
var uidfeatrue = [];
//拷贝特征值
uidfeatrue[0] = (buf[9] & 0xFF);
//合并年月
uidfeatrue[1] = (buf[3] & 0xFF) - 0x30;
uidfeatrue[1] <<= 4;
if(buf[5] > '0')
{
uidfeatrue[1] += 0x0A;
}
uidfeatrue[1] += ((buf[6] & 0xFF) - 0x30 );
//特征码于日期调整
buf[9] = buf[8];
buf[8] = buf[7];
//将日期和流水号转为3字节int
us_temp = 0;
for(index1 = 8; index1 < 15; index1++)
{
us_temp *= 10;
us_temp += ((buf[index1] & 0xFF) - 0x30 );
}
for(index1 = 0; index1 < 3; index1++)
{
uidfeatrue[2+index1] = us_temp & 0xFF;
us_temp >>= 8;
}
return this.GetSlaveSendData(slave_addr,SlaveCmd.RA_EQUAL_UID_F,0,uidfeatrue);
}
SlaveCtr.SetSuperTime = function(addr,delay)
{
var param = this.Uint16ToArray(delay);
return this.GetSlaveSendData(addr,SlaveCmd.RA_SETSUPER_T,0,param);
}
SlaveCtr.ReadReg = function(slave_addr,reg_addr,reg_len)
{
reg_addr >>= 2;
reg_addr &= 0xFF;
var param = this.Uint16ToArray(reg_addr);
param[2] = reg_len & 0xFF;
return this.GetSlaveSendData(slave_addr,SlaveCmd.RA_REGISTER,0,param);
}
SlaveCtr.WriteReg = function(slave_addr,reg_addr,reg_len,erase_flag,data)
{
reg_addr >>= 2;
reg_addr &= 0xFF;
var param = this.Uint16ToArray(reg_addr);
param[2] = reg_len & 0xFF;
param[3] = erase_flag & 0xFF;
var len = 4;
for(count = 0; count < data.length;count++)
{
param[len++] = data[count++];
}
return this.GetSlaveSendData(slave_addr,SlaveCmd.WA_REGISTER,0,param);
}
SlaveCtr.GetDelay = function(src_data)
{
var rtv = SlaveCtr.Check8(src_data);
if(rtv != 0)
{
return rtv;
}
SlaveCtr.delay = SlaveCtr.ArrayToUint16(src_data,3);
return 0;
}
SlaveCtr.GetUid = function(src_data)
{
var rtv = SlaveCtr.Check8(src_data);
if(rtv != 0)
{
return rtv;
}
var uid = [];
for(count = 0 ; count < 15; count++)
{
uid[count] = src_data[3+count];
count++;
}
SlaveCtr.uid = uid;
return 0;
}
SlaveCtr.GetPwd = function(src_data)
{
var rtv = SlaveCtr.Check8(src_data);
if(rtv != 0)
{
return rtv;
}
var pwd = [];
for(count = 0 ; count < 8; count++)
{
pwd[count] = src_data[3+count];
count++;
}
SlaveCtr.pwd= pwd;
return 0;
}
SlaveCtr.GetAddr = function(src_data)
{
var rtv = SlaveCtr.Check8(src_data);
if(rtv != 0)
{
return rtv;
}
SlaveCtr.addr = SlaveCtr.ArrayToUint16(src_data,3);
return 0;
}
SlaveCtr.GetState = function(src_data)
{
var rtv = SlaveCtr.Check8(src_data);
if(rtv != 0){
return rtv;
}
var state = [];
for(count = 0 ; count < 4; count++)
{
state[count] = src_data[3+count];
count++;
}
SlaveCtr.state= state;
return 0;
}
SlaveCtr.GetFirmware = function(src_data)
{
var rtv = SlaveCtr.Check8(src_data);
if(rtv != 0){
return rtv;
}
var firmware = [];
for(count = 0 ; count < 4; count++)
{
firmware[count] = src_data[3+count];
count++;
}
SlaveCtr.firmware= firmware;
return 0;
}
SlaveCtr.GetAmendV = function(src_data)
{
var rtv = SlaveCtr.Check8(src_data);
if(rtv != 0)
{
return rtv;
}
var amendv = SlaveCtr.ArrayToUint16(src_data,3);
if((amendv & 0X8000) > 0 )
{
amendv = (65536 - amendv) * -1;
}
SlaveCtr.amendv = amendv;
return 0;
}
SlaveCtr.GetAmendV = function(src_data)
{
var rtv = SlaveCtr.Check8(src_data);
if(rtv != 0)
{
return rtv;
}
var cfire = SlaveCtr.ArrayToUint16(src_data,3);
cfire = (((cfire/4096) * 3.3)/0.43)*3.43;
SlaveCtr.cfire = cfire;
return 0;
}
SlaveCtr.GetRegData = function(src_data)
{
var rtv = SlaveCtr.Check8(src_data);
if(rtv != 0){
return rtv;
}
var Regdata = [];
var Reglen = src_data[4];
for(count = 0 ; count < Reglen; count++)
{
Regdata[count] = src_data[5+count];
count++;
}
SlaveCtr.regv= Regdata;
return 0;
}