在niagara中開發driver遇到的問題

參考docDevDriver的tutorial,並且用niagara community文檔“The Driver Framework Networks and Devices”中的module模擬遠端的設備。

自己的network和device需要分別繼承BDdfTcpGatewayNetwork和BDdfTcpDeviceBehindGateway。

代碼編寫完畢,運行。只有第一次ping有顯示,再ping就沒有了


當我把station停止之後,有如下輸出


注意紅框,明顯應該是wait阻塞了,一直沒有被喚醒。問題找到,下面就是回溯一點一點看源碼了。最終定位到BIDdfTransactionMgr這個接口,我Ca,又是接口。突然想到這個好像是communicator的Property,查看一下,果然


注意紅框內,居然是DdfNullTransactionMgr,聽名字就不好了,一看源碼,果然都是空操作。自己定義一個吧“transactionManager : BDdfSingleTransactionMgr”,編譯運行,終於發送接收都有了。問題發生的根源在於,docDevDriver中的例子是用的串口通信,只是順帶提了TCP和UDP,但沒有提醒你注意要自己定義transactionManager。

然而我高興的太早,咦?都接收到反饋了,爲什麼Health不是Ok,而是“Fail[null]”呢。Debug的過程就不說了,只說結果:我自己的Device中重寫了pingOk(),並且是空操作,也沒有調用super.pingOk(),但是這一步在docDevDriver中是沒有的,思前想後,可能是在創建類的時候勾選了“Inherited abstract method”。但是看看父類的源碼,已經實現了pingOk()啊,但是eclipse卻沒有幫我自動調用super.pingOk(),猜測可能是在創建類的時候包driver還沒有導入進eclipse所致(包中的BDevice實現了pingOk())。

下面是自己整理的driver的ping的工作流程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章