網頁最後修改時間:2020/06/18
這不是廣告!這不是廣告!這不是廣告!
![]() |
「台達電斥9.65億元 收購加拿大圖控軟體公司Trihedral」這才引起了我的注意。在這之前,我並不認識它!
不過重點是,能讓台達電花錢去收購的公司,值得花時間了解一下!
「台達(2308)30日宣布,台達100%持有之子公司Delta Electronics與加拿大的SCADA圖控與工業物聯網軟體公司Trihedral Engineering Limited簽訂合約,以總金額約加幣4,500萬元(約新台幣9.65億元)收購Trihedral 100%股權。」引用自工商時報 即時新聞台達電本身也有 SCADA 軟體,既然再去收購同類型的軟體公司,有可能會是強強聯手或是什麼其他原因,也不得而知。但可以說的是,後續可期!
「台達DIAView SCADA (Supervisory Control And Data Acquisition) 工業組態軟體是一套具有即時系統監控、資料擷取和分析功能的自動化管理系統,可協助管理者採集整廠的資料及規劃產線可視化的管理介面,實現遠端監控、系統管理和全廠資訊化管理,提高工廠整體的利用率及產能,可廣泛應用於機械、冶金、水處理、HVAC、包裝、供暖、環保監測、紡織、能源、交通、以及智慧建築等各種領域」引用自 www.deltaww.com DIAView 工業圖控系統網頁到底 VTScada 有什麼魔力?又或是有什麼特別之處?能讓台達電願意花錢收購它;沒下載來玩玩、親身體驗一下,又怎麼會知道和理解呢?
既然要來玩玩 VTScada,那麼就要先來準備能讓它用的東西。
Proteus 準備用的是 Arduino Nano 485 工控開發板。裡面會撰寫符合 Modbus-RTU 通訊協議的程式,監視與控制兩個數位輸出、兩個數位輸入、一個 LED 亮度和 SHT31 溫溼度值。最後以 LED 亮度控制做為例子,說明 VTScada I/O Tags 建立的流程和圖形化介面開發的步驟。
看到這裡就別遲疑了,要學就繼續看下去囉!
*********************************************************************************
*********************************************************************************
我第一個接觸的 SCADA 軟體是 InTouch,雖然之後有接觸過幾個 Open Source 的,但是能讓我想拿到部落格上做展示的,VTScada 應該是第一個;原因是台達電把它收購了、有免費版本(VTScadaLIGHT)可用、上手很容易,操作很直覺!
倒底有多容易上手?大概只要之前有用過 SCADA 軟體或是懂 Modbus 通訊協議,跟著下面5分多鐘快速教學影片做一次,應該就能依樣畫葫蘆去創建不同類型的 I/O Tag 和建立簡單的圖形化介面。
若覺得影片說的不清楚也沒關係,下面有詳細的手把手教學。
想看更多的教學影片,請自行跳轉到 Youtube 頻道 VTScada By Trihedral。
現在請上 VTScada 官網下載軟體並做安裝(抱歉!沒安裝步驟的圖片)。
![]() |
VTScadaLIGHT 下載網頁 |
【目錄】
【展示範例的組態說明】
基本上,可以把 I/O Tags 看做是以 DI、DO、AI 和 AO 四種為主的類型,並以此四種類型延伸出其他可用的類型選擇,不同的選擇類型影響後續 VTScada 圖形化介面設計時 Widget 的選用。
舉例來說:實際作為數位輸出的接腳,Tag 在設定的時候可選擇 "Digital / I/O and Calculations" 或是 "Digital / Selector Switch"。但選用 Widgets 時,前者只有按鈕(Push Button)可以選擇,後者卻是可以選擇開關(Switch)。這兩者對於控制輸出實質上是有很大的不同的;Push Button 按下時狀態改變、放掉又變回來,Switch 則是每按一次才會切換狀態,所以設計規劃時要特別注意其中的差異之處。
Modbus 通訊所存取的資料會儲存在離散輸入、Coil、輸入暫存器、保存暫存器這四種資料組間,這四種資料分別佔據不同的位址範圍,我們可以將其分別對應到 DI、DO、AI 和 AO 來理解。
對於這四種類型的定義並不侷限於實際接腳,而是:
- DI
有限的輸入狀態;例如,0、1、或無輸入。 - DO
有限的輸出狀態;例如,0、1、或無輸出。 - AI
外部裝置輸入的數值資料;例如,環境的溫溼度資料。 - AO
由圖形化介面發出的數值資料;例如,PWM 的佔空比。
經過上面的解釋之後,展示範例為什麼如下面這樣規劃就不難了解:
- 離散輸入
將接腳 <D2>、<D3> 組態為離散輸入、低態觸發;分別對應到 Modbus 地址 10001 和 10002。 - Coil
將接腳 <D7>、<D8> 組態為離散輸出,分別對應到 Modbus 地址 1 和 2。 - 輸入暫存器
將取得的溫度、濕度數值儲存到 Modbus 地址 30001 和 30002。 - 保存暫存器
將接腳 <D5> 組態為保存暫存器,對應到 Modbus 地址 40001。
不管在 VTScada 或是在 Arduino IDE 撰寫程式上,上面就是預先需要知道的部分。
在 VTScada 的 Tag Browser 完成上面所有的設定後,就會得到類似下面的列表,詳細步驟留待下面說明。
![]() |
根據需求所建立的 Tag 列表 |
【硬體接線】
除了 SHT31 溫溼度感測模組需要接線到工控開發板 <A4>(SDA)、<A5>(SCL)外,其他的都可以不需要額外接線。
![]() |
實際接線照片 |
測試的方法如下:
- 像是離散輸入就用短路線接至 <GND> 就會觸發訊號;
- Coil 就是數位輸出訊號。在圖形化介面做開關切換後,就可用電表量測 <D5> 與 <GND> 之間的電壓變化,或是直接接到繼電器模組看輸出動作也可以;
- 保存暫存器由於是用 PWM 接腳作為輸出,因此可以在圖形化介面上設定數值,並且使用電表、或是接電阻和 LED 觀測其輸出電壓大小或 LED 亮度的變化;
- 輸入暫存器儲存溫溼度感測器模組的數值轉換,此兩數值無法量測,但只要通訊正常就能看到數值輸出。
![]() |
測試的圖形化介面 |
【VTScadaLIGHT I/O Tags 建立範例】
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
有購買 Arduino Nano 485 工控開發板套件的使用者,VTScada 的應用程式(Arduino Nano 485 Demo 01.zip)已放置於雲端硬碟,請自行下載!
下載後,直接解壓縮到 VTScada 安裝目錄下後,重新開啟 VTScada 就會看到該應用程式出現在列表中。
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
本文所使用的 VTScada 版本是免費的 VTScadaLIGHT 版本(主要的功能與限制請看該網頁的說明)提供 50 I/O Tags 可用,適用於小型工業控制與個人應用,也適合於我們接下來的展示範例。
I/O Tags 設定前必須建立好所使用的通訊協議作為樹狀結構的最上層,才能開始其下層 Tags 的建立。
下面以一個 AO Tag 作為範例,說明這整個的一個流程,後續加入其他的 Tags 就大同小異,不再另行贅述!
最後,以這個 AO Tag 說明如何加入 Widget 到圖形化介面,做為此節的結束。
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 建立應用程式(Add New Application):
按下 Windows 作業系統開始選單,點選 VTScada 開啟軟體畫面。
點擊軟體畫面左上角 ☰ 圖示,在出現的下拉選單中點選 "Add New Application"
![]() |
VTScada Application Manager 畫面 |
![]() |
Add New Application - 01 |
![]() |
Add New Application - 02 |
![]() |
Add New Application - 03 |
點選它並按下它右邊的⏵按鈕,就會開始載入應用程式。
完成載入後就會出現右下圖的頁面選單。
![]() |
Add New Application - 04 |
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 建立 I/O Tags:
點擊 Page Menu 左上角的 "Tag Browser" 標籤按鈕,開啟 Tag Browser 視窗。
![]() |
建立 I/O Tags - 00 |
![]() |
建立 I/O Tags - 01 |
![]() |
建立 I/O Tags - 02 |
選擇新建子節點的類型為 "Ports/Serial Port"。
![]() |
建立 I/O Tags - 03 |
在 ID 頁面中,設定此節點的名稱 Name 為 Modbus RTU。
![]() |
建立 I/O Tags - 04 |
串列埠號碼必須實際根據各位看倌插上 USB 轉 RS485 在電腦後的號碼而定。在我的電腦是 4,所以 Port Number 被設定為 4。
完成設定後,點擊 "OK" 離開屬性設定畫面 。
![]() |
建立 I/O Tags - 05 |
![]() |
建立 I/O Tags - 06 |
![]() |
建立 I/O Tags - 07 |
![]() |
建立 I/O Tags - 08 |
首先,在 ID 頁面中,設定 Modbus RTU 子節點的名稱 Name 為 Arduino Nano 485,Description 內容則可隨便填入。
![]() |
建立 I/O Tags - 09 |
![]() |
建立 I/O Tags - 10 |
按下 OK 就完成了建立 Modbus-RTU 節點的所有動作,接下來就能開始設定通訊裝置端上面的 I/O Tags 了。
![]() |
建立 I/O Tags - 11 |
將 <D5> 接腳作為 PWM 輸出,除了要監視它的輸出數值也要能控制其輸出,因此屬於 Modbus 保存暫存器的範疇,地址設為 40001。
** Modbus 的暫存器位址起始末四位都是由 0000 至 9999,但 VTScada 則是由 0001 至 1000,設定時要注意 Arduino 程式碼裡的地址設定與 VTScada 地址設定有差一的不同。
** <D5> 在 VTScada 上的地址可設為 40001 ~ 41000,不過要跟 Ardino 函式庫一致才行。
回到 Tab Browser 點選 \Modbus RTU 節點,滑鼠右擊剛剛建立的節點 Arduino Nano 485,下拉選單中點選 "New Child"。
![]() |
建立 I/O Tags - 12 |
![]() |
建立 I/O Tags - 13 |
![]() |
建立 I/O Tags - 14 |
首先,在 ID 頁面中,設定 Modbus RTU\Arduino Nano 485 子節點的名稱 Name 為 LED Brightness,Description 內容則可隨便填入,Mode 選擇 Analog。
![]() |
建立 I/O Tags - 15 |
![]() |
建立 I/O Tags - 16 |
之後在 VTScada 圖形化介面操作時,會將 0 ~ 100 設定轉換為 0 ~ 255 指定給 <D5>。
按下 OK 結束 I/O Tag 組態設定。
![]() |
建立 I/O Tags - 17 |
![]() |
建立 I/O Tags - 18 |
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 建立圖形開發介面:
點選上一小節剛剛建立的 I/O Tag,按下 Draw 進入到該 Tag 的 Widget 指定的畫面中。
出現的視窗裡,只要是這個 Tag 可以選擇的 Widget 就會顯示出來,點選後就會出現到圖形化開發介面(Idea Studio)中,而且會自動綁定 Tag,移動到適當位置後再點擊一下滑鼠就會固定位置。
下面選擇的是 "Analog Controls\Gray Knot"。
另一種選擇 Widget 的方法:就是在圖形化開發介面中,直接在它左方視窗中做選擇,然後再自行設定相關的參數,步驟如下。
開啟 Idea Studio,在左邊的視窗中點選 "Analog Controls"。
然後選擇 "Gray Knot" 放置到右邊的視窗中。
回到 Widget 最上層目錄,接著選擇進入到 "Text" 中。
選擇 "LCD 7 Segment" 放置到右邊的視窗中。
點選 Idea Studio 選單的 "Home/Insert/Text" 插入一段文字,拖放文字在 "Gray Knot" 的下方,輸入 LED 亮度控制 作為其內容。
由於 PWM 輸出的範圍在 0~100,所以原本四位數的顯示要改為三位數。
滑鼠右擊 "LCD 7 Segment",下拉選單中點選 "Properties" 開啟屬性設定視窗。
先修改 Digits Before Decimal 為 3 ,再按下視窗右上角的小圖案。
還記得我們還未為 "LCD 7 Segment" 和 "Gray Knot" 這兩個 Widget 設定對應的 I/O Tag 嗎?
請為兩個 Widget 選擇對應的 IO Tag 為 LED Brightness。
完成 I/O Tag 的選定之後,回到 Idea Studio 按下左上方的 Show Operator View 按鈕開啟 Overview 視窗畫面。
Overview 畫面中所顯示的就是剛設定好的 Widget。
以上就是建立通訊以及如何設定 I/O Tag 的步驟與方法。
若有完整版的程式碼 VTScada_demo01.ino,其他 I/O Tag 類型的設定方式也都大同小異,有需要的時候請自行依樣畫葫蘆或是上官網找資料看看,下面就不再贅述!
完成其他的 I/O Tag 設定後,就能得到類似下面的畫面資料。
【Arduino Nano 485 工控開發板 Modbus-RTU 範例程式】
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*![]() |
新增 Widget - 01 |
下面選擇的是 "Analog Controls\Gray Knot"。
![]() |
新增 Widget - 02 |
![]() |
新增 Widget - 03 |
![]() |
新增 Widget - 04 |
開啟 Idea Studio,在左邊的視窗中點選 "Analog Controls"。
![]() |
新增 Widget - 05 |
![]() |
新增 Widget - 06 |
![]() |
新增 Widget - 07 |
![]() |
新增 Widget - 08 |
![]() |
新增 Widget - 09 |
![]() |
新增 Widget - 10 |
滑鼠右擊 "LCD 7 Segment",下拉選單中點選 "Properties" 開啟屬性設定視窗。
![]() |
新增 Widget - 11 |
![]() |
新增 Widget - 12 |
請為兩個 Widget 選擇對應的 IO Tag 為 LED Brightness。
![]() |
新增 Widget - 13 |
![]() |
新增 Widget - 14 |
![]() |
新增 Widget - 15 |
![]() |
新增 Widget - 16 |
![]() |
新增 Widget - 17 |
![]() |
新增 Widget - 18 |
若有完整版的程式碼 VTScada_demo01.ino,其他 I/O Tag 類型的設定方式也都大同小異,有需要的時候請自行依樣畫葫蘆或是上官網找資料看看,下面就不再贅述!
完成其他的 I/O Tag 設定後,就能得到類似下面的畫面資料。
![]() |
VTScada 展示範例 |
【Arduino Nano 485 工控開發板 Modbus-RTU 範例程式】
有購買 Arduino Nano 485 工控發發板套件的使用者,完整版的範例程式 (VTSCADA_demo01.ino)及所使用的函式庫(請用雲端所提供的)已放置於雲端硬碟,請自行下載使用!
其餘的看倌,網頁裡只提供保存暫存器規劃程式碼,其餘的不提供!
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-// /--/**/**--**/--///--//**----**//--**//**----***//*-**//*
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* Modbus-RTU 保存暫存器規劃與實做程式碼:
程式碼的說明都在程式碼裡面,所以下面就不再贅述了!
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* VTScada_Nano485_only_AO.ino | |
* VTSCADA_demo01 的精簡版,只留下 AO 程式碼的部分。 | |
* | |
* {Compile} | |
* + Arduino IDE V1.8.12, | |
* | |
* {Modbus-RTU Address Definition} | |
* + AO | |
* To control brightness of a LED. | |
* <D5>: 40001 -> 00 | |
* | |
* {Result} | |
* + Work !!! | |
* | |
*/ | |
#include <ModbusSerial.h> | |
/*-----( Declare Constants and Pin Numbers )-----*/ | |
#define SW_SERIAL_RX 13 //Serial Receive pin | |
#define SW_SERIAL_TX 12 //Serial Transmit pin | |
/*-----( Declare objects )-----*/ | |
SoftwareSerial SW_RS485( SW_SERIAL_RX, SW_SERIAL_TX ); // RX, TX | |
// ModbusSerial object | |
ModbusSerial MODBUS_RTU_SLAVE; // Modbus RTU Slave | |
// Slave node ID | |
#define NODE_ID 1 | |
// Baud rate | |
#define RS485_BAUDRATE 9600 | |
//** Modbus Registers Offsets (0-9999) | |
// | |
// Analog Output, D5, Register Number: 40000 + (0001 - 9999) | |
const uint8_t HREG_AO_00 = 5; | |
const uint8_t HREG_MB_00 = 0; | |
void setup() { | |
Serial.begin( 115200 ); | |
// Config Modbus Serial | |
MODBUS_RTU_SLAVE.config( &SW_RS485, (long)RS485_BAUDRATE ); | |
// Set the Slave ID (1-247) | |
MODBUS_RTU_SLAVE.setSlaveId( NODE_ID ); | |
//*AO* Adds holding register to register list - Use addHreg() for analog outputs or to store values in device | |
pinMode( HREG_AO_00, OUTPUT ); | |
MODBUS_RTU_SLAVE.addHreg( HREG_MB_00 ); // default value is 0 | |
Serial.println( "Modbus Slave Ready." ); | |
} | |
void loop() { | |
// Call once inside loop() - all magic here | |
MODBUS_RTU_SLAVE.task(); | |
//*AO* Attach analog outputs to HREG registers | |
analogWrite( HREG_AO_00, MODBUS_RTU_SLAVE.Hreg(HREG_MB_00) ); | |
} |
【結論】
VTScada 免費版本(VTScadaLIGHT)提供了 50 組的 I/O Tags ,對於一般個人應用很是足夠,只要懂點 Modbus 的基本概念,加上設定與配置上也很直覺,很容易就能建構出簡單的應用架構;當然,深入一點的主題與應用就要去啃一下它的資料手冊。
Arduino Nano 485 工控開發板特別適用於想將 Arduino 週邊裝置整合到工業控制的場合中,藉由 RS485 通訊並採用 Modbus-RTU 協議,很容易的就能將兩種不同電壓準位的裝置整合在同一個工業設備的佈線和通訊迴路裡。對於熟悉 Arduino 程式與電子週邊應用的工程師,在不改變任何程式撰寫的習慣下,對一個能快速整合應用到工業控制環境下的裝置,它是一個值得放進口袋裡隨時能拿出的不錯選擇。
本文採用的是有線的 Modbus RTU 通訊協議,下一篇將改用 Arduino UNO PLC 開發板,以它板載的 WiFi 模組建構出 Modbus TCP 無線通訊協議,用來監視與控制其 I/O Tags 的狀態。
.
.
Hola
回覆刪除Hola, soy Ulbio Alejandro y soy estudiante de ECUADOR, te saludo y te indico que yo tengo el mismo módulo de Arduino con Modbus RS485 pero lamentablemente no tengo el código para compilarlo, estoy buscando y no encuentro nada, el único blog que lo hace eres tú y de verdad ayudame con las librerias para que funcione, me ayudarías mucho. Mi contacto es: ulbio.alejandro7@gmail.com Espero que si lo leas porque la verdad no se que hacer. Muchas gracias de antemano.
回覆刪除Actually I don’t know any Spanish, so I Google Translate it first.
刪除---------------
Use Google to translate Spanish into English:
"Hi, I'm Ulbio Alejandro and I'm a student from ECUADOR, I greet you and tell you that I have the same Arduino module with Modbus RS485 but unfortunately I don't have the code to compile it, I'm looking and I can't find anything, the only blog that does it is you and really help me with the libraries to make it work, you would help me a lot. My contact is: ulbio.alejandro7@gmail.com I hope you read it because the truth is I don't know what to do. Thank you very much in advance."
--------------
Google 翻譯為中文:
"嗨,我是 Ulbio Alejandro,我是來自 ECUADOR 的學生並,我跟你打招呼告訴你我有相同的 Arduino 模組和 Modbus RS485。但不幸的是我沒有它的程式碼可做編譯。我有在找但找不到任何東西,唯一一個這樣做的就是你的部落格,並且真正幫助我使用函式庫使其工作,你會幫助我很多。 我的聯繫方式是:ulbio.alejandro7@gmail.com 我希望你閱讀它,因為事實是我不知道該怎麼做,事先感謝您。"
Hi Ualejand,
刪除I will mail you.