[源码]开源PLC项目Beremiz的RTE在stm32f1上实现
0. 前言之前发过一个纪念性质的帖子 https://www.amobbs.com/thread-5722409-1-1.html
那时候是刚把通信功能整好了,没有整理就只发了个帖子开心一下,还是有坛友感兴趣的,就业余再整理了下
其实上周已经把modbus功能移植好,但由于Beremiz这个程序是依赖Python来运行的,配置起来估计没有那么顺利,尤其是在Windows的环境下
所以这周研究了一下打包的方法,现在已经整好了一个安装包,直接把编译器和Python都打包进去,方便有兴趣的坛友捣鼓测试
1. 移植的modbus效果
测试的硬件是:正点原子的stm32f103 Mini开发板
主机:PC端的Modbus Poll 进行模拟
注意,由于没有对modbus的地址进行功能分类,所以沿用了YAPLC里面的分类,只有63个holding reg,地址是1~63,
1~31是特殊用途,32~63是用户自定义的,对应Beremiz IDE中的LOCAL变量地址%MW1.0~%MW1.31
modbus的配置:从机地址 - 1,波特率 - 115200,模式 - RTU
2. 附件说明
Beremiz是用了wxPython作为界面框架的,所以离不开Python,安装包里附带的是Python2.7.16,64位版本的(32位的请自己下载和覆盖),已经把需要的依赖库都装好了
其次,由于Beremiz是通过转换IEC61131-3里面的编程语言为C语言,然后再把C编译成可执行文件给RTE运行,所以会有两个编译器
一个是matiec(iec2c/iec2iec),一个是arm-gcc,因为RTE是要运行在stm32上
另外,因为RTE是楼主根据YAPLC项目改过来的,改名叫了DYPLC,所以会有一个DYPLC的目录,负责通信和平台识别的
最后,放了一个测试demo的项目目录
由于Python和arm-gcc两个模块比较大,所以安装包也很大,200多MB,解压出来有800多MB,请注意
启动方式已经在快捷方式里面配置好了,直接点击快捷方式就可以启动软件使用
3. STM32的RTE烧写
在启动Beremiz IDE之前,先把附件中的RTE工程解压了,然后文件夹projects里面有对应的boot和rte的keil mdk工程
楼主使用的是mdk v5.14,如果要用其他的环境,则参考配置文件自助进行重新配置
首先,把boot的烧写进去,然后,再把rte的烧写进去,重新上电
此时因为没有PLC的APP程序,所以会默认的运行dummy代码,等待Beremiz IDE重新下载PLC应用程序
4. 简单使用说明
这里以楼主自己的硬件平台来进行描述,用的USB转串口模块CH340,硬件和驱动自己搞定
安装好软件后,打开测试demo,工程配置已经预先搞好了
打开项目的配置页,串口号根据实际情况填写
程序页是梯图模式,简单,资源页设定PLC的扫描周期
点击[构建项目1]之前,最好点一下隔壁的清除按钮,提示完成后,点击[连接PLC3]
连接PLC成功后,点击[传输程序1],提示成功后,点击[开始PLC3],就可以启动PLC,进入Debug模式
要注意的是,如果PLC是第一次使用,由于RTE是运行了dummy代码,所以要在传输玩后断开PLC连接,然后进行复位,之后RTE会对下载的PLC程序进行检查和运行
再连接上PLC之后,就可以启动和Debug了。如果不是第一次使用,之前已经有PLC程序了,则传输完成后即可启动和Debug。
5. 后续
现在IDE和RTE的通信打通了,IDE的打包方式也整好了,后面会把精力放在功能的移植添加和问题修改上面
Beremiz本身的问题也不少的,功能也不算丰富,但框架比较自由,可以做很多扩展,一步步来吧
TODO List:
软件 - 模拟量功能的移植实现,运动控制功能的研究(这个估计要花比较多的时间)
硬件 - 找一个比较像样点的板子调试,重新说明,LZ不太懂硬件设计,前些时候看到另外一个帖子(https://www.amobbs.com/thread-5659384-1-1.html)有个硬件的,
但那个帖子的作者现在没有在论坛活跃了,不然可以问问能不能买一个,也希望有坛友推荐
6. 附件
安装包比较大200多MB,解压后有800多MB,分卷压缩上传到论坛当作备份,另外给出有个网盘链接:https://pan.baidu.com/s/1NUIXou_bBnzMct16j_WAkQ提取码:dw3g
stm32f103的RTE源码,默认是对正点原子Mini板的配置,如果要在其他板子上使用,不嫌麻烦就看着源码修改,RTE和IDE的对应部分都要修改
如有问题,请发帖留言
在另外一个帖子里,经坛友"埃托奥"反映,运行软件会提示DLL缺失,查了一下是少了python27相关的动态库,这里上传对应的版本DLL一份,解压拷到Python27文件夹即可
另外查看了韩国发布版本的安装包里,还有些msvcm90.dll、msvcp90.dll、msvcr90.dll的库含在里面,
估计是针对“空白”环境的电脑的,这里是lz的失误,没有在虚拟机里测试,因为手头上的电脑容量小就没装,后面有空再测试下,
如果有坛友测试出有其他问题的话,也欢迎发帖留言 牛啊,佩服 恭喜楼主,再接再厉 厉害啊!! 楼主威武 恭喜楼主,再接再厉 楼主厉害,谢谢分享 原以为这个是需要授权注册的。前阵子试验了一下在树莓派上面玩儿的 楼主,我这边有个项目做过一个硬件平台,如果需要可以送给楼主使用。只是不支持模拟信号采集。有数字输入输出,编码器输入,232串口,can通信和以太网。 给楼主点个赞。 厉害,收藏了 树莓派上有兴趣搞得话,我可以免费提供一套我们的控制器。 这个利害了 好资料,谢谢 看起来好复杂 有想法,能分享。人才 阿豪博士 发表于 2019-12-15 08:02
原以为这个是需要授权注册的。前阵子试验了一下在树莓派上面玩儿的
beremiz项目是代码全开源的,只要愿意折腾就行,哈 Elec_Ramble 发表于 2019-12-15 08:44
楼主,我这边有个项目做过一个硬件平台,如果需要可以送给楼主使用。只是不支持模拟信号采集。有数字输入输 ...
谢谢支持哈,用的芯片也是stm32的吗?那会方便很多,编码器功能的话,集成到modbus的地址里,或是加一个plc的功能项也行的,can,以太网这些倒是适合做扩展模块的通信,或是运动控制的canopen和ethercat wenming 发表于 2019-12-15 09:41
树莓派上有兴趣搞得话,我可以免费提供一套我们的控制器。
谢谢支持哈,树莓派跑Linux可以直接用beremiz项目的源码,最新的版本还上了bcnet和ethercat,虽然都在测试阶段。lz裸机比较熟,Linux的折腾还是放到后面吧 谢谢LZ分享,刚好手里有类似的板子,可以测试一下 厉害,用百度盘啊 牛 厉害了,学习学习 收藏以后学习,感谢分享! 开源plc框架。牛,且有分享,值得尊重。 楼主V5,感谢提供这么好的学习资料。 厉害了!学习下。 楼主NB啊{:tongue:} 恭喜楼主,再接再厉 恭喜楼主 留存学习一下,感谢分享 感兴趣, 楼主再接再厉 落叶知秋 发表于 2019-12-15 15:20
谢谢支持哈,用的芯片也是stm32的吗?那会方便很多,编码器功能的话,集成到modbus的地址里,或是加一个p ...
是的,stm32f107的,还有几个做的样板可以用。 楼主NB,关注beremiz项目 厉害了,牛逼
厉害了 期待后续佳作 LZ厉害!!!! 厉害!1。。。 楼主厉害了,直得学习 高手,大牛 收藏了,得好好学习下
厉害啊!! 厉害! 楼主如何建立IDE的EXE? gpfrank 发表于 2020-1-14 11:00
厉害! 楼主如何建立IDE的EXE?
在Windows下面,用NSIS(Nullsoft Scriptable Install System)对文件夹里面的文件进行打包,然后修改一下快捷方式的参数来执行python的启动 请教楼主
自定义bootloader的下载协议怎么告诉ide呢 这部分有没有文档呢
我看nucleron默认是没有boot的直接py调用了相关的下载工具下载bin/hex文件给设备 又看了下有些眉目了 DYPLCProto.py 协议在这个文件中
还是请教楼主官方针对这块有没有文档呢 楼主绝对是跨界的 这python玩的6 lyzhangxiang 发表于 2020-2-11 22:27
又看了下有些眉目了 DYPLCProto.py 协议在这个文件中
还是请教楼主官方针对这块有没有文档呢 楼主绝对是跨 ...
官方都没有代码框架的文档,只是说多看代码,哈哈
我看代码的时候有做笔记,不过很少,以后可能会整理一下发上来 我这里有STM32F103VCT6的控制板,好像和你的挺对位。你要不要试试
做为PLC。modbus一般不是作主机来用吗?怎么是从机 落叶知秋 发表于 2020-2-12 00:17
官方都没有代码框架的文档,只是说多看代码,哈哈
我看代码的时候有做笔记,不过很少,以后可能会整理一 ...
{:smile:}人工点赞 期待文档 硬邦邦 发表于 2020-2-12 15:02
做为PLC。modbus一般不是作主机来用吗?怎么是从机
plc的modbus主机模式一般是为了扩展模块吧?从机模式是可以配合支持modbus协议定的触摸屏上位机使用,两种模式都支持就好了,一般至少会支持从机模式 szjqt 发表于 2020-2-12 14:12
我这里有STM32F103VCT6的控制板,好像和你的挺对位。你要不要试试
谢谢支持。之前另一位坛友给我寄了一套硬件,比较偏运动控制的设计,你的这个设计比较偏正常的plc功能,目前我还没有那么多业余时间来调试不同的硬件,先把软件完善了再说,以后可能会整一套这种的。 IDE的功能也事自己开发吗? 楼主我安装后吧python27.dll复制到python27文件夹下,然后打开软件直接没反应 carefree1986 发表于 2020-2-13 11:57
楼主我安装后吧python27.dll复制到python27文件夹下,然后打开软件直接没反应
看一下快捷方式里的“目标位置”内容,之前有个坛友反应也是没有反应,原因是快捷方式那里,系统识别“”符号的方式不一样,你可以把“”符号删掉试试 落叶知秋 发表于 2020-2-13 13:11
看一下快捷方式里的“目标位置”内容,之前有个坛友反应也是没有反应,原因是快捷方式那里,系统识别“” ...
我直接进入快捷方式位置,打开pythonw.exe也是没反应 carefree1986 发表于 2020-2-13 16:04
我直接进入快捷方式位置,打开pythonw.exe也是没反应
pythonw.exe是无窗口运行.py文件的模式,快捷方式是通过调用这个exe来加载界面的,你可以打开python.exe看看会不会弹出窗口来,如果可以就说明python软件可以正常运行,问题是出在快捷方式调用的参数那里 本帖最后由 carefree1986 于 2020-2-13 19:33 编辑
落叶知秋 发表于 2020-2-13 16:35
pythonw.exe是无窗口运行.py文件的模式,快捷方式是通过调用这个exe来加载界面的,你可以打开python.exe ...
是这样的,那个文件是打开PLC IDE的?还是没明白怎么打开上位机 编译型PLC,楼主V5 本帖最后由 落叶知秋 于 2020-2-13 23:47 编辑
carefree1986 发表于 2020-2-13 19:32
是这样的,那个文件是打开PLC IDE的?还是没明白怎么打开上位机
本来打开上位机的方式是在快捷方式里写好了的,快捷方式是通过运行pythonw.exe,和带入一些运行参数来启动IDE
由于我在打包的时候没有考虑到安装时,不同版本的操作系统对安装完成后快捷方式里面的那个“目标(T)”栏的内容会可能有差异,导致快捷方式无效的问题
其实上次有坛友已经反映过了,他用的是win7系统,我也是用的win7系统,但快捷方式到了他那边安装后,“目标(T)”栏的内容就不一样了,多了或少了符号",我也没有找到根本原因,后面会查查打包的代码是否有BUG
暂时给出的解决方法:
1.修改快捷方式“目标(T)”栏的内容
对照电脑里面其他快捷方式对应栏的格式,考虑符号"的使用,上次那坛友就是因为快捷方式“目标(T)”栏的符号"(没错,就是"号)不对而导致启动失败,
你可以把快捷方式的属性界面截图上来,我给你看看怎么修改
2.可以直接调用系统的CMD来运行启动IDE
运行cmd.exe后,使用cd命令把路径切换到安装目录下的【DYPLC】文件夹里面,然后再通过调用pythonw.exe + 运行的py文件的方式来启动,大概的命令可以这样写:
"【pythonw.exe的绝对路径】 (此处为空格) dyplcide.py"
注意:如果系统本身装好了Python2.7,则上面【】里面的内容可以直接改为"python",如果没有装Python2.7而只是运行了楼主提供的安装包,
则可以将上面【】里面的内容填写安装目录下的Python2.7的内容,整个命令看起来就类似这样"C:\Beremiz\Python27\pythonw.exe dyplcide.py"
编辑原因:修改错误内容 谢谢分享 落叶知秋 发表于 2020-2-13 23:39
本来打开上位机的方式是在快捷方式里写好了的,快捷方式是通过运行pythonw.exe,和带入一些运行参数来启 ...
软件已经可以打开了,但是一点击编译软件就卡死,你遇到过没?我用的win10 收藏了,这个源码值得借鉴。感谢分享 carefree1986 发表于 2020-2-14 11:27
软件已经可以打开了,但是一点击编译软件就卡死,你遇到过没?我用的win10 ...
是卡死还是崩溃了?我暂时没遇到过,用的win7。编译的工程是给的demo还是另外自己建的? 落叶知秋 发表于 2020-2-14 12:09
是卡死还是崩溃了?我暂时没遇到过,用的win7。编译的工程是给的demo还是另外自己建的? ...[/quote我自己建立的,直接卡死了 落叶知秋 发表于 2020-2-14 12:09
是卡死还是崩溃了?我暂时没遇到过,用的win7。编译的工程是给的demo还是另外自己建的? ...
我这个电脑装有plcopen,这个不会卡死,都是用的beremiz carefree1986 发表于 2020-2-14 12:27
我这个电脑装有plcopen,这个不会卡死,都是用的beremiz
可以将你自建的工程上传吗?我后面可以研究一下 win10 x64系统
打开工程会出现这个错误,
编译出现这个。
硬邦邦 发表于 2020-2-14 17:26
win10 x64系统
打开工程会出现这个错误,
是安装时自带的demo工程吗?
还没有在win10下测试过,问题不好定位,后面会测试和查一下BUG 是安装时自带的demo工程吗?
是的。自带的demo 落叶知秋 发表于 2020-2-13 23:39
本来打开上位机的方式是在快捷方式里写好了的,快捷方式是通过运行pythonw.exe,和带入一些运行参数来启 ...
1、无法引导的解决办法
1、1把原python卸载。使用本程序自带的python,自行复制python27.dll
1、2把ide安装在C盘根目录下
快捷方式的目标里自动生成 C:\Beremiz\Python27\pythonw.exe C:\Beremiz\DYPLC\dyplcide.py
这样就可以正常启动ide了。
2、正常打开ide后。打开项目程序。生成代码没法进行。是不是那里配置还是不对。如下图
正点原子的stm32f103 Mini开发板这个也分版本。现在是V3.X
没有仔细核对过。mini版本之间的区别。 本帖最后由 落叶知秋 于 2020-2-23 13:46 编辑
siemenswjl 发表于 2020-2-23 10:45
1、无法引导的解决办法
1、1把原python卸载。使用本程序自带的python,自行复制python27.dll
1、2把ide安 ...
在进行编译转换梯图的时候会先将[梯图]转成脚本语言,再将转成语言,最后将C语言文件编译成二进制文件,
在这3个转换过程当中,第一个和第二个流程是用到了跟Beremiz配套使用的转换程序matiec.exe,这个是Beremiz项目维护者提供的一个编译转换程序,
第三个把C语言编译成二进制的流程是使用gcc,使用gcc进行编译的时候需要路径设置,这个是在快捷方式里面【起始位置】那里设置好的。
看这个图片下面的提示信息,应该是卡在了第二个流程上,就是将转成语言过程中,这个过程中使用到了Python调用系统cmd去调用matiec编译代码文件的功能,
我看了下代码,应该是定位在文件 的_Compile_ST_to_SoftPLC(self)方法中,应该是那句使用了ProcessLogger(……)的代码,
里面使用了调用系统cmd的模块,不知道是不是Python调用系统cmd失败的问题,可以提供一下你操作系统的版本信息吗?我好查一下
另外,我手上正点原子的STM32_Mini板的版本是V3.41
编辑原因:修改错字 感觉它的方式不是很灵活,为什么不做成字节码解析的模式 mcu_lover 发表于 2020-2-23 13:55
感觉它的方式不是很灵活,为什么不做成字节码解析的模式
做成字节码解析的模式会更加灵活吗? 本帖最后由 siemenswjl 于 2020-2-23 15:14 编辑
落叶知秋 发表于 2020-2-23 13:43
在进行编译转换梯图的时候会先将[梯图]转成脚本语言,再将转成语言,最后将C语言文件编译成二 ...
系统:win7 x64旗舰版 SP1
ok。淘一块V3.41 MINI STM32 落叶知秋 发表于 2020-2-23 13:43
在进行编译转换梯图的时候会先将[梯图]转成脚本语言,再将转成语言,最后将C语言文件编译成二 ...
上工具调了一下,卡死的位置是在 findSupportedOptions 函数上,原因是打包的 matiec 缺少libgcc_s_seh-1.dll,补上即可
下载这个文件,解压缩到matiec文件夹下即可
肇恒博 发表于 2020-3-17 19:34
上工具调了一下,卡死的位置是在 findSupportedOptions 函数上,原因是打包的 matiec 缺少libgcc_s_seh-1 ...
非常谢谢你反馈的解决方案{:biggrin:}
matiec是我用msys对源码编译出来的,没有考虑到库的依赖,再次感谢 落叶知秋 发表于 2020-3-17 19:47
非常谢谢你反馈的解决方案
matiec是我用msys对源码编译出来的,没有考虑到库的依赖,再次感 ...
赞赞赞赞赞赞 太厉害了!~~~~ 标记一下,有空学习 你好,请问一下,运行beremiz刚开始确实DLL,把您的DLL下载放到Python27文件夹后,软件不提示缺少了,但是还是打不开,电脑桌面的软件图标是空白的,您知道是怎么回事吗 你好,安装完运行beremiz软件,先是提示DLL确实,解决完之后,双击打开软件没有任何反应,您知道是怎么回事吗?楼主 那个软件beremiz一直打不开,双击没有任何反应是什么情况呢 wawmmwzq 发表于 2020-5-27 16:51
那个软件beremiz一直打不开,双击没有任何反应是什么情况呢
快捷方式的图标空白的问题是因为我打包的脚本写的有问题,没有把图标资源文件打包进去,这个没关系的
双击了没反应的问题,你可以先参考下60楼的内容,如果还有问题可以再提出来 那个beremiz在win10上面打不开啊,楼主 楼主那软件打不开啊 落叶知秋 发表于 2020-5-27 17:30
快捷方式的图标空白的问题是因为我打包的脚本写的有问题,没有把图标资源文件打包进去,这个没关系的
双 ...
"E:\set up\beremiz\Python27\pythonw.exe" E:\set up\beremiz\DYPLC\dyplcide.py wawmmwzq 发表于 2020-5-27 18:13
"E:\set up\beremiz\Python27\pythonw.exe" E:\set up\beremiz\DYPLC\dyplcide.py
这个就是快捷方式目标的内容,楼主 wawmmwzq 发表于 2020-5-27 18:14
这个就是快捷方式目标的内容,楼主
把双引号去掉,或者把后面那一截也加上双引号,试一下 牛人一个! 落叶知秋 发表于 2020-5-27 17:30
快捷方式的图标空白的问题是因为我打包的脚本写的有问题,没有把图标资源文件打包进去,这个没关系的
双 ...
已经好了,楼主,但是那个软件我点击构建项目的时候,程序就一直显示未响应的状态,这个是啥原因呢 wawmmwzq 发表于 2020-5-27 20:06
已经好了,楼主,但是那个软件我点击构建项目的时候,程序就一直显示未响应的状态,这个是啥原因呢 ...
看帖子啊,77楼 您好,楼主,我这点击连接PLC后,下面console打印已经连接,请断开连接,传输plc的时候下面打印传输失败是什么原因呢 wawmmwzq 发表于 2020-5-28 10:12
您好,楼主,我这点击连接PLC后,下面console打印已经连接,请断开连接,传输plc的时候下面打印传输失败 ...
硬件连接的是什么?是第一次下载还是什么情况下出现的? 是第一次下载,连接的stm32f4探索版的 wawmmwzq 发表于 2020-5-28 10:27
是第一次下载,连接的stm32f4探索版的
你下位机控制器那边是自己改过的程序吗?我这边没有提供过stm32f4系列的RTE程序 落叶知秋 发表于 2020-5-28 10:52
你下位机控制器那边是自己改过的程序吗?我这边没有提供过stm32f4系列的RTE程序 ...
嗯嗯,我直接用你的,没有改,那是不是我需要改成stm32f4的rte程序,下进去才能连接成功呢,我刚刚给您说的连接失败的是用你的rte程序,就没有改 wawmmwzq 发表于 2020-5-28 11:00
嗯嗯,我直接用你的,没有改,那是不是我需要改成stm32f4的rte程序,下进去才能连接成功呢,我刚刚给您说 ...
根据你这边的反馈来看,可能你还需要多了解一些系统运行架构和流程方面的知识,目前这个帖子的内容还不属于一个成熟的可以直接拿来就用的项目,仍然处于测试验证的阶段,
大家可以拿来参考或研究其中的架构和实现方式,目前我也在用业余时间慢慢做一些补充和修正,具体进度还不会很严谨的给出来
说回你提出的问题,本贴提供的程序是在正点原子的stm32f103的mini开发板上做的测试样例,如果你需要在其他的硬件平台运行,则需要:
1.把关于stm32f103 mini板的一些底层处理代码替换,如flash的规划和擦写,串口的配置,io的配置等;
2.把电脑端的Beremiz IDE的源代码中(主要是DYPLC里面的内容),添加修改处理编译C代码部分的GCC参数内容,要重新修改成对应的芯片平台,以及代码段的地址分配;
其他一些通用的模块就不需要动了,前提是你要先对整体的架构有了一个比较直观的了解,知道哪些应该改,哪些不应该改。 佩服支持
页:
[1]
2