RPC(Remote Procedure Call Protocol)即遠程過程調(diào)用,也就是調(diào)用的函數(shù)是在其它的控制板上運行的,不需要理會底層的通訊協(xié)議。現(xiàn)在大型設(shè)備通常有超過5塊控制板,這些控制板通過485/CAN/以太網(wǎng)組成一個局域網(wǎng)。通訊協(xié)議可以使用Modbus或者自定義。。。
多模塊組網(wǎng),實現(xiàn)模塊化,減少電氣布線便于維護:
遠程調(diào)用數(shù)據(jù)流:
這些控制板的硬件基本都一樣(電機,傳感器。。),底層驅(qū)動程序也一樣,只是上層的業(yè)務(wù)邏輯的差別,在驅(qū)動層封裝一層rpc,能進一步簡化業(yè)務(wù)邏輯開發(fā),使得控制從機的電機 動作和本機的函數(shù)接口一樣.
動作 傳感器映射
映射是把本地動作編號 傳感器編號映射到從機模塊的動作編號和傳感器編號,這個是在上電初始化時完成.
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是從機模塊編號,通常是電路板上的撥碼開關(guān)決定的.RPC組包時會把這些模塊編號放在頭部.
業(yè)務(wù)代碼:
start(App):
l->WaitAction(201,STEP2,STEP_ERROR); //執(zhí)行從機1動作201,動作正確完成就跳到step2,錯誤step_error
step2:
if(l->IsSenorOn(X201)) //從機1號傳感器感應(yīng)
{
l->WaitAction(301,STEP_OK,STEP_ERROR); //執(zhí)行從機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ù)通訊,從機的動作 電機運動都是耗時過程,需要一定的時間才能完成,那么主機端的rpc層就需要不斷查詢從機的狀態(tài).App調(diào)用從機的動作時就同步等待從機的狀態(tài)變化后繼續(xù)向下執(zhí)行.軟件實現(xiàn)上需要單獨一個線程或者類似于switch-case實時處理rpc的工作流程.
-
RPC
+關(guān)注
關(guān)注
0文章
111瀏覽量
11529 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4327瀏覽量
62569 -
通訊協(xié)議
+關(guān)注
關(guān)注
10文章
273瀏覽量
20351
發(fā)布評論請先 登錄
相關(guān)推薦
評論