|
|
@@ -2,10 +2,11 @@
|
|
|
let _globalSlaveAddress = 0x01; //全局初始从机地址
|
|
|
let connected = false; // 连接状态
|
|
|
let sharedHeartbeatInterval = null; // 心跳定时器变量
|
|
|
-let agreement = 'DEVICE_A'; //协议类型 默认为 DEVICE_A
|
|
|
+let agreement = 'Lora'; //协议类型 默认为 Lora
|
|
|
let taskInterval = 500; // 定时任务频率
|
|
|
let timeStatus = true;
|
|
|
import store from '@/store';
|
|
|
+import { MODBUS_FRAME_CONFIG,MODBUS_TYPES } from '@/utils/modbusConfig.js';
|
|
|
// 先声明变量
|
|
|
let ecUI, ecBLE;
|
|
|
|
|
|
@@ -35,6 +36,11 @@ export function getConnected() {
|
|
|
export function setAgreement(type) {
|
|
|
agreement = type;
|
|
|
}
|
|
|
+
|
|
|
+export function getAgreement() {
|
|
|
+ return agreement;
|
|
|
+}
|
|
|
+
|
|
|
export function setTime(value) {
|
|
|
if (value === taskInterval && isHeartbeatRunning()){
|
|
|
return;
|
|
|
@@ -72,6 +78,16 @@ export function initBLE() {
|
|
|
console.log("数据来了");
|
|
|
let data = strHex.replace(/[0-9a-fA-F]{2}/g, ' $&') ;
|
|
|
const parsedData = readRegister(data)
|
|
|
+ if (parsedData.device === '255' || parsedData.device === 'FF' || parsedData.device === 255){
|
|
|
+ let b = isHeartbeatRunning();
|
|
|
+ if (!b){
|
|
|
+ if (parsedData.Addres_23 !== _globalSlaveAddress){
|
|
|
+ _globalSlaveAddress = parsedData.Addres_23;
|
|
|
+ }
|
|
|
+ startHeartbeat();
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
store.dispatch('ble/updateData', parsedData)
|
|
|
} catch (error) {
|
|
|
store.dispatch('ble/updateError', error)
|
|
|
@@ -90,225 +106,9 @@ export function setGlobalSlaveAddress(addr) {
|
|
|
}
|
|
|
|
|
|
export function getGlobalSlaveAddress() {
|
|
|
- console.log(_globalSlaveAddress);
|
|
|
return _globalSlaveAddress;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * 支持的 Modbus 类型
|
|
|
- */
|
|
|
-export const MODBUS_TYPES = {
|
|
|
- WRITE_ADDRESS: 'WRITE_ADDRESS',
|
|
|
- READ_REGISTER: 'READ_REGISTER',
|
|
|
-};
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-/**
|
|
|
- * Modbus 协议帧配置
|
|
|
- */
|
|
|
-export const MODBUS_FRAME_CONFIG = {
|
|
|
- DEVICE_A: {
|
|
|
- WRITE_ADDRESS: { //写地址
|
|
|
- type: MODBUS_TYPES.WRITE_ADDRESS,
|
|
|
- slaveAddress: 0x00,
|
|
|
- functionCode: 0x06,
|
|
|
- startAddress: 0x0017,
|
|
|
- value: null,
|
|
|
- },
|
|
|
- GET_ADDRESS: { //读取地址
|
|
|
- type: MODBUS_TYPES.WRITE_ADDRESS,
|
|
|
- slaveAddress: 0xFF, // 从协议数据看是FF
|
|
|
- functionCode: 0x03, // 功能码03
|
|
|
- startAddress: 0x0001, // 起始地址0001
|
|
|
- value: "0x0046", // 读取0个寄存器(根据实际需求可调整)
|
|
|
- },
|
|
|
- TIMED_TASKS:{ //定时任务
|
|
|
- type: MODBUS_TYPES.WRITE_ADDRESS,
|
|
|
- slaveAddress: _globalSlaveAddress,
|
|
|
- functionCode: 0x03,
|
|
|
- startAddress: 0x0001,
|
|
|
- value: "0x0046",
|
|
|
- },
|
|
|
- RAIN:{ //雨
|
|
|
- type: MODBUS_TYPES.WRITE_ADDRESS,
|
|
|
- slaveAddress: _globalSlaveAddress,
|
|
|
- functionCode: 0x06,
|
|
|
- startAddress: 0x0029,
|
|
|
- value: "0x0200",
|
|
|
- },
|
|
|
- SNOW:{ //雪
|
|
|
- type: MODBUS_TYPES.WRITE_ADDRESS,
|
|
|
- slaveAddress: _globalSlaveAddress,
|
|
|
- functionCode: 0x06,
|
|
|
- startAddress: 0x0029,
|
|
|
- value: "0x0100",
|
|
|
- },
|
|
|
- WIND:{ //风
|
|
|
- type: MODBUS_TYPES.WRITE_ADDRESS,
|
|
|
- slaveAddress: _globalSlaveAddress,
|
|
|
- functionCode: 0x06,
|
|
|
- startAddress: 0x0029,
|
|
|
- value: "0x0400",
|
|
|
- },
|
|
|
- FLATTEN:{ //放平
|
|
|
- type: MODBUS_TYPES.WRITE_ADDRESS,
|
|
|
- slaveAddress: _globalSlaveAddress,
|
|
|
- functionCode: 0x06,
|
|
|
- startAddress: 0x0029,
|
|
|
- value: "0x0040",
|
|
|
- },
|
|
|
- STOP:{ //停止
|
|
|
- type: MODBUS_TYPES.WRITE_ADDRESS,
|
|
|
- slaveAddress: _globalSlaveAddress,
|
|
|
- functionCode: 0x06,
|
|
|
- startAddress: 0x0029,
|
|
|
- value: "0x0080",
|
|
|
- },
|
|
|
- READ_MANUAL:{ //手动
|
|
|
- type: MODBUS_TYPES.WRITE_ADDRESS,
|
|
|
- slaveAddress: _globalSlaveAddress,
|
|
|
- functionCode: 0x06,
|
|
|
- startAddress: 0x0029,
|
|
|
- value: "0x0010",
|
|
|
- },
|
|
|
- READ_AUTO:{ //自动
|
|
|
- type: MODBUS_TYPES.WRITE_ADDRESS,
|
|
|
- slaveAddress: _globalSlaveAddress,
|
|
|
- functionCode: 0x06,
|
|
|
- startAddress: 0x0029,
|
|
|
- value: "0x0020",
|
|
|
- },
|
|
|
- READ_DOWN:{ //向东
|
|
|
- type: MODBUS_TYPES.WRITE_ADDRESS,
|
|
|
- slaveAddress: _globalSlaveAddress,
|
|
|
- functionCode: 0x06,
|
|
|
- startAddress: 0x0029,
|
|
|
- value: "0x0018",
|
|
|
- },
|
|
|
- READ_UP:{ //向西
|
|
|
- type: MODBUS_TYPES.WRITE_ADDRESS,
|
|
|
- slaveAddress: _globalSlaveAddress,
|
|
|
- functionCode: 0x06,
|
|
|
- startAddress: 0x0029,
|
|
|
- value: "0x0014",
|
|
|
- },
|
|
|
- READ_CANCEL:{ //取消
|
|
|
- type: MODBUS_TYPES.WRITE_ADDRESS,
|
|
|
- slaveAddress: _globalSlaveAddress,
|
|
|
- functionCode: 0x06,
|
|
|
- startAddress: 0x0029,
|
|
|
- value: "0x0000",
|
|
|
- },
|
|
|
- READ_TIME:{ //校正时间
|
|
|
- type: MODBUS_TYPES.READ_REGISTER,
|
|
|
- slaveAddress: _globalSlaveAddress,
|
|
|
- functionCode: 0x10,
|
|
|
- startAddress: 0x002C,
|
|
|
- value: null,
|
|
|
- },
|
|
|
-
|
|
|
- READ_TEMPERATURE:{ //天文写入
|
|
|
- type: MODBUS_TYPES.READ_REGISTER,
|
|
|
- slaveAddress: _globalSlaveAddress,
|
|
|
- functionCode: 0x10,
|
|
|
- startAddress: 0x0032,
|
|
|
- value: null,
|
|
|
- },
|
|
|
- READ_LIMIT:{ //限位写入
|
|
|
- type: MODBUS_TYPES.READ_REGISTER,
|
|
|
- slaveAddress: _globalSlaveAddress,
|
|
|
- functionCode: 0x10,
|
|
|
- startAddress: 0x0040,
|
|
|
- value: null,
|
|
|
- },
|
|
|
- READ_INCLINATION:{ //坡度写入
|
|
|
- type: MODBUS_TYPES.READ_REGISTER,
|
|
|
- slaveAddress: _globalSlaveAddress,
|
|
|
- functionCode: 0x10,
|
|
|
- startAddress: 0x003C,
|
|
|
- value: null,
|
|
|
- },
|
|
|
- READ_FREQUENCY:{ //频点写入
|
|
|
- type: MODBUS_TYPES.READ_REGISTER,
|
|
|
- slaveAddress: _globalSlaveAddress,
|
|
|
- functionCode: 0x10,
|
|
|
- startAddress: 0x0019,
|
|
|
- value: null,
|
|
|
- },
|
|
|
- READ_DIRECTION:{ //电机方向 正转动
|
|
|
- type: MODBUS_TYPES.WRITE_ADDRESS,
|
|
|
- slaveAddress: _globalSlaveAddress,
|
|
|
- functionCode: 0x06,
|
|
|
- startAddress: 0x0025,
|
|
|
- value: "0x0000",
|
|
|
- },
|
|
|
- READ_REVERSE:{ //电机方向 反转
|
|
|
- type: MODBUS_TYPES.WRITE_ADDRESS,
|
|
|
- slaveAddress: _globalSlaveAddress,
|
|
|
- functionCode: 0x06,
|
|
|
- startAddress: 0x0025,
|
|
|
- value: "0x0001",
|
|
|
- },
|
|
|
- READ_RETURN:{ //夜返角度
|
|
|
- type: MODBUS_TYPES.WRITE_ADDRESS,
|
|
|
- slaveAddress: _globalSlaveAddress,
|
|
|
- functionCode: 0x06,
|
|
|
- startAddress: 0x0042,
|
|
|
- value: null,
|
|
|
- },
|
|
|
- READ_FLAT:{ //放平角度
|
|
|
- type: MODBUS_TYPES.WRITE_ADDRESS,
|
|
|
- slaveAddress: _globalSlaveAddress,
|
|
|
- functionCode: 0x06,
|
|
|
- startAddress: 0x0043,
|
|
|
- value: null,
|
|
|
- },
|
|
|
- READ_SPECIFY:{ //指定角度
|
|
|
- type: MODBUS_TYPES.WRITE_ADDRESS,
|
|
|
- slaveAddress: _globalSlaveAddress,
|
|
|
- functionCode: 0x06,
|
|
|
- startAddress: 0x0045,
|
|
|
- value: null,
|
|
|
- },
|
|
|
- READ_SNOW:{ //雪天角度
|
|
|
- type: MODBUS_TYPES.WRITE_ADDRESS,
|
|
|
- slaveAddress: _globalSlaveAddress,
|
|
|
- functionCode: 0x06,
|
|
|
- startAddress: 0x0044,
|
|
|
- value: null,
|
|
|
- },
|
|
|
- READ_WIND:{ //大风角度
|
|
|
- type: MODBUS_TYPES.WRITE_ADDRESS,
|
|
|
- slaveAddress: _globalSlaveAddress,
|
|
|
- functionCode: 0x06,
|
|
|
- startAddress: 0x0046,
|
|
|
- value: null,
|
|
|
- },
|
|
|
- READ_OVERCURRENT:{ //过流写入
|
|
|
- type: MODBUS_TYPES.WRITE_ADDRESS,
|
|
|
- slaveAddress: _globalSlaveAddress,
|
|
|
- functionCode: 0x06,
|
|
|
- startAddress: 0x0026,
|
|
|
- value: null,
|
|
|
- },
|
|
|
- READ_TRACKING:{ //跟踪精度
|
|
|
- type: MODBUS_TYPES.WRITE_ADDRESS,
|
|
|
- slaveAddress: _globalSlaveAddress,
|
|
|
- functionCode: 0x06,
|
|
|
- startAddress: 0x0027,
|
|
|
- value: null,
|
|
|
- },
|
|
|
-
|
|
|
- },
|
|
|
- DEVICE_B: {
|
|
|
-
|
|
|
- },
|
|
|
- DEVICE_C: {
|
|
|
-
|
|
|
- },
|
|
|
-};
|
|
|
-
|
|
|
|
|
|
/**
|
|
|
* 写入操作
|
|
|
@@ -343,7 +143,7 @@ export function writeRegister(action, valueToWrite) {
|
|
|
if (getConnected() && timeStatus) {
|
|
|
startHeartbeat();
|
|
|
}
|
|
|
- }, 50);
|
|
|
+ }, 100);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -430,8 +230,6 @@ function generateModbusFrame(protocol, action, valueToWrite) {
|
|
|
slaveAddress = _globalSlaveAddress;
|
|
|
}
|
|
|
|
|
|
- // validateParams({ slaveAddress, functionCode, startAddress, valueToWrite });
|
|
|
-
|
|
|
let buffer;
|
|
|
if (type === MODBUS_TYPES.READ_REGISTER) {
|
|
|
|
|
|
@@ -523,6 +321,15 @@ export function arrayBufferToHex(buffer, withSpaces = false) {
|
|
|
}
|
|
|
|
|
|
|
|
|
+const FAULT_CODE_MAP = {
|
|
|
+ '0': '无故障',
|
|
|
+ '1': '角度保护',
|
|
|
+ '2': '角度矫正失败',
|
|
|
+ '3': '过流保护',
|
|
|
+ '4': '通讯保护',
|
|
|
+ '5': '限位保护'
|
|
|
+};
|
|
|
+
|
|
|
/**
|
|
|
* 解析蓝牙数据
|
|
|
*/
|
|
|
@@ -538,7 +345,18 @@ export function parseBluetoothData(hexString) {
|
|
|
if (cleanHexString.length < 6) {
|
|
|
throw new Error('蓝牙数据不完整');
|
|
|
}
|
|
|
+ // 根据协议类型选择不同的解析方式
|
|
|
+ if (agreement === 'Lora') {
|
|
|
+ return parseLoraData(cleanHexString);
|
|
|
+ } else if (agreement === 'zigbee') {
|
|
|
+ console.log("zigbee协议")
|
|
|
+ return parseZigbeeData(cleanHexString);
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+ function parseLoraData(cleanHexString) {
|
|
|
// 将连续的十六进制字符串转换为带空格的格式
|
|
|
+ const register = createEmptyRegister();
|
|
|
const formattedHexString = cleanHexString.match(/.{1,2}/g)?.join(' ') || cleanHexString;
|
|
|
|
|
|
const byteStrings = formattedHexString.split(' ').filter(s => s.length > 0);
|
|
|
@@ -553,65 +371,6 @@ export function parseBluetoothData(hexString) {
|
|
|
throw new Error('蓝牙数据不完整');
|
|
|
}
|
|
|
|
|
|
- const register = {
|
|
|
- device: '',
|
|
|
- function: '',
|
|
|
- registerNumber: '',
|
|
|
- Addres_23: '',
|
|
|
- Frequence_25: '',
|
|
|
- NetworkId_26: '',
|
|
|
- modAddre_27: '',
|
|
|
- MotorCurrent_30: '',
|
|
|
- MotorCurrent_35: '',
|
|
|
- Battery_32: '',
|
|
|
- Temperature_33: '',
|
|
|
- MotDrection_37: '',
|
|
|
- OverProtection_38: '',
|
|
|
- TrackingAccuracy_39: '',
|
|
|
- Message_40: '',
|
|
|
- WorkModle_41: '',
|
|
|
- TargetAngle_42: '',
|
|
|
- RealAngle_43: '',
|
|
|
- RealAngle_31: '',
|
|
|
- Year_44: '',
|
|
|
- Month_45: '',
|
|
|
- Day_46: '',
|
|
|
- Hour_47: '',
|
|
|
- Minute_48: '',
|
|
|
- Second_49: '',
|
|
|
- nowtime: '',
|
|
|
- Longitude_50: '',
|
|
|
- Latitude_51: '',
|
|
|
- TimeZone_52: '',
|
|
|
- EleAngle_53: '',
|
|
|
- Azimuth_54: '',
|
|
|
- width_60: '',
|
|
|
- inter_61: '',
|
|
|
- UpGrade_62: '',
|
|
|
- DownGrade_63: '',
|
|
|
- EasternLimit_64: '',
|
|
|
- WesternLimit_65: '',
|
|
|
- NightAngle_66: '',
|
|
|
- FlatAngle_67: '',
|
|
|
- SnowAngle_68: '',
|
|
|
- SpecifiedAngle_69: '',
|
|
|
- WindAngle_70: '',
|
|
|
- qAzimuth_54: '',
|
|
|
- qwidth_60: '',
|
|
|
- Interval_61: '',
|
|
|
- qEasternLimit_64: '',
|
|
|
- qWesternLimit_65: '',
|
|
|
- qNightAngle_66: '',
|
|
|
- qFlatAngle_67: '',
|
|
|
- qSnowAngle_68: '',
|
|
|
- qSpecifiedAngle_69: '',
|
|
|
- qWindAngle_70: '',
|
|
|
- qEleAngle_53: '',
|
|
|
- qTargetAngle_42: '',
|
|
|
- qRealAngle_43: '',
|
|
|
- qRealAngle_31: ''
|
|
|
- };
|
|
|
-
|
|
|
register.device = parseInt(byteStrings[0], 16);
|
|
|
register.function = parseInt(byteStrings[1], 16);
|
|
|
register.registerNumber = parseInt(byteStrings[2], 16);
|
|
|
@@ -624,11 +383,14 @@ export function parseBluetoothData(hexString) {
|
|
|
formattedOutput.push(combined.toUpperCase());
|
|
|
}
|
|
|
|
|
|
- // 参照mainwindow.cpp的解析逻辑补全
|
|
|
for (let i = 1; i < formattedOutput.length; i++) {
|
|
|
const value = parseInt(formattedOutput[i], 16);
|
|
|
const valueInt16 = (value > 0x7FFF) ? value - 0x10000 : value; // 转换为有符号16位整数
|
|
|
|
|
|
+ if (i === 8) { // 故障码
|
|
|
+ register.FaultCode_10 = valueInt16.toString();
|
|
|
+ register.FaultCodeDescription = FAULT_CODE_MAP[register.FaultCode_10] || '未知故障';
|
|
|
+ }
|
|
|
if (i === 22) { // 地址写入
|
|
|
register.Addres_23 = valueInt16.toString();
|
|
|
} else if (i === 24) { // 频点[0-83]
|
|
|
@@ -735,6 +497,205 @@ export function parseBluetoothData(hexString) {
|
|
|
console.log(JSON.stringify( register));
|
|
|
return register;
|
|
|
}
|
|
|
+function parseZigbeeData(hexString) {
|
|
|
+
|
|
|
+ const register = createEmptyRegister();
|
|
|
+
|
|
|
+ // 将连续的十六进制字符串转换为带空格的格式
|
|
|
+ const formattedHexString = hexString.match(/.{1,2}/g)?.join(' ') || hexString;
|
|
|
+ const byteStrings = formattedHexString.split(' ').filter(s => s.length > 0);
|
|
|
+
|
|
|
+ if (byteStrings.length < 10 ){ //其他操作执行成功
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!byteStrings || byteStrings.length < 3) {
|
|
|
+ throw new Error('蓝牙数据不完整');
|
|
|
+ }
|
|
|
+
|
|
|
+ register.device = parseInt(byteStrings[0], 16);
|
|
|
+ register.function = parseInt(byteStrings[1], 16);
|
|
|
+ register.registerNumber = parseInt(byteStrings[2], 16);
|
|
|
+
|
|
|
+ const formattedOutput = [];
|
|
|
+ for (let i = 3; i < byteStrings.length; i += 2) {
|
|
|
+ const byte1 = parseInt(byteStrings[i], 16);
|
|
|
+ const byte2 = i + 1 < byteStrings.length ? parseInt(byteStrings[i + 1], 16) : 0;
|
|
|
+ const combined = ((byte1 << 8) | byte2).toString(16).padStart(4, '0');
|
|
|
+ formattedOutput.push(combined.toUpperCase());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ for (let i = 1; i < formattedOutput.length; i++) {
|
|
|
+ const value = parseInt(formattedOutput[i], 16);
|
|
|
+ const valueInt16 = (value > 0x7FFF) ? value - 0x10000 : value; // 转换为有符号16位整数
|
|
|
+
|
|
|
+
|
|
|
+ if (i === 30) { // 地址写入zigbee 31-30
|
|
|
+ register.Addres_23 = valueInt16.toString();
|
|
|
+ } else if (i === 46) { // 模块地址
|
|
|
+ register.modAddre_27 = valueInt16;
|
|
|
+
|
|
|
+ // 从模块地址中提取频点和网络ID
|
|
|
+ const hexStr = valueInt16.toString(16).padStart(4, '0').toUpperCase();
|
|
|
+ const highPartHex = hexStr.substring(0, 2);
|
|
|
+ const lowPartHex = hexStr.substring(2, 4);
|
|
|
+
|
|
|
+ register.NetworkId_26 = parseInt(highPartHex, 16).toString();
|
|
|
+ register.Frequence_25 = parseInt(lowPartHex, 16).toString();
|
|
|
+ } else if (i === 23) { // 电机电流1位小数(A)24-23
|
|
|
+ register.MotorCurrent_30 = valueInt16.toString();
|
|
|
+ register.MotorCurrent_30 = insertDecimal(register.MotorCurrent_30, 1);
|
|
|
+ } else if (i === 47) { // 电池1位小数(V)48-47
|
|
|
+ register.Battery_32 = valueInt16.toString();
|
|
|
+ register.Battery_32 = insertDecimal(register.Battery_32, 1);
|
|
|
+ } else if (i === 48) { // 温度(度)49-48
|
|
|
+ register.Temperature_33 = valueInt16.toString();
|
|
|
+ } else if (i === 45) { // 电机方向46-45
|
|
|
+ register.MotDrection_37 = valueInt16.toString();
|
|
|
+ } else if (i === 29) { // 过流保护(A)30-29
|
|
|
+ register.OverProtection_38 = valueInt16.toString();
|
|
|
+ } else if (i === 22) { // 跟踪精度 23-22
|
|
|
+ register.TrackingAccuracy_39 = valueInt16.toString();
|
|
|
+ } else if (i === 3) { // 十进制转二进制0111倾角+过流+限位 4-3
|
|
|
+ register.Message_40 = valueInt16.toString(2); // 转二进制
|
|
|
+ } else if (i === 1) { // 工作模式2-1
|
|
|
+ register.WorkModle_41 = valueInt16.toString(2); // 转二进制
|
|
|
+ } else if (i === 9) { // 目标角度_两位小数10-9
|
|
|
+ register.TargetAngle_42 = valueInt16;
|
|
|
+ register.qTargetAngle_42 = insertDecimal(register.TargetAngle_42.toString(), 2);
|
|
|
+ } else if (i === 10) { // 实际角度_两位小数11-10
|
|
|
+ register.RealAngle_43 = valueInt16;
|
|
|
+ register.qRealAngle_43 = insertDecimal(register.RealAngle_43.toString(), 2);
|
|
|
+ } else if (i === 13) { // 年 14-13
|
|
|
+ register.Year_44 = valueInt16.toString();
|
|
|
+ } else if (i === 14) { // 月
|
|
|
+ register.Month_45 = valueInt16.toString();
|
|
|
+ } else if (i === 15) { // 日
|
|
|
+ register.Day_46 = valueInt16.toString();
|
|
|
+ } else if (i === 16) { // 时
|
|
|
+ register.Hour_47 = valueInt16.toString();
|
|
|
+ } else if (i === 17) { // 分
|
|
|
+ register.Minute_48 = valueInt16.toString();
|
|
|
+ } else if (i === 18) { // 秒
|
|
|
+ register.Second_49 = valueInt16.toString();
|
|
|
+ register.nowtime = `${register.Year_44}-${register.Month_45}-${register.Day_46} ${register.Hour_47.padStart(2, '0')}:${register.Minute_48.padStart(2, '0')}:${register.Second_49.padStart(2, '0')}`;
|
|
|
+ } else if (i === 19) { // 太阳经度_两位小数20-19
|
|
|
+ register.Longitude_50 = valueInt16.toString();
|
|
|
+ register.Longitude_50 = insertDecimal(register.Longitude_50, 2);
|
|
|
+ } else if (i === 20) { // 太阳纬度_两位小数21-20
|
|
|
+ register.Latitude_51 = valueInt16.toString();
|
|
|
+ register.Latitude_51 = insertDecimal(register.Latitude_51, 2);
|
|
|
+ } else if (i === 21) { // 时区_两位小数800 22-21
|
|
|
+ register.TimeZone_52 = valueInt16.toString();
|
|
|
+ register.TimeZone_52 = insertDecimal(register.TimeZone_52, 2);
|
|
|
+ } else if (i === 5) { // 太阳高度角_两位小数6-5
|
|
|
+ register.EleAngle_53 = valueInt16;
|
|
|
+ register.qEleAngle_53 = insertDecimal(register.EleAngle_53.toString(), 2);
|
|
|
+ } else if (i === 6) { // 太阳方位角_两位小数180调零7-6
|
|
|
+ register.Azimuth_54 = valueInt16;
|
|
|
+ register.qAzimuth_54 = insertDecimal(register.Azimuth_54.toString(), 2);
|
|
|
+ } else if (i === 31) { // 宽度_两位小数32-31
|
|
|
+ register.width_60 = valueInt16;
|
|
|
+ register.qwidth_60 = insertDecimal(register.width_60.toString(), 2);
|
|
|
+ } else if (i === 32) { // 间距_两位小数33-32
|
|
|
+ register.inter_61 = valueInt16;
|
|
|
+ register.Interval_61 = insertDecimal(register.inter_61.toString(), 2);
|
|
|
+ } else if (i === 33) { // 上坡度_两位小数34-33
|
|
|
+ register.UpGrade_62 = valueInt16.toString();
|
|
|
+ register.UpGrade_62 = insertDecimal(register.UpGrade_62, 2);
|
|
|
+ } else if (i === 34) { // 下坡度_两位小数35-34
|
|
|
+ register.DownGrade_63 = valueInt16.toString();
|
|
|
+ register.DownGrade_63 = insertDecimal(register.DownGrade_63, 2);
|
|
|
+ } else if (i === 39) { // 东限位40-39
|
|
|
+ register.EasternLimit_64 = valueInt16;
|
|
|
+ register.qEasternLimit_64 = register.EasternLimit_64.toString();
|
|
|
+ } else if (i === 40) { // 西限位
|
|
|
+ register.WesternLimit_65 = valueInt16;
|
|
|
+ register.qWesternLimit_65 = register.WesternLimit_65.toString();
|
|
|
+ } else if (i === 89) { // 夜返角
|
|
|
+ register.NightAngle_66 = valueInt16;
|
|
|
+ register.qNightAngle_66 = register.NightAngle_66.toString();
|
|
|
+ } else if (i === 42) { // 放平角度
|
|
|
+ register.FlatAngle_67 = valueInt16;
|
|
|
+ register.qFlatAngle_67 = register.FlatAngle_67.toString();
|
|
|
+ } else if (i === 41) { // 雪天角度
|
|
|
+ register.SnowAngle_68 = valueInt16;
|
|
|
+ register.qSnowAngle_68 = register.SnowAngle_68.toString();
|
|
|
+ } else if (i === 43) { // 指定角度
|
|
|
+ register.SpecifiedAngle_69 = valueInt16;
|
|
|
+ register.qSpecifiedAngle_69 = register.SpecifiedAngle_69.toString();
|
|
|
+ } else if (i === 44) { // 大风角度
|
|
|
+ register.WindAngle_70 = valueInt16;
|
|
|
+ register.qWindAngle_70 = register.WindAngle_70.toString();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return register;
|
|
|
+}
|
|
|
+
|
|
|
+ function createEmptyRegister() {
|
|
|
+ const register = {
|
|
|
+ device: '',
|
|
|
+ function: '',
|
|
|
+ registerNumber: '',
|
|
|
+ Addres_23: '',
|
|
|
+ Frequence_25: '',
|
|
|
+ NetworkId_26: '',
|
|
|
+ modAddre_27: '',
|
|
|
+ MotorCurrent_30: '',
|
|
|
+ MotorCurrent_35: '',
|
|
|
+ Battery_32: '',
|
|
|
+ Temperature_33: '',
|
|
|
+ MotDrection_37: '',
|
|
|
+ OverProtection_38: '',
|
|
|
+ TrackingAccuracy_39: '',
|
|
|
+ Message_40: '',
|
|
|
+ WorkModle_41: '',
|
|
|
+ TargetAngle_42: '',
|
|
|
+ RealAngle_43: '',
|
|
|
+ RealAngle_31: '',
|
|
|
+ Year_44: '',
|
|
|
+ Month_45: '',
|
|
|
+ Day_46: '',
|
|
|
+ Hour_47: '',
|
|
|
+ Minute_48: '',
|
|
|
+ Second_49: '',
|
|
|
+ nowtime: '',
|
|
|
+ Longitude_50: '',
|
|
|
+ Latitude_51: '',
|
|
|
+ TimeZone_52: '',
|
|
|
+ EleAngle_53: '',
|
|
|
+ Azimuth_54: '',
|
|
|
+ width_60: '',
|
|
|
+ inter_61: '',
|
|
|
+ UpGrade_62: '',
|
|
|
+ DownGrade_63: '',
|
|
|
+ EasternLimit_64: '',
|
|
|
+ WesternLimit_65: '',
|
|
|
+ NightAngle_66: '',
|
|
|
+ FlatAngle_67: '',
|
|
|
+ SnowAngle_68: '',
|
|
|
+ SpecifiedAngle_69: '',
|
|
|
+ WindAngle_70: '',
|
|
|
+ qAzimuth_54: '',
|
|
|
+ qwidth_60: '',
|
|
|
+ Interval_61: '',
|
|
|
+ qEasternLimit_64: '',
|
|
|
+ qWesternLimit_65: '',
|
|
|
+ qNightAngle_66: '',
|
|
|
+ qFlatAngle_67: '',
|
|
|
+ qSnowAngle_68: '',
|
|
|
+ qSpecifiedAngle_69: '',
|
|
|
+ qWindAngle_70: '',
|
|
|
+ qEleAngle_53: '',
|
|
|
+ qTargetAngle_42: '',
|
|
|
+ qRealAngle_43: '',
|
|
|
+ qRealAngle_31: '',
|
|
|
+ FaultCode_10:'',
|
|
|
+ FaultCodeDescription: ''
|
|
|
+ };
|
|
|
+ return register;
|
|
|
+}
|
|
|
|
|
|
/**
|
|
|
* 在数字中插入小数点
|