Files
mht.js/utils/process.js
2025-10-22 07:50:31 +08:00

684 lines
26 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.

import socket from "./socket.js";
const RandomLeft = 6
const RandomRight = 3
let sendRandomData = new Uint32Array(1) //随机数
let bushu = 0
// sendRandomData[0] = 0xABCDEF12
//加密
//uword RandomData 随机数,
//ubyte *DataBuf 传入数据
//ubyte *Ciphertext 密文
//uword Length 传入数据长度
function fnEncryption(RandomData, DataBuf, Ciphertext,Length) {
let fnencryptioni = 0;
let fnencryptionDate = new Uint8Array(4);
for (fnencryptioni = 0; fnencryptioni < 4; fnencryptioni++) //32位随机数存放于4个字节的数组里面
{
fnencryptionDate[fnencryptioni] = (RandomData >> (8 * fnencryptioni));
}
for (fnencryptioni = 0; fnencryptioni < Length; fnencryptioni++) //每个数据进行加密
{
Ciphertext[fnencryptioni] = DataBuf[fnencryptioni] ^ fnencryptionDate[fnencryptioni % 4];
Ciphertext[fnencryptioni] = Ciphertext[fnencryptioni] ^ ((fnencryptionDate[fnencryptioni % 4] >> RandomRight) |
(fnencryptionDate[fnencryptioni % 4] << (8 - RandomRight))); //与上循环右移3位
Ciphertext[fnencryptioni] = Ciphertext[fnencryptioni] ^ ((fnencryptionDate[fnencryptioni % 4] << RandomLeft) | (
fnencryptionDate[fnencryptioni % 4] >> (8 - RandomLeft))); //异或循环左移6
}
}
//解密
//uword RandomData 随机数
//ubyte *DataBuf 传入数据
//ubyte *Plaintext 明文
//uword Length 传入数据长度
function fnDecrypt( RandomData, DataBuf, Plaintext, Length)
{
let fnencryptioni = 0;
let fnencryptionDate = new Uint8Array(4);
//---------------------------------------------------------------------------------------------
for (fnencryptioni = 0; fnencryptioni < 4; fnencryptioni++)
{
fnencryptionDate[fnencryptioni] = (RandomData >> (8 * fnencryptioni));
}
for (fnencryptioni = 0; fnencryptioni < Length; fnencryptioni++)
{
Plaintext[fnencryptioni] = DataBuf[fnencryptioni] ^ ((fnencryptionDate[fnencryptioni % 4] << RandomLeft) | (fnencryptionDate[fnencryptioni % 4] >> 2)); //异或循环左移6
Plaintext[fnencryptioni] = Plaintext[fnencryptioni] ^ ((fnencryptionDate[fnencryptioni % 4] >> RandomRight) | (fnencryptionDate[fnencryptioni % 4] << 5)); //与上循环右移3位
Plaintext[fnencryptioni] = Plaintext[fnencryptioni] ^ fnencryptionDate[fnencryptioni % 4];
}
}
//页面跳转处理状态机
let pageState = new Uint8Array(1);
pageState[0] = 0;
let pageOldState = new Uint8Array(1);
pageOldState[0] = 0;
let Rgstate = new Uint8Array(1);
Rgstate[0] = 0;
function statePageJump() {
switch (Rgstate[0]) {
case 0:
pageOldState[0] = pageState[0];
Rgstate[0] = 1;
// console.log("state:" + Rgstate[0])
break;
case 1: //默认在视频播放页面
if (pageOldState[0] != pageState[0]) //说明页面已经切换
{
pageOldState[0] = pageState[0];
Rgstate[0] = 2;
// console.log("state:" + Rgstate[0])
} else {
Rgstate[0] = 1;
// console.log("state:" + Rgstate[0])
}
break;
case 2:
if (pageOldState[0] != pageState[0]) //说明页面已经切换
{
pageOldState[0] = pageState[0];
Rgstate[0] = 2;
} else {
//发送信号给APP.vue
uni.$emit('PageJump', {
Rgstate:Rgstate[0],
pageState:pageState[0],
pageOldState:pageOldState[0]
});
Rgstate[0] = 1;
console.log("state:" + Rgstate[0])
}
break;
default:
break;
}
}
// 60s会被操作系统调用一次处理逻辑写到这里闹钟响你需要做的事情写下面
let cntTimer60s = 0;
function CallbackTimer60s() {
statePageJump(); //调用页面跳转处理状态机
//这个不能动
cntTimer60s = cntTimer60s + 1;
// console.log("cntTimer60s:" + cntTimer60s)
}
// 1000ms会被操作系统调用一次处理逻辑写到这里闹钟响你需要做的事情写下面
let cntTimer1000 = 0;
function CallbackTimer1000ms() {
// console.log(cntTimer1000);
// CallbackSendDataFFBB(); //发送个字节数据到UDP
// CallbackSendDataFFDD(); //发送12个字节
// CallbackSendDataFFCC(); //发送441个字节数据到UDP
//这个不能动
cntTimer1000 = cntTimer1000 + 1;
}
//定时器100mm100ms会被操作系统调用一次处理逻辑写到这里
let cntTimer100 = 0;
function CallbackTimer100ms() {
// console.log("cntTimer100:" + cntTimer100);
CallbackSendDataFFBB(); //发送个字节数据到UDP
CallbackSendDataFFDD(); //发送12个字节
CallbackSendDataFFCC(); //发送441个字节数据到UDP
//这个不能动
cntTimer100 = cntTimer100 + 1;
}
let accFFBB = 0; //累加
//定义位运算结构体对象
let FFBB_Byte06 = {
AutomaticAndManual: 0x0, //模式选择
StartAndStop: 0, //启动和停止
Reset: 0, //复位
StepBack0: 0, //步进回零
SignOut: 0, //出签
WaterPump: 0 //水泵
}
let glbFFBB_Byte06 = new Object(FFBB_Byte06) // new个对象传给vue
let FFBB_Byte07 = {
PowerDoors: 0, //电动门
Fan: 0, //风机
SugarControlMotor_1: 0, //控糖电机1
SugarControlMotor_2: 0, //控糖电机2
SugarControlMotor_3: 0, //控糖电机3
SugarControlMotor_4: 0, //控糖电机4
Humidification: 0 //加湿
}
let glbFFBB_Byte07 = new Object(FFBB_Byte07)
let FFBB_Byte08 = {
SugarHead: 0, //糖头启动和停止
Heating: 0, //加热启动和停止
StartUp: 0, //开机和关机
X_axis: 0 //X轴
}
let glbFFBB_Byte08 = new Object(FFBB_Byte08)
let FFBB_Byte09 = {
Y_axis: 0, //Y轴
Z_axis: 0, //Z轴
R_axis: 0, //R轴
ROG_axis: 0 //ROG轴
}
let glbFFBB_Byte09 = new Object(FFBB_Byte09)
let SetSteps = new Uint8Array(1); //设置步数
let FFBB_Byte11 = {
SingleStep: 0, //单步
StepPositionWrite: 0 //步数位置写入
}
let glbFFBB_Byte11 = new Object(FFBB_Byte11)
let SugarType = new Uint8Array(1); //棉花糖类型
SugarType[0] = 0x01
//定义IP和port
let ip = '192.168.17.20' //目标ip
let port = '8011' //目标端口
let localPort = '8012' //本机端口
//发送18个字节
function CallbackSendDataFFBB() {
let bitCalculate = new Uint8Array(1); //第6字节
let data = ['FF', 'BB', '00', '11', '16']; //帧头
accFFBB = accFFBB + 1; //累加
data.push(accFFBB.toString(16))
//组装成第6字节
bitCalculate =
glbFFBB_Byte06.AutomaticAndManual +
((glbFFBB_Byte06.StartAndStop & 0b00000011) << 1) +
((glbFFBB_Byte06.Reset & 0b00000001) << 3) +
((glbFFBB_Byte06.StepBack0 & 0b00000001) << 4) +
((glbFFBB_Byte06.SignOut & 0b00000011) << 5) +
((glbFFBB_Byte06.WaterPump & 0b00000001) << 7)
data.push(bitCalculate.toString(16))
//组装成第7字节
bitCalculate =
((glbFFBB_Byte07.PowerDoors & 0b00000011) << 0) +
((glbFFBB_Byte07.Fan & 0b00000001) << 2) +
((glbFFBB_Byte07.SugarControlMotor_1 & 0b00000001) << 3) +
((glbFFBB_Byte07.SugarControlMotor_2 & 0b00000001) << 4) +
((glbFFBB_Byte07.SugarControlMotor_3 & 0b00000001) << 5) +
((glbFFBB_Byte07.SugarControlMotor_4 & 0b00000001) << 6) +
((glbFFBB_Byte07.Humidification & 0b00000001) << 7)
data.push(bitCalculate.toString(16))
//组装成第8字节
bitCalculate =
((glbFFBB_Byte08.SugarHead & 0b00000011) << 0) +
((glbFFBB_Byte08.Heating & 0b00000011) << 2) +
((glbFFBB_Byte08.StartUp & 0b00000011) << 4) +
((glbFFBB_Byte08.X_axis & 0b00000011) << 6)
data.push(bitCalculate.toString(16))
//组装成第9字节
bitCalculate =
((glbFFBB_Byte09.Y_axis & 0b00000011) << 0) +
((glbFFBB_Byte09.Z_axis & 0b00000011) << 2) +
((glbFFBB_Byte09.R_axis & 0b00000011) << 4) +
((glbFFBB_Byte09.ROG_axis & 0b00000011) << 6)
data.push(bitCalculate.toString(16))
data.push((SetSteps[0]).toString(16)) //设置步数第10字节
//组装成第11字节
bitCalculate =
glbFFBB_Byte11.SingleStep +
((glbFFBB_Byte11.StepPositionWrite & 0b00000001) << 1)
data.push(bitCalculate.toString(16))
data.push((SugarType[0]).toString(16)) //添加棉花糖类型
//计算CRC
let sumCRC = 0
for (let cntj = 0; cntj < data.length; cntj++) { //16进制数组转成10进制添加到CRC数组里
sumCRC += (parseInt(data[cntj], 16))
}
//发送的数据数据转换
let SaveData = []
for (let cntl = 0; cntl < data.length; cntl++) {
SaveData[cntl] = parseInt(data[cntl], 16); //强制类型转换string类型转换成unit8array类型的, 向0f这样的数据无法转成数字 需要先转成10进制
}
//存放输出密文的数据
let SendCiphertext = new Uint8Array(SaveData.length)
//加密函数 传入随机数 发送的数据 密文 数据长度
fnEncryption(sendRandomData, SaveData, SendCiphertext, SaveData.length)
//存放加密数组
let EncryptData = [];
//SendCiphertext得出来得数是数字,转成16进制数发
for (let cntm = 0; cntm < SendCiphertext.length; cntm++) {
EncryptData[cntm] = SendCiphertext[cntm].toString(16)
}
//添加CRC
EncryptData.push((sumCRC & 0xff).toString(16));
//数组添加随机数
let RandomNumber = new Uint8Array(4); //定义个随机数数组
//把32位随机数赋值个数组
RandomNumber[0] = (sendRandomData >> 24)
RandomNumber[1] = (sendRandomData >> 16)
RandomNumber[2] = (sendRandomData >> 8)
RandomNumber[3] = sendRandomData
for (let cntk = 0; cntk < 4; cntk++) //32位随机数存放于4个字节的数组里面
{
EncryptData.push(RandomNumber[cntk].toString(16)) //添加到data数组中
}
// socket.sendBytes(JSON.stringify(data)); //发送得数据必须是["1","b","c"]这样类型得
socket.sendBytesBroadcast(JSON.stringify(EncryptData),ip, port,localPort);
}
let Coordinate = new Uint8Array(408); //50步坐标
let Parameter = new Uint8Array(25) //参数设置
// //从配置文件读入初始值
// import testJsonData from "./initial_value.json"
// 发送数据结构体
let StrSendData_FFCC = {
sendAxis_x: [], //x轴坐标
sendAxis_y: [], //y轴坐标
sendAxis_z: [], //z轴坐标
sendAxis_r: [], //r轴坐标
sendSetHumidity: 0, //设定湿度
sendSetManualTemperature: 0, //糖头手动设定温度
sendSugarHeadWorkingTemperature: 0, //糖头工作温度
sendSugarHeadWaitingTemperature: 0, //糖头等待温度
sendWaterSprayingDuration: 0, //喷水时长
sendBlowingDuration: 0, //吹风时长
sendStrSugarYield: [], //出糖量
sendInterval: [], //间隔
sendBlow: [], //吹风
sendWriteParameter: 0, //写参数使能
sendCRC: 0, //CRC
}
let glbStrSendData_FFCC = new Object(StrSendData_FFCC) // new个对象传给vue
let accFFCC = 0
//发送Udp 449数据函数
function CallbackSendDataFFCC() {
let data = ['FF', 'CC', '00', '11', '01', 'BD']; //帧头
let CRC = ['FF', 'CC', '00', '11', '01', 'BD']; //计算CRC数组
accFFCC = accFFCC + 1; //累加
data.push(accFFCC.toString(16))
CRC.push(accFFCC.toString(16))
let XYZRCoordinate = new Uint8Array(408); //50步坐标
let ParameterSet = new Uint8Array(25) //参数设置
for (let cnti = 0; cnti < 51; cnti++) {
XYZRCoordinate[cnti * 8 + 0] = glbStrSendData_FFCC.sendAxis_x[cnti] >> 8 //x轴高位
XYZRCoordinate[cnti * 8 + 1] = glbStrSendData_FFCC.sendAxis_x[cnti] //x轴低位
XYZRCoordinate[cnti * 8 + 2] = glbStrSendData_FFCC.sendAxis_y[cnti] >> 8
XYZRCoordinate[cnti * 8 + 3] = glbStrSendData_FFCC.sendAxis_y[cnti]
XYZRCoordinate[cnti * 8 + 4] = glbStrSendData_FFCC.sendAxis_z[cnti] >> 8
XYZRCoordinate[cnti * 8 + 5] = glbStrSendData_FFCC.sendAxis_z[cnti]
XYZRCoordinate[cnti * 8 + 6] = glbStrSendData_FFCC.sendAxis_r[cnti] >> 8
XYZRCoordinate[cnti * 8 + 7] = glbStrSendData_FFCC.sendAxis_r[cnti]
}
//添加408个步数坐标到data数组中
for (let cntj = 0; cntj < XYZRCoordinate.length; cntj++) {
data.push(XYZRCoordinate[cntj].toString(16))
}
//强制类型转换
let SaveData = [] // 把data的数据存放在
for (let cntl = 0; cntl < data.length; cntl++) {
SaveData[cntl] = parseInt(data[cntl], 16); //强制类型转换string类型转换成unit8array类型的, 向0f这样的数据无法转成数字 需要先转成10进制
}
//添加随机数
let RandomNumber = new Uint8Array(4); //定义个随机数数组
RandomNumber[0] = (sendRandomData >> 24)
RandomNumber[1] = (sendRandomData >> 16)
RandomNumber[2] = (sendRandomData >> 8)
RandomNumber[3] = sendRandomData
for (let cntk = 0; cntk < 4; cntk++) //32位随机数存放于4个字节的数组里面
{
data.push(RandomNumber[cntk].toString(16)) //添加到data数组中
}
//存放输出密文的数据
let Ciphertext = new Uint8Array(SaveData.length)
//加密函数 传入随机数 发送的数据 密文 数据长度
fnEncryption(sendRandomData, SaveData, Ciphertext, SaveData.length)
//SendCiphertext得出来得数,转成16进制数添加到数组中
for (let cntm = 0; cntm < Ciphertext.length; cntm++) {
data[cntm] = Ciphertext[cntm].toString(16)
}
//参数配置
let SaveParameterData = []
ParameterSet[0] = glbStrSendData_FFCC.sendSetHumidity //湿度
ParameterSet[1] = glbStrSendData_FFCC.sendSetManualTemperature //糖头手动设定温度
ParameterSet[2] = glbStrSendData_FFCC.sendSugarHeadWorkingTemperature //糖头工作温度
ParameterSet[3] = glbStrSendData_FFCC.sendSugarHeadWaitingTemperature //糖头等待温度
ParameterSet[4] = glbStrSendData_FFCC.sendWaterSprayingDuration //喷水时长
ParameterSet[5] = glbStrSendData_FFCC.sendBlowingDuration //吹风时长
for (let cntn = 0; cntn < 6; cntn++) {
ParameterSet[6 + cntn] = glbStrSendData_FFCC.sendStrSugarYield[cntn] //出糖
}
for (let cnto = 0; cnto < 6; cnto++) {
ParameterSet[12 + cnto] = glbStrSendData_FFCC.sendInterval[cnto] //间隔
}
for (let cntp = 0; cntp < 6; cntp++) {
ParameterSet[18 + cntp] = glbStrSendData_FFCC.sendBlow[cntp] //吹风
}
ParameterSet[24] = glbStrSendData_FFCC.sendWriteParameter //写参数使能
for (let cntq = 0; cntq < ParameterSet.length; cntq++) {
SaveParameterData.push(ParameterSet[cntq].toString(16))
}
//数据强制类型转换
let SaveData1 = [] // 把data的数据存放在
for (let cntu = 0; cntu < SaveParameterData.length; cntu++) {
SaveData1[cntu] = parseInt(SaveParameterData[cntu],
16); //强制类型转换string类型转换成unit8array类型的, 向0f这样的数据无法转成数字 需要先转成10进制
}
// 存放输出密文的数据
let Ciphertext1 = new Uint8Array(SaveData1.length)
//加密函数 传入随机数 发送的数据 密文 数据长度
fnEncryption(sendRandomData, SaveData1, Ciphertext1, SaveData1.length)
//SendCiphertext得出来得数,转成16进制数添加到数组中
let EncryptData = []; //存放加密数组,发出
//添加418个数组
for (let cntv = 0; cntv < data.length; cntv++) {
EncryptData.push(data[cntv].toString(16))
}
//添加把参数配置
for (let cntw = 0; cntw < Ciphertext1.length; cntw++) {
EncryptData.push(Ciphertext1[cntw].toString(16))
}
//408步数组添加到计算CRC数组中
for (let cntx = 0; cntx < XYZRCoordinate.length; cntx++) {
CRC.push(XYZRCoordinate[cntx].toString(16))
}
//参数配置数组添加到CRC数组中
for (let cnty = 0; cnty < ParameterSet.length; cnty++) { //在参数设置得25个数据添加到data中
CRC.push(ParameterSet[cnty].toString(16))
}
//计算原始数组的CRC
let sumCRC = 0
for (let cntz = 0; cntz < CRC.length; cntz++) {
sumCRC += (parseInt(CRC[cntz], 16))
}
//添加CRC值
EncryptData.push((sumCRC & 0xff).toString(16));
//添加随机数
let RandomNumber1 = new Uint8Array(4); //定义个随机数数组
//添加随机数
RandomNumber1[0] = (sendRandomData >> 24)
RandomNumber1[1] = (sendRandomData >> 16)
RandomNumber1[2] = (sendRandomData >> 8)
RandomNumber1[3] = sendRandomData
for (let cntA = 0; cntA < 4; cntA++) //32位随机数存放于4个字节的数组里面
{
EncryptData.push(RandomNumber1[cntA].toString(16)) //添加到data数组中
}
// socket.sendBytes(JSON.stringify(data)); //发送
socket.sendBytesBroadcast(JSON.stringify(EncryptData),ip, port,localPort);
}
let accFFDD = 0;
//接收数据后需要发送一帧数据
let ReadConfiguration = new Uint8Array(1); //读取参数配置使能
function CallbackSendDataFFDD() {
let data = ['FF', 'DD', '00', '11', '0C']; //帧头
accFFDD = accFFDD + 1; //累加
data.push(accFFDD.toString(16))
data.push(ReadConfiguration[0].toString(16)) //参数使能
//计算CRC
let sumCRC = 0
for (let cnti = 0; cnti < data.length; cnti++) {
sumCRC += (parseInt(data[cnti], 16)) //data转成10进制累加计算
}
//强制类型转换 string类型转换成unit8array类型的, 向0f这样的数据无法转成数字 需要先转成10进制
let SaveData = []
for (let cntl = 0; cntl < data.length; cntl++) {
SaveData[cntl] = parseInt(data[cntl], 16); //强制类型转换,
}
//存放输出密文的数据
let SendCiphertext = new Uint8Array(SaveData.length)
//加密函数 传入随机数 发送的数据 密文 数据长度
fnEncryption(sendRandomData, SaveData, SendCiphertext, SaveData.length)
//存放加密数组
let EncryptData = [];
//SendCiphertext得出来得数是数字,转成16进制数发
for (let cntm = 0; cntm < SendCiphertext.length; cntm++) {
EncryptData[cntm] = SendCiphertext[cntm].toString(16)
}
//添加CRC
EncryptData.push((sumCRC & 0xff).toString(16));
//数组添加随机数
let RandomNumber = new Uint8Array(4); //定义个随机数数组
RandomNumber[0] = (sendRandomData >> 24)
RandomNumber[1] = (sendRandomData >> 16)
RandomNumber[2] = (sendRandomData >> 8)
RandomNumber[3] = sendRandomData
for (let cntk = 0; cntk < 4; cntk++) //32位随机数存放于4个字节的数组里面
{
EncryptData.push(RandomNumber[cntk].toString(16)) //添加到data数组中
}
//socket.sendBytes(JSON.stringify(data));
socket.sendBytesBroadcast(JSON.stringify(EncryptData),ip, port,localPort);
}
let FF00_Data = new Uint8Array(500) // 处理449位数据
//接收数据定义结构体对象
let StrRecData = {
recFrameHeader: 0, //帧头
recFrameType: 0, //帧类型
recFrameLenth: 0, //帧长
recFrameCnt: 0, //累加
recAxis_x: [], //x轴坐标
recAxis_y: [], //y轴坐标
recAxis_z: [], //z轴坐标
recAxis_r: [], //r轴坐标
recSetHumidity: 0, //设定湿度
recSetManualTemperature: 0, //糖头手动设定温度
recSugarHeadWorkingTemperature: 0, //糖头工作温度
recSugarHeadWaitingTemperature: 0, //糖头等待温度
recWaterSprayingDuration: 0, //喷水时长
recBlowingDuration: 0, //吹风时长
recStrSugarYield: [], //出糖量
recInterval: [], //间隔
recBlow: [], //吹风
recWriteParameter: 0, //写参数使能
recCRC: 0, //CRC
}
let recData = new Object(StrRecData) // new个对象传给vue
//接收数据库里的内容 传个页面
let writeData = new Uint8Array(500)
let FFEE_Data = new Uint8Array(40) // 处理34位数据
//接收18个数据定义结构体对象
let StrRecData1 = {
recFrameHeader: 0, //帧头
recFrameType: 0, //帧类型
recFrameLenth: 0, //帧长
recTemperature: 0, //当前环境温度
recHumidity: 0, //当前环境湿度
recSugarHead: 0, //当前糖头温度
recCurrentSteps: 0, //当前位置步数
recCurrentAxis_X: 0, //当前x轴位置
recCurrentAxis_Y: 0, //当前Y轴位置
recCurrentAxis_Z: 0, //当前Z轴位置
recCurrentAxis_R: 0, //当前R轴位置
recMachine_id: [], //唯一id
recCRC: 0, //CRC
}
let recData1 = new Object(StrRecData1) // new个对象传给vue
let ReceiveData = new Uint8Array(500) // 接收的数据传给这个全局变量 再传到页面
//只需要调用一次相当于初始化跟定时器一样操作系统接收到UDP数据后会调用receivedHexMsgCallBack
function CallbackconnectUDP() {
// let SaveData = []
let SaveData = new Uint8Array(500);
// socket.init(ip, port, 'GBK');
// console.log("init UDP");
//函数重载,重新定义打包了的函数
socket.bindBroadcast('8011'); //绑定本机接收数据的广播端口
socket.recBroadcastHexMsgCallBack = function(receivedHexMsg) {
//硬件服务器返回16进制数据
let msg = receivedHexMsg;
let sum = msg.length / 2;
//把数组清空
for (let k = 0; k < sum; k++) {
let str = msg.substring(k * 2, k * 2 + 2); //0xFF从字符串中取出2个字符
SaveData[k] = parseInt(str, 16); //强制类型转换string类型转换成unit8array类型的, 向0f这样的数据无法转成数字 需要先转成10进制
}
let DataValue = ((SaveData[35] << 8) + (SaveData[36]))
//先判断接收的数据第35和36位为 0 就说明接收的数据只有34位
if (DataValue === 0) {
//先把接收到的数数据 取出数据赋值给变量
sendRandomData = ((SaveData[30] << 24) & 0xFF000000) | ((SaveData[31] << 16) & 0x00ff0000) | ((SaveData[
32] << 8) & 0x0000FF00) | ((SaveData[33]) & 0x000000FF)
//传入 随机数, 接收到的数据(密文), 明文, 数据长度
fnDecrypt(sendRandomData, SaveData, FFEE_Data, SaveData.length);
//得到明文数据 FFEE_Data
let localFrameHeader = (FFEE_Data[0] << 8) + (FFEE_Data[1]) //解析帧头
//如果接收34个字节数据 就判断帧头是不是 FFEE
if (localFrameHeader === 65518)
{
recData1.recFrameHeader = (FFEE_Data[0] << 8) + FFEE_Data[1]
recData1.recFrameType = (FFEE_Data[2] << 8) + FFEE_Data[3]
recData1.recFrameLenth = FFEE_Data[4]
recData1.recTemperature = FFEE_Data[5] //环境温度
recData1.recHumidity = FFEE_Data[6] //当前环境湿度
recData1.recSugarHead = FFEE_Data[7] //糖头温度
recData1.recCurrentSteps = FFEE_Data[8] //当前位置步数
recData1.recCurrentAxis_X = (FFEE_Data[9] << 8) + FFEE_Data[10] //当前x轴位置
recData1.recCurrentAxis_Y = (FFEE_Data[11] << 8) + FFEE_Data[12] //当前y轴位置
recData1.recCurrentAxis_Z = (FFEE_Data[13] << 8) + FFEE_Data[14] //当前z轴位置
recData1.recCurrentAxis_R = (FFEE_Data[15] << 8) + FFEE_Data[16] //当前r轴位置
let ID = [];
for (let cnti = 0; cnti < 13; cnti++) { //接收唯一ID
ID.push(FFEE_Data[17 + cnti])
}
//id存入数据中
for (let cntj = 0; cntj < 13; cntj++) {
recData1.recMachine_id[cntj] = (ID[cntj])
}
recData1.CRC = FFEE_Data[29] //CRC
//解析随机数存入到全局变量
sendRandomData = ((SaveData[30] << 24) & 0xFF000000) | ((SaveData[31] << 16) & 0x00ff0000) | ((
SaveData[32] << 8) & 0x0000FF00) | ((SaveData[33]) & 0x000000FF)
// const db = uniCloud.database();
// db.collection("DataSave").where('machine_id == "001"').remove().then((res) => {})
//云数据库库添加 ID
// db.collection("DataSave").add({
// machine_id: recData1.recMachine_id,
// }).then((res) => { // res 为数据库查询结果
// console.log(res)
// })
} else { }
} else if (DataValue != 0) //数据长度是不是449
{
sendRandomData = ((SaveData[415] << 24) & 0xFF000000) | ((SaveData[416] << 16) & 0x00ff0000) | ((
SaveData[417] << 8) & 0x0000FF00) | ((SaveData[418]) & 0x000000FF)
//传入 随机数, 接收到的数据(密文), 明文, 数据长度
fnDecrypt(sendRandomData, SaveData, FF00_Data, SaveData.length);
//得到明文数据 FF00_Data
let localFrameHeader = (FF00_Data[0] << 8) + (FF00_Data[1]) //解析帧头
//如果接收449个字节数据 就判断帧头是不是 FF00
if (localFrameHeader === 65280) {
for (let cntl = 0; cntl < FF00_Data.Length; cntl++) { //数组直接不能 = 进行赋值 用for循环来把一个个值传到另一个数组中
ReceiveData[cntl] = FF00_Data[cntl]
}
recData.recFrameHeader = (FF00_Data[0] << 8) + FF00_Data[1]
recData.recFrameType = (FF00_Data[2] << 8) + FF00_Data[3]
recData.recFrameLenth = (FF00_Data[4] << 8) + FF00_Data[5]
recData.recFrameCnt = FF00_Data[6]
for (let cnti = 0; cnti < 51; cnti++) { //xyzr轴坐标
recData.recAxis_x[cnti] = (FF00_Data[7 + cnti * 8] << 8) + FF00_Data[8 + cnti * 8]
recData.recAxis_y[cnti] = (FF00_Data[9 + cnti * 8] << 8) + FF00_Data[10 + cnti * 8]
recData.recAxis_z[cnti] = (FF00_Data[11 + cnti * 8] << 8) + FF00_Data[12 + cnti * 8]
recData.recAxis_r[cnti] = (FF00_Data[13 + cnti * 8] << 8) + FF00_Data[14 + cnti * 8]
}
//解析随机数存入到全局变量
sendRandomData = ((SaveData[445] << 24) & 0xFF000000) | ((SaveData[446] << 16) & 0x00ff0000) | ((
SaveData[447] << 8) & 0x0000FF00) | ((SaveData[448]) & 0x000000FF);
//传入 随机数1, 接收到的数据(密文), 明文, 数据长度
fnDecrypt(sendRandomData, SaveData, FF00_Data, SaveData.length);
recData.recSetHumidity = FF00_Data[419]
recData.recSetManualTemperature = FF00_Data[420]
recData.recSugarHeadWorkingTemperature = FF00_Data[421]
recData.recSugarHeadWaitingTemperature = FF00_Data[422]
recData.recWaterSprayingDuration = FF00_Data[423]
recData.recBlowingDuration = FF00_Data[424]
for (let cntj = 0; cntj < 6; cntj++) { //出糖量
recData.recStrSugarYield[cntj] = FF00_Data[425 + cntj]
}
for (let cntl = 0; cntl < 6; cntl++) { //间隔
recData.recInterval[cntl] = FF00_Data[431 + cntl]
}
for (let cntm = 0; cntm < 6; cntm++) { //吹风
recData.recBlow[cntm] = FF00_Data[437 + cntm]
}
recData.recWriteParameter = FF00_Data[443]
recData.recCRC = FF00_Data[444]
//解析随机数存入到全局变量
sendRandomData = ((SaveData[445] << 24) & 0xFF000000) | ((SaveData[446] << 16) & 0x00ff0000) | ((
SaveData[447] << 8) & 0x0000FF00) | ((SaveData[418]) & 0x000000FF);
} else {
// console.log(FF00_Data)
}
}
else { }
}
}
function CallbackProcessLogic() {
//对接收的数据进行处理,状态机写到这里。
// console.log(param_test.Data_FFCC)
// param_test.Data_FFCC.
}
// let testdata = new Uint8Array(10)
// testdata[0] = 1;
//定时发送,下面的程序不要动,属于框架
const funProcess = {
TimerStart1000ms() {
this.timer = setInterval(() => {
CallbackTimer1000ms();
// console.log(testdata)
// testdata[1] = testdata[1] +1;
}, 1000);
},
TimerStart100ms() {
this.timer = setInterval(() => {
CallbackTimer100ms();
}, 100);
},
TimerStart60s() {
this.timer = setInterval(() => {
CallbackTimer60s();
}, 60*1000);
},
disconnect() {
setTimeout(() => {
clearInterval(timer);
}, 100);
}
}
export default {
funProcess,
CallbackProcessLogic,
CallbackconnectUDP,
recData, //解析441个字节数据
Coordinate, //发送数据的50步坐标
Parameter, //参数
ReadConfiguration, //读取参数配置使能
recData1, //解析18个字节数据
glbFFBB_Byte06,
glbFFBB_Byte07,
glbFFBB_Byte08,
glbFFBB_Byte09,
SetSteps, //设置步数
glbFFBB_Byte11,
SugarType, //棉花糖类型
glbStrSendData_FFCC, //发送441个字节
ip,
port,
writeData,
// writeData1, //解析数据库里的数据传给页面
// testdata,
ReceiveData,
pageState, //页面状态,页面切换用
bushu,
}