硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1064|回复: 3
收起左侧

[Lua] V2.09 固件串口解码器和CAN解码器增加串口波形显示功能

[复制链接]

747

主题

1049

回帖

3295

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3295
发表于 2021-11-22 11:48:34 | 显示全部楼层 |阅读模式
在原解码器后面增加一个返回值,表示波形数据字符串。
"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







评分

参与人数 1金币 +10 收起 理由
missfox + 10 很给力!

查看全部评分

回复

使用道具 举报

36

主题

2040

回帖

2148

积分

至尊会员

积分
2148
发表于 2021-11-22 14:00:56 | 显示全部楼层
一些传感器模拟量用波形展示确实方便
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107077
QQ
发表于 2021-11-22 16:12:20 | 显示全部楼层
非常有意义的功能。
回复

使用道具 举报

747

主题

1049

回帖

3295

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3295
 楼主| 发表于 2021-12-2 11:59:02 | 显示全部楼层
洗衣机打印HEX串口数据,从串口数据中再解码出3个温度波形

洗衣机温度曲线1.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-16 19:54 , Processed in 0.171972 second(s), 32 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表