通訊的總體機制采用呼叫應答方式,就是上位機軟件主動發送請求數據命令,下位機終端接收到命令後,並校驗成功,返回相應的數據。
(1)串口通訊機制包括:輪詢模式。
串口總線涉及到一對一的通訊、一對多的通訊,為了避免總線上數據的沖突問題以及環境干擾的問題,在保障通訊穩定性的前提下,只采用輪詢通訊機制。一個設備發送、接收完成數據後,才進行下一個設備的通訊。但是這種通訊效率比較低,如果要提高通訊效率,可以增加串口服務器,在SuperIO平台上實現一個串口對應多台現場設備進行通訊,也就是把現場的所有設備平衡負載到不同的串口上。
(2)網絡通訊機制包括:輪詢模式、並發模式和自控模式。
輪詢模式與串口通訊機制中的輪詢模式相同,但是對於網絡通訊時,這個操作模式的效率是非常低,不能體現網絡通訊的優勢。基於這樣的考慮,在輪詢模式的基礎上,增加了並發模式和自控模式。
並發模式,由SuperIO的內部來協調實現,通過調用IRunDevice設備接口的GetSendBytes函數獲得發送的命令包,集中發送所有設備的數據。接收數據部分采用異步監聽方式,接收相應設備的數據。並發模式的通訊周期由SuperIO平台統一進行調度,不能自主控制請求數據的周期,在此基礎上增加了自控模式。
自控模式,二次開發者在開發設備驅動時,可以定時通過OnSendDataHandler發送請求數據命令,接收數據部分采用異步監聽方式,接收相應設備的數據,做到即時請求即時響應。
另外一種情況,現場硬件終端會主動發送狀態字數據給上位機軟件,這時候就需要能夠主動監聽接收數據事件,這是輪詢模式做不到的。遇到這類情況,建議使用自控模式進行通訊。
SuperIO包括兩大部分:通訊部分和設備驅動部分。
(1) 通訊部分如何與設備驅動協調工作?兩部分主要是通過IRunDevice接口實現兩部分之間的協調工作,線程、異步、同步等機制由SuperIO內部來完成。
(2) 通訊部分接收到數據後如何傳輸到相應的設備上?輪詢模式不存在這個問題,主要涉及到並發模式和自控模式,因為這兩部分采用的是異步監聽數據的方式。解決這個問題有兩種方式:第一種、通過接收協議驅動獲得設備ID來識別相應的設備。第二種、通過設備設置的IP地址來識別相應的設備。現在的SuperIO平台采用的是第二種方式。
(3) 並發模式和自控模式如何實現通訊中斷狀態?在鏈路不通的情況下,發送請求命令,沒有返回相應的數據,也不過觸發運行設備的接口,所以通訊狀態也不會改變,也不會做出任何反應。解決這個問題的方式是,發送請求數據命令超過3次,每次都沒有返回相應的數據,就會觸發運行設備接口,來完成運行設備的整個流程。
作者QQ:504547114
交流QQ群:54256083
源文章地址:http://www.bmpj.net/index.php?m=article&f=view&id=8