參考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的工作流程