FreePLC系統(tǒng)簡介
FreePLC的繼承關(guān)系
又好久沒有更新了,之前想了好幾個題目,有些也寫了一半,但是自打陽了之后就變成懶羊羊了,這兩天恢復(fù)的不錯,把之前的坑給大家填上,大概花了兩周業(yè)余時間,把FreePLC移植到i.MX RT和LPC55系列產(chǎn)品中,今天先更新下概述部分。
FreePLC是基于YAPLC(Beremiz)開發(fā)的一款開源PLC開發(fā)平臺,與主線Beremiz區(qū)別:
FreePLC上位機(jī)IDE使用Python2開發(fā),而主線Beremiz使用Python3,故不能兼容主線的Beremiz
FreePLC主要針對使用MCU的中小型PLC,而主線Beremiz主要針對SoftPLC(基于X86或MPU平臺)
FreePLC與YAPLC相比,有以下區(qū)別:
FreePLC更換了MCU平臺,目前支持NXP公司主流的幾款MCU:Kinetis KV,KS系列,i.MX RT10xx系列和LPC55S69系列產(chǎn)品
增添了在線下裝相關(guān)的串口命令,全系支持IAP下載用戶code,編譯固件按照512字節(jié)大小對齊(由Flash的Page大小決定)
增大了I, Q, M區(qū)的大小,I區(qū)支持1KB,Q區(qū)支持1KB,M區(qū)支持2KB,這里兼容了小RAM的MCU,針對RT10xx這種大RAM平臺,可以通過修改宏的方式支持更大的分區(qū)
刪除了部分未使用的代碼,比如RTC
更新GCC編譯器到10.3 2021.10版本,支持Cortex M33內(nèi)核
FreePLC的基本原理
FreePLC是一款編譯型的PLC,通過PLCopen支持的IEC61131-3編程語言進(jìn)行用戶程序的開發(fā)。并使用MatIEC,將用戶編程的邏輯從ST語言轉(zhuǎn)換為C語言,之后通過GCC將它編譯為可執(zhí)行的二進(jìn)制代碼下裝到目標(biāo)MCU平臺,MCU平臺需要運行RTS程序去加載運行用戶程序,并給用戶程序提供相應(yīng)的接口函數(shù)。
FreePLC目錄結(jié)構(gòu):
FreePLC軟件由以下幾部分構(gòu)成:
Beremiz源碼,用戶一般不需要進(jìn)行修改
CanFestival-3:開源的CANOpen協(xié)議棧,目前尚未使用該功能
CloudPLC:FreePLC的Target目錄,根據(jù)不同的MCU平臺可以在里面添加不同的Target
FreePLC_Example:PLC的示例目錄,里面有寫好的一些參考工程,可以直接編譯Run在不同的目標(biāo)板上
gnu-arm-embedded:GCC編譯器,用戶一般不需要進(jìn)行修改
matiec:將用戶工程的ST文件轉(zhuǎn)換為C文件的工具,用戶一般不需要進(jìn)行修改
mingw:Windows支持GCC的runtimer
python:已經(jīng)打包好的python2,用戶一般不需要進(jìn)行修改
RTS:該目錄為MCU測得開源工程,用戶可以根據(jù)自己的設(shè)計進(jìn)行修改
YaPySerial:python調(diào)用得串口工具,用戶一般不需要進(jìn)行修改
打開CloudPLC可以看到如下目錄,具體如何制作Target,可以參考《如何制作Target》文件
打開RTS目錄,可以看到下面4個不同的Target
其對應(yīng)的硬件平臺均為NXP官方開發(fā)板:
FreePLCvKS22:使用MAPS-KS22F256(https://www.nxp.com/docs/en/user-guide/MAPSKS2XF256UG.pdf)
FreePLCvKV4:使用TWR-KV4(https://www.nxp.com/design/development-boards/tower-development-boards/mcu-and-processor-modules/kinetis-modules/kinetis-kv4x-family-tower-system-module:TWR-KV46F150M)
FreePLCvLPC55xx:使用LPCXpresso55S69 Development Board(https://www.nxp.com/design/development-boards/lpcxpresso-boards/lpcxpresso55s69-development-board:LPC55S69-EVK)
FreePLCvRT10xx:使用i.MX RT1060 Evaluation Kit(https://www.nxp.com.cn/design/development-boards/i-mx-evaluation-and-development-boards/i-mx-rt1060-evaluation-kit:MIMXRT1060-EVKB)
FreePLC待改進(jìn)部分
連接目標(biāo)板時,僅通過md5檢測用戶工程的完整性,但并未驗證目標(biāo)板的類型,由于協(xié)議是相同的,故存在連接錯誤目標(biāo)板的可能。后續(xù)會加入目標(biāo)板ID的判斷。
尚未添加看門狗功能,添加看門狗功能時,需要判斷看門狗的復(fù)位次數(shù),在很短的一段時間內(nèi),如果連續(xù)多次的看門狗復(fù)位,則不再加載用戶程序(有可能用戶程序有死循環(huán)或者其他bug)
目前只有Kinetis系列支持Reset源判斷,因為PLC應(yīng)用中,如果MCU意外出現(xiàn)熱復(fù)位情況(除POR, PIN之外,例如看門狗,Software Reset等),加載用戶程序時要求Q區(qū)不進(jìn)行初始化以保證輸出保持狀態(tài)。i.MX RT和LPC系列暫時并未添加該功能
無擾下裝,F(xiàn)reePLC目前下載過程會停機(jī)升級,很多工業(yè)現(xiàn)場設(shè)備要求不停機(jī)升級,后續(xù)會在大RAM的MCU產(chǎn)品中將用戶程序搬移到RAM中去實現(xiàn)無擾下裝
目前只有Kinetis KV系列實現(xiàn)了retain區(qū)的功能,這部分代碼寫的比較早,有點亂,后續(xù)會重新封裝
豐富PLC示例工程
增加以太網(wǎng)連接及下裝功能
目前Kinetis KV系列目標(biāo)中添加了OpenModbus協(xié)議,但并未做和RTS之間的接口,所以還不能掛接IO模塊。后續(xù)將添加Mosbus配置接口去掛載支持Modbus的IO模塊
上位機(jī)IDE還有一些已知bug,不精通python,可能無法及時修復(fù)
寫在最后
本開源項目不承諾及時更新并修復(fù)bug,不支持任何商業(yè)項目,純屬個人學(xué)習(xí),目的在于分享PLC技術(shù)的底層知識,有興趣的朋友可以一起交流。目前很多主流廠商都在使用Codesys平臺,該平臺確實非常優(yōu)秀,功能非常豐富,價格也很美麗,但總歸受制于人,從最底層了解PLC的機(jī)制有助于開發(fā)屬于自己的產(chǎn)品。
這幾天應(yīng)該就能收到最新的MCX了,想想就很激動哦。
暈,正準(zhǔn)備上傳庫,突然發(fā)現(xiàn)Gitee的密鑰找不到了,等找回了就上傳。
編輯:黃飛
?
評論
查看更多