愛招飛幫助手冊 愛招飛幫助手冊
  • 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
  • PinToo幫助主頁
  • 學習手冊

  • 開發手冊

    • 通訊協議

      • 通訊埠

      • 藍芽Bluetooth

      • 無線網WiFi

      • ModbusRTU

      • ModbusTCP

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

      • RestAPI

      • HTTP

    • 互動輸出

    • 媒體存取

    • 人工智慧

    • 實體運用

目录

ModbusTCP讀取溫濕度

# PinToo之ModbusTCP讀取溫濕度

# 1. 說明

  範例採用Modbus TCP通訊協議,讀取駁接在Arduino上的DHT22溫濕度感測器的數據。Arduino開發板與Ethernet W5100網路擴充套件板的連線方式如下圖所示。

  DHT22 是 DHT 系列的一款應用廣泛的溫濕度感測器。在本範例中,DHT22溫濕度模組的接線方式為正極接入W5100開發板的VCC(5V)引腳,負極接入W5100開發板的(GND)引腳,訊號極(OUT)接入W5100開發板的8號引腳。DHT22的特性如下表所示。

名稱 取值
工作電壓 3V–5.5V
溫度測量範圍 -40℃–80℃
溫度測量精度 0.5℃
濕度測量範圍 0–100% RH
濕度測量精度 2% RH

  通過範例學習,可以掌握fxModbusTCP控制元件的基本設定,並結合Arduino開發板進行DHT22溫濕度感測器的數據採集。

# 2. 零件連線圖

# 3. 使用零件

序 零件名稱 數量
1 Arduino UNO R3 開發板 1
2 Arduino Ethernet W5100 網路擴充套件板 1
3 DHT22溫濕度 模組 1
4 USB數據線 1
5 麵包板 1
6 杜邦線 3

# 4. Arduino流程圖

# 5. Arduino程式

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

// 使用溫濕度感測器之鏈接庫 https://github.com/adafruit/DHT-sensor-library
// 採用 MyArduinoProjects Modbus TCP 鏈接庫 http://myarduinoprojects.com/modbus.html
// 讀取溫濕度 因為Modbus無法傳遞小數字  所以先乘100到客戶端取用時要除100

#include <DHT.h>
#include <SPI.h>
#include <Ethernet.h>
#include "MgsModbus.h"                                     // 引入Modbus TCP 鏈接庫
MgsModbus Mb;

#define dhtPin 8                    //讀取DHT22 Data
#define dhtType DHT22               //選用DHT22 
DHT dht(dhtPin, dhtType); // Initialize DHT sensor

// 設定網路 (網路擴充卡 MAC 可自行修改 +1 避免衝突)
byte mac[] = {0x90, 0xA2, 0xDA, 0x0E, 0x94, 0xB8 };    //設定網路擴充套件卡的MAC地址
IPAddress ip(192, 168, 0, 164);                        //設定設備的IP地址
IPAddress gateway(192, 168, 0, 1);            //設定閘道器
IPAddress subnet(255, 255, 255, 0);            //設定子網掩碼

void setup() {
   Serial.begin(9600);              //設定通訊速率9600
   Ethernet.begin(mac, ip, gateway, subnet);               // 啟動網路
   Serial.println("網路已經開通"); 

   //設定要使用的快取器地址
   //0 1 2 3 4 是 Holding 快取器的順序,其地址分別是10000,10001,10002,10003,10004
   // 新增快取器   mb.MbData(i);   
   Mb.MbData[0] = 0;                                       // 地址 0 存放所測得之溫度  
   Mb.MbData[1] = 0;                                       // 地址 1 存放所測得之濕度           
   dht.begin();//啟動DHT
 }

void loop() {
   float h = dht.readHumidity()*100;                      //讀取濕度 因為modbus 無法傳遞小數字  所以先乘100 到客戶端取用時要除 100
   float t = dht.readTemperature()*100;                   //讀取攝氏溫度
   if (isnan(h) || isnan(t)) {
      Serial.println("無法從DHT感測器讀取!");
      return;
   }
   Mb.MbData[0] = t;                                       // 地址 0 存放所測得之溫度  
   Mb.MbData[1] = h;                                       // 地址 1 存放所測得之濕度  
   delay(500);                                             //延時 0.5 秒
   Mb.MbsRun();                                            //呼叫 Modbus   
}
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

# 6. 設計明細

  開啟PinToo設計器,分別加入下插圖之控制元件。或者點選左上角的[打開模板Lib檔案]選擇模板檔案來打開對應模板。

ModbusTCP讀取溫濕度 UI佈局

  ①:TfxWidgetLCDLabel元件,控制元件名稱為fxWidgetLCDLabel1。

  ②:TfxWidgetLCDLabel元件,控制元件名稱為fxWidgetLCDLabel2。

  ③:TfxModbusTCP元件,控制元件名稱為fxModbusTCP1。

  ④:TfxSwitch元件,控制元件名稱為fxSwitch1。

  • fxRunFrame屬性設定

    • Height:設定頁面高度=800。
    • Width:設定頁面寬度=400。
  • fxTimer1屬性設定

    • Interval:設定計時器觸發的時間間隔,單位為ms,設定為5000。
    • Enabled:設定是否啟用,設定為False。
  • ①fxWidgetLCDLabel1屬性設定

    • Height:設定控制元件高度=95。
    • Width:設定控制元件寬度=285。
    • Color:設定背景顏色=Black。
  • ②fxWidgetLCDLabel2屬性設定

    • Height:設定控制元件高度=95。
    • Width:設定控制元件寬度=285。
    • Color:設定背景顏色=Black。
  • ③fxModbusTCP1屬性設定

    • AutoConnect:是否在程式啟動后啟用ModbusTCP連線,設定為True。
    • Host:設定連線的Modbus設備的IP地址,此處需設定為在Arduino程式中指定的設備IP地址,例如192.168.0.164。

# 7. 程式設計

  點選程式設計界面右下角的按鈕,切換至單元選擇界面,勾選需要使用的單元。該程式需引用uModbusTCP單元。

# 7.1. 程式初始化設定

  在程式啟動時,對顯示屏的樣式進行格式化操作。

Begin
  fxWidgetLCDLabel1.Caption.FillOff.Color := NULL;
  fxWidgetLCDLabel2.Caption.FillOff.Color := NULL;  
  fxWidgetLCDLabel1.Caption.Format := '000.00';
  fxWidgetLCDLabel2.Caption.Format := '000.00';
End.
1
2
3
4
5
6

# 7.2. 事件設定

  • ④fxSwitch1-OnSwitch事件

  點選切換以開啟或者關閉計時器。

Procedure fxSwitch1OnSwitch(Sender: TObject);
//開啟、關閉溫濕度讀取
Begin
  fxTimer1.Enabled := fxSwitch1.IsChecked;
End;
1
2
3
4
5
  • fxTimer1-OnTimer事件

  計時器定時觸發事件,開啟后每隔一定時間讀取數值並顯示。

Procedure fxTimer1OnTimer(Sender: TObject);
//計時器定時讀取溫濕度
var
 FData: String;
 v: TStrings;
 t:string;
 h:string;
Begin
  v := TStringList.Create;
  v.Delimiter := ',';
  try
    fxModbusTCP1.ReadHoldingRegisters(1,2,FData); //讀取溫濕度
    v.CommaText := FData;
    t:=FloatToStr(StrToInt(v.Strings[0])*0.01); //溫度
    h:=FloatToStr(StrToInt(v.Strings[1])*0.01); //濕度
    fxWidgetLCDLabel1.Caption.Value := StrToFloat(t);
    fxWidgetLCDLabel2.Caption.Value := StrToFloat(h); 
  Finally
    v.Free;
  End;
End;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 8. 運行結果

  使用滑鼠在 PinToo 功能表,點選[儲存至資料庫]按鈕,將其儲存至資料庫,點選[除錯運行]確認能夠正常打開。

ModbusTCP讀取溫濕度 運行結果

  通過同步中心,將程式上傳至手機PinToo運行;同步時,請確保手機已經運行PinToo,並且已經登陸。

同步中心

  在手機上運行該範例,點選打開溫濕度感測器的開關,每隔五秒鐘讀取溫濕度數據並顯示在螢幕上。

PinToo 運行畫面
ModbusTCP控制LED燈
控制虛擬機器械手臂

← ModbusTCP控制LED燈 控制虛擬機器械手臂→

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