•   
    •   
    •   
      •   
      •   
      •   
      •   
      •   
      •   
      •   
    •   
      •   
      •   
      •   
      •   
      •   
      •   
        •   
      •   
  •   
  •   
  •   

1.線上手冊:

ICDT BACnet To Modbus Gateway 程式是提供 BACnet/IP 網路設備對應至 MODBUS/TCP Server 的點對點轉換程式。透過易於編輯的 CVS 檔案格式,指定器件編號的指定物件 Present value 屬性對應至MODBUS/TCP Server 的指定點(Coil/Register),以提供 MODBUS 監控系統(SCADA )讀取或改變 BACnet 設備內的數值與狀態,非常適合大點數整合的應用場合。

1.1.本程式特點:

■ 使用 DM-DDB-A 動態器件綁定(Dynamic Device Binding ) 功能,工程專案編輯時無須在意設備的網路編號與實體地址(MAC Address),避免因為網路設置變更而需要大幅修改專案設定
■ 同時具備 DS-RP-A 讀屬性(Read Propery) 與 DS-RPM-A 多重讀屬性(Read Property Multiple)功能,依照設備能力與網路封包長度自動調整,使讀取速度最佳化
■ 具備 DS-WP-A 寫屬性(Write Propery) 功能,可以在 Modbus 端資料變更時,寫回至對應的 BACnet 屬性
■ 使用 CSV 檔案格式進行編輯,方便利用 EXCEL 快速編輯專案資料
■ 可以分開設置 區域網路 與 遠端網路 的封包傳送間隔時間,以避免過高的存取速度使 MS/TP 網路等跨網段網路過於壅塞
■ 授權版超大轉換點數,理論上最高可達 40,000 點,實際則依照電腦效能與網路狀態決定
■ 即時數值觀察,移動游標至物件列表,可觀察對應物件 BACnet 端與 MODBUS端的即時值
■ 展示版可轉換 64 點,且連續運行 2 小時候必須重新啟動程式

1.2.網路設定:

程式必須先完成網路設定才能正常執行,設定參數說明如下:

1.2.1.網路界面 Network Interface:

選擇 BACnet/IP 網路連接的界面,由於 BACnet 是透過廣播方式查詢器件編號(Device Instance),因此必須選擇正確的網路界面,否則當電腦具備超過一個網路界面時,本程式很可能無法正常通訊。

1.2.2.器件編號 Device Instance:

設定本程式的器件編號。
由於本程式在 BACnet 網路上必須是可以被看到的,因此具備自己獨立的器件編號,此編號不得與 BACnet 網路上其他任何設備重複。

1.2.3.BACnet UDP Port:

設置本程式使用的 BACnet UDP 網路 Port 號,預設為 47808。此編號必須與要讀取的 BACnet/IP 網路 UDP 編號相同,如果連接的網路不是 BACnet/IP 界面,則必須另提供具備 BACnet/IP 網路的 BACnet Router 路由器進行轉換。
本程式執行時會開啟指定的 UDP Port 提供 UDP Server 功能,因此本電腦內不得同時運行使用此 UDP Port 做為 Server 端的程式(例如其他提供 BACnet/IP 服務的程式)

1.2.4.區域網路封包間隔 Local network:

設定讀寫相同 BACnet/IP 網路設備封包的最低讀取間隔時間,單位毫秒(mSec)。此時間越小則轉換週期時間越快,但仍應注意被讀取設備與網路效能是否足以因應

1.2.5.遠端網路封包間隔 Remote network:

透過 BACnet Router 轉發的遠端網路封包間隔時間,由於很可能連接的設備為較低速的 MS/TP 網路,因此過小的時間間隔很可能造成 BACnet 網路封包(NPDU)壅塞而遺失。

1.2.6.MODBUS TCP Port:

設置本程式使用的 MODBUS TCP 網路 Port 號,預設為 502。
本程式執行時會開啟指定的 TCP Port 提供 TCP Server 功能,因此本電腦內不得同時運行使用此 TCP Port 做為 Server 端的程式,如果有其他 MODBUS 程式佔用 502 時,可以改變共其他編號,供 MODBUS TCP Client 端程式透過相同編號通訊埠讀取。

1.2.7.最小化時自動隱藏:

勾選後執行最小化視窗動作會自動隱藏為右下角小圖示,以避免錯誤操作關閉此程式。
滑鼠右鍵雙擊(Double click)此小圖示可重新開啟程式視窗。

1.3.轉換點設定:


本程式主要功能即提供 BACnet 設備物件屬性與 MODBUS 暫存器的轉換,必須透過 CSV 檔案編輯匯入後,轉換功能才會生效。CSV 每欄依序為 MODBUS 暫存器地址、BACnet 器件地址、BACnet 物件類型、BACnet 物件編號以及倍率,例如
3,100,5,2
10004,100,3,3
30001,100,0,0,1
40002,100,2,1,1


其說明如下:

1.3.1.MODBUS 暫存器地址:

要轉換的 MODBUS 暫存器類型與編號,依照一般慣例十進制五位數表示,例如
1~9999 代表 Coil 0~Coil 9998,可以透過 Function code 01h 讀取,Function code 05h 與 0Fh 寫入
10001~19999 代表 Input 0~ Input 9998,可以透過 Function code 02h 讀取
30001~39999 代表 Input Register 0~Input Register 9998,可以透過 Function code 04h 讀取
40001~49999 代表 HoldingRegister 0~HoldingRegister 9998,可以透過 Function code 03h 讀取,Function code 06h 與 10h 寫入
Input Register (3xxxx) 與 HoldingRegister (4xxxx) 支援倍率運算

關於 MODBUS 進一步資訊 http://www.modbus.org/,或參考手冊 http://modbus.org/docs/PI_MBUS_300.pdf

1.3.2.BACnet 器件地址(Device Instance):

要讀取 BACnet 設備的編號 (Device Instance),數值範圍 0~4194302

1.3.3.BACnet 物件類型(Object Type):

要讀取 BACnet 設備的物件類型(Object type),數值可以為 0~5、13~14、19,與 BACnet Object Type 對應如下:
0 : AI / ANALOG INPUT
1: AO / ANALOG OUTPUT
2 : AV / ANALOG VALUE
3 : BI / BINARY INPUT
4 : BO / BINARY OUTPUT
5 : BV / BINARY VALUE
13 : MSI / MULTI STATE INPUT
14 : MSO / MULTI STATE OUTPUT
19 : MSV / MULTI STATE VALUE

1.3.4.BACnet 物件編號 (Object Instance):

要讀取 BACnet 點的編號 (Object Instance),數值範圍 0~4194302

1.3.5.倍率(Multiplier):

針對 Modbus 暫存器 Input Register (3xxxx) 與 HoldingRegister (4xxxx) 支援倍率運算,輸入倍率值為 100 代表由 BACnet 讀到的數值會 *100 以轉換為 MODBUS 暫存器,而 MODBUS 端寫入時,會將數值除以 100 後寫出到 BACnet

1.3.6.優先權(priority):

所有的 AO/BO/MSO 都必須支援優先權控制(priority ),AV/BV/MSV 則為可選(Option)功能,因此寫入 這些物件可能必須指定要寫入的 優先權 編號(1~16,CSV 檔案以 P1~P16 表示),如果忽略此選項,則寫入的封包也會忽略該欄。依循 BTL 標準忽略時大部分設備會以最低順位 16 寫入,部分設備忽略時可能產生錯誤。
無論讀取或寫入都是以 Present Value 作為屬性值 ,而非 Priority Array,因此讀取的數值不一定與寫出的一致,這是因為 Present Value 值是經過優先權控制運算的結果。
由於 MODBUS 無法寫入 NULL 數值至 BACnet ,因此一旦透過 MODBUS 寫入,則該優先權編號的位置一律為寫入的數值,這也意味較低優先權(編號較大者)將無法再被控制。
設定優先權編號時必須依照設備允許 MODBUS 寫入的編號設定,一般建議在手動層(編號 8 ,代號 P8)

1.3.6.1.關於 BACnet 的命令優先權控制 (Command Prioritization):

由於控制系統的控制命令可能有許多來源,因此 BACnet 針對部分物件屬性設計了優先權控制的方式,使優先權較高的命令可以獲得控制權,重點如下:

16 個等級中,數字越小的優先等級越高,優先等級為 1 的命令為 Null 時,則依照優先等級 2 的命令動作,2 為 Null 則依照等級 3 動作,依此類推。
全部為 Null 時,則依照預設的數值(Relinquish_Default 屬性) 動作
各個層級的命令狀態必須由 Priority_Array 屬性獲得
一般手動(例如圖控操作)的等級為 8
部份物件優先權控制功能為選配的(AV/BV/MSV),部分為必備的(AO/BO/MSO)
(以上內容參考 BAcnet 手冊 19.2 Command Prioritization)

以 BO 點來說,寫入狀態時,會帶一個 Priority 參數,範圍 1~16,寫入也不只有 Inactive(OFF) 與 Active(ON),還有一個選項是 NULL。

Priority 數字越小,優先順序越高,較高順位的為 NULL 時,則依照下一個順位。16 個 Priority 都是 NULL 則依照 Relinquish_Default 屬性 動作

因此雖然最後輸出只有 Inactive(OFF) 與 Active(ON) 兩種狀態,卻是 16 組 Priority 及 Relinquish_Default 的運算結果。

一般圖控端控制為 Priority 8 (中間位置),定時控制則會是較低的順位,安全控制會在最高順位(1 & 2)。
因此不同的優先順位控不同的位置,這樣才不至於發生 安全控制邏輯要求停止,但定時控制要求開啟,使設備不斷重複開開關關。

1.3.7.轉換規則:

■ 只有 Input Register (3xxxx) 與 HoldingRegister (4xxxx) 支援倍率運算
■ Input Register (3xxxx) 與 HoldingRegister (4xxxx) 數值會以符號整數方式表示,亦即 0 ~ 32767(0000h~ 7FFFh) 代表正數 0~32767,65535~32768 (FFFFh~8000h) 代表 -1 ~ -23768,倍率運算候數值大於 32767 以32767顯示,小於 -32768 以-32768 顯示
■ Coil(0xxxx) 與 HoldingRegister (4xxxx) 當 MODBUS 端變更時寫出至 BACnet端,否則由 BACnet 讀取
■ BACnet 各項支援物件的屬性 只支援 Present Value 一項
■ 數值寫入BACnet 時, 如果未指定優先權(Priority) ,則忽略寫入數值時不寫入優先權編號,可能結果為寫入優先權16(最低)
■ BI/BO/BV 屬性值為 Active 時 轉換至 MODBUS 為 1,Inactive 時為 0
■ MSI/MSO/MSV 屬性值 一律為 1 開始之正整數

2.版權宣告:

本產品相關軟體、韌體版權屬元米科技有限公司(Intelligent Control Design & Technology Co., Ltd)所有,除元米科技產品或授權產品使用外,未經授權重製或使用本發行文件之部分或全部內容,將依法提起告訴。
試用版程式僅供驗證與學習使用,未經本公司許可不得用於商業用途。程式產生之網頁程式碼除本程式使用外,不得用於其他應用。

3.關於 ICDT (元米科技有限公司):


元米科技有限公司(Intelligent Control Design & Technology Co., Ltd)前身為元米智控研發工作室(Intelligent Control Design House),自2012年5月成立後,致力於自動控制方案的開發,並成功推出性價比(C/P值)極高的 DDC8 方案。為便於業務推展,並使客戶與合作夥伴獲得更多的保障,於2013年6月21日正式登記成立為『元米科技有限公司』,並陸續推動 DDC32 方案與 Web Embedded 方案,以及 BACnet 通訊協定相關方案(元米科技為 BACnet 編號 676 供應商),以期服務更多有需求的合作伙伴。


元米科技有限公司以成熟的、低成本的整合方為客戶打造高價值、持續服務的可程式控制方案,人性化的操作介面,讓您自有品牌不再是夢想,更多的資訊請造訪網站:
http://www.icdt.com.tw

4.關於本手冊:

本手冊適用於 ICDT BACnet To MODBUS Gateway 程式 V1.0.1.0 版以後。
手冊版本 V1.11 版,完稿日期 2019/11/14
關於本程式有任何問題,請 E-mail 至 eric.icdt@msa.hinet.net