愛招飛幫助手冊 愛招飛幫助手冊
  • FastERP-1
  • Smart
  • PinToo
  • FastWeb
  • FastERP-2 企業管理系統 (opens new window)
  • 印染業ERP (opens new window)
  • 工廠終端機 (opens new window)
  • TARS
  • MARS
  • TaskRunner
  • Flying
  • FastDesk
  • HiDesk
  • HiNAT
  • FastBPM
  • 設備故障診斷 (opens new window)
  • 設備最佳運轉效益 (opens new window)
  • 企業智能助手SmeGPT (opens new window)
  • 燈號管理 (opens new window)
  • 戰情室 (opens new window)
  • 能源管理 (opens new window)
  • 人車定位 (opens new window)
  • 戰情指揮系統 (opens new window)
  • FastERP-1
  • FastWeb
  • Smart
  • PinToo
  • Flying
  • TARS
  • 通用功能

    • Report
    • Script
    • Echarts
    • Chart
    • DB Install
  • FastERP-1
  • Smart
  • PinToo
  • FastWeb
  • FastERP-2 企業管理系統 (opens new window)
  • 印染業ERP (opens new window)
  • 工廠終端機 (opens new window)
  • TARS
  • MARS
  • TaskRunner
  • Flying
  • FastDesk
  • HiDesk
  • HiNAT
  • FastBPM
  • 設備故障診斷 (opens new window)
  • 設備最佳運轉效益 (opens new window)
  • 企業智能助手SmeGPT (opens new window)
  • 燈號管理 (opens new window)
  • 戰情室 (opens new window)
  • 能源管理 (opens new window)
  • 人車定位 (opens new window)
  • 戰情指揮系統 (opens new window)
  • FastERP-1
  • FastWeb
  • Smart
  • PinToo
  • Flying
  • TARS
  • 通用功能

    • Report
    • Script
    • Echarts
    • Chart
    • DB Install
  • Smart幫助主頁
  • 學習手冊

  • 開發手冊

    • 通訊協議

      • 通訊埠

      • 藍芽Bluetooth

      • 無線網WIFI

      • ModbusRTU

        • ModbusRTU控制元件使用
        • ModbusRTU控制LED燈
          • 1. 說明
          • 2. 零件連線圖
          • 3. 使用零件
          • 4. Arduino流程圖
          • 5. Arduino程式
          • 6. 設計明細
          • 7. 程式設計
            • 7.1. 程式初始設定
            • 7.2. 事件設定
          • 8. 運行結果
        • ModbusRTU讀取溫濕度
        • RS485計數器
      • ModbusTCP

      • OPC

      • MQTT

      • RestAPI

      • HTTP

    • 互動輸出

    • 媒體存取

    • 人工智慧

    • 實體運用

目录

ModbusRTU控制LED燈

# Smart ModbusRTU控制LED燈

# 1. 說明

  範例採用ModbusRTU通訊協議,控制駁接在Arduino上的LED燈。ModbusRTU傳輸方式為1個主機對應多個從機,此時使用從機的從機號來做識別,如果主機傳輸的從機號對應到該從機的號碼,如果格式正確該從機會作迴應。因此在Modbus傳輸中,每個從機都是被動的,在運行過程中會不斷監聽是否有收到請求。範例中的Arduino ModbusRTU設定為從機,等待主機發出指令進行各種控制活動。每個從機都有固定的保持暫存器的地址,需參照規範來進行存取。範例中也設定從機號與控制參數的地址。

  範例中使用TTL轉RS-485模組(簡稱為TTL485),作為數據傳輸轉換的裝置,用於PC設備與Modbus RTU設備間的數據傳輸,單條485匯流排可以支援32個ModbusRTU設備。範例中採用TTL485擴充套件Arduino開發板在ModbusRTU的功能。TTL485與Arduino開發板的連線方式如下:

TTL485針腳 Arduino針腳 功能
RO RX 接受資訊
RE D2 收發控制
DE D2 收發控制
DI TX 發送資訊
VCC 5V 供電
GND GND 接地線

  通過範例學習,可以掌握 ModbusRTUWriteChannel控制元件的基本設定,並結合Arduino開發板通過ModbusRTU進行LED燈的控制功能。

# 2. 零件連線圖

# 3. 使用零件

序 零件名稱 數量
1 Arduino UNO R3 開發板 1
2 USB數據線 1
3 TTL轉RS-485模組 1
4 USB轉485接頭 1
5 麵包板 1
6 杜邦線 若干
7 LED燈 1
8 220歐姆電阻 1

# 4. Arduino流程圖

# 5. Arduino程式

  使用Arduino IDE 編譯並上傳以下Arduino程式。

// 使用鏈接庫 https://drive.google.com/file/d/0Bx5wWRfN_z7oMDlZMDhWbXM2VFU/view
// 使用擴充模組 Arduino Sensor Shield 感測器擴充套件板 V5 XBee RS485 
#include <modbus.h>
#include <modbusDevice.h>
#include <modbusRegBank.h>
#include <modbusSlave.h>
#define LED_PIN 8                                              // 定義LED PIN為8
modbusDevice regBank;                                          // 宣告 Modbus
modbusSlave slave;

#define RS485TxEnablePin 2
#define RS485Baud 9600
#define RS485Format SERIAL_8N1

void setup() {
   pinMode(LED_PIN, OUTPUT);                                 // 設定PIN 8為輸出模式
   regBank.setId(3);                                         // 設定 Modus 從機號=3
   regBank.add(40001);                                       // 設定會使用到之 Holding Register 之地址
   regBank.add(40002);  
   slave._device = &regBank;                                 // 啟動 modbus RTU
   slave.setBaud(&Serial,RS485Baud,RS485Format,RS485TxEnablePin);    
}

void loop() {
   // PIN 8輸出為HIGH or 1 ,LED點亮 輸出為LOW or 0,LED熄滅
   digitalWrite(LED_PIN, regBank.get(40001));  
   delay(500);                                                //延時500ms
   slave.run();    
   delay(500);
 }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

# 6. 設計明細

  開啟Smart智慧控制平臺,分別加入下插圖之控制元件。或者通過點選功能表欄[檔案]-[打開專案]選擇範例專案檔案來打開該範例。

ModbusRTU控制LED燈 UI佈局

  ①:TLabel元件,控制元件名稱為Label1。

  ②:TImage元件,控制元件名稱為Image1。

  ③:TImage元件,控制元件名稱為Image4。

  ④:TModbusRTUChannel元件,控制元件名稱為ModbusRTUReadChannel1。

  ⑤:TModbusConnection元件,控制元件名稱為ModbusConnection1。

  ⑥:TImage元件,控制元件名稱為Image3。

  ⑦:TImage元件,控制元件名稱為Image2。

  ⑧:TModbusRTUWriteChannel元件,控制元件名稱為ModbusRTUWriteChannel1。

  • Main窗體屬性設定

    • ClientHeight:窗體客戶區高度=624。
    • ClientWidth:窗體客戶區寬度=918。
  • ①Label1屬性設定

    • AutoSize:是否根據字型調整控制元件大小,設定為True。
    • Caption:標籤內容,設定為ModbusRTU之LED智能照明。
  • ②Image1屬性設定

    • Align:設定控制元件佔滿=alClient。
    • Stretch:設定圖片是否按照控制元件大小拉伸=Yes。
    • Picture:設定圖片(背景)。點選Picture屬性右側的[...]按鈕,打開檔案上傳界面,點選[Load...]從檔案瀏覽器中選擇對應的圖片檔案上傳,返回該界面下,待顯示出圖片後點擊[OK]載入圖片。
  • ③Image4屬性設定

    • Height:設定控制元件高度=109。
    • Width:設定控制元件寬度=109。
    • Picture:設定圖片(背景)。點選Picture屬性右側的[...]按鈕,打開檔案上傳界面,點選[Load...]從檔案瀏覽器中選擇對應的圖片檔案上傳,返回該界面下,待顯示出圖片後點擊[OK]載入圖片。
  • ④ModbusRTUReadChannel1屬性設定

    • ModbusList:設定連線列表。點選ModbusList屬性右側的[...]按鈕,打開列表編輯界面。點選左上角的新增按鈕新增一項ModbusList專案,選擇對應的項進入到專案的屬性界面。
    • ModbusList[0]屬性設定
      • ConnectionMode:設定連線的模式,設定為cmClient。
      • DataControl:設定繫結控制元件,設定為Image3。
      • DataFields:設定繫結的控制元件屬性,設定為Visible。
      • DataType:設定Modbus讀取/寫入的數據型別,設定為dtBinary。
      • FunctionCode設定使用ModbusRTU的寫入指令,設定為fc03。
      • ModbusConnection:Modbus連線的元件對象,設定為ModbusConnection1。
      • RegCount:Modbus設備讀取/寫入暫存器的位數,設定為1。
      • StartReg:Modbus設備讀取/寫入暫存器的起始位置,設定為0。對應的Modbus保持暫存器的地址位為0。
      • ServerAddress:Modbus設備服務的地址(從機號),定義為3。
  • ⑤ModbusConnection屬性設定

    • BaudRate:通訊埠通訊速率設定,此處設定為br9600。
    • DataBits:設定通訊埠單次傳輸的數據位數,此處設定為db8。
    • Parity:設定通訊埠通訊的校驗方式,此處設定為psNone。
    • Port:設定通訊埠的通訊埠,此處根據實際連線的埠設定。
    • StopBits:設定通訊埠通訊的停止位,此處設定為sb1。
  • ⑥Image3屬性設定

    • Height:設定控制元件高度=367。
    • Width:設定控制元件寬度=909。
    • Picture:設定圖片(燈亮)。點選Picture屬性右側的[...]按鈕,打開檔案上傳界面,點選[Load...]從檔案瀏覽器中選擇對應的圖片檔案上傳,返回該界面下,待顯示出圖片後點擊[OK]載入圖片。
  • ⑦Image2屬性設定

    • Height:設定控制元件高度=366。
    • Width:設定控制元件寬度=909。
    • Picture:設定圖片(燈滅)。點選Picture屬性右側的[...]按鈕,打開檔案上傳界面,點選[Load...]從檔案瀏覽器中選擇對應的圖片檔案上傳,返回該界面下,待顯示出圖片後點擊[OK]載入圖片。
  • ⑧ModbusRTUWriteChannel1屬性設定

    • ModbusList:設定連線列表。   點選ModbusList屬性右側的[...]按鈕,打開列表編輯界面。點選左上角的新增按鈕新增一項ModbusList專案,選擇對應的項進入到專案的屬性界面。
    • ModbusList[0]屬性設定
      • ConnectionMode:設定連線的模式,設定為cmClient。
      • DataType:設定Modbus讀取/寫入的數據型別,設定為dtBinary。
      • FunctionCode設定使用ModbusRTU的寫入指令,此處設定為fc06。
      • ModbusConnection:Modbus連線的元件對象,此處設定為ModbusConnection1。
      • RegCount:Modbus設備讀取/寫入暫存器的位數,此處設定為1。
      • StartReg:Modbus設備讀取/寫入暫存器的起始位置,此處設定為0。對應的Modbus保持暫存器的地址位為0。
      • ServerAddress:Modbus設備服務的地址,此處設定為3。

# 7. 程式設計

# 7.1. 程式初始設定

  在程式初始運行時,設定連線為活動狀態,並讀取LED燈的狀態。

constructor TMyHandler.Create(AOwner: TComponent);
begin
  FThis :=TBaseForm(AOwner);
  //讀取目前燈狀態
  FThis.ModbusConnection1.Active := True;
  FThis.ModbusRTUWriteChannel1.ModbusList[0].DataValue := 1;
  FThis.ModbusRTUWriteChannel1.ModbusList[0].execute;
  FThis.Image3.Visible := True;
end;
1
2
3
4
5
6
7
8
9

# 7.2. 事件設定

  • ③Image4-OnClick事件

  點選Image4時,根據程式中的LED燈顯示狀態,開啟或者關閉LED燈。

procedure TMyHandler.Image4Click;
begin
  //ShowMessage(FloatToStr(FThis.ModbusRTUReadChannel1.ModbusList[0].DataValue));
   if FThis.Image3.Visible then
   begin
     //關燈
     FThis.ModbusRTUWriteChannel1.ModbusList[0].DataValue := 0;
     FThis.ModbusRTUWriteChannel1.ModbusList[0].execute;
     FThis.Image3.Visible := False;
   end
   else
   begin
     //開燈
     FThis.ModbusRTUWriteChannel1.ModbusList[0].DataValue := 1;
     FThis.ModbusRTUWriteChannel1.ModbusList[0].execute;
     FThis.Image3.Visible := True;   
   end;
end;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 8. 運行結果

  通過工具欄儲存,將程式儲存為 sdb 專案檔案。

儲存專案

  使用滑鼠點選工具欄運行(Run),測試運行結果。當點選右側開關按鈕影象時,如果底下照明燈顯示為熄滅的狀態,則會更新狀態為點亮,同時連線到Arduino的LED燈也會點亮;如果照明燈顯示為點亮的狀態,則會更新狀態為熄滅,同時連線到Arduino的LED燈會熄滅。

ModbusRTU控制LED 運行結果
ModbusRTU控制元件使用
ModbusRTU讀取溫濕度

← ModbusRTU控制元件使用 ModbusRTU讀取溫濕度→

Copyright © 2021-2025 愛招飛IsoFace | ALL Rights Reserved
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式