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