RPC(Remote Procedure Call Protocol)即遠(yuǎn)程過程調(diào)用,也就是調(diào)用的函數(shù)是在其它的控制板上運行的,不需要理會底層的通訊協(xié)議?,F(xiàn)在大型設(shè)備通常有超過5塊控制板,這些控制板通過485/CAN/以太網(wǎng)組成一個局域網(wǎng)。通訊協(xié)議可以使用Modbus或者自定義。。。
多模塊組網(wǎng),實現(xiàn)模塊化,減少電氣布線便于維護(hù):

遠(yuǎn)程調(diào)用數(shù)據(jù)流:

這些控制板的硬件基本都一樣(電機(jī),傳感器。。),底層驅(qū)動程序也一樣,只是上層的業(yè)務(wù)邏輯的差別,在驅(qū)動層封裝一層rpc,能進(jìn)一步簡化業(yè)務(wù)邏輯開發(fā),使得控制從機(jī)的電機(jī) 動作和本機(jī)的函數(shù)接口一樣.
動作 傳感器映射
映射是把本地動作編號 傳感器編號映射到從機(jī)模塊的動作編號和傳感器編號,這個是在上電初始化時完成.
enum
{
HOST=0,//本機(jī)編號
SLAVE1,
SLAVE2,
};
l->MapRemoteAction(201,SLAVE1,1); //動作201映射到從機(jī)1的1號動作
l->MapRemoteAction(301,SLAVE2,1); //動作301映射到從機(jī)2的1號動作
l->MapRemoteSensor(X201,SLAVE1,X01);//把傳感器X201映射到從機(jī)的X01
SLAVE1,SLAVE2是從機(jī)模塊編號,通常是電路板上的撥碼開關(guān)決定的.RPC組包時會把這些模塊編號放在頭部.
業(yè)務(wù)代碼:
start(App):
l->WaitAction(201,STEP2,STEP_ERROR); //執(zhí)行從機(jī)1動作201,動作正確完成就跳到step2,錯誤step_error
step2:
if(l->IsSenorOn(X201)) //從機(jī)1號傳感器感應(yīng)
{
l->WaitAction(301,STEP_OK,STEP_ERROR); //執(zhí)行從機(jī)2的動作
}
else
{
l->SetActionOk();
}
step_ok:
l->SetActionOk();
step_error:
l->SetSubError();
end
上面的業(yè)務(wù)代碼是沒有任何通訊相關(guān)的流程,只是一些簡單的函數(shù)調(diào)用和本地函數(shù)調(diào)用一模樣
RPC層
RPC層主要完成數(shù)據(jù)組包,實時數(shù)據(jù)通訊,從機(jī)的動作 電機(jī)運動都是耗時過程,需要一定的時間才能完成,那么主機(jī)端的rpc層就需要不斷查詢從機(jī)的狀態(tài).App調(diào)用從機(jī)的動作時就同步等待從機(jī)的狀態(tài)變化后繼續(xù)向下執(zhí)行.軟件實現(xiàn)上需要單獨一個線程或者類似于switch-case實時處理rpc的工作流程.

-
RPC
+關(guān)注
關(guān)注
0文章
113瀏覽量
12188 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4405瀏覽量
66794 -
通訊協(xié)議
+關(guān)注
關(guān)注
10文章
294瀏覽量
21324
發(fā)布評論請先 登錄
嵌入式遠(yuǎn)程過程調(diào)用組件--eRPC
TSMaster RPC 基礎(chǔ)入門:編程指導(dǎo)和使用說明
如何手搓一個自定義的RPC 遠(yuǎn)程過程調(diào)用框架
Linux rpc編程過程
RPC的結(jié)構(gòu)原理是什么?
【學(xué)習(xí)打卡】OpenHarmony的RPC連接介紹
什么是RPC
HTTP和RPC的區(qū)別與聯(lián)系
OpenDaylight中的RPC & Notification是什么
RPC接口與HTTP接口哪一個更好?
基于Client/Server架構(gòu)的HTTP接口和RPC接口
RPC接口和HTTP接口的區(qū)別與聯(lián)系
什么是遠(yuǎn)程過程調(diào)用
Dubbo源碼淺析(一)—RPC框架與Dubbo
RPC的基本原理和主要特點

RPC如何在遠(yuǎn)程過程中調(diào)用?
評論