工业控制
FreePLC系统简介
FreePLC的继承关系
又好久没有更新了,之前想了好几个题目,有些也写了一半,但是自打阳了之后就变成懒羊羊了,这两天恢复的不错,把之前的坑给大家填上,大概花了两周业余时间,把FreePLC移植到i.MX RT和LPC55系列产品中,今天先更新下概述部分。
FreePLC是基于YAPLC(Beremiz)开发的一款开源PLC开发平台,与主线Beremiz区别:
FreePLC上位机IDE使用Python2开发,而主线Beremiz使用Python3,故不能兼容主线的Beremiz
FreePLC主要针对使用MCU的中小型PLC,而主线Beremiz主要针对SoftPLC(基于X86或MPU平台)
FreePLC与YAPLC相比,有以下区别:
FreePLC更换了MCU平台,目前支持NXP公司主流的几款MCU:Kinetis KV,KS系列,i.MX RT10xx系列和LPC55S69系列产品
增添了在线下装相关的串口命令,全系支持IAP下载用户code,编译固件按照512字节大小对齐(由Flash的Page大小决定)
增大了I, Q, M区的大小,I区支持1KB,Q区支持1KB,M区支持2KB,这里兼容了小RAM的MCU,针对RT10xx这种大RAM平台,可以通过修改宏的方式支持更大的分区
删除了部分未使用的代码,比如RTC
更新GCC编译器到10.3 2021.10版本,支持Cortex M33内核
FreePLC的基本原理
FreePLC是一款编译型的PLC,通过PLCopen支持的IEC61131-3编程语言进行用户程序的开发。并使用MatIEC,将用户编程的逻辑从ST语言转换为C语言,之后通过GCC将它编译为可执行的二进制代码下装到目标MCU平台,MCU平台需要运行RTS程序去加载运行用户程序,并给用户程序提供相应的接口函数。
FreePLC目录结构:
FreePLC软件由以下几部分构成:
Beremiz源码,用户一般不需要进行修改
CanFestival-3:开源的CANOpen协议栈,目前尚未使用该功能
CloudPLC:FreePLC的Target目录,根据不同的MCU平台可以在里面添加不同的Target
FreePLC_Example:PLC的示例目录,里面有写好的一些参考工程,可以直接编译Run在不同的目标板上
gnu-arm-embedded:GCC编译器,用户一般不需要进行修改
matiec:将用户工程的ST文件转换为C文件的工具,用户一般不需要进行修改
mingw:Windows支持GCC的runtimer
python:已经打包好的python2,用户一般不需要进行修改
RTS:该目录为MCU测得开源工程,用户可以根据自己的设计进行修改
YaPySerial:python调用得串口工具,用户一般不需要进行修改
打开CloudPLC可以看到如下目录,具体如何制作Target,可以参考《如何制作Target》文件
打开RTS目录,可以看到下面4个不同的Target
其对应的硬件平台均为NXP官方开发板:
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待改进部分
连接目标板时,仅通过md5检测用户工程的完整性,但并未验证目标板的类型,由于协议是相同的,故存在连接错误目标板的可能。后续会加入目标板ID的判断。
尚未添加看门狗功能,添加看门狗功能时,需要判断看门狗的复位次数,在很短的一段时间内,如果连续多次的看门狗复位,则不再加载用户程序(有可能用户程序有死循环或者其他bug)
目前只有Kinetis系列支持Reset源判断,因为PLC应用中,如果MCU意外出现热复位情况(除POR, PIN之外,例如看门狗,Software Reset等),加载用户程序时要求Q区不进行初始化以保证输出保持状态。i.MX RT和LPC系列暂时并未添加该功能
无扰下装,FreePLC目前下载过程会停机升级,很多工业现场设备要求不停机升级,后续会在大RAM的MCU产品中将用户程序搬移到RAM中去实现无扰下装
目前只有Kinetis KV系列实现了retain区的功能,这部分代码写的比较早,有点乱,后续会重新封装
丰富PLC示例工程
增加以太网连接及下装功能
目前Kinetis KV系列目标中添加了OpenModbus协议,但并未做和RTS之间的接口,所以还不能挂接IO模块。后续将添加Mosbus配置接口去挂载支持Modbus的IO模块
上位机IDE还有一些已知bug,不精通python,可能无法及时修复
写在最后
本开源项目不承诺及时更新并修复bug,不支持任何商业项目,纯属个人学习,目的在于分享PLC技术的底层知识,有兴趣的朋友可以一起交流。目前很多主流厂商都在使用Codesys平台,该平台确实非常优秀,功能非常丰富,价格也很美丽,但总归受制于人,从最底层了解PLC的机制有助于开发属于自己的产品。
这几天应该就能收到最新的MCX了,想想就很激动哦。
晕,正准备上传库,突然发现Gitee的密钥找不到了,等找回了就上传。
编辑:黄飞
全部0条评论
快来发表一下你的评论吧 !