怎樣實現SDO服務

2022-05-14 07:46:48 字數 760 閱讀 2726

sdo是canopen協議中最複雜的一部分,帶有應答機制,有多種傳輸方式,並且完整的sdo功能節點需提供1個sdo server和多個sdo client,因此sdo的實現異常困難,協議多種傳輸方式的解析處理還有跡可循,多個sdo client服務和多個對sdo server的訪問的協調就不容易了,這裡介紹一種方法——sdo執行緒來解決。

sdo執行緒參數列可以說是sdo執行緒的核心,所有sdo執行緒的建立、刪除和sdo通訊都要涉及到這個參數列。參數列內容包括能夠描述乙個sdo訪問過程的所有引數,這裡不詳述。

一次sdo訪問是這樣完成的。首先sdo發起節點(sdo client)收集足夠的資訊,建立乙個sdo執行緒,說白了就是初始化sdo執行緒參數列,將收集的資訊以特定格式放入參數列,形成一幀sdo請求,傳送出去。sdo服務節點(sdo server)收到這幀請求,為它建立乙個sdo執行緒,將這幀請求分析分解以獲得足夠資訊來初始化這個sdo執行緒對應的參數列,然後程式就會按照參數列的描述去執行server的功能收集資料來滿足這個sdo請求,然後將收集到的資料形成sdo應答幀返回給sdo client,如果此次請求結束則釋放該執行緒,否則等待下一幀請求到來;sdo client在收到應答後判斷該請求是否還有後續請求,無則釋放此sdo執行緒。如果在這個過程中,sdo server 和sdo client所在節點有收到其他節點的sdo請求或需要通過sdo請求其它節點,則新建sdo執行緒來實現,跟上面的步驟一樣,這樣就可以實現多個sdo server和sdo client服務都得到實現而互不干擾,相當於雙向多線鐵路,可比單線爽多了。

該方法已在微控制器下實現,效果還不錯。

舊文備份 CANopen協議中SDO服務

sdo是服務資料物件介面 service data obiect 的縮寫,顧名思義提供服務資料的訪問介面,服務資料就是一些實時性要求不高的資料,一般是指節點配置引數,因此,sdo一般用來配置和獲得節點的配置引數。其優先順序只比心跳 heartbeat 高。sdo既然稱之為服務,那就要有服務的提供者和...

怎樣實現集群服務呢?

舉個列子來說吧 一台硬體伺服器,安裝了使用者所用的系統。當硬體伺服器上出現了問題,比如os崩潰了,硬體突然出現了問題 硬碟壞了,主機板壞了and so on。一旦出現了問題,使用者就不能正常的使用,也可能造成資料的丟失,那麼會造成嚴重的後果。那麼我們是不是能用一種很好的辦法來防止此類事件的發生,使損...

怎樣刪除服務

刪除服務一般有兩個辦法 辦法一 用sc.exe這個windows命令 開始 執行 cmd.exe,然後輸入sc就可以看到了。使用辦法很簡單 sc delete 服務名 如果服務名中間有空格,就需要前後加引號 如針對上面的 sc delete mysql 一般服務會以相同的名字在這裡顯示乙個主健,直接...