搜索
bottom↓
12
返回列表 发新帖
楼主: 落叶知秋

[源码]开源PLC项目Beremiz的RTE在stm32f1上实现

  [复制链接]

出0入0汤圆

发表于 2020-10-14 09:04:59 | 显示全部楼层
楼主你好,为什么要分boot跟rte呢,直接rte不行吗,rte也是通过jlink下载吗

出40入42汤圆

 楼主| 发表于 2020-10-14 10:31:54 | 显示全部楼层
czy136140452 发表于 2020-10-14 09:04
楼主你好,为什么要分boot跟rte呢,直接rte不行吗,rte也是通过jlink下载吗

直接RTE完全没有问题的,添加boot是为了可以远程更新RTE

出0入0汤圆

发表于 2020-10-14 11:50:48 | 显示全部楼层
落叶知秋 发表于 2020-10-14 10:31
直接RTE完全没有问题的,添加boot是为了可以远程更新RTE

rte跟plc程序都是通过串口更新的吗

出0入0汤圆

发表于 2020-10-14 12:21:30 | 显示全部楼层
czy136140452 发表于 2020-10-14 11:50
rte跟plc程序都是通过串口更新的吗

plc_app_abi_t结构体怎么实现跟上位编译的bin文件对应的呢

出40入42汤圆

 楼主| 发表于 2020-10-14 13:38:24 | 显示全部楼层
czy136140452 发表于 2020-10-14 12:21
plc_app_abi_t结构体怎么实现跟上位编译的bin文件对应的呢

上位机编译BIN文件的时候会指定地址,下载到RTE里面后,RTE根据指定地址进行访问

出0入0汤圆

发表于 2020-10-14 13:45:24 | 显示全部楼层
落叶知秋 发表于 2020-10-14 13:38
上位机编译BIN文件的时候会指定地址,下载到RTE里面后,RTE根据指定地址进行访问 ...

bereniz安装文件夹下跟stm32有关的源文件也参与编译吗

出40入42汤圆

 楼主| 发表于 2020-10-14 13:50:47 | 显示全部楼层
czy136140452 发表于 2020-10-14 13:45
bereniz安装文件夹下跟stm32有关的源文件也参与编译吗

只有相关的LD文件和一些ST编译成C的宏定义和流程文件参与编译

出0入0汤圆

发表于 2020-11-2 21:03:50 | 显示全部楼层
楼主,请问您现在有没有Linux系统的相关经验呢,想和您交流一下,目前我用的板子是MP157

出40入42汤圆

 楼主| 发表于 2020-11-3 08:27:06 | 显示全部楼层
可强的Autumn 发表于 2020-11-2 21:03
楼主,请问您现在有没有Linux系统的相关经验呢,想和您交流一下,目前我用的板子是MP157 ...

楼主Linux不熟

出0入0汤圆

发表于 2020-12-5 16:30:39 | 显示全部楼层
安装包里面没有发现 keil相关的工程,请问在哪里可以下到?

出100入101汤圆

发表于 2020-12-5 16:55:27 来自手机 | 显示全部楼层
研究这个挺费精力的,lz是工作相关,还是纯爱好?

出40入42汤圆

 楼主| 发表于 2020-12-5 22:12:46 来自手机 | 显示全部楼层
tide.sun 发表于 2020-12-5 16:30
安装包里面没有发现 keil相关的工程,请问在哪里可以下到?

rte那个压缩包

出0入0汤圆

发表于 2020-12-5 23:23:12 | 显示全部楼层
佩服支持

出0入0汤圆

发表于 2020-12-7 10:55:57 | 显示全部楼层

DYPLC_RTE-20191214.zip(7.17 MB),楼主指的是这个压缩包吗?

这个压缩包解压之后,应该放在哪个目录?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出40入42汤圆

 楼主| 发表于 2020-12-7 17:23:25 来自手机 | 显示全部楼层
tide.sun 发表于 2020-12-7 10:55
DYPLC_RTE-20191214.zip(7.17 MB),楼主指的是这个压缩包吗?

这个压缩包解压之后,应该放在哪个目录?

rte是下位机工程,下载到stm32f103里面的
截图是上位机,运行快捷方式启动
不明白看一下帖子

出0入0汤圆

发表于 2020-12-8 10:44:31 | 显示全部楼层
落叶知秋 发表于 2020-12-7 17:23
rte是下位机工程,下载到stm32f103里面的
截图是上位机,运行快捷方式启动
不明白看一下帖子 ...

您好,看了上面的留言帖子,确实图片上的是上位机的,而RTE是下位机的。
还有一个问题就是,RTE楼主有源码,可以下载,想问一下正点原子的stm32f103 Mini开发板 原来的源码有吗?能给发一下,这样我自己对比就知道哪些是改了的地方?

出0入0汤圆

发表于 2020-12-8 18:32:37 | 显示全部楼层
你好,在Beremiz\DYPLC\RTE\src目录下的两个文件夹,platform和plc分别具体是存放什么用途的内容,假如将此工程移植到STM32F439上,具体哪些地方需要修改?麻烦楼主指导一下。

出40入42汤圆

 楼主| 发表于 2020-12-8 18:52:27 | 显示全部楼层
tide.sun 发表于 2020-12-8 18:32
你好,在Beremiz\DYPLC\RTE\src目录下的两个文件夹,platform和plc分别具体是存放什么用途的内容,假如将此 ...

platform是与硬件平台相关的底层或是中间层内容

plc是与硬件无关的PLC流程与框架内容

其实分层没有做得很好,后面可能会调整下

出0入0汤圆

发表于 2020-12-9 13:56:30 | 显示全部楼层
本帖最后由 tide.sun 于 2020-12-9 13:59 编辑

你好,还有几个问想请教一下:

1. Beremiz 目录 与 DYPLC_RTE 目录下文件对比。
(网盘链接:https://pan.baidu.com/s/1NUIXou_bBnzMct16j_WAkQ 下的)Beremiz\DYPLC\RTE\src目录下,有两个文件夹:plc 和 platform
(DYPLC_RTE-20191214.zip 解压后的)DYPLC_RTE\src           目录下,有多个文件夹:plc 和 platform  ,还多着comm、common、module、test、boot_main、rte_main。
多着的这些文件是不是,因为多了modbus模块而添加的?
如果两个目录正常情况下,是不是应该完全一致?

2. Beremiz 目录中platform中C代码是不是应该与DYPLC_RTE目录中platform  完全保持一致?才能保证boot烧录后,APP烧录后,PLC加载后能正常启动?

3. 在楼主现有的程序里是不是可以添加os操作系统呢?

4. boot_main、rte_main是单独存在的,在Beremiz 目录中platform是不可以存在的,对吗?

5. DYPLC_RTE\src\platform\AtkMini目录下:stm32f103xC-app.ld 与 stm32f103xC-rte.ld是什么文件,用途是什么?

出40入42汤圆

 楼主| 发表于 2020-12-9 15:31:20 | 显示全部楼层
tide.sun 发表于 2020-12-9 13:56
你好,还有几个问想请教一下:

1. Beremiz 目录 与 DYPLC_RTE 目录下文件对比。

这里将电脑端的Beremiz和DYPLC统称为上位机,涉及到RTE的统称为下位机

1. 上位机的Beremiz\DYPLC\RTE\src目录,是给上位机调用GCC编译PLC应用程序对应硬件平台的BIN使用的
    下位机的DYPLC_RTE\src目录,是下位机硬件平台编译烧录文件时,需要用到的文件
    为什么会这样?因为Beremiz是编译型PLC,直接把PLC应用转换成机器码,下载到目标平台运行,所以有些跟硬件挂钩的东西需要跟目标平台共用
    按理来说,上下位机需要同步共用的那部分文件,但在这个帖子给出的文档里面,我当初打包的时候没有把不需要的部分删掉,所以会有些混淆

2. 同第1点,platform里面就是对应的硬件平台目录需要一致,其他不需要,上位机用不着

3. 可以加OS,但楼主暂时没有定这个计划,估计如果继续丰富功能的话,应该是要的

4. 同第1/2点

5. ld文件主要给上位机的GCC编译用的,要确定程序地址空间

以上的问题都是涉及到整个Beremiz的一些机制问题,可能三言两语说不清,最好是看源码,后面楼主可能会写些文档来说

出0入0汤圆

发表于 2020-12-16 16:06:37 | 显示全部楼层
你好,想请教一下几个问题:
1. 电脑端的Beremiz和DYPLC统称为上位机,上位机中Beremiz\DYPLC\RTE\src目录下,有两个文件夹:plc 和 platform,但是没有modbus相关的代码,而
   RTE的统称为下位机,下位机中DYPLC_RTE\src 目录下,有多个文件夹:plc 和 platform  ,还多着comm、common、module、test、boot_main、rte_main,
   这样两者不匹配,当把boot的烧写进去,然后,再把rte的烧写进去, 后在进行启动PLC,进入Debug模式,如何实现帖子中PC端的Modbus Poll 进行模拟的测试?

出40入42汤圆

 楼主| 发表于 2020-12-16 17:38:37 | 显示全部楼层
tide.sun 发表于 2020-12-16 16:06
你好,想请教一下几个问题:
1. 电脑端的Beremiz和DYPLC统称为上位机,上位机中Beremiz\DYPLC\RTE\src目录 ...

把boot和RTE烧写如单片机后,上位机下载PLC应用程序,然后电脑端接个串口到单片机,启动Modbus Poll设置连接

步骤就是上面描述的那样,至于单片机的接线,看代码和手册,接对应的管脚

出0入0汤圆

发表于 2020-12-24 15:35:53 | 显示全部楼层
你好,想请教一下几个问题:
前提描述:
电脑端的Beremiz和DYPLC统称为上位机,上位机中Beremiz\DYPLC\RTE\src目录下,有两个文件夹:plc 和 platform,但是没有modbus相关的代码。
下位机中DYPLC_RTE\src 目录下,有多个文件夹:plc 和 platform  ,还多着comm、common、module、test、boot_main、rte_main。

测试1:连接烧写器,把boot和RTE烧写如单片机。连接miniusb串口后,上位机可下载PLC应用程序,可进入debug状态。可以与楼主帖子介绍一致。
测试2:PC机启动modbus poll 选择串口的问题,如果选择Beremiz 软件中cofig的 一个串口,会出现 bytes missing error的错误,按我的理解,modbus poll 与Beremiz 软件应该使用的是两个不同的串口,这样理解正确吗?

问题1:在下位机中DYPLC_RTE\src 目录下,存在module文件夹以及源代码;但是在rte_main()主函数中并没有发现modbus相关的初始化以及调用,这是个问题?
问题2:电脑端的Beremiz和DYPLC统称为上位机中,没有modbus相关的代码,那么modbus slave 功能是如何实现的?

出40入42汤圆

 楼主| 发表于 2020-12-24 16:24:35 | 显示全部楼层
tide.sun 发表于 2020-12-24 15:35
你好,想请教一下几个问题:
前提描述:
电脑端的Beremiz和DYPLC统称为上位机,上位机中Beremiz\DYPLC\RTE\ ...

1. modbus的串口不能跟上位机Beremiz用的同一个端口号,现在的代码里是把这两个功能分开的,RTE用的串口资源可以在plc_config.h文件里找到

2. 上位机在编程的时候,定义一个变量,映射了modbus的资源数据(特定格式),见楼主位的图,下载到RTE后,RTE在运行应用代码时,会对modbus进行初始化和启动操作
    modbus的代码在你找到的那个文件夹里面,至于有没有使用,调试仿真打个断点就知道了,RTE调用硬件资源的机制是通过一些宏定义来简化代码的,可以看看plc_iom.c/.h的部分

出0入0汤圆

发表于 2020-12-24 18:25:42 | 显示全部楼层
落叶知秋 发表于 2020-12-24 16:24
1. modbus的串口不能跟上位机Beremiz用的同一个端口号,现在的代码里是把这两个功能分开的,RTE用的串口 ...

楼主:
1.  串口问题,在plc_config.h文件里找到两个串口定义,这个可以理解;
2.  【上位机在编程的时候,定义一个变量,映射了modbus的资源数据(特定格式),见楼主位的图,下载到RTE后,RTE在运行应用代码时,会对modbus进行初始化和启动操作】能具体在详细说明一下嘛,可以传个代码或是图片吗?
感谢。

出40入42汤圆

 楼主| 发表于 2020-12-24 18:38:49 | 显示全部楼层
tide.sun 发表于 2020-12-24 18:25
楼主:
1.  串口问题,在plc_config.h文件里找到两个串口定义,这个可以理解;
2.  【上位机在编程的时候 ...

楼主位的第一张图片中,LocalVar7的“位置”属性里有特殊的数据格式,就是第3张图里modbus的配置数据

LocalVar7下载到RTE后,RTE在检测和初始化变量的时候,就会根据LocalVar7的特殊数据格式,配置下位机modbus模块

具体的代码可以看一下plc_mbs.c里面,bool PLC_IOM_LOCAL_CHECK(uint16_t i) 这个函数的处理,跟踪一下代码就能知道流程了

出0入0汤圆

发表于 2021-1-23 16:24:57 | 显示全部楼层
请问可以请教你一些问题吗,关于你的这个项目(有偿)
我的邮箱:68580533@qq.com

出40入42汤圆

 楼主| 发表于 2021-1-23 17:20:59 来自手机 | 显示全部楼层
shaoben 发表于 2021-1-23 16:24
请问可以请教你一些问题吗,关于你的这个项目(有偿)
我的邮箱:

有问题可以直接回帖

出0入0汤圆

发表于 2021-4-10 23:23:39 | 显示全部楼层
感谢啊,两年都在找这个软件的资料,想业余时间研究一下。

出0入0汤圆

发表于 2021-6-7 14:31:30 来自手机 | 显示全部楼层
你好 楼主我用你的软件编译测试的时候报:C构建损坏,看运行报错位置是ProjectController.py中的builder.build()时产生的错误。望楼主明示!

出40入42汤圆

 楼主| 发表于 2021-6-7 17:13:56 | 显示全部楼层
dcl_yufeimen 发表于 2021-6-7 14:31
你好 楼主我用你的软件编译测试的时候报:C构建损坏,看运行报错位置是ProjectController.py中的builder.bu ...

看一下77楼的回帖能不能解决你的问题

出0入0汤圆

发表于 2021-6-7 20:57:46 | 显示全部楼层
落叶知秋 发表于 2021-6-7 17:13
看一下77楼的回帖能不能解决你的问题

谢谢楼主!我刚找到原因了,是因为我将项目->config中的目标类型误勾选成了Generic类型导致编译不正确。

出0入0汤圆

发表于 2021-6-8 16:39:16 | 显示全部楼层
落叶知秋 发表于 2020-2-12 19:31
谢谢支持。之前另一位坛友给我寄了一套硬件,比较偏运动控制的设计,你的这个设计比较偏正常的plc功能, ...

楼主还在吗,可以加个V认识下吗,我也是搞这个,最近想用这个倒腾倒腾,希望可以跟你多沟通交流。

出0入0汤圆

发表于 2021-8-11 08:36:22 | 显示全部楼层
您好 楼主  我想咨询一下 stm32f103xC-app.ld和stm32f103xC-rte.ld这两文件分别代表什么 网上可以直接下载还是需要自己编写呢

出40入42汤圆

 楼主| 发表于 2021-8-11 08:53:07 | 显示全部楼层
可强的Autumn 发表于 2021-8-11 08:36
您好 楼主  我想咨询一下 stm32f103xC-app.ld和stm32f103xC-rte.ld这两文件分别代表什么 网上可以直接下载 ...

ld文件是GCC链接时使用的脚本文件,里面规定了一些地址信息,以及函数的放置区域,跟整个运行框架有些关系,
因为runtime那边是根据固定地址来跟应用(App)进行交互的

stm32f103xC-app.ld:
是上位机链接应用程序时使用的,调用GCC完成

stm32f103xC-rte.ld:
是runtime使用的,如果不用GCC链接就不太需要,
但runtime的一些函数放置的地址也是要规定的,app也要跟rte交互,这个地址的指定方法附件的工程里有给出

出0入0汤圆

发表于 2021-9-15 22:26:26 | 显示全部楼层
大佬 我想咨询一下 最终下载到开发板中的是.bin文件是吧,您这里有用到静态链接库了么

出40入42汤圆

 楼主| 发表于 2021-9-16 08:34:10 | 显示全部楼层
可强的Autumn 发表于 2021-9-15 22:26
大佬 我想咨询一下 最终下载到开发板中的是.bin文件是吧,您这里有用到静态链接库了么
...

runtime固件是不挑选形式的,通过下载器或者芯片内置的bootloader下载runtime固件都可以
PLC编程软件的应用程序最终会编译成.bin文件下载到芯片上运行
目前给出的工程都是源码,没有用到依赖其他的静态库

出0入0汤圆

发表于 2021-12-17 12:55:25 | 显示全部楼层
感谢楼主无私分享

出0入0汤圆

发表于 2023-6-20 11:22:09 | 显示全部楼层
本帖最后由 abcd8341 于 2023-6-21 07:52 编辑

感谢楼主无私分享

出50入135汤圆

发表于 2023-7-6 15:36:07 | 显示全部楼层
楼主给的RTE 里面,这里是不是有问题?我看STM32F103RC是48KB的RAM,这里定义超出范围了.哪个大侠是否可以解析下为何这样定义?
#define RAMADDR_START                                                                (0x20000000) //RAM起始地址
#define RAM_SIZE_ALL                                                                (0xC000)     //1100,0000,0000,0000=11,0000*1024=48KB
#define RAMADDR_END                                                                        (RAMADDR_START + RAM_SIZE_ALL) //栈底地址48K
#define RAMADDR_START_RTE                                                (RAMADDR_START)
#define RAM_SIZE_RTE                                                                (0x6000)     //0110,0000,0000,0000=011000*1024=0x18*1204=(16+8)K=24K
#define RAMADDR_END_RTE                                                        (RAMADDR_START_RTE + RAM_SIZE_RTE) //48K+24K=72K
#define RAMADDR_START_APP                                                (RAMADDR_END_RTE)
#define RAM_SIZE_APP                                                                (0x6000)    //24K
#define RAMADDR_END_APP                                                        (RAMADDR_START_APP + RAM_SIZE_APP)  //72K+24K=96K
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 05:52

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表