2020年10月17日 星期六

OpenPLC 初體驗 /00/ - OpenPLC Project 簡介

網頁最後修改時間:2020/10/21

隨著科技進步以及開放原始碼的盛行,很多的東西不再遙不可及,具備一定能力的人,能夠經由這些資訊的提供,重製出相同的東西或是修改變更其內容為其他。

基於此,本篇想要跟各位介紹一款用於工業自動化和研究方面的開放原始碼專案:OpenPLC,它主要著重的重點是在為自動化和研究方面提供低成本的工業解決方案,而這篇網頁則要先來介紹它。

主要的內容有:

/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
網頁裡面的內容大量參考 OpenPLC 官網原文,
如果有不清楚的地方請再自行跳至提供的參考連結自行閱讀。
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*


/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*

OpenPLC 是個不錯的專案項目!

不過正如同其它開源項目一樣,該網站的維護是作者其個人獨自奉獻。

為了讓 OpenPLC 網站和這項目能夠持續改善以及維持下去,
若覺得這專案對您有所助益和幫助,請加入每月支援該網站的行列!

OpenPLC Project 網站公告:OpenPLC Forum is shutting down - what can you do to help avoid that

/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*


*********************************************************************************

*********************************************************************************


【什麼是 OpenPLC?】


參考網址:THE OPENPLC PROJECT


OpenPLC 是一款易於使用的開源可程式邏輯控制器(Programmable Logic Controller, 簡稱 PLC),根據 IEC 61131-3 標準所建立,該標準定義了 PLC 基本的軟體架構和程式語言。

OpenPLC 主要使用於工業和家庭自動化、物聯網和 SCADA 研究,實際運行情況可看一下下面這一個展示影片。

** 影片中所使用的 OpenPLC Runtime 為 v2 版本,I/O 地址與 v3版本設定的會有所不同。



*********************************************************************************
DEF CON 26 - Thiago Alves - Hacking PLCs and Causing Havoc on Critical Infrastructures

下面是 OpenPLC 專案的作者在 DEF CON 26 所做的演講,介紹了 OpenPLC 和說明什麼是 OpenPLC?演講中也實際的對 AB PLC 和 Schneider PLC 進行網路攻擊,讓其癱瘓不受控制,說明兩者所會遇到的安全性問題 ...,和 OpenPLC 的一些東西。有興趣的話可以看看,影片有字幕可以切換。


*********************************************************************************

【OpenPLC 專案包含哪些部分?】


參考網址:GETTING STARTED

根據 OpenPLC 官網上面所提供的資料,可以將 OpenPLC 專案所包含的三個部份以及三個部分的軟體所支援的作業系統彙整成下圖。

下面將根據此圖針對這三個部份來做介紹,文中所談論的將會作為軟體安裝時所考量的注意事項。

OpenPLC Project 所包含的三個部分及其支援的作業系統

OpenPLC 專案分為三個部分:Runtime、Editor 和 HMI Editor。

OpenPLC Runtime 負責執行您的 PLC 程式,所以要裝在您的裝置上。

OpenPLC Editor 顧名思義就是撰寫 PLC 程式的軟體,要裝在電腦中。

預設的 OpenPLC HMI Editor 是採用 ScadaBR。它是一款網頁式的 SCADA 軟體,可用來建立反應執行程序狀態的人機介面,與 OpenPLC 之間的通訊是採用 Modbus/TCP 協議。

這三者的主角是 OpenPLC Runtime。首先必須要先選定作為 Runtime 的裝置為何?假設選定的是樹莓派,那麼只要直接在樹莓派安裝 Runtime 運行環境即可,不但可使用本體既有的 GPIO,而且也能將外部裝置作為其 GPIO 的延伸;但若選擇的是 NodeMCU (板載 ESP-12E 模組)、Arduino 或其他 Modbus 相容裝置,那麼不但要有電腦去安裝 Runtime 運行環境,裝置還必須支援 Modbus RTU Master / Modbus TCP Server 的通訊協議才行(大多這些裝置都必須另外撰寫韌體程式在裡面),所以 Runtime 運行環境就可視為是一個作為與外部裝置通訊的中介軟體,而這個中介是必須視所使用的裝置來做相對應的設定才能運行的。

OpenPLC Editor 能根據 Runtime 運行環境裡所設定的通訊裝置,使用 IEC 61131-3 標準裡所支援的 5 種程式語言取得這些裝置的 I/O 地址裡的各項狀態和數據,撰寫它們之間的各項關係式和邏輯運算。

只要是 SCADA 軟體都能作為 OpenPLC 專案中的 HMI Builder ,並不侷限於使用 ScadaBR。HMI Builder 主要是用來建立人機介面,可單獨監控裝置或是經由 OpenPLC Runtime 監控與其連接的裝置。

三者的安裝不複雜,但是有一個重點必須、一定要記得,那就是:不管 Runtime 和 SCADA 軟體安裝在電腦或是虛擬機中,兩個軟體對外所使用的 IP 地址絕不可以相同,否則就無法同時連上同一個 Modbus TCP 裝置!


/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* OpenPLC Editor:


參考網址:OPENPLC EDITOR


如下圖所示,OpenPLC Editor 可安裝在 Windows 和 Linux 類作業系統中。當先安裝 OpenPLC Runtime 在 Windows 時,會一併安裝 OpenPLC Editor,所以不需要另外再作安裝;但在 Linux 類作業系統下,這兩個軟體就必須個別安裝。

OpenPLC Editor 所支援的作業系統

OpenPLC Editor 是一個用來為 OpePLC Runtime 撰寫 PLC 程式的軟體,根據 IEC 61131-3 標準支援 5 種程式語言,這其中又可分為圖形化程式和文字型程式語言兩種撰寫方法:

OpenPLC Editor 的安裝支援 Windows (已測試過 Windows 10 ) 和 Linux (已測試過 Ubuntu 20.04.1 (64-bit) 和 Raspberry Pi OS, released on 2020-08-20 (32-bit) ) 兩種作業系統,您可以自行根據本節所提供的參考網址裡的說明自行安裝,也可以觀看後續部落格所提供 OpenPLC Editor 在樹莓派(Raspbian, Release 2020-08-20 (32-bit))作業系統的安裝說明。

不過在這裡建議,OpenPLC Editor 在 Wndows 10 安裝最容易,點一點畫面就能安裝好;Ubuntu 20.04.1 則要手動安裝,照著官網上面的指令輸入就可以完成安裝;但對於 Raspberry Pi OS (released on 2020-08-20) 來說,除了官網上的指令外,還需要額外安裝函式庫才行。

/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* HMI Builder:


參考網址:INSTALLING SCADABR


對於 OpenPLC 專案來說,預設的 HMI Builder 是採用 ScadaBR,但是它只能被安裝在 Linux 類的作業系統中,所以為了再一次說明此 HMI Builder 並不只是只能使用 ScadaBR,測試了之前之前部落格曾經介紹過的 VTScada 與 OpenPLC 的配合情況(結果當然是沒問題的)。兩者之間的不同之處且容易產生疑惑的地方,應該是在 I/O 點地址設定上的問題居多。

若對於 VTScada 有興趣的話,可點擊下面的部落格網頁:

如下圖所示,之後對於 HMI Builder 的使用,會介紹下面兩個軟體:
  • VTScada:
    可安裝於 Windows 作業系統中,需要的系統資源比較多。

  • ScadaBR:
    可安裝於 Windows 和 Linux 類作業系統中。最簡單的方式,就是直接下載官網裡已預先做好的 VirtualBox 虛擬機映像檔,匯入 VirtualBox 打開馬上就能使用。Linux 類作業系統就建議安裝在 Ubuntu,像是在 Raspberry Pi OS (released 200-08-20) 安裝就不是個好選擇。


OpenPLC 所支援的 HMI Builder(只列出測試所使用的部分,並非全部)

HMI Builder 是用來建立監控外部裝置的人機介面,裝置的 I/O 狀態和動作都可由畫面看到。ScadaBR 是 OpenPLC 專案所建議使用的 HMI Builder (就是 SCADA 軟體),先別說好不好用了,主要是它是免費的!若手邊沒有其他的備用方案的話,別懷疑了,就先用它吧!

根據參考網址,它的安裝有兩種方式:
  • 第一種:
    由參考網址中下載預先做好的 VirtualBox 的虛擬機映像檔。匯入下載的檔案到 VirtualBox 中後做些簡單設置就可以執行它,重點是:網路的設置一定要選擇使用 附加到(A): 橋接介面卡(Attached to : Bridged Adapter),否則就會很容易踩進去上面講到的地雷區。
      
  • 第二種:
    手動安裝。ScadaBR 只能手動安裝在 Linux 作業系統(已測試過 Ubuntu 20.04.1 (64-bit)),只要照著參考網址裡的指令輸入即可。不過有一個重點要特別注意,那就是安裝好的 ScadaBR 版本是 V0.9,而且一安裝好之後就會馬上啟動,請務必、必須、一定要打開瀏覽器輸入 localhost:8080/ScadaBRlocalhost:9090/ScadaBR(後者取決於是否有同時安裝 OpenPLC Runtime 在同一作業系統中)登入一次(帳號 / 密碼:admin / admin),只有做了這個動作之後才能下達指令更新 ScadaBR 至 V1.0,要不然更新之後,ScadaBR 網頁就會進不去,一定要記住!

對於樹莓派與 OpenPLC 結合有興趣的,可看一下這一篇網頁 |SCADA| OpenPLC + Raspberry Pi + ScadaBR: Part 1,試試是否可以自己做出同樣的結果。由於後續所提出的實作例子不會跟這網頁相同,且會用撰寫時的最新版軟體,所以對 OpenPLC 與樹莓派結合有興趣的的可先自行玩一下。


/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* OpenPLC Runtime:


 參考網址:OPENPLC RUNTIME

如下圖所示,Runtime 根據使用的設備不同分為三類。

OpenPLC Runtime 所支援的裝置分類

但這樣的分類,一開始看到還真的有點搞不太清楚!

但若分為作業系統端和外部裝置端兩分面來說的話,就很好解釋。

OpenPLC 的 Runtime 是一個運行環境,它的控制端(作業系統端)必須安裝在作業系統中,但一般個人電腦並沒有 I/O 支援 Runtime 控制端所能指定到的 I/O 地址,所以必須利用像是 Modbus 通訊協議連接(外部裝置)受控端,建立 Runtime 控制端與受控端的 I/O 關係以取得相對應的 I/O 地址。有了這些 I/O 地址,才能作為 OpenPLC Editor 撰寫程式和 HMI Builder 建立人機介面的依據。

控制端與受控端的說明如下:

  • 控制端:
    安裝在 Windows 或 Linux 作業系統裡,作為 OpenPLC Editor所撰寫的程式與受控設備之間的中介; 

  • 受控端:
    一般是可運行 SCADA 所支援的(Modbus RTU Slave、Modbus TCP Server 等...)通訊協議的裝置(例如,ESP8266、ESP32、Arduino Compatible、Modbus Slave Devices 等...),裡面安裝預先寫好的韌體程式。
    貼心的是,官網上面已針對不同的裝置提供需要的韌體下載安裝。

但對於像是樹莓派(Raspberry Pi)類的單板微電腦,既可以安裝作業系統且又有外置 GPIO,那麼不但本身就是控制端也是受控端,也能單獨作為控制端連接外部裝置擴充 I/O。

這些作為受控端被連接的外部裝置,只要本身必須具備 OpenPLC Runtime 所支援的通訊協議(最常用的就是 Modbus RTU(Master)/ Modbus TCP(Client)),就能作為 OpenPLC Runtime 的外部裝置。所以像是單晶片、Arduino、ESP8266、ESP32 等 ... 這類的微控制器都能用,也才會被列到 SLAVE DEVICES 一組去。

OpenPLC Runtime 必須安裝在裝置裡面才能執行 PLC 程式,它支援多種的嵌入式系統,同時也能作為 Soft-PLC 安裝在 Windows 或Linux 類作業系統中,您甚至可以使用從屬設備(例如Arduino板)來擴充 I/O 點,或將它們作為 Soft-PLC 的擴充 I/O 點。

如在 OpenPLC Editor 一節所說的,在 Windows 作業系統下安裝 OpenPLC Runtime 的同時,實際上也安裝了 OpenPLC Editor,Linux 類的作業系統則兩個軟體就必須個別作安裝。


【結論】


OpenPLC 遵循著 IEC61131-3 的標準,不管是要學習 PLC 程式或是想學習 SCADA 軟體,它都提供了硬體和軟體兩方面的支援。

對於 OpenPLC 專案三個部份有了基本的了解之後,那麼接下來就能開始來建置 OpenPLC 專案的開發環境了。

.
.

1 則留言:

  1. 感謝你對OpenPLC的簡單介紹,一直在尋找有沒有在RPi上寫 IEC 61131-3 規定的語言的系統(或專案),剛好就找到這裡來了。當初在高職所學的是透過Schneider公司所推出的PLC,之後就一直想在像RPi這樣的平台上寫ST語法,看來可以好好嘗試一下了!

    回覆刪除

留言屬名為"Unknown"或"不明"的用戶,大多這樣的留言都會直接被刪除掉,不會得到任何回覆!

發問問題,請描述清楚你(妳)的問題,別人回答前不會想去 "猜" 問題是什麼?

不知道怎麼發問,請看 [公告] 部落格提問須知 - 如何問問題 !