You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
159 lines
4.3 KiB
159 lines
4.3 KiB
--分窗标志定义
|
|
WIN_0 = 0x0001
|
|
WIN_1 = 0x0002
|
|
WIN_2 = 0x0004
|
|
WIN_3 = 0x0008
|
|
WIN_4 = 0x0010
|
|
WIN_5 = 0x0020
|
|
WIN_6 = 0x0040
|
|
WIN_7 = 0x0080
|
|
WIN_8 = 0x0100
|
|
WIN_9 = 0x0200
|
|
WIN_10 = 0x0400
|
|
WIN_11 = 0x0800
|
|
WIN_12 = 0x1000
|
|
WIN_13 = 0x2000
|
|
WIN_14 = 0x4000
|
|
WIN_15 = 0x8000
|
|
|
|
|
|
--GV索引字符串
|
|
local GVstr = {
|
|
"State_Index_U",
|
|
"State_Index_U_Elapse",
|
|
"State_Index_N",
|
|
"State_Index_N_Elapse",
|
|
"NC_ARRAY_u8_0",
|
|
"NC_ARRAY_u8_01",
|
|
"NC_ARRAY_u8_1",
|
|
"NC_ARRAY_u8_11",
|
|
"NC_ARRAY_u8_2",
|
|
"MK32_Key.RxIndex",
|
|
"MK32_Key.CH0_RY_H",
|
|
"MK32_Key.CH1_RY_V",
|
|
"MK32_Key.CH2_LY_V",
|
|
"MK32_Key.CH3_LY_H",
|
|
"MK32_Key.CH4_SA",
|
|
"MK32_Key.CH5_SB",
|
|
"MK32_Key.CH6_SC",
|
|
"MK32_Key.CH7_SD",
|
|
"MK32_Key.CH8_SE",
|
|
"MK32_Key.CH9_SF",
|
|
"MK32_Key.CH10_LD1",
|
|
"MK32_Key.CH11_RD1",
|
|
"MK32_Key.CH12_S1",
|
|
"MK32_Key.CH13_S2",
|
|
"MK32_Key.CH14_LT",
|
|
"MK32_Key.CH15_RT",
|
|
"MK32_Key.IsOnline",
|
|
"Motor_P[0]MotorID",
|
|
"Motor_P[0]RxIndex",
|
|
"Motor_P[0]Run_Mode",
|
|
"Motor_P[0]Current",
|
|
"Motor_P[0]Target_Current",
|
|
"Motor_P[0]Velcity",
|
|
"Motor_P[0]Target_Velcity",
|
|
"Motor_P[0]Position",
|
|
"Motor_P[0]Target_Position",
|
|
"Motor_P[0]ERROR_Flag",
|
|
"Motor_P[0]Temperature_Motor",
|
|
"Motor_P[0]Temperature_PCB",
|
|
"Motor_P[1]MotorID",
|
|
"Motor_P[1]RxIndex",
|
|
"Motor_P[1]Run_Mode",
|
|
"Motor_P[1]Current",
|
|
"Motor_P[1]Target_Current",
|
|
"Motor_P[1]Velcity",
|
|
"Motor_P[1]Target_Velcity",
|
|
"Motor_P[1]Position",
|
|
"Motor_P[1]Target_Position",
|
|
"Motor_P[1]ERROR_Flag",
|
|
"Motor_P[1]Temperature_Motor",
|
|
"Motor_P[1]Temperature_PCB",
|
|
"Motor_P[2]MotorID",
|
|
"Motor_P[2]RxIndex",
|
|
"Motor_P[2]Run_Mode",
|
|
"Motor_P[2]Current",
|
|
"Motor_P[2]Target_Current",
|
|
"Motor_P[2]Velcity",
|
|
"Motor_P[2]Target_Velcity",
|
|
"Motor_P[2]Position",
|
|
"Motor_P[2]Target_Position",
|
|
"Motor_P[2]ERROR_Flag",
|
|
"Motor_P[2]Temperature_Motor",
|
|
"Motor_P[2]Temperature_PCB"
|
|
}
|
|
|
|
--CAN 解码函数,返回的字符串将展示到数据窗口
|
|
--id 帧ID
|
|
--std_ext 0表示标准帧, 1表示扩展帧
|
|
--data_remote 0表示数据帧, 1表示远程帧
|
|
--datalen 数据长度,字节
|
|
--data_bin 二进制数据
|
|
--函数返回: ret1解码字符串 , ret2分窗控制字, 波形数据字符串
|
|
function can_decoder(id, std_ext, data_remote, datalen, data_bin)
|
|
local ret1 = "" --返回值1 解码显示结果
|
|
local ret2 = 0 --返回值2 分窗标志
|
|
local bin = {}
|
|
local i
|
|
local str_wave = ""
|
|
|
|
local _index = 0
|
|
local _value = 0
|
|
--local a_string = string.pack(">i2", your_integer)
|
|
--local an_integer = string.unpack(">i2", a_string, start) 将二进制字符串转换为数字类型,从第start个字符开始,<小端 >大端,类型i2,长度2
|
|
|
|
--#将字符串转换到整数数组存放
|
|
for i = 1,#data_bin,1 do
|
|
bin[i] = tonumber(string.byte(data_bin, i,i))
|
|
end
|
|
|
|
--计算解码结果,将显示在数据包后面
|
|
if (id == 0x120) then
|
|
_index = string.unpack("<i2", data_bin, 1)
|
|
_value = string.unpack("<i4", data_bin, 3)
|
|
ret1 = string.format("设置CV:Index %d = %d", _index, _value)
|
|
elseif (id == 0x121) then
|
|
_index = string.unpack("<i2", data_bin, 1)
|
|
ret1 = string.format("请求CV:Index %d", _index, _value)
|
|
elseif (id == 0x122) then
|
|
_index = string.unpack("<i2", data_bin, 1)
|
|
_value = string.unpack("<i4", data_bin, 3)
|
|
ret1 = string.format("读取CV:Index %d = %d", _index, _value)
|
|
elseif (id == 0x1FF) then
|
|
if(datalen == 1) then
|
|
ret1 = string.format("## Boot程序启动")
|
|
elseif (datalen == 3) then
|
|
ret1 = string.format("## Boot启动APP")
|
|
elseif (datalen == 2) then
|
|
ret1 = string.format("## 进入刷写模式")
|
|
elseif (datalen == 4) then
|
|
ret1 = string.format("## 刷写错误")
|
|
elseif (datalen == 5) then
|
|
ret1 = string.format("## APP程序启动")
|
|
end
|
|
elseif (id == 0x110) then
|
|
if(data_bin[1]==0x55) then
|
|
ret1 = string.format("## 请求重启系统")
|
|
end
|
|
elseif (id == 0x130) then
|
|
_index = string.unpack("<i2", data_bin, 1)
|
|
_value = string.unpack("<i2", data_bin, 3)
|
|
ret1 = string.format("请求GV.%d,%s, Length = %d", _index, GVstr[_index+1],_value)
|
|
elseif (id == 0x132) then
|
|
_index = string.unpack("<i2", data_bin, 1)
|
|
_value = string.unpack("<i4", data_bin, 3)
|
|
ret1 = string.format("______读取GV.%d,%s = %d", _index, GVstr[_index+1],_value)
|
|
end
|
|
|
|
--计算分窗标志, 决定数据包同步显示到哪些子窗口
|
|
if (id == 0x120 or id == 0x121 or id == 0x122) then
|
|
ret2 = ret2 | WIN_0
|
|
elseif (id == 0x1FF or id == 0x110) then
|
|
ret2 = ret2 | WIN_1
|
|
elseif (id == 0x130 or id == 0x132) then
|
|
ret2 = ret2 | WIN_2
|
|
end
|
|
|
|
return ret1, ret2, str_wave
|
|
end
|
|
|