1. 程式人生 > >【Software Toolbox教程】如何在OmniServer中設定心跳訊息

【Software Toolbox教程】如何在OmniServer中設定心跳訊息

下載TOP Server OPC Server最新版本

您可能知道,OmniServer用於從使用“非標準”協議進行通訊的裝置中檢索資訊,例如體重秤,條形碼閱讀器和印表機。 在某些情況下,需要將裝置協議設計為客戶端應用程式(HMI,SCADA或其他)而非OmniServer完全控制輪詢的位置。但在您發出下一條訊息之前,您如何知道該裝置是否仍然連線?

在我們的“OmniServer您知道嗎?”後續的第一篇文章中。部落格系列,我們將介紹如何建立所謂的心跳訊息,以確認您的裝置在傳送下一條訊息之前正在“收聽”。 對於許多裝置,裝置在沒有活動的一段時間後“進入睡眠狀態”並不罕見。有時在裝置的設定中存在可配置的超時,該超時控制該不活動時段的持續時間,但有時不存在。 許多這樣的裝置可以通過傳送特定命令或傳送不是命令的任何字元或字元序列來“喚醒”。這通常被稱為心跳訊息

我為什麼要這樣做?

裝置的一致例程輪詢是OmniServer用於確定裝置是否可用的機制。如果不允許OmniServer正常控制該輪詢,則無法知道儀器是否已停止通訊。

心跳訊息可以用作裝置的基礎輪詢機制。然後,客戶端使用心跳通知項來標記潛在的通訊問題。

我怎樣才能做到這一點?

在此示例中,我們將設定OmniServer以使用“STATUS”一詞自動輪詢儀器。注意: 這只是一個示例 - 對於您的裝置,您需要確認可以使用哪個序列/訊息來保持裝置喚醒,但不會導致裝置出現任何問題。

然後OmniServer將等待“OK”的值返回。同樣,這只是一個示例 - 您將需要一個可以傳送到裝置的序列/訊息,從而產生某種形式的響應或確認。如果沒有任何反饋或儀器響應不正確,Heartbeat通知項將設定為False或Zero。

1、建立一個名為Heartbeat的新OmniServer項,如下面的螢幕截圖所示。確保所有設定都匹配,尤其是“Item should be automatically activated/專案應自動啟用”設定:

ComponentOne

2、使用以下示例在協議內建立新的OmniServer命令/請求訊息。

3、在“常規”選項卡上,輸入以下值。注意通知專案。 只要此特定訊息成功完成,此欄位中選定的專案將由OmniServer設定為True或One。確保啟用“訊息應自動啟用”選項以確保即使客戶端應用程式未請求專案也執行訊息也很重要:

ComponentOne

4、在“Request/請求”選項卡上,輸入以下值。請記住,這只是一個示例。請檢視儀器的文件,檢視是否有可以傳送的訊息來檢索狀態資訊:

ComponentOne

5、最後,在“響應”選項卡上,輸入以下值。同樣,您的響應可能會有所不同,但關鍵專案最後是{Heartbeat:L}(其中{Heartbeat} 可以是您剛剛建立的專案,或者您可以選擇任何其他整數字段)。

“L”用於Linkage格式樣式,它告訴OmniServer正常讀入資料,但不會將任何資料分配給專案,也不會 期望該專案的任何資料。這對於使此命令/請求訊息定期執行而不會導致錯誤至關重要,因為裝置未返回該項的值:

ComponentOne

6、最後,儲存您的協議。

要測試此協議,請在客戶端應用程式中建立一個標記以指向專案Heartbeat。這將啟用心跳訊息,並持續將專案Heartbeat設定為值1,直到儀器沒有響應或發出除“OK”之外的任何內容作為對請求的響應。因此,任何時候Heartbeat都歸零,你知道出了什麼問題。

Heartbeat訊息可以用於其他事情嗎?

在上面的實現中,Heartbeat提供了與名為Status的保留OmniServer項類似的功能。但是,使用通知項會增加故障排除功能。

例如, 一旦通訊出現問題,Status和Heartbeat都會變為零(或假)。但是,狀態是一個全域性專案,基本上意味著“未在協議內某處收到預期通訊”。如果您有五百條訊息,那麼排除哪個訊息導致錯誤可能很麻煩。

但是使用上面的通知項(例如Heartbeat),可以說“此訊息中未收到預期通訊”。因此,您可以使用通知項來準確找出問題所在。

Heartbeat訊息是否有任何限制?

如果您的裝置不接受任何命令(如某些條形碼閱讀器和其他裝置的情況),那麼此方案將無法工作,OmniServer將無法確定裝置是否仍然連線,因為這是一個限制協議本身。

我在哪裡可以獲得更多資訊?

你有一個你不太確定的協議嗎?與往常一樣,我們很樂意幫助您對協議文件進行免費協議審查或回答您可能遇到的問題。