基于rt thread smart构建EtherCAT主站

article/2025/8/25 21:53:57

我把源码开源到到了gitee,https://gitee.com/rathon/rt-thread-smart-soem
有兴趣的去可以下载下来跑一下
软件工程推荐用vscode 打开。rt thread smart的教程可以参考官网资料,这里就不多阐述了。

在这里插入图片描述
用的是100ask的imx6ull开发板,雷赛的dm3e-556步进电机。实验需要用到两个网口,一个走tcp数据(基于lwip协议栈),一个走ethercat数据(基于soem)。
工程目录如下
在这里插入图片描述
tcp目录下为实验用到的应用程序代码。
在这里插入图片描述

实验方案

PC通过tcp/ip通讯向rt smart开发板发送报文,rt smart后台运行“tcp”进程。tcp进程的NetDataThread线程实时接收PC数据,并通过共享内存将数据转发给内核空间的“simpletest”线程。simpletest线程实时接收进程发来的数据,解析数据内容,并通过全局变量将参数传递给EtherCAT定时器中断服务函数。根据tcp传输数据,控制EtherCAT步进电机运转。
数据为“left”,电机正转
数据为“right”,电机反转
数据为“stop”,电机停止运动
数据为“up”,电机加速
数据为“down”,电机减速

1.首先,编译内核代码,生成rtthread.imx等文件。
在这里插入图片描述

2.接着编译应用程序代码,实验所用代码为tcp.c代码,编译生成tcp.elf文件。然后将tcp.elf文件拷贝至emmc或者sd卡中。

scons --app=tcp

可以通过 100ask_imx6ull_flashing_tool 烧录工具将 rt-smart 内核固件文件 rtthread.imx,通过 USB 加载至内存中运行。
在这里插入图片描述
此时系统运行后,会打印出如下数据
在这里插入图片描述
在这里插入图片描述
然后后台运行tcp.elf程序

./tcp.elf &

然后用上位机与rt smart建立tcp连接,我这里用的是野火的上位机。
在这里插入图片描述
连接成功后打印数据如下:
在这里插入图片描述
最后通过上位机发送“left”、“right”、“up”、“down”、“stop”字符串可以实现电机的运动。
pc的ip地址为192.168.1.100
开发板的ip地址为192.168.1.30:7575.

实验效果如下

基于rt thread smart构建EtherCAT主站

软件架构

在这里插入图片描述

rt thread的lwip协议栈

在这里插入图片描述
RT-Thread 的 lwIP 移植在原版的基础上,添加了网络设备层以替换原来的驱动层。和原来的驱动层不同的是,对于以太网数据的收发采用了独立的双线程结构,erx 线程和 etx 线程在正常情况下,两者的优先级设置成相同,用户可以根据自身实际要求进行微调以侧重接收或发送。

lwip接收过程
在这里插入图片描述
soem收发函数
在这里插入图片描述


http://chatgpt.dhexx.cn/article/JDy392Yg.shtml

相关文章

Rtthread线程源码分析

Rtthread线程源码分析 /*** This function will create a thread object and allocate thread object memory* and stack.** param name the name of thread, which shall be unique* param entry the entry function of thread* param parameter the parameter of thread ent…

rtthread套娃移植

和大家分享下将基于rtthread的项目移植到其他平台的经验。 背景 最近做了一个物联网项目移植。原先的项目使用的硬件平台为stm32f401sim800c(mcu 2G modem),软件平台为rtthread 4.0.1。移植到的新平台为BC25(nb modem),软件平台为BC25 opencpu sdk&am…

关于RT thread系统节拍时钟的配置

关于RT thread系统节拍时钟的配置 -----本文基于rt-thread-3.1.3版本编写 首先,使用RTthread OS时,要配置(或者明白)它的系统节拍rt_tick(划重点)。 系统节拍 系统节拍是特定的周期中断,可以…

rtthread学习

RT-Thread 内核实现与应用开发实战指南 1、数据类型rtdef.h 中的数据类型 在裸机系统中,他们统统放在一个叫栈的地方,栈是单片机 RAM 里面一段连续的内存空间,栈的大小一般在启动文件或者链接脚本里面指定, 最后由 C 库函数_m…

Rtthread 内存管理

Rtthread 堆内存管理 #define HEAP_MAGIC 0x1ea0 struct heap_mem {/* magic and used flag */rt_uint16_t magic; //魔数,固定值rt_uint16_t used; //使用标记,1为该内存已经被使用rt_size_t next, prev; //双向链表偏移 }; #define MIN_SIZE 12 //一…

RT-Thread学习

一、入门 RT-Thread官网  官网文档   Rt-thread学习文档  RT-Thread官方bilibili视频号   GD32官网 教你动手移植RT-Thread到国产MCU    如何移植RT-Thread到GD32单片机上(非studio版) 东方青讲RT-Thread  RT-Thread内核入门指南 RT-Thread…

RT Thread之ADC电压读取

官网连接:https://docs.rt-thread.org/#/rt-thread-version/rt-thread-standard/programming-manual/device/adc/adc 一、配置步骤: 1、用cubemx配置底层; 2、cubemx配置好的文件替换之前的配置文件; 3、修改Kconfig文件&…

rtthread mqtt

rtthread 以太网 (LAN8720A) 基于以太网的应用mqtt,在**rtthread 以太网 (LAN8720A)**中已经实现了tcp/ip通信正常,接下需要启用mqtt模块, 嵌入式mqtt设备 rtthread 启用mqtt 在rtthread中田间 pahomqtt 软件包,并右键详细配置…

【RTThread】修改Finsh打印串口波特率

这里需要注意得是一定要在hw_board_init初始化完成之后修改串口波特率。 /* 串口设备句柄 */static rt_device_t uart_device RT_NULL;/* 查找系统中的串口设备 */uart_device rt_device_find("uart1"); // 这里/* 串口配置结构体,使用serial.h的宏定义…

RT Thread之 Uart2 操作

官网连接:https://docs.rt-thread.org/#/rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart 通过前面的学习,基本上RT Thread操作步骤都是,先配置单片机底层,然后再通过应用层映射到底层,最…

rtthread

链表 初始化双向链表 rt_inline void rt_list_init(rt_list_t *l) {l->next l->prev l; }插入 rt_inline void rt_list_insert_after(rt_list_t *l, rt_list_t *n) {l->next->prev n;n->next l->next;l->next n;n->prev l; }在NODE1后面插入节…

RT Thread根据开发板制作BSP方法

之前一直不懂怎么使用RT Thread的软件包,感谢网上的大神,看了你们的博客后大概了解一些,在此做下记录。用RT Thread软件包需要RT Thread的系统,但是RT Thread和RT Thread nano不一样,具体区别见 RT Thread官网&#xf…

rtthread开关中断

1 rtthread开关中断函数(cortex-m) /** rt_base_t rt_hw_interrupt_disable();*/ .global rt_hw_interrupt_disable .type rt_hw_interrupt_disable, %function rt_hw_interrupt_disable:MRS r0, PRIMASKCPSID IBX LR/** void rt_hw_interrupt_enable(rt_base_t le…

RTThread入门

RT-Thread入门 1.初识RT-Thread 嵌入式系统是一种完全嵌入在装置或设备内部,为满足特定需求而设计的计算机系统,譬如生活中常见的嵌入式系统就有:电视机顶盒、路由器、电冰箱、微波炉与移动电话等。 嵌入式操作系统是应用于嵌入式系统的软…

什么是RT-Thread?

一、RT-Thread的定义 RT-Thread,全称是 Real Time-Thread, 是一款主要由中国开源社区主导开发的开源实时操作系统(许可证GPLv2),包含了实时、嵌入式系统相关的各个组件:TCP/IP协议栈、图形用户界面等。 相…

Redis启动失败的原因及解决方法

跑了近半年的Redis,今天早上来开启电脑运行程序的时候发现提示无法连接redis,暗想自己明明设置了开机自启的阿,以前也一直没问提,今天怎么就连不上了重启了下redis就提示如下错误 网上搜了好久都没找到解决办法,后来想起来去查看了下redis的日志文件 发现提示当前版本的redis无…

redis启动、获取密码及修改密码

一、启动redis服务的两种方式 查看密码是以redis服务已启动的前提下进行的,可直接在服务中右键启动redis或者安装根目录运行cmd输入《redis-server.exe》(不推荐不推荐不推荐,说三遍,命令行启动好像有bug,启动后redis能用&#x…

CentOS安装Redis及redis启动与关闭、配置(详细)

在项目使用redis过程中,在centos7上部署redis,查找相关资料并总结、记录,以备后续查看。 目录 一、Redis介绍 二、在CentOS上部署Redis 1、Redis安装包可以从官网上下载或者直接命令下载 升级到gcc 9.3: 3、Redis配置文件…

Redis启动和连接

一)Redis简介 Redis不是简单的键值存储,它实际上是一个数据结构服务器,支持不同类型的值。 备注:由于我电脑是32位操作系统,所有就不提供redis软件下载地址了,请到官网下载使用。 软件解压之后&#xff0…

windows下Redis启动闪退问题解决经验汇总

最近使用Redis又遇到启动闪退的问题,之前记录的解决办法也失败了,一番研究后总算得到解决,感觉已经遇到了网上常见的各种问题,下面总结下。 我下载的是免安装版,解压便可使用。 官网下载传送门:Releases …