frostwalrus 发表于 2023-6-12 09:44:39

LUA如何寫入資料採樣設置

本帖最后由 frostwalrus 于 2023-6-12 13:21 编辑

在VisualHMI中,有資料採樣設置,它有個選項是控制地址,可以透過寫1/寫0x0055的方式,來決定是要導出數據到SD卡/清除數據。
但是我該如何利用lua,在資料採樣的控制地址寫入1或是0x0055?
有嘗試過用以下函式寫入,但sd卡內還是沒有資料;其中0x1300是我自定義給資料採樣->採樣設置->控制地址的值
set_uint16(VT_LW, 0x1300, 1)


如果使用按鈕控件,是可以成功地寫入sd,不過這樣就變成手動儲存,不太人性化

If后要接end 发表于 2023-6-12 14:07:12

脚本里面,对应的逻辑处理中加一句set_uint16(VT_LW, 控制地址, 0x0055)

frostwalrus 发表于 2023-6-12 16:38:06

使用了定時器,並在on_timer中指定的timer_id執行以下:

set_uint16(VT_LW, 0x1300, 1)
set_uint16(VT_LW, 0x1300, 0x0055)

不過我看sd卡還是沒有資料,
而且我的通訊埠已拿去和rs485的裝置做modbus通訊了
所以想把一些debug資訊輸出在HMI上。
visualHMI似乎不支援set_value(screen,control,value),一使用就報錯,
那麼還有其他可以用lua寫入控件的方法嗎?

If后要接end 发表于 2023-6-12 17:25:33

frostwalrus 发表于 2023-6-12 16:38
使用了定時器,並在on_timer中指定的timer_id執行以下:

set_uint16(VT_LW, 0x1300, 1)


set_value这个是旧版的开发软件用的lua脚本api
新版本软件,脚本大部分api是不通用的。
旧软件是根据画面id,控件id来显示/设置内容,新软件是以屏幕的内部寄存器读写操作来实现

frostwalrus 发表于 2023-6-13 13:43:28

If后要接end 发表于 2023-6-12 17:25
set_value这个是旧版的开发软件用的lua脚本api
新版本软件,脚本大部分api是不通用的。
旧软件是根据画面 ...

今天再把原廠例程看了幾遍,控件的操作必須藉由讀寫HMI的內部寄存器來實現,這點我深刻的體會到了。
不過在測試過程,我發現在寫1導出到sd卡後,如果後面直接接著寫0x0055清除數據,就會直接清空,連帶地就沒有數據可以輸出到sd卡了。
想要請教如果我寫1導出到sd卡後,要怎麼知道是否已經寫入完成,可以放心地清除數據,以避免數據重覆?

If后要接end 发表于 2023-6-14 08:52:19

frostwalrus 发表于 2023-6-13 13:43
今天再把原廠例程看了幾遍,控件的操作必須藉由讀寫HMI的內部寄存器來實現,這點我深刻的體會到了。
不過 ...

系统寄存器里面LW0190,LW0191是与导出有关的变量地址,可以根据这两个寄存器的数值来判断导出状态
页: [1]
查看完整版本: LUA如何寫入資料採樣設置