簡述
OpenPLC
OpenPLC 可運行在嵌入式系統和普通計算機上,其基本原理是在硬件上安裝類似 Linux 的操作系統,并在該環境下運行 OpenPLC 應用程序,從而讓用戶開發、調試和運行工業自動化控制邏輯。它目前只支持部分 ARM 架構的嵌入式系統,尤其是基于 Cortex-A 系列處理器的平臺,但是官方尚未提供對 OpenEuler 系統的支持。
OpenPLC Webserver
OpenPLC Webserver的作用是提供一種簡便的方式,通過網絡訪問和管理OpenPLC控制系統。作為一個Web應用程序,用戶可以通過在計算機上打開瀏覽器并鍵入OpenPLC設備的IP地址(端口8080)來訪問OpenPLC網絡服務器。其功能包括:遠程監控與控制、程序上傳和下載、參數配置、日志和報警查看、系統診斷、跨平臺訪問。
操作流程
下載OpenPLC源碼
OpenPLC_v3/background_installer.sh添加:
export CC=/home/master/hi3093_tool/toolchain/sysroots/x86_64-openeulersdk-linux/usr/bin/aarch64-openeuler-linux-gcc
export CXX=/home/master/hi3093_tool/toolchain/sysroots/x86_64-openeulersdk-linux/usr/bin/aarch64-openeuler-linux-g++
./configure CC=$CC CXX=$CXX
編譯安裝
#使能環境變量
source /home/$(whoami)/hi3093_tool/toolchain/environment-setup-aarch64-openeuler-linux
#執行腳本安裝
sudo ./install.sh linux
在webserver目錄下回生成webserver.py
移植相關依賴庫
將webserver.py移植到開發板,并移植相關依賴庫

python環境依賴安裝
pip3 install pyserial
pip install pages
pip3 install --upgrade setuptools wheel
pip install monitoring
pip install flask
pip install flask_login
pip3 install pymodbus==2.5.0
運行
交叉編譯源碼后會生成aarch64版本的websever.py啟動文件,以及一系列依賴文件,將其移植到開發板
python3.10 webserver.py

交叉編譯報錯解決
找不到鏈接庫,系統架構不匹配
解決:
編輯OpenPLC_v3/webserver/scripts/compile_program.sh將
? ? ? ? g++ -std=gnu++11 -I ./lib -c Res0.c -lasiodnp3 -lasiopal -lopendnp3 -lopenpal -w $ETHERCAT_INC
改為
? ? ? ? $CXX -std=gnu++11 -I ./lib -c Res0.c -lasiodnp3 -lasiopal -lopendnp3 -lopenpal -w $ETHERCAT_INC
找不到頭文件
解決:OpenPLC_v3/webserver/scripts/compile_program.sh修改 補充路徑
????????$CXX -std=gnu++11 *.cpp *.o -o openplc -I ./lib -I $(pwd)/../../utils/dnp3_src/cpp/libs/include -I $(pwd)/../../utils/dnp3_src/cpp/libs/src/ -pthread -fpermissive `pkg-config --cflags --libs libmodbus` -lasiodnp3 -lasiopal -lopendnp3 -lopenpal -w $ETHERCAT_INC
? ? ? ? $CXX -std=gnu++11 *.cpp *.o -o openplc -I ./lib -I $(pwd)/../../utils/dnp3_src/cpp/libs/include -I $(pwd)/../../utils/dnp3_src/cpp/libs/src/ -pthread -fpermissive `pkg-config --cflags --libs libmodbus` -lasiodnp3 -lasiopal -lopendnp3 -lopenpal -w $ETHERCAT_INC
libmodbus.so.5.1.0架構不對
解決:
/OpenPLC_v3/background_installer.sh修改 制定架構
./configure CC=$CC CXX=$CXX --host=aarch64-openeuler-linux-gnu
Web啟動報錯解決
找不到libsqlite3.so.0
qemu-aarch64 /tmp # python3.10 webserver.py
Traceback (most recent call last): File "/tmp/webserver.py", line 1, in <module> import sqlite3 File "/tmp/Python3.10/build_arm/lib/python3.10/sqlite3/__init__.py", line 57, in <module> from sqlite3.dbapi2 import * File "/tmp/Python3.10/build_arm/lib/python3.10/sqlite3/dbapi2.py", line 27, in <module> from _sqlite3 import * ImportError: /lib64/libm.so.6: version `GLIBC_2.38' not found (required by /usr/lib64/libsqlite3.so.0)`
解決;
復制OpenPLC源碼的libsqlite3.so.0到開發板
libsqlite3.so.0需要GLIBC_2.38
SQLite3是一個輕量級的嵌入式關系型數據庫管理系統(RDBMS)。它是一個開源項目,廣泛用于各種應用程序中,尤其是在嵌入式系統和移動設備中。SQLite3 主要用于本地存儲小到中型的數據集,不需要一個獨立的數據庫服務器。
解決:
先安裝tcl庫用于編譯libsqlite3源碼
否則會報錯找不到/usr/lib/aarch64-linux-gnu/tcl8.6/tclConfig.sh
wget https://sourceforge.net/projects/tcl/files/Tcl/8.6.10/tcl8.6.10-src.tar.gz
tar -xf tcl8.6.10-src.tar.gz
cd tcl8.6.10/unix
./configure --host=aarch64-openeuler-linux-gnu --build=x86_64-pc-linux-gnu --prefix=$(pwd)/build_tcl
make -j32
make install
方法一: 降低libsqlite3版本
#下載libsqlite3源碼
https://github.com/sqlite/sqlite/tree/reuse-schema-3.30
#配置生成文件安裝位置,指定使用的編譯工具鏈
./configure --host=aarch64-openeuler-linux-gnu --build=x86_64-pc-linux-gnu --prefix=$(pwd)/build_sqlite
#編譯
make
方法二:提升GLIBC庫版本
#下載GLIBC-2.38源碼
wget https://mirrors.aliyun.com/gnu/glibc/glibc-2.38.tar.gz
#配置生成文件安裝位置,指定使用的編譯工具鏈
./configure --host=aarch64-openeuler-linux-gnu --build=x86_64-pc-linux-gnu --prefix=$(pwd)/build_sqlite
#編譯
make