|

楼主 |
发表于 2021-4-30 23:05:34
|
显示全部楼层
--GUIMODE=1 --用于识别GUI程序还是print程序
COMx = 1
g_RegFloat = {} --全局变量 16个通道的寄存器数据 浮点数,第1个单元是错误状态
g_acc = {0,0,0,0,0,0}
g_spd = {0,0,0,0,0,0}
g_mov = {0,0,0,0,0,0}
print("六通道振动测试V1.0")
function main(void)
beep()
lcd_clr(0xFFFF) --背景白色
DispTitle("六通道振动测试V1.0")
DispHead()
lcd_refresh()
CfgDacWave(500, 80) --VOUT 输出500mV, 80Hz 正弦
--uart_cfg(port, BaudRate, Parity, WordLength, StopBits)
uart_cfg(COMx, 115200, 0, 8, 1)
while(1)
do
RS232ScanModbusReg() --扫描modbus寄存器一次
DispResult() --显示读取结果
lcd_refresh()
key = get_key()
if (key == 2) then --短按S,实时采集一次
elseif (key == 3) then --长按S,实时采集一次,作为常温
elseif (key == 8) then
end
end
end
--配置DAC波形输出
function CfgDacWave(VppmV, freq)
write_reg16(0x0100, 0) --0 保留功能
write_reg16(0x0101, 1) --DAC波形类型, 0:输出电平 1:正弦 2:输出方波 3:三角波
write_reg16(0x0102, -VppmV / 2) --波谷电压,mV
write_reg16(0x0103, VppmV / 2) --波峰电压,mV
write_reg16(0x0104, freq >> 16) --32bit 波形频率高16bit,Hz
write_reg16(0x0105, freq & 0xFFFF) --32bit 波形频率低16bit,Hz */
write_reg16(0x0106, 50) --波形占空比 百分比
write_reg16(0x0109, 1) --启动输出
end
--显示标题
function DispTitle(str)
lcd_disp_str(0, 0, str, 24, 0xFFFF, 0x0014, 240, 1)
end
function DispHead(void)
local x
local y
local bg
local ct
lcd_disp_str(5, 26, "500mV", 24, 0x0000, 0xC7F9, 110, 1)
lcd_disp_str(125, 26, "80Hz", 24, 0xFFF9, 0xF2A6, 110, 1)
bg = RGB565(150,150,150) --灰色
ct = 0xFFFF --文字白色
y = 26 + 30
x = 5
lcd_disp_str(5, y, "加速度", 16, ct, bg, 80, 1)
lcd_disp_str(5 + 85, y, "速度", 16, ct, bg, 80, 1)
lcd_disp_str(5 + 85 + 85, y, "位移", 16, ct, bg, 60, 1)
end
--RS232接口,扫描modbus寄存器一次
function RS232ScanModbusReg(void)
local Addr485 = 1
local TimeOut = 1000
local RegAddr = 24
local RegNum = 18
g_RegFloat = {modbus_read_float(COMx, TimeOut, Addr485, RegAddr, RegNum)}
--print(g_RegFloat[1], g_RegFloat[2], g_RegFloat[3], g_RegFloat[4])
end
--显示6通道测量值
function DispResult()
local i
local buf
local x
local y
local w
local ff
local acc
local err_bg = 0xFFE0 --错误背景色
local ok_bg = 0xC7F9 --ok背景色
local bg
if (g_RegFloat[1] == nil) then
return
end
if (g_RegFloat[1] > 0) then
return
end
for i = 0,5,1 do
--加速度
ff = g_RegFloat[i * 1 + 2]
g_acc[i + 1] = ff
if (ff == nil) then return end
buf = string.format("%0.2f", ff)
x = 5
y = 26 + 33 + 20 + (i - 0) * 24
if (i >= 3) then --分行
y = y + 8
end
w = 80
if (ff > 23 and ff < 25) then
bg = ok_bg
else
bg = err_bg
end
lcd_disp_str(x, y, buf, 16, 0x0000, bg, w, 1)
--速度
ff = g_RegFloat[i * 1 + 8]
g_spd[i + 1] = ff
if (ff == nil) then return end
buf = string.format("%0.2f", ff)
x = x + w + 5
if (ff > 31 and ff < 35) then
bg = ok_bg
else
bg = err_bg
end
lcd_disp_str(x, y, buf, 16, 0x0000, bg, w, 1)
--位移
ff = g_RegFloat[i * 1 + 14]
g_mov[i + 1] = ff
if (ff == nil) then return end
buf = string.format("%0.3f", ff)
x = x + w + 5
if (ff > 0.175 and ff < 0.195) then
bg = ok_bg
else
bg = err_bg
end
lcd_disp_str(x, y, buf, 16, 0x0000, bg, 60, 1)
end
end
main()
|
|