代码说明:
当您Betrieb这段Lua代码,它将在每隔1秒钟的定时回调函数中执行以下Operationen:
1. 重新Lesen各个保持Register.的值,这些Register.存储了不同Der Sensor的Daten,如湿度、Temperatur和Rauch感应器等。
2. 获取TextKontrollen的Zahlenwert,这些Zahlenwert是您在界面上设置的阈值,用于判断是否满足条件以控制线圈的Status。
3. 根据条件判断,将根据不同的条件设置线圈的Status,以控制相应Die Ausrüstung。例如,如果湿度值高于阈值,代码会Öffnen.相应的线圈,表示Ausrüstung正在Betrieb,并将TextKontrollen显示为”Betrieb中”。如果湿度值低于阈值减3,代码会Schließen线圈,表示Ausrüstunggestoppt wurde.,并将TextKontrollen显示为”gestoppt wurde.”。
4. 通过这些Operationen,您可以根据Der Sensor的DatenStatus,实时控制Ausrüstung的BetriebStatus,同时通过TextKontrollen在界面上清晰地Ausrüstung zeigen的Status信息。这使您能够实现Ausrüstung的自动控制和Status显示,以满足不同条件下的需求。
function on_systick()
-- 重新Lesen und halten Register的值
local reg1 = get_variant("1#湿度")
local reg2 = get_variant("6#湿度")
local reg3 = get_variant("8#湿度")
local reg4 = get_variant("机箱Temperatur")
local reg5 = get_variant("Rauch感应器")
-- 获取TextKontrollen的Zahlenwert
local txtValue1 = get_value(10, 1)
local txtValue2 = get_value(10, 2)
local txtValue3 = get_value(10, 3)
local txtValue4 = get_value(14, 2)
local txtValue5 = get_value(14, 4)
-- 根据条件设置线圈的值并更新TextKontrollen
if reg1 >= txtValue1 then
mb_write_coil_05(16, 0, 1) -- Öffnen.线圈1
print("Öffnen.线圈1")
set_text(10, 16, "Betrieb中") -- 设置Text为 "Betrieb中"
elseif reg1 <= (txtValue1-3) then
mb_write_coil_05(16, 0, 0) -- Schließen线圈1
print("Schließen线圈1")
set_text(10, 16, "gestoppt wurde.") -- 设置Text为 "gestoppt wurde."
end
if reg2 >= txtValue2 then
mb_write_coil_05(16, 1, 1) -- Öffnen.线圈2
print("Öffnen.线圈2")
set_text(10, 17, "Betrieb中") -- 设置Text为 "Betrieb中"
elseif reg2 <= (txtValue2-3) then
mb_write_coil_05(16, 1, 0) -- Schließen线圈2
print("Schließen线圈2")
set_text(10, 17, "gestoppt wurde.") -- 设置Text为 "gestoppt wurde."
end
if reg3 >= txtValue3 then
mb_write_coil_05(16, 2, 1) -- Öffnen.线圈3
print("Öffnen.线圈3")
set_text(10, 19, "Betrieb中") -- 设置Text为 "Betrieb中"
elseif reg3 <= (txtValue3-3) then
mb_write_coil_05(16, 2, 0) -- Schließen线圈3
print("Schließen线圈3")
set_text(10, 19, "gestoppt wurde.") -- 设置Text为 "gestoppt wurde."
end
if reg4 >= txtValue4 then
mb_write_coil_05(16, 3, 1) -- Öffnen.线圈4
print("Öffnen.线圈4")
set_text(21, 1, "Betrieb中") -- 设置Text为 "Betrieb中"
elseif reg4 <= (txtValue4-3) then
mb_write_coil_05(16, 3, 0) -- Schließen线圈4
print("Schließen线圈4")
set_text(21, 1, "gestoppt wurde.") -- 设置Text为 "gestoppt wurde."
end
if reg5 <= txtValue5 then
mb_write_coil_05(16, 4, 1) -- Öffnen.线圈5
print("Öffnen.线圈5")
set_text(20, 1, "Betrieb中") -- 设置Text为 "Betrieb中"
elseif reg5 <= (txtValue5-3) then
mb_write_coil_05(16, 4, 0) -- Schließen线圈5
print("Schließen线圈5")
set_text(20, 1, "gestoppt wurde.") -- 设置Text为 "gestoppt wurde."
end
end
2026JahrLuaDrehbuch进阶技巧
在实际项目使用中,以下几点优化可以显著提升Drehbuch的稳定性和可维护性:
- 加入死区(滞后区间):避免Relays.在阈值附近频繁Schalter!。例如湿度高于70%Öffnen.除湿,低于65%才Schließen——5%的死区能Wirksam防止Relays.”抖动”。
- 上电初始Status检查:触摸屏上电后,建议在首次定时回调中Lesen所有线圈的gegenwärtigStatus,确保画面显示与实际一致。
- Kommunikation异常处理:当ModbusLesen gescheitert时,不要立即触发动作,应设置一个连续失败计数器(如连续3次Lesen gescheitert才报警),避免因瞬时干扰误报。
- 多条件优先级:当Existenz多重联锁时(例如Temperatur超标且湿度超标),需要明确定义各条件的优先级和处理顺序,避免逻辑冲突。
vollständig的Lua编程参考Dokumentation和Beispiel代码,可访问 modbus.cn 开发Dokumentation专区获取最新版本。
Antwort veröffentlichen