在 AWTK 串口屏中,內(nèi)置 MODBUS 客戶端通道模型,不用編寫(xiě)代碼即可實(shí)現(xiàn)在 ListView 中顯示遠(yuǎn)程設(shè)備上的數(shù)組數(shù)據(jù)。
1. 功能
不用編寫(xiě)代碼,實(shí)現(xiàn)對(duì)遠(yuǎn)程設(shè)備上數(shù)組數(shù)據(jù)的顯示。
2. 創(chuàng)建項(xiàng)目
從模板創(chuàng)建項(xiàng)目,將 hmi/template_app 拷貝 hmi/modbus_client_channel_input_registers 即可。
第一個(gè)項(xiàng)目最好不要放到其它目錄,因?yàn)榉诺狡渌夸浶枰薷呐渲梦募械穆窂剑仁煜ぶ笤倏紤]放到其它目錄。路徑中也不要中文和空格,避免不必要的麻煩。
3. 制作界面
用 AWStudio 打開(kāi)上面 modbus_client_channel_input_registers 目錄下的 project.json 文件。里面有一個(gè)空的窗口,做出類似下面的界面。
4. 添加綁定規(guī)則
第一次用到列表視圖,有幾點(diǎn)需要特別說(shuō)明一下:列表視圖中的滾動(dòng)視圖需要指定v-for-items屬性。
屬性 | 值 | 說(shuō)明 |
v-for-items | true | 它保證其下的列表項(xiàng),會(huì)根據(jù)數(shù)據(jù)自動(dòng)生成| |
4.1 幾個(gè)特殊的變量
- index 特指序數(shù)。
- item 特指當(dāng)前的數(shù)據(jù)。比如在這里‘item.level’表示告警級(jí)別,‘item.time’表示時(shí)間,‘item.device’表示設(shè)備,‘item.message’表示告警信息。
- selected_index 表示當(dāng)前選中的序數(shù)(可在列表視圖之外綁定)。
- items 表示當(dāng)前列表視圖中的數(shù)據(jù)個(gè)數(shù)(可在列表視圖之外綁定)。
4.2序數(shù)
綁定屬性 | 綁定規(guī)則 | 說(shuō)明 |
v-data:value | {index} | index 特指序數(shù)。 |
4.3告警級(jí)別前面提到告警級(jí)別是正數(shù),可以通過(guò) item.level 來(lái)獲取它。它的意義對(duì)應(yīng)為:調(diào)試(0);信息(1);警告(2);錯(cuò)誤(3),我們需要用 one_of 函數(shù)將它轉(zhuǎn)換為對(duì)應(yīng)的字符串。
綁定屬性 | 綁定規(guī)則 | 說(shuō)明 |
v-data:value | {one_of(‘調(diào)試;信息;警告;錯(cuò)誤’, item.level)} | 這里的 one_of 的功能是從指定的字符串?dāng)?shù)組中取出對(duì)應(yīng)的子串。 |
4.4時(shí)間時(shí)間是整數(shù)(秒數(shù)),可以通過(guò) item.time 來(lái)獲取。
綁定屬性 | 綁定規(guī)則 | 說(shuō)明 |
v-data:value | {date_time_format(item.time, 'Y-M-D hs')} | 需要用 date_time_format 將 epoch 時(shí)間轉(zhuǎn)換成人類可讀的時(shí)間。 |
4.5告警信息告警信息是一個(gè)字符串,可以通過(guò) item.message 來(lái)獲取。
綁定屬性 | 綁定規(guī)則 | 說(shuō)明 |
v-data:value | {item.message} |
4.6URL
綁定屬性 | 綁定規(guī)則 | 說(shuō)明 |
v-data:value | {url} | url 表示遠(yuǎn)程設(shè)備的 URL |
4.7連接狀態(tài)
綁定屬性 | 綁定規(guī)則 | 說(shuō)明 |
v-data:value | {connected ? ‘connected’ : ‘no connection’} | connected 表示當(dāng)前是否連接 |
4.8窗口模型
指定窗口的模型為:
綁定屬性 | 綁定規(guī)則 | 說(shuō)明 |
v-model | modbus_client(name=modbus_demo) | 配置文件名對(duì)應(yīng)于 modbus_demo.json |
modbus_client 是內(nèi)置的模型,name 是配置文件的名稱,不需要加后綴。
4.9視圖模型
為了使用 channel 的模型,還需要在窗口的下一級(jí)控件指定 modbus_client_channel 模型。
綁定屬性 | 綁定規(guī)則 | 說(shuō)明 |
v-model | modbus_client_channel(name=modbus_demo_input_register) | 配置文件名對(duì)應(yīng)于 modbus_demo_input_register.json |
modbus_client_channel 是內(nèi)置的模型,name 是配置文件的名稱,不需要加后綴。
5. 配置文件
配置文件路徑 design/default/data/modbus_demo.json
{ "url":"tcp://localhost:502", "channels" : [ { "update_interval" : 5000, "name" : "read_input_registers", "access_type" : 4, "read" : { "offset" : 0, "length" : 3200 } } ]}
在上面的配置中,定義了通道 read_input_registers,長(zhǎng)度為 3200個(gè) registers,共 6400字節(jié)。
配置文件路徑 design/default/data/modbus_demo_input_register.json
{ "channel":"read_input_registers", "items": 100, "variables": { "level": "byte[0].uint32", "time": "byte[4].uint32", "message": "byte[8].str[56]" }}
在上面的配置中,將通道 read_input_registers 中的數(shù)據(jù),分成 100等份,也就是看作 100元素的數(shù)組,每個(gè)元素 64 字節(jié)。這 64 字節(jié)的數(shù)據(jù)為三個(gè)成員:
level: 4 字節(jié),無(wú)符號(hào)整數(shù);
time: 4 字節(jié),無(wú)符號(hào)整數(shù);
message: 56 字節(jié),字符串。
6. 描述需要持久化的數(shù)據(jù)
無(wú)
7. 編譯運(yùn)行
運(yùn)行 bin 目錄下的 demo 程序:
點(diǎn)擊Update按鈕,可以手工刷新數(shù)據(jù)
8. 注意
- 本項(xiàng)目并沒(méi)有編寫(xiě)界面相關(guān)的代碼,AWStudio 在 src/pages 目錄下生成了一些代碼框架,這些代碼并沒(méi)有用到,可以刪除也可以不用管它,但是不能加入編譯。
- 完整示例請(qǐng)參考:demo_modbus_client_channel_input_registers。
使用 TCP 協(xié)議時(shí),如果使用 modbus slave 工具配套測(cè)試,需要將 unit id 設(shè)置為 255。
-
開(kāi)源
+關(guān)注
關(guān)注
3文章
3309瀏覽量
42471 -
串口屏
+關(guān)注
關(guān)注
8文章
532瀏覽量
37421 -
awtk
+關(guān)注
關(guān)注
0文章
44瀏覽量
226
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論