首頁 技術服務 智能顯示器 Modbus智能顯示器如何被客戶終端控制 (透過實體與虛擬切換器控制LED燈與指示燈)

Modbus智能顯示器如何被客戶終端控制 (透過實體與虛擬切換器控制LED燈與指示燈)

前言

為了推廣 SmartDisplay 並使其使用普及和簡單易懂,我們介紹了各式不同的操作情境。在本文中,我們將介紹另一個示範情境,希望它對初學者和有經驗的開發人員都有所幫助,讓您迅速掌握基本原理。

 

說明

Modbus協議在工業自動化中被廣泛用於控制各種設備和傳感器。在這種情況下,Arduino開發板可以成為系統整合和主機控制的有用工具。透過Modbus協議,Arduino板可以利用各種傳感器和切換按鈕控制智能顯示器、量測儀器、指示燈和LED。在本文中,我們將展示使用Arduino-2560和RS485載板透過Modbus協議來控制SmartDisplay的方法。該程式演示了如何使用Modbus寄存器讀取傳感器值、更改顯示頁面和根據傳感器讀數控制LED。

系統方塊圖
系統方塊圖

 

本應用需要以下元件:

  1. Smart Display Modbus 7”
  2. ARDUINO Mega 2560
  3. ARDUINO Mega 2560的RS485 Modbus載板
  4. Arduino 開發環境 v2.0.4
  5. Modbus RS485 連接器
  6. 實體按鈕
  7. 旋鈕
  8. LED
  9. GUI-Builder v0.4.2 或更高的版本

這個示範分為三個部分:

  1. 在GUI Builder中設計專案
  2. 建立和上傳專案
  3. 編譯Arduino主機
 

以GUI builder設計專案

首先,建立一個新專案,輸入專案名稱,然後選擇裝置類別,此應用選擇7吋的裝置。通訊協議選擇Modbus,顯示方向為橫向。接著在UI範本中選擇空白模板,最後點選Create按鈕,如圖所示。

以GUI builder設計專案 - 1

 

完成上述設定後,會得到一個空白的設計模板。

以GUI builder設計專案 - 2

 

根據應用情境,需要新增第二個頁面。因此,點擊page按鈕,然後點擊+號按鈕。

以GUI builder設計專案 - 3

 

可以在Resource選單中更改背景樣式。

以GUI builder設計專案 - 4

 

在Page區域可以選擇背景樣式。

以GUI builder設計專案 - 5

 

現在回到第一個頁面的工作區。根據示範場景,選擇切換按鈕,將其拖放到頁面設計區域。對於時速表和指示燈也是相同的操作。

以GUI builder設計專案 - 6

 

建立並上傳專案

完成上述步驟並建立兩個不同的頁面後,現在就可以開始設定專案了。切換到“Page info”頁面。點選“Device”,選擇“Device Property”。然後選擇COM埠,設定與裝置相同的鮑率,最後,點擊Upload project將此專案上傳。

建立並上傳專案 -1

 

當專案上傳完成後,點擊“OK”:

建立並上傳專案 -2

 

上傳完成後,您將在SmartDisplay上看到開機畫面。

建立並上傳專案 -3

 

啟動畫面後,將會顯示第一頁。

建立並上傳專案 -4

 

編譯Arduino主機

此範例所需要的寄存器地址都在Arduino IDE程式中被定義,如下圖所示:

程式首先定義實體按鈕傳感器、可變電阻傳感器和LED的腳位。然後使用ModbusMaster庫初始化Modbus通訊。程序為控制顯示頁面、指示燈、時速表和切換按鈕設置了Modbus寄存器地址。

編譯Arduino主機 - 1

 

如果您想瞭解主機和SmartDisplay之間如何透過 RS485 進行通訊,請參考 GUI BUILDER中的通訊紀錄。下圖是“切換按鈕”的數據,使用者可以藉此參考如何對SmartDisplay下命令來切換按紐。數據字節的第二個字節是00 06十六進制值。它代表切換按鈕的位址,將此值轉換為十進制值後,它將是6。可以使用它來寫入或插入數據到按鈕中。但是,在這種情況下,切換按鈕被用作讀取或從SmartDisplay中檢索數據的函數。在這裡,我們使用註冊位址“7”來從切換按鈕讀取數據。

編譯Arduino主機- 2

 

現在,問題來了,為什麼我們要使用註冊位址“7”來從切換按鈕接收數據呢?建議您查閱SmartDisplay Modbus的規格書以獲得更詳細的訊息。下圖是規格書的部分截圖,其中顯示了第一個對象(物件)切換按鈕使用的位址。

編譯Arduino主機 - 3

 

下圖顯示了“時速表”的訊號數據。該數據告訴我們如何訪問時速表的位址。數據字節的第二個字節是00 6A十六進制值。它代表時速表的位址,將此值轉換為十進制值後,它將是106。可以使用它來將數據寫入或插入到時速表物件中。

編譯Arduino主機 - 4

 

下圖顯示了“指示燈”的程式數據。此數據告訴我們如何訪問指示燈的位址。數據字節的第二個字節是00 CE十六進制值。它代表指示燈的地址,將此值轉換為十進制值後,它將是206。可以使用它來將數據寫入或插入到指示燈物件中。

編譯Arduino主機 - 5

 

ADC_REF:常量設置為5V,表示ADC(模數轉換器)的參考電壓,用於調整實體按鈕的靈敏度。GROVE_VCC:常量設置為5,表示電路中使用的Grove接口的VCC電壓。FULL_ANGLE:常量設置為300,表示電路中使用的旋轉角度的全值。該注釋表明,該值以度為單位進行測量。

編譯Arduino主機 - 6

 

在這裡,設置了許多必要的變量,聲明了數據類型並初始化為零。

編譯Arduino主機 - 7

 

定義所有腳位模式和外部組件(如實體按鈕和LED)的設置。同時在串行通信中設置波特率,如下圖所示:

編譯Arduino主機 - 8

 

下圖顯示了“ChangePageFunction”的定義。使用“writeSingleRegister”函數寫入數據。

編譯Arduino主機 - 9

 

下圖顯示了當Arduino主機讀取變量電阻(旋轉角度)傳感器的值變化時,它會通過Modbus將值發送到SmartDisplay來更改時速表的值。當值小於120時,腳位13上的LED處於關閉狀態,指示燈為綠色。當值等於或大於120時,LED亮起,指示燈顏色變為紅色。

編譯Arduino主機 - 10

 

下圖顯示了當Arduino主機讀取實體按鈕傳感器的值變化時,它會透過Modbus將值發送到SmartDisplay來更改頁面。

編譯Arduino主機 - 11

 

下圖顯示了Arduino主機透過Modbus從SmartDisplay接收切換按鈕的值變化,以打開腳位12上的LED。

編譯Arduino主機 - 12

 

這是非常重要的部分,我們在這裡使用“writeSingleRegister”函數來寫入或插入數據,以與SmartDisplay進行通訊,並使用“readHoldingRegisters”函數從SmartDisplay讀取或接收數據。在這裡特別需要注意延遲函數,以與像時速表這樣的活動小物件進行通訊。在Modbus中,一旦我們發送數據並得到確認,就可以再次發送數據。因此,在使用Modbus協議進行數據傳輸和接收時,使用延遲函數變得非常必要。

編譯Arduino主機 - 13

 

成功透過Arduino IDE驗證和上傳該程式後,就可以執行演示專案了。當切換按鈕處於關閉狀態時,腳位12上的LED也處於關閉位置。當切換按鈕處於ON模式時,LED立即打開,如下圖所示:

編譯Arduino主機 - 14

 

根據演示範例,時速錶由變量寄存器感測器控制。當表盤值介於0和120之間時,指示燈顯示為綠色,腳位13上的LED則關閉。但是,當表盤值超過120時,指示燈變為紅色,腳位13上的LED亮起,如下圖所示:

編譯Arduino主機 - 15

 

在此專案中,可以利用實體按鈕在不同頁面之間切換。當按下實體按鈕傳感器時,顯示器會切換到第二個頁面,再次按下時,它會切換回第一個頁面,如下圖所示。

編譯Arduino主機 - 16

 

恭喜,在SmartDisplay 7吋上完成了實作範例! 相關程式及更多詳情可參考 GitHub (https://bit.ly/3oT0o5M)。

有關此專案中使用的Modbus RS485 Shield請參考此連結 (https://media.digikey.com/pdf/Data%20Sheets/DFRobot%20PDFs/DFR0259_Web.pdf) 。 以下是實際的硬體設置圖:

編譯Arduino主機 - 17

 

結語

本文的目的是展示如何使用Arduino開發板和Modbus協議來控制傳感器和指示燈,讓使用者瞭解如何通過使用RS485來設計自己的主機控制器,且學習如何透過主機端接收和發送命令,對SmartDisplay進行全面的控制。

回分類頁
go top
close