13.4.4 實現Modbus RTU讀操作
要使用libmodbus操作Modbus RTU傳感器,需要做的事情有2個:
創(chuàng)建modbus_t:調用“modbus_new_rtu”、“modbus_connect”
調用“modbus_read_”、“modbus_write_”開頭的函數
對于多個“點”,它們可能使用同一個“modbus_t”。所以需要先判斷:如果已經有了對應的“modbus_t”,就無法再次創(chuàng)建。
以“讀點”為例,代碼在“modbus_client.c”里,如下:
其中“get_modbus_ctx”函數如下:
13.4.5 實現Modbus RTU寫操作
代碼在“modbus_client.c”里,如下:
13.4.6 實現Modbus TCP操作
Modbus TCP的操作跟Modbus RTU的操作時同一套代碼,在如下函數中根據port_info確定是創(chuàng)建什么類型的 modbus_t結構體:
13.4.7 實現OTA升級
傳感器升級設計各個傳感器內部的實現,后臺程序(控制中心)只是給出了接口。
前臺程序在如下界面中,把如下信息:固件文件名、設置的端口信息、升級哪個設備,發(fā)送給后臺程序(控制中心):
發(fā)送的信息存為如下結構體:
然后使用如下函數發(fā)起RPC調用:
后臺程序(控制中心)對應的代碼如下:
在實現真正的傳感器升級時,前臺程序要知道升級進度,它可以調用如下函數發(fā)出RPC請求:
后臺程序(控制中心)對應的代碼如下:
13.5 LVGL前臺程序開發(fā)
源碼為:
我們要解析的代碼基本都在這個文件里:
“demo_lv_modbus_toollv_100ask_modbus_toolsrclv_modbus_tool.c”。
13.5.1 程序流程
LVGL前臺程序的源碼里,關鍵點有兩個:
如何布局、創(chuàng)建各類控件
它們的回調函數
1.布局的重要概念
布局、創(chuàng)建控件時,有一個“parent”的概念。可以認為“parent”是一個“容器”,在上面可以繼續(xù)創(chuàng)建各個控件。
比如下圖中,控件1對應綠色背景的區(qū)域,控件2對應大紅框的區(qū)域,控件1、控件2都是在同一個“parent”上創(chuàng)建處理的。這個“parent”是整個屏幕區(qū)域。
對于控件1,它也可以作為“parent”,在它上面有可以繼續(xù)創(chuàng)建按鈕:“+”按鈕、“Upgrade”按鈕、“MQTT Setting”按鈕:
對于控件2,它也可以作為“parent”,在它上面有可以繼續(xù)創(chuàng)建各類控件:
表示一個點時,界面如下。它本身又可以作為一個 parent,在里面繼續(xù)繪制各類控件:
2.控件的回調函數
當我們點擊某個按鈕時,會有對應的函數被調用,這就是它的回調函數。在回調函數里,我們可以彈出對話框,可以使用RPC讀寫傳感器。
3.main函數
main函數在“demo_lv_modbus_toolmain.c”中,代碼如下:
13.5.2 使用屏幕和鼠標
LVGL對基于Framebuffer的屏幕、鼠標的支持很完善,只需要提供設備節(jié)點即可。代碼如下:
13.5.3 創(chuàng)建初始界面
main函數里調用“l(fā)v_modbus_tool”,就開始創(chuàng)建界面了。它的代碼在“demo_lv_modbus_toollv_100ask_modbus_toolsrclv_modbus_tool.c”中。
1.第1個區(qū)域的創(chuàng)建
第1個區(qū)域指:
第1步:以整個屏幕為parent,創(chuàng)建出控件1。
第2步:以控件1為parent,創(chuàng)建出左邊的3個控件。
代碼如下:
2.第2個區(qū)域的創(chuàng)建
第2個區(qū)域指:
代碼如下:
3.“點”的創(chuàng)建
LVGL前臺程序運行時,會使用RPC調用獲得點的信息。對于每個點,都會創(chuàng)建出類似下面的控件:
代碼如下:
add_new_item函數是核心代碼,單獨講解。
13.5.4 add_new_item函數解析
1.代碼里層級的注釋
add_new_item函數里,創(chuàng)建了多層控件。在代碼的注釋里,怎么體現這些一層又一層的嵌套關系呢?使用類似“[0]、[1]”表示第1層,使用“[1-0]、[1-1]”表示第2層。
在使用“add_new_item”函數創(chuàng)建如下控件時,理解了注釋里的數字,更容易理解代碼:
最底層,表示“點”的整個區(qū)域,它沒有數字注釋。比如下面的cont2_x,它對應下圖紅框的區(qū)域(忽略里面的內容):
cont2_x作為parent,作為底層,在上面創(chuàng)建了4個“child”。這些“child”的代碼注釋是“[0]、[1]、[2]、[3]”,如下:
“[0]”對應的控件:
“[1]”對應的控件:
“[1-0]”對應的控件:
2.代碼分析
add_new_item函數非常龐大,把源碼和圖案進行對比,才容易理解。
第1步,劃分區(qū)域得到cont2_x,如下:
第2步,在cont2_x里繼續(xù)劃分,得到cont2_x_1,如下:
第3步,在cont2_x_1里添加按鈕、復選框,代碼如下:
以后的操作是類似的,不再贅述。
-
傳感器
+關注
關注
2564文章
52732瀏覽量
764882 -
MODBUS
+關注
關注
28文章
2065瀏覽量
79139 -
程序開發(fā)
+關注
關注
0文章
30瀏覽量
10593 -
LibModbus
+關注
關注
0文章
10瀏覽量
7419 -
LVGL
+關注
關注
1文章
102瀏覽量
3590
原文標題:LVGL前臺程序開發(fā)相關操作 - RZ MPU工業(yè)控制教程連載(51)
文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
HMI-Board開發(fā)板工程在添加新組件時LVGL組件會報錯的解決辦法

LVGL開發(fā)入門教程

前臺運行和后臺運行二者有何區(qū)別
LVGL的字體相關資料分享
開源輕量級顯示框架LVGL簡介
開源輕量級顯示框架LVGL簡介
Purple Pi R1 LVGL使?參考
全面解讀目前LVGL的應用小知識

LVGL 優(yōu)化幀率技巧

【飛凌OKA40i-C開發(fā)板試用體驗】LVGL移植與測評

LVGL前臺程序開發(fā)相關操作介紹

RK3506開發(fā)板2秒啟動LVGL顯示方案

評論