2020年12月10日 星期四

OpenPLC 初體驗 /04/ - Raspberry Pi(樹莓派)如何在本地端和遠端受控執行 OpenPLC 程式

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

關於Raspberry Pi(下面稱樹莓派)控制繼電器的部分,部落格早前已有寫過相關的範例網頁(兩通道八通道),所以此處不會再針對細節部分再多加著墨。本篇所著重的在於,是怎麼依照不同的裝置需求,重新規劃樹莓派在 OpenPLC 的接腳 I/O 模式,運行 OpenPLC 程式在本地端與遠端。

樹莓派的接腳 I/O 模式規劃,以樹莓派八通道光隔離繼電器擴充板上的繼電器控制接腳作為依據、結構化文本(ST,Structured Text)撰寫 OpenPLC 程式;每當用戶按下按鈕,繼電器會每間隔一秒鐘依序開啟,接著再依序關閉。

本篇網頁的內容有:


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

OpenPLC 是個不錯的專案項目!

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

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

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

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


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

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


【(01)重新配置樹莓派在 OpenPLC 的接腳 I/O 模式】

其實一般非專用的繼電器模組,可以直接使用預設的 OpenPLC 的樹莓派接腳模式配置(如下圖所示),不需要大費周章自行配置!

OpenPLC 的樹莓派預設接腳模式配置
來源:OPENPLC ON RASPBERRY PI

但事情有時總是那麼不隨人意!

如果您的裝置所要的接腳 I/O 模式,並不是剛好是 OpenPLC 的預設接腳 I/O 模式呢?那麼就需要自己動手做一些程式碼的變動(如同之前在OpenPLC 初體驗 /3/ 改變 NodeMCU 接腳的配置一樣),變更預設的接腳設定。

例如,如下圖所示,如果 OpenPLC 想要控制繼電器擴充板的話,那麼在接上樹莓派到擴充板後,不修改 OpenPLC 的樹莓派預設的 I/O 接腳模式,是做不到的!

樹莓派八通道光隔離繼電器擴充板控制接腳示意圖

樹莓派與八通道光隔離繼電器擴充板結合圖

樹莓派在 OpenPLC 預設(下圖 Default 欄位)的接腳 I/O 模式,設置了 14 個數位輸入(DI)、11 個數位輸出(DO),對照樹莓派八通道光隔離繼電器擴充板的控制接腳後,修改為下圖 OpenPLC 欄位中的 I/O 模式,該欄位以不同的顏色區分數位輸入(%IX)數位輸出(%QX)類比輸出(%QW)

要注意的是,OpenPLC Hardware Layer 在樹莓派使用 WiringPi 的接腳編號,不是 BCM!

修改後的樹莓派在 OpenPLC 的接腳 I/O 模式配置圖


/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* (01-01)八通道光隔離繼電器的接線:

如果一定要看電路圖才會接線的話,下面是電路圖。

只有一點一定要注意!

繼電器模組(或擴充板)的電源,直接取自樹莓派,請確定提供足夠的電源電力給樹莓派。要不,您的繼電器動作,有很大的可能,就會跟影片中的不一樣。

OpenPLC 程式的接線圖


【(02)修改 OpenPLC Hardware Layer】

根據上一節的配置,這一節採用最簡單的方法,變更樹莓派的 I/O 接腳模式。

連線您的樹莓派,打開一個終端機,輸入下面指令。

cd ~
cd Downloads/OpenPLC_v3/webserver/core/hardware_layers/
cp raspberrypi.cpp raspberrypi.cpp.bk
nano raspberrypi.cpp

請注意,如果沒有跟著這一系列網頁看下來,OpenPLC Runtime 的位置是在 /home/pi/Downloads/ 目錄下。

修改 OpenPLC Hardware Layer - 01

最後一個指令,是開啟樹莓派的 Hardware Layer 的程式碼,如下圖所示。

修改 OpenPLC Hardware Layer - 02

如下圖所示,修改 inBufferPinMask[] outputBufferPinMask[] 這兩行的陣列初始化定義。

就這樣!只需要這兩行做修改。

Ctrl + O 儲存、Ctrl + Q 離開回到終端機。

修改 OpenPLC Hardware Layer - 03

由於安裝好 OpenPLC Runtime 之後,重開機就會自動在樹莓派的背景執行,所以要不就是重開機,要不就輸入下面指令重新開啟 OpenPLC Runtime。

sudo systemctl stop openplc
sudo systemctl start openplc

完整指令如下所示。

修改 OpenPLC Hardware Layer - 04

到這邊,就可以先來測試,剛剛修改的樹莓派 Hardware Layer,是否能正常編譯?

切換到 "Hardware",選擇 OpenPLC Hardware Layer,下拉選單選擇 Raspberry Pi,按下 "Save changes" 進行編譯。

修改 OpenPLC Hardware Layer - 05

如果一切沒有問題,最後會輸出 Compilation finished successfully!,這時就可以按下 "Go to Dashboard" 回到主網頁下。

修改 OpenPLC Hardware Layer - 06

若在編譯途中或是其他任何時候,網頁出現錯誤訊息的情況下,可以輸入下面指令,查詢現在 OpenPLC Runtime 的執行狀態。

sudo systemctl status openplc

執行正常的情況之下,輸出的訊息就類似下圖所示,觀看完畢按 Q 離開。

修改 OpenPLC Hardware Layer - 07

如果看到任何錯誤出現,大多是您現在所做的動作或是 PLC 程式出現錯誤,可上 OpenPLC 官網論壇搜尋找找答案。


【(03)撰寫結構化文本程式】

本地端執行 OpenPLC 程式,暫存器位置由 0 開始,遠端執行則是由 100 開始。兩個程式內容都相同,差別在於暫存器的地址設定而已。

打開您的 OpenPLC Editor,創建一個使用 ST 撰寫 PLC 程式的專案,專案請命名為 pirelay8_pi_ton_test

專案每一次進行編譯,都會詢問您是否儲存再次編譯之後的檔案(*.st),所以呢?根據本地和遠端執行目的的不同,在 ST 程式不變的條件之下,依照變數暫存器地址(Location)的起始值,您要編譯兩次、儲存兩個編譯之後的檔案。

本地端:

依照下表,新增下面變數和填入表中欄位值。

撰寫結構化文本程式 - 01

依照下圖 ST 程式,撰寫入您的專案中。

撰寫結構化文本程式 - 02

完成之後,請進行編譯。

撰寫結構化文本程式 - 03

編譯後,儲存檔案為 pirelay8_pi_ton_test.st

遠端:

維持 ST 程式不變,依照下圖 Location 欄位的值做修改,然後重新再編譯一次;這次儲存檔案名為 pirelay8_test.st。

撰寫結構化文本程式 - 04

OK,需要的檔案都準備好了,現在可以打開樹莓派準備本地端執行。


【(04)OpenPLC Runtime 本地端執行】

樹莓派可以直接執行 OpenPLC 程式,這時除了可以直接使用本身的硬體接腳之外,還可以利用 "Slave Devices" 網頁的功能選項,再另外加入其他的 Modbus 裝置擴充其 I/O,我稱這種方式為 OpenPLC Runtime 本地端執行。

下面是一個完整 OpenPLC 本地端操作過程。您可以在任何與樹莓派同一個區域網路中的電腦裡,開啟瀏覽器輸入樹莓派的 IP:8080 作為網址,連線到 OpenPLC Runtime 的網頁,然後跟著下面的影片一步一步操作。

若無其他問題,當按下按鈕後,您的繼電器就會跟下面影片一樣,做相同的動作!


【(05)OpenPLC Runtime 遠端執行】

把樹莓派當作 Modbus Slave Device(TCP Server),利用其他地方的 OpenPLC Runtime(或 SCADA 軟體)新增為 Slave Devices,我稱這種方式為 OpenPLC Runtime 遠端執行。

在這個展示中,您要先執行樹莓派裡的 OpenPLC Runtime,轉換自身為 Modbus Slave Device(TCP Server),再用其他的 OpenPLC Runtime,把樹莓派新增到 Slave Devices 項目中,然後在此執行您的 OpenPLC 程式 ...

這些過程都在下面的影片裡。若照著影片裡的步驟一步一步做,同樣的,也能讓與樹莓派連接的繼電器模組(或擴充板)做同樣的動作。


【(06)結論】

不管是在本地端或是遠端執行 OpenPLC 程式,或是只是單純作為 Modbus Slave Device 不執行任何 OpenPLC 也罷,這些就是 OpenPLC 與其他裝置之間的偕同運作方式。

不管您是要自己生一個新的、加入或是偕同其他的 Modbus Slave Devices 一起工作,掌握本篇所談論的操作步驟,這些基本上就都難不倒您了!

基本上這個系列就到此篇為止,如果有什麼其他想法,希望部落格撰寫關於 OpenPLC 的建議,歡迎在下面留言。


.

.

沒有留言:

張貼留言

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

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

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