RPC(Remote Procedure Call Protocol)即遠程過程調用,也就是調用的函數是在其它的控制板上運行的,不需要理會底層的通訊協議。現在大型設備通常有超過5塊控制板,這些控制板通過485/CAN/以太網組成一個局域網。通訊協議可以使用Modbus或者自定義。。。
多模塊組網,實現模塊化,減少電氣布線便于維護:
遠程調用數據流:
這些控制板的硬件基本都一樣(電機,傳感器。。),底層驅動程序也一樣,只是上層的業務邏輯的差別,在驅動層封裝一層rpc,能進一步簡化業務邏輯開發,使得控制從機的電機 動作和本機的函數接口一樣.
動作 傳感器映射
映射是把本地動作編號 傳感器編號映射到從機模塊的動作編號和傳感器編號,這個是在上電初始化時完成.
enum
{
HOST=0,//本機編號
SLAVE1,
SLAVE2,
};
l->MapRemoteAction(201,SLAVE1,1); //動作201映射到從機1的1號動作
l->MapRemoteAction(301,SLAVE2,1); //動作301映射到從機2的1號動作
l->MapRemoteSensor(X201,SLAVE1,X01);//把傳感器X201映射到從機的X01
SLAVE1,SLAVE2是從機模塊編號,通常是電路板上的撥碼開關決定的.RPC組包時會把這些模塊編號放在頭部.
業務代碼:
start(App):
l->WaitAction(201,STEP2,STEP_ERROR); //執行從機1動作201,動作正確完成就跳到step2,錯誤step_error
step2:
if(l->IsSenorOn(X201)) //從機1號傳感器感應
{
l->WaitAction(301,STEP_OK,STEP_ERROR); //執行從機2的動作
}
else
{
l->SetActionOk();
}
step_ok:
l->SetActionOk();
step_error:
l->SetSubError();
end
上面的業務代碼是沒有任何通訊相關的流程,只是一些簡單的函數調用和本地函數調用一模樣
RPC層
RPC層主要完成數據組包,實時數據通訊,從機的動作 電機運動都是耗時過程,需要一定的時間才能完成,那么主機端的rpc層就需要不斷查詢從機的狀態.App調用從機的動作時就同步等待從機的狀態變化后繼續向下執行.軟件實現上需要單獨一個線程或者類似于switch-case實時處理rpc的工作流程.
-
RPC
+關注
關注
0文章
111瀏覽量
11747 -
函數
+關注
關注
3文章
4365瀏覽量
63906 -
通訊協議
+關注
關注
10文章
283瀏覽量
20668
發布評論請先 登錄
【學習打卡】OpenHarmony的RPC連接介紹
什么是RPC
OpenDaylight中的RPC & Notification是什么

RPC接口與HTTP接口哪一個更好?

基于Client/Server架構的HTTP接口和RPC接口

RPC接口和HTTP接口的區別與聯系

什么是遠程過程調用

評論