|
楼主 |
发表于 2024-11-13 10:29:32
|
显示全部楼层
搞明白了,后台需要有轮巡在先
function on_init()
select_slave(0)--选择第1个从站
start_read(1,VT_4x, 0x040A, 1)--读取保持寄存器,0x040A寄存器
start_read(2,VT_4x, 0x03FC, 2)--读取保存寄存器0x03FC-0x03FD寄存器
end
function on_run(screen)
local var1 = mb_read_reg_03_uint16(0,0x040A)
local var2 = mb_read_reg_03_float(0,0x03FC)
if var1 ~= false
then
set_uint16(VT_LW,0x1100,var1)
--set_float(VT_LW,0x1200,
end
if var2 ~= false
then
set_float(VT_LW,0x1200,var2)
--set_float(VT_LW,0x1200,
end
end
function on_update(slave,vtype,addr)
end
function on_draw(screen_id,control_id)
end
--读取保存寄存器float
function mb_read_reg_03_float(slave,addr)
local onlineState = get_uint16(VT_LW,0x01A3)
if ((onlineState >> slave) & 0x01) == 0x01 --读取从机状态
then
select_slave(slave) --选择从机
return get_float(VT_4x,addr) --获取寄存器值
else
return false
end
end
--读取保存寄存器uint16
function mb_read_reg_03_uint16(slave,addr)
local onlineState = get_uint16(VT_LW,0x01A3) --获取从机在线状态
if ((onlineState >> slave) & 0x01) == 0x01 --读取从机状态
then
select_slave(slave) --选择从机
return get_uint16(VT_4x,addr) --获取寄存器值
else
return false
end
end |
|