Shifu Demo使用指南 ——體驗(yàn)與PLC的數(shù)字孿生進(jìn)行交互
Shifu (GitHub 主頁:https://github.com/Edgenesis/shifu) 是一個(gè)基于Kubernetes的物聯(lián)網(wǎng)開發(fā)及管理的開源平臺。開發(fā)者通過使用Shifu,可以更簡單地連接、監(jiān)視和控制任何物聯(lián)網(wǎng)設(shè)備。
PLC作為可編程邏輯控制器,是專門為在工業(yè)環(huán)境下應(yīng)用而設(shè)計(jì)的數(shù)字運(yùn)算操作電子系統(tǒng)。因?yàn)榭梢栽谄鋬?nèi)部存儲(chǔ)執(zhí)行邏輯運(yùn)算、順序控制、定時(shí)、計(jì)數(shù)和算術(shù)運(yùn)算等操作的指令,進(jìn)而實(shí)現(xiàn)控制各種類型的機(jī)械設(shè)備或生產(chǎn)過程,所以PLC是與現(xiàn)代工業(yè)自動(dòng)化生產(chǎn)發(fā)展密不可分的設(shè)備。
Shifu已經(jīng)實(shí)現(xiàn)對PLC設(shè)備的虛擬化,在Shifu Demo中可以體驗(yàn)通過一行命令實(shí)現(xiàn)對PLC設(shè)備的控制,這是在數(shù)字孿生環(huán)境中對物理設(shè)備進(jìn)行控制最為重要的一步。
本文根據(jù)Shifu Demo使用指南,詳細(xì)介紹Shifu極速試玩中體驗(yàn)與PLC的數(shù)字孿生進(jìn)行交互的內(nèi)容。
部署Docker
1.下載并安裝Docker
安裝包:https://demo.shifu.run/detail
2.檢查Docker是否可用
a. 打開Docker,并保持其運(yùn)行
b. 在Linux/Windows/Mac 的命令行中執(zhí)行以下命令
sudo docker ps
如果 Docker 運(yùn)行順利,將會(huì)得到以下輸出:

安裝Shifu
1.安裝Shifu
前往demo.shifu.run進(jìn)行下載安裝。(直接進(jìn)入頁面中的第二步,完成該步驟的流程后即可回到本頁面)
安裝完成后 Shifu 會(huì)在docker運(yùn)行時(shí)伴隨啟動(dòng)。
2.查看Shifu是否啟動(dòng)
使用以下命令來查看運(yùn)行效果:
sudo kubectl get pods -A
如果所有 “STATUS” 都是 Running 即表示成功:

與PLC的數(shù)字孿生交互
1.啟動(dòng)Nginx
我們啟動(dòng)一個(gè)nginx實(shí)例來模擬應(yīng)用程序與shifu之間的交互:
sudo kubectl run --image=nginx:1.21 nginx
sudo kubectl get pods -A | grep nginx
可以看到nginx已經(jīng)在運(yùn)行:

2.啟動(dòng)PLC虛擬設(shè)備
首先,我們啟動(dòng)PLC的數(shù)字孿生:
sudo kubectl apply -f run_dir/shifu/demo_device/edgedevice-plc
通過如下指令,可以看到PLC設(shè)備的數(shù)字孿生已經(jīng)啟動(dòng):
sudo kubectl get pods -A | grep plc

3.與PLC虛擬設(shè)備交互
接著,我們需要進(jìn)入nginx:(如果您未啟動(dòng)Nginx,請您首先 啟動(dòng)Nginx服務(wù))
sudo kubectl exec -it nginx -- bash
最后,我們可以與PLC的數(shù)字孿生通過 http://deviceshifu-plc.deviceshifu.svc.cluster.local 進(jìn)行交互,將PLC的Q0內(nèi)存區(qū)域的第0位設(shè)置成1:
curl "deviceshifu-plc.deviceshifu.svc.cluster.local/sendsinglebit?rootaddress=Q&address=0&start=0&digit=0&value=1";echo

例如一個(gè)PLC的Q0內(nèi)存的第四位值代表控制程序,設(shè)定“digit=3”與“value=1”就可以開啟程序:
curl "deviceshifu-plc.deviceshifu.svc.cluster.local/sendsinglebit?rootaddress=Q&address=0&start=0&digit=3&value=1";echo

Q&A
Q:在這個(gè)試玩中如何模擬PLC?
A:當(dāng)模擬PLC接收到 sendsinglebit 命令可以修改內(nèi)存區(qū)域中一個(gè)bit,接收到 getcontent 命令可以得到內(nèi)存區(qū)域中一個(gè)byte的值。