SOEM控制伺服电机

2023-05-16

我只完成了pv模式,对于csp模式我不知道是哪里出现了问题,有知道的可以在下方评论
这个代码我的pv模式可以正常运行和控制电机,csp模式可以使能电机,但是电机不转

#include <stdio.h>
#include <sys/time.h>
#include <unistd.h>
#include <signal.h>

#include "ethercattype.h"
#include "nicdrv.h"
#include "ethercatbase.h"
#include "ethercatmain.h"
#include "ethercatdc.h"
#include "ethercatcoe.h"
#include "ethercatfoe.h"
#include "ethercatconfig.h"
#include "ethercatprint.h"

char IOmap[4096];
uint16 control;
int16 speed;
uint16 control_world;
uint16 state;
int32 curr_position;
int32 position;
int32 position2;
int add_position;
int i;
int ret;
char run = 1;
// 使从站进入op状态
void slavetop(int i)
{
	ec_slave[i].state = EC_STATE_OPERATIONAL;
	ec_send_processdata();
	ec_receive_processdata(EC_TIMEOUTRET);
	ec_writestate(0);

}
void endsignal(int sig)
{
	run = 0;
	printf("EtherCAT stop.\n");
	//signal( SIGINT, SIG_DFL );
}
// 写目标位置
void position_to_add(int32 position)
{
	uint8 p1,p2,p3,p4,p5,p6;
	p1 = position % 255;
	p2 = position / 255;
	p3 = p2 % 255;
	p4 = p2 / 255;
	p5 = p4 % 255;
	p6 = p4 / 255;
	ec_slave[0].outputs[0x0002] = p1;
	ec_slave[0].outputs[0x0003] = p3;
	ec_slave[0].outputs[0x0004] = p5;
	ec_slave[0].outputs[0x0005] = p6;
	printf("%d--%d--%d--%d--%d\n",ec_slave[0].outputs[0x0002],ec_slave[0].outputs[0x0003],p5,p6,curr_position);
}
// 读取当前位置
int32 read_position()
{
	return ec_slave[0].outputs[0x000d] + (ec_slave[0].outputs[0x000e] << 8) + (ec_slave[0].outputs[0x000f] << 16);
}
void simpletest(char *ifname)
{
	if(ec_init(ifname))
	{
		printf("start ethernet at %s\n",ifname);
		if ( ec_config_init(FALSE) > 0 )
		{
			printf("found %d slave on the bus\n",ec_slavecount);
			ec_config_map(&IOmap);
			ec_configdc();
			for(i=0;i<ec_slavecount;i++)
			{
				printf("slave%d to op\n", i);
				slavetop(i);
			}
			if(ec_slave[0].state == EC_STATE_OPERATIONAL)
			{
				ec_writestate(0);
				ec_configdc();
				while(run)
				{
					state = ec_slave[0].outputs[0x000a] + (ec_slave[0].outputs[0x000b]<<8);

					if((state & 0x004f) == 0x0040)
					{
						ec_slave[0].outputs[0x0000] = 0x06;
						ec_slave[0].outputs[0x0001] = 0x00;
					ec_slave[0].outputs[0x000c] = 0x08;// csp模式是8,pv模式是3
						printf("slave to op40,%X--%X\n",control_world,state);
					}
					else if((state & 0x006f) == 0x0021)
					{
						ec_slave[0].outputs[0x0000] = 0x07;
						ec_slave[0].outputs[0x0001] = 0x00;
						printf("slave to op21\n");
					}
					else if((state & 0x006f) == 0x0023)
					{
						ec_slave[0].outputs[0x0000] = 0x0f;
						ec_slave[0].outputs[0x0001] = 0x00;
						printf("slave to op23\n");
						printf("mode:%d\n",ec_slave[0].outputs[0x0c]);
					}
					else if((state & 0x006f) == 0x0027)
					{
						//pv模式写入速度
						//speed = 25000;
						//ec_SDOwrite(1, 0x60ff, 0x00, FALSE, sizeof(speed), &speed, EC_TIMEOUTRXM);
						ec_slave[0].outputs[0x0000] = 0x1f;
						ec_slave[0].outputs[0x0001] = 0x00;
						// 加速减速运行
						if(state == 0x1237)
						{
							if(i < 100)
							{
								add_position++;
							}
							if(i > 5000 && i < 5100)
							{
								add_position--;
							}
							i++;
						}
						curr_position = read_position();// 读取位置
						position = curr_position + 10;
						position_to_add(position);// 将位置写入
					}
					else
					{
						ret = sizeof(control);
						ec_SDOread(1,0x6040,0x00,FALSE,&ret,&control,EC_TIMEOUTRXM);
						printf("why what who%X\n",control);
					}
					ec_send_processdata();
					ec_receive_processdata(EC_TIMEOUTRET);
					usleep(500);// 周期大小
				}
			}
			else
			{
				printf("slave again to op\n");
			}
		}
		else
		{
			printf("no slave on the bus\n");
		}
	}
	else
	{
		printf("no ethernet card\n");
	}
}
int main(int argc, char *argv[])
{
	printf("SOEM (Simple Open EtherCAT Master)\nSimple test\n");
	signal( SIGINT , endsignal );

	if (argc > 1)
	{      
		simpletest(argv[1]);
	}
	else
	{
		printf("Usage: simple_test ifname1\nifname = eth0 for example\n");
	}   

	printf("End program\n");
	return (0);
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SOEM控制伺服电机 的相关文章

  • linux软件管理

    1 使用网络安装资源安装软件 1 切换目录 cd etc yum repos d 2 建立文件 vim westos repo 文件必须以 repo结尾 redhat 仓库名称 name 61 haha 对软件源的描述 baseurl 61
  • 移除JSONArray中匹配的元素

    移除JSONArray中匹配的元素 helper isBookOrChange获取类中isBookOrChange值 64 param jarr 64 return 64 author taiyang public JSONArray ge
  • 移动平均法又称滑动平均法、滑动平均模型法(Moving average,MA)

    转自http jingji 100xuexi com view otdetail 20130625 230f09b0 6e36 473b 8830 7f2b873a5252 html 什么是移动平均法 移动平均法是用一组最近的实际数据值来预
  • centos7 结束多pid同名进程脚本文件

    centos7 结束多pid同名进程脚本文件 创建脚本 vi k sh 输入脚本内容 PIDS 61 96 ps e awk 39 0 9 0 9 0 9 39 1 39 printf 34 d 34 1 39 96 echo PIDS k
  • Docker之Linux(Centos)安装

    系统 Docker官网 Home Docker 关闭防火墙和关闭SELinux都是因为我使用虚拟机安装了纯净的centos系统 非必需 关闭防火墙 systemctl stop firewalld service 关闭防火墙 systemc
  • 微信小程序开发工具格式化代码快捷键以及更改快捷键

    Alt 43 Shift 43 f 如果不喜欢默认可以自定义更改 注意事项
  • 最新UNI-APP 安卓本地(离线)打包(图文详细教程)

    uni app 官方文档地址 原生开发者支持 Android Studio 下载地址 xff1a Download Android Studio and SDK tools Android Developers App离线SDK下载 xff
  • Git 命令行学习笔记( 图解 )

    Git 官网 分布式版本控制工具 可以团队协作合作开发 代码合并等 github 和 国产 码云gitee 都是代码托管工具就是远程仓库 下载可以去官网或者去腾讯软件中心下载 官网有时候下载很慢 腾讯软件中心 如果有腾讯电脑管家直接管家下载
  • Laravel安装与初始化

    下载Laravel 使用 composer 安装 首先composer切换成中国镜像 下载更快 composer config g repo packagist composer https packagist phpcomposer co
  • 虚拟机安装Centos图文安装教程

    清华大学开源软件镜像站 Tsinghua Open Source Mirror 清华镜像 http mirrors aliyun com 阿里云镜像 vm虚拟机下载 VMware虚拟机中文版官方下载 虚拟机 华军软件园 虚拟机 安装 错误1
  • 虚拟机LNMP图文安装教程(一)

    xshell 链接虚拟机 centos 7 ip addr 查看本地IP地址 安装LNMP LNMP 官网 LNMP一键安装包 CentOS RadHat Debian Ubuntu下自动编译安装Nginx PHP MySQL PHPMyA
  • 虚拟机LNMP操作记录(二)

    netstat nltp 查看当前端口 LNMP php多版本 lnmp文件目录里 运行 install sh mphp MySQL连接 更换环境变量的PHP版本 cd usr bin ll grep php rm rf php php f
  • Deep Learning 最优化方法之Momentum(动量)

    本文是Deep Learning 之 最优化方法系列文章的Momentum xff08 动量 xff09 方法 主要参考Deep Learning 一书 整个优化系列文章列表 xff1a Deep Learning 之 最优化方法 Deep
  • phpStudy redis设置密码

    使用框架 链接redis时 xff0c 报错 xff1a AUTH 96 failed ERR Client sent AUTH but no password is set tcp 127 0 0 1 6379 解决方案一 xff1a 解
  • Swoole小练习之Tcp传输

    话不多说直接上代码 注意 我使用的端口都是一台服务器上的 具体实现应该是跨服务器的 通过Tcp传输 客户端 同步客户端 client 61 new Swoole Client SWOOLE SOCK TCP if client gt con
  • php workerman入门之运行起来

    如果你有服务器的话可以使用服务器操作或者学习 如果没有请安装一个虚拟机并安装php环境 可以参考我之前的文章 Windows安装虚拟机图文安装教程 山山河川的博客 CSDN博客 虚拟机LNMP图文安装教程 一 山山河川的博客 CSDN博客

随机推荐

  • php workerman入门之搭建websocket服务

    依旧参考官网 简单的开发示例 workerman手册 示例二 lt php use Workerman Worker use Workerman Connection TcpConnection require once DIR vendo
  • workerman+TP6实战网站客服系统之项目初始化

    TP6 官方手册 安装 ThinkPHP6 0完全开发手册 看云 安装TP6 composer create project topthink think tp6 nbsp 报错 nbsp 解决问题 PHP默认把这个 proc open 函
  • 虚拟机LNMP操作记录(三)

    nginx配置多站点之端口访问 查看nginx conf文件 lnmp 已经默认添加了引入vhost下所有文件的准备 复制server里面的内容 server listen 80 default server reuseport liste
  • workerman+TP6实战网站客服系统之前端页面部署

    前端演示效果 主攻后端和workman所以本次前端页面比较简单 后续会有聊天高级版的教程敬请期待 Layui下载 Layui 经典开源模块化前端 UI 组件库 nbsp nbsp 粘贴到tp6项目里面 nbsp 然后创建模板页面
  • PHP多进程(一)之pcntl_fork

    知识来源 nbsp nbsp nbsp nbsp 知识无价 拒绝白嫖 Linux下PHP多进程编程 共44课时 PHP课程 51CTO学堂 多进程的作用是一个程序启动多个进程 一个程序启动起来本应该是一个进程 但它可作为父进程启动多个子进程
  • PHP多进程(二)之pcntl_wait

    知识来源 nbsp nbsp nbsp nbsp 知识无价 拒绝白嫖 Linux下PHP多进程编程 共44课时 PHP课程 51CTO学堂 上篇文章我们说到父进程应该回收子进程结束之后产生的数据 这样才会不浪费系统资源 一个程序启动之后 变
  • PHP前后分离接口加密探讨( AES+RSA )

    参考文章 php之RSA加密解密 小吴 斌的博客 CSDN博客 php rsa加密 RSA和AES的区别 LC超人在良家的博客 CSDN博客 aes rsa PHP实现非对称加密的方法 私钥及公钥加密解密的方法 php 公钥 私钥 Lord
  • Deep Learning 最优化方法之RMSProp

    本文是Deep Learning 之 最优化方法系列文章的RMSProp方法 主要参考Deep Learning 一书 整个优化系列文章列表 xff1a Deep Learning 之 最优化方法 Deep Learning 最优化方法之S
  • PHP多进程(三) 理解多进程

    知识来源 nbsp nbsp nbsp nbsp 知识无价 拒绝白嫖 Linux下PHP多进程编程 共44课时 PHP课程 51CTO学堂 本篇是一个过渡篇 重在理解多进程 以及进程执行过程和进程执行后的数据 nbsp 废话不多说直接上代码
  • 深入springboot原理——一步步分析springboot启动机制(starter机制)

    前言 使用过springboot的同学应该已经知道 xff0c springboot通过默认配置了很多框架的使用方式帮我们大大简化了项目初始搭建以及开发过程 本文的目的就是一步步分析springboot的启动过程 xff0c 分析sprin
  • dependencies和dependencyManagement区别

    文章目录 dependenciesdependencyManagement使用场景 区别 xff1a 总结 xff1a dependencies 父项目中的dependencies xff0c 子项目都会自动引入 xff0c 默认被所有的子
  • 【Git】解决Ctrl+V无法粘贴文本的问题

    解决Ctrl 43 V无法粘贴文本的问题 问题 xff1a 在我们使用Git Bash将项目克隆至本地时 xff0c 经常需要复制网址 xff0c 但此时却出现问题 xff1a Ctrl 43 V无反应 或是如下图只有 V xff1a 解决
  • 操作系统引导(开机过程)

    操作系统安装在C盘中 xff0c 其一步步启动的过程如下 xff1a 操作系统要启动 xff0c 操作系统的数据需要先被放入主存里 如图所示 xff0c 计算机的主存由RAM和ROM组成 xff0c ROM芯片被集成在电脑主板上 xff0c
  • igh ethercat master及简单介绍

    接触ethercat也有一段时间了 xff0c 做些小总结吧 1 xff0c 关于ethercat ethercat是基于工业以太网的一种总线协议 我接触的igh ethercat master for linux是以用ethercat协议
  • Linux下IGH Ethercat Master安装

    引言 简单igh ethercat master安装 1 xff0c 准备工作 xff08 1 xff09 一个Linux系统 xff0c 在虚拟机里面也可以 xff0c 不过如果在虚拟机里面需要一些其他的设置 xff0c 这个最后再说 L
  • 在树莓派/4.x内核下安装IgH EtherCAT master主站

    树莓派安装ethercat主站 环境 xff1a 4 14 91 rt49 v7 下载源码 xff0c 解压 tar xvf ethercat 1 5 2 tar bz2 cd ethercat 1 5 2 configure enable
  • C语言中static修饰函数和变量用法

    static修饰函数 xff0c 局部变量和全局变量的用法 在c语言中static关键字可以修饰函数和变量 修饰变量又可以分为修饰全局变量和局部变量 static作用是限定变量的生命周期 xff0c 限定变量或函数的作用域 写在前面 xff
  • SOEM控制io超简洁程序

    SOEM控制io超简洁程序 我想用SOEM简单控制io模块 xff0c 因为我的io模块每个出入输出旁边都会有一个小灯 xff0c 所以这也算是点灯程序 xff0c 但是我看了例子并不知道怎么修改 xff0c 都说igh麻烦 xff0c 我
  • Deep Learning 最优化方法之Adam

    本文是Deep Learning 之 最优化方法系列文章的Adam方法 主要参考Deep Learning 一书 整个优化系列文章列表 xff1a Deep Learning 之 最优化方法 Deep Learning 最优化方法之SGD
  • SOEM控制伺服电机

    我只完成了pv模式 xff0c 对于csp模式我不知道是哪里出现了问题 xff0c 有知道的可以在下方评论 这个代码我的pv模式可以正常运行和控制电机 xff0c csp模式可以使能电机 xff0c 但是电机不转 span class to