在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

詳解框架設計

瑞薩MCU小百科 ? 來源:瑞薩MCU小百科 ? 2025-01-09 16:48 ? 次閱讀

13.2 框架設計

13.2.1 程序層次

如下圖所示:

①程序總體劃分為:LVGL前臺程序,后臺程序。這使得GUI和后臺程序分開,可以很容易升級、替換GUI程序。

②LVGL程序:顯示界面,是用戶和后臺程序的橋梁,把用戶的指令下發給后臺程序,把后臺上報的數據在界面顯示出來。

③后臺程序(控制中心):根據前臺程序的指示去操作設備,比如把用戶設置的參數傳遞給MQTT程序、通知 modbus_tcp_server、通過RS485接口操作傳感器

④MQTT程序:根據后臺程序的指示連接MQTT服務器、發布消息,訂閱消息。

⑤modbus_tcp_server:根據后臺程序的指示操作本地傳感器

a8e68320-ce3f-11ef-9310-92fbcf53809c.png

13.2.2 后臺程序(控制中心)功能

后臺程序(控制中心),是程序的核心。它實現了各類RPC接口(遠程調用接口),供前臺程序、MQTT程序使用,比如:

①前臺程序啟動后,咨詢后臺程序,顯示出上次用戶配置的“點”

②前臺程序通過RPC接口對“點”進行讀、寫操作

③前臺程序增加、刪除點時,也是調用RPC接口

④前臺程序進行MQTT設置、升級操作時,也是使用RPC接口通知后臺程序

⑤MQTT程序通過RPC接口獲得MQTT設置信息、要操作的“點”的信息

⑥MQTT程序通過RPC接口讀、寫“點”

1. 兩個核心操作對象

一個是PointInfo結構體,用來表示“點”。另一個是MQTTInfo結構體,用來表示MQTT信息。

工業控制領域,通過modbus操作傳感器時,核心單位是“點”。它包含這些信息:

①使用什么協議?Modbus RTU還是Modbus TCP?

對于Modbus RTU,使用哪個串口?數據格式(數據位/檢驗位/停止位)是什么?

對于Modbus TCP,IP和端口是什么?

②設備地址是?

寄存器地址是?

④寄存器類型是?

針對“點”,本項目定義了一個結構體來表示“點的信息”,如下:

左右滑動查看完整內容

typedef struct PointInfo {
 int point;
 char port_info[100];
 int dev_addr;
 int reg_addr;
 char reg_type[4];
 int period; /* ms */
}PointInfo, *PPointInfo;

point:點的索引,一個唯一的整數,通過它可以找到某個“點”。

port_info:端口信息,表示串口時格式為“/dev/ttyUSB0,115200,8N1”;表示網絡時格式為“192.168.5.89:1052”。

dev_addr:設備地址

reg_addr:寄存器地址

reg_type:寄存器類型,有“0x”、“1x”、“4x”、“3x”四種取值。

period:讀取周期(單位ms)。

結構體的信息,跟前臺程序對應,用一個PointInfo結構體描述界面里這一個元素:

a8fcad08-ce3f-11ef-9310-92fbcf53809c.png

在前臺程序增加、修改、刪除、讀取、寫“點”時,操作的就是對應的PointInfo結構體。所有的“點”信息,會保存在PointInfo結構體數組里。

前臺程序設置MQTT信息時,mqtt_client_app獲得MQTT 信息時,這些信息都使用一個結構體表示:

typedef struct MQTTInfo {
 char broker[100];
 int port;
 char client_id[100];
 char user[100];
 char password[100];
 char publish[100];
 char subcribe[100];
}MQTTInfo, *PMQTTInfo;

2. 交互示例

RPC是遠程過程調用(Remote Procedure Call)的意思,而json是比較流行的傳遞信息的格式。

前臺程序和后臺程序之間使用“json-rpc”進行遠程調用:前臺程序發出請求,后臺程序處理請求返回結果。

比如前臺程序增加一個點時,調用如下函數通知后臺程序:

a9122426-ce3f-11ef-9310-92fbcf53809c.png

這會導致后臺程序調用如下函數:

a9301a9e-ce3f-11ef-9310-92fbcf53809c.png

它把cJSON格式的參數解析出來后,調用本地函數:

a9437648-ce3f-11ef-9310-92fbcf53809c.png

3. RPC接口

定義好RPC接口后,前臺程序、后臺程序就可以獨立開發。在“controle_center”程序的rpc.h里定義了如下RPC接口。

①詢問后臺程序有多少個點:

左右滑動查看完整內容

/* 詢問后臺程序有多少個點
* 返回值:(-1)錯誤, (>=0) 點的個數
*/
int rpc_get_point_count(int iSocketClient);

②詢問后臺程序取出下一個點:

左右滑動查看完整內容

/* 詢問后臺程序取出下一個點(point > pre_point 的第 1 個點)
* 返回值:(-1)錯誤, (>=0) 點的個數
*/
int rpc_get_next_point(int iSocketClient, int pre_point, PPointInfo pInfo);

使用①②,就可以得到所有的點的信息,示例代碼為:

左右滑動查看完整內容

int cnt = rpc_get_point_count(fd);
if (cnt > 0)
{
printf("point count = %d
", cnt);
}
int pre_point = -1;
PointInfo tInfo;
for (int i = 0; i < cnt; i++)
{
 err = rpc_get_next_point(fd, pre_point, &tInfo);
 if (!err)
 {
 printf("Point %d:
", tInfo.point);
 printf("port_info: %s
", tInfo.port_info);
 printf("dev_addr: %d
", tInfo.dev_addr);
 printf("reg_addr: %d
", tInfo.reg_addr);
 printf("reg_type: %s
", tInfo.reg_type);
 printf("period: %d
", tInfo.period);
 }
 pre_point = tInfo.point;
}

③增加點:

左右滑動查看完整內容

/* port_info: "/dev/ttyUSB0,115200,8n1" or "192.168.0.123:234"
* dev_addr: modbus device address
* reg_addr: register address
* reg_type: "0x" - Coils, "1x" - Discrete Inputs, "4x" - Holding Registers, "3x" - I
nput Registers
* period: 訪問周期(ms)
* 返回值: -1 失敗, 其他值:唯一的句柄
*/
int rpc_add_point(int iSocketClient, char *port_info, int dev_addr, int reg_addr, cha
r *reg_type, int period);

④刪除點:

左右滑動查看完整內容

/* 移除一個點
* point: 要移除的點
*/
int rpc_remove_point(int iSocketClient, int point);

⑤修改點:

左右滑動查看完整內容

/* 修改點
* point: 要修改的點
*
* port_info: "/dev/ttyUSB0,115200,8n1" or "192.168.0.123:234"
* dev_addr: modbus device address
* reg_addr: register address
* reg_type: "0x" - Coils, "1x" - Discrete Inputs, "4x" - Holding Registers, "3x" - I
nput Registers
* period: 訪問周期(ms)
* 返回值: -1 失敗, 其他值:唯一的句柄
*/
int rpc_modify_point(int iSocketClient, int point, char *port_info, int dev_addr, int
reg_addr, char *reg_type, int period);

⑥讀點:

左右滑動查看完整內容

/* 讀數據
* point: 哪個點
*/
int rpc_read_point(int iSocketClient, int point, int *val);

⑦寫點:

左右滑動查看完整內容

/* 寫數據
* point: 哪個點
* val: 要寫入的數值
*/
int rpc_write_point(int iSocketClient, int point, int val);

⑧升級功能:

左右滑動查看完整內容

/* 開始升級傳感器
*/
int rpc_start_update(int iSocketClient, PUpdateInfo ptUpdateInfo);
/* 詢問后臺程序升級進度
* 返回值:(-1)錯誤, (>=0) 進度(0~100)
*/
int rpc_get_update_percent(int iSocketClient);

⑨MQTT配置:

左右滑動查看完整內容

/* 詢問后臺程序獲得 MQTT 信息
*/
int rpc_get_mqttinfo(int iSocketClient, PMQTTInfo ptMQTTInfo);
/* 設置后臺程序的 MQTT 信息
*/
int rpc_set_mqttinfo(int iSocketClient, PMQTTInfo ptMQTTInfo);

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • MPU
    MPU
    +關注

    關注

    0

    文章

    372

    瀏覽量

    48856
  • 程序
    +關注

    關注

    117

    文章

    3792

    瀏覽量

    81163
  • MQTT
    +關注

    關注

    5

    文章

    652

    瀏覽量

    22563

原文標題:框架設計 - RZ MPU工業控制教程連載(48)

文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    嵌入式里通用微秒計時函數框架設計與實現

    今天給大家分享的是嵌入式里通用微秒(microseconds)計時函數框架設計與實現。
    的頭像 發表于 10-14 12:41 ?1909次閱讀

    Python技術學習之Django框架設計思想

    返回的html。以上是老男孩教育對Django框架設計思想的簡要介紹,想要了解更多信息,快來參加老男孩教育Python培訓班吧,讓您輕松掌握高深Python技能!
    發表于 06-15 15:01

    框架設計中的常用模式有哪些

    。消息訂閱模式最常見的問題是同步模式下如何處理重入和超時。作為框架設計者,一定要考慮好這個問題。所謂重入,是二次開發者在消息的回調函數中執行訂閱/取消訂閱的操作,這會破壞消息訂閱的機制。所謂超時是指二次開發
    發表于 12-17 16:44

    STM32F407的HAL庫框架設

    第12章 STM32F407的HAL庫框架設計學習通過本章節,主要是想讓大家對HAL庫程序設計的基本套路有個了解,防止踩坑。目錄第12章 STM32F407的HAL庫框架設計學習12.1 初學者重要
    發表于 08-10 06:23

    怎么實現ThreadX內核模板框架設計?

    怎么實現ThreadX內核模板框架設計?
    發表于 11-29 07:45

    聊聊我對單片機程序的整體框架設計的一些思路體會

    RTOS。或者使用RTOS,在整體思路上比較迷茫,不知從何入手,所以本文來聊聊我對單片機程序的整體框架設計的一些思路體會。為啥要討論架構單片機系統開發人員的目標之一是在編程環境中創建固件,以實現低成本系...
    發表于 02-23 07:30

    HDF驅動框架設計匯總分享

    1、HDF驅動框架之linux驅動開發介紹什么是驅動開發?這個看似不是問題的問題卻很重要,我們必須需要從這一步開始理清楚,見下圖:HDF 驅動框架探路(一):2、HDF驅動框架之應用態打通內核的
    發表于 03-15 15:31

    架設

    架設計,這種構架設計是新的知識希望能夠得到一本,可以繼續發展構架思維和構架設計靈感。
    發表于 12-18 11:09

    基于GIS的城鄉公交系統框架設計與實現

    本文在分析建立城鄉公交信息系統意義的基礎上,通過詳細調研城鄉公交工作需求,規劃和設計了基于GIS 的城鄉公交信息系統的框架設計,功能結構,并根據系統功能需要,在簡
    發表于 12-19 14:12 ?8次下載

    基于CAN總線的通訊系統軟件框架設

    基于CAN總線的通訊系統軟件框架設
    發表于 01-24 16:54 ?21次下載

    基于ARM Cortex-M4的MQX中斷機制分析與中斷程序框架設

    基于ARM Cortex-M4的MQX中斷機制分析與中斷程序框架設
    發表于 09-25 08:29 ?6次下載
    基于ARM Cortex-M4的MQX中斷機制分析與中斷程序<b class='flag-5'>框架設</b>計

    基于ARMCortex_M4的MOX中斷機制分析與中斷程序框架設

    基于ARMCortex_M4的MOX中斷機制分析與中斷程序框架設
    發表于 09-28 09:13 ?4次下載
    基于ARMCortex_M4的MOX中斷機制分析與中斷程序<b class='flag-5'>框架設</b>計

    Inside<SPAN class=“analog-coupler”>i</span>Coupler<sup>?</sup>技術:封裝和引線框架設

    InsideiCoupler?技術:封裝和引線框架設
    發表于 05-18 19:12 ?3次下載
    Inside<SPAN class=“analog-coupler”>i</span>Coupler<sup>?</sup>技術:封裝和引線<b class='flag-5'>框架設</b>計

    C 單片機項目框架設計要點

    1、項目架構???? 好的項目架構不僅開發便捷,二次開發更加方便,后期維護也容易上手。所以在項目之前就要將框架搭建好,考慮整體架構以及后期的功能拓展。2、架構分級???? 根據功能需求,一般分為三級
    發表于 11-04 16:36 ?15次下載
    C 單片機項目<b class='flag-5'>框架設</b>計要點

    智慧城市方案框架設

    涉及智慧樓宇方案框架
    發表于 06-08 14:29 ?0次下載
    主站蜘蛛池模板: 成年午夜一级毛片视频| 黄色免费在线网站| 中国一级毛片aaa片| 高h细节肉爽文bl文| 中文字幕色| 五月综合激情网| 成人欧美一区二区三区黑人3p| 噜噜色综合| 国产精品成人四虎免费视频| 波多野结衣在线观看一区二区三区| www.av网站| 天天爽天天爽天天片a久久网 | 亚洲高清在线视频| 天天操天天操天天| 亚洲免费mv| 人人莫| 99草精品视频| 男人天堂网址| www.在线视频| 国产精品福利在线观看免费不卡 | 精品国内一区二区三区免费视频| 国产嫩草影院精品免费网址| 永久免费影视在线观看| 日本欧美强乱视频在线| 中国性猛交xxxxx免费看| 亚洲精品在线视频观看| 亚洲国产福利| 女人大毛片一级毛片一| freesexvideo性残疾| 欧美天天综合| 久久精品乱子伦免费| 欧美性69| 欧美国产黄色| 中文字幕不卡免费高清视频| 四虎影城库| 国产成年网站v片在线观看| 国产va免费精品高清在线观看| 天天尻| h黄网站| 午夜视频黄| 人人射人人爽|