|
在原解码器后面增加一个返回值,表示波形数据字符串。
"1.01, -22.89, 345" --表示打印3个通道数据,不需要打印的位置可以为"" 空格。
【串口案例1: ModbusRTU 展示保持寄存器波形】
ModbusRTU解码比较讨厌,应答包中只有寄存器值,没有寄存器地址。因此需要用全局变量记录命令包中的寄存器地址。
下面是打印 0x1234 保持寄存器的波形。
以下代码添加到解码器末尾即可,需要V2.0.9的PC机才支持。
--打印寄存器波形的范例
str_wave = ""
if (bin[2] == 3) then --03H功能码
if (datalen == 8) then --长度8表示发送的查询命令
g_Reg03_Addr = bin[3] * 256 + bin[4] --保存寄存器地址,下次解码输出波形
g_Reg03_Num = bin[5] * 256 + bin[6] --保存寄存器个数
else --应答帧,结果在此
local regnum
local regvalue
regnum = bin[3] / 2 --寄存器个数
if (g_Reg03_Addr == 0x1234) then --改写为需要监视的寄存器地址
regvalue = bin[4] * 256 + bin[5] --解码寄存器数据
str_wave = string.format("%d\r\n", regvalue) --输出波形
end
end
end
return ret1, ret2, str_wave --第3个参数返回的波形数据字符串
【串口案例2: 某客户洗衣机产品串口二进制数据解码波形, 显示3路温度波形】
这个例子比较简单,每个数据包中都有明确的数据
----- 末尾增加:
str_wave = WaveOut()
return ret1, ret2, str_wave
end
--原始数据已经在 bin[] 中
function WaveOut(bin)
local str
local temp1, temp2, temp3
temp1 = hex2dec(bin, 23) --筒内温度
temp2 = hex2dec(bin, 24) --烘干加热器温度
temp3 = hex2dec(bin, 25) --烘干风机温度
str = string.format("%d,%d,%d\r\n", temp1, temp2, temp3)
return str
end
【CAN案例3: 解码发动机转速、进气压力、燃油压力】
一般CAN每个数据包只包含一个数据量,要同步显示多路波形,需要借助全局变量
----- 末尾增加:
--原始数据已经在 bin[] 中
g_Speed = 0 --全局变量,发动机转速
g_AirPress = 0 --全局变量,进气压力
g_OilPress = 0 --全局变量,燃油压力
function WaveOut(void)
local str = ""
if (g_id == 0x7DF or g_id == 0x18DB33F1) then --"请求"
else --"响应"
if (bin[3] == 0x0A) then --"燃油压力 %d kPaG"
g_Speed = bin[4] * 3
str = string.format("%d,%d,%f\r\n", g_Speed , g_AirPress, g_OilPress ) --在收到发动机转速包时打印波形
elseif (bin[3] == 0x0B) then --"进气歧管绝对压力 %d kPaA"
g_AirPress = bin[4]
elseif (bin[3] == 0x0C) then --"发动机转速 %0.2f RPM"
g_OilPress = (bin[4] * 256 + bin[5]) / 4
end
end
return str
end
|
评分
-
查看全部评分
|