codesys【CAN总线】

1下载设备描述文件:

必须下载设备描述文件,要不然编程软件无法正确组态。

        根据实际设备【品牌】去官网搜索下载。

以  DMA882-CAN  为例

CAN的设备描述文件是【.eds】的扩展名

安装设备描述文件。

2添加CAN总线:

1添加【CAN总线】:设置通讯速率 1Mbps

2添加【CAN主站】:设置站号【默认127】。(有SoftMotion的是有轴功能)

3在线》扫描设备

                                》复制所有设备到工程

3组态设备:

跟ECAT总线有区别,伺服下面不需要再挂载402轴。

1必须离线状态下,才能编辑

2组态PDO和SDO

PDO:周期性的刷新【寄存器表】的值。如0x606C电机速度,

                                                                你不加进去,功能块就无法知道电机速度。

SDO:相当于初始化寄存器一次。参考【0x2000】段寄存器

4使用:

FB块:Power实际操作的是0x6040和0x6041的值。

这个雷赛0x6041的默认值有故障,需要程序修改0x6041的值0x250

这里我使用了【禾川CAN库】用轴组批量控制轴。

不使用库也可以,参考0x6040的赋值操作 0x00》0x06》0x07》0x0F   ,动作0x1F

FUNCTION_BLOCK FB轴CAN

VAR_IN_OUT
	can轴输入: _3SCOS.CANRemoteDevice;//【CAN驱动器】
	//ecat实轴输入:SM3_Drive_ETC_DS402_CyclicSync.AXIS_REF_ETC_DS402_CS;//【ECAT】
	//axis: _3SCOS.CANRemoteDevice;//【CAN驱动器】
	//编码器轴:SM3_Basic.FREE_ENCODER_REF;//【ENCODE】
END_VAR

VAR_INPUT
	f齿轮比:REAL:=10000;// 齿轮比【圈脉冲】
	u1电源:BOOL:=FALSE;// h6040
	u1复位:BOOL:=FALSE;
	
	u1急停:BOOL:=FALSE;
	u1点正:BOOL:=FALSE;// 先按急停,再按点动
	u1点反:BOOL:=FALSE;
	
	u1回零:BOOL:=FALSE;
	lf零点偏置:LREAL:=1234;
	
	u1速度模式:BOOL:=FALSE;
	u1绝对模式:BOOL:=FALSE;
	u1相对模式:BOOL:=FALSE;
	u1力矩模式:BOOL:=FALSE;
	
	f速度:REAL:=10;//		h6081
	f加速度:REAL:=10;//	h6083
	f减速度:REAL:=10;//	h6084
	
	f目标速度:REAL:=10;//  h60FF
	f绝对坐标:REAL:=5;// h607A
	f相对坐标:REAL:=5;// h607A
	i16力矩值:INT:=5;// h6071
END_VAR

VAR_OUTPUT
	b轴使能状态			:BOOL;
	b伺服通信状态		:BOOL;
	
	f轴当前位置			:LREAL;
	f轴当前速度			:lREAL;
	f轴当前力矩			:REAL;
	
	e轴运行状态			:SMC_AXIS_STATE;
	e轴故障代码			:MC_ERROR_CO;
	
END_VAR

VAR
	//【输入5x】
	 x6041:UINT;// 状态字
	 x6061:SINT;// 模式
	 x6064:DINT;// 电机位置
	 x606C:DINT;// 电机速度
	 x6077:INT;//  电机力矩
 //【输出9y】
 y6040:UINT;//控制字
 y6060:SINT;//模式
 y6081:UDINT;//【u32file】速度
 y6083:UDINT;//【u32file】加速
 y6084:UDINT;//【u32file】减速
 
 y607A:DINT;//【i32Targe】定位坐标
 y60FF:DINT;//【i32Targe】模式:速度
 y6071:INT;// 【i16Targe】模式:力矩
 
 y607C:DINT;//原点【刀具偏置】
//=====================================
	//AXIS: _3SCOS.CANRemoteDevice;//		:=ADR(DMA882_CAN);	

	Axis1: AXIS_REF_CO  ; // 新建局部变量
//==============================================
	MC_Power_CO			:MC_Power_CO;
	MC_Home_CO			:MC_Home_CO;
	MC_Reset_CO			:MC_Reset_CO;
	MC_Stop_CO			:MC_Stop_CO;
	MC_MoveVelocity_CO	:MC_MoveVelocity_CO;//【速度模式】
	MC_MoveAbsolute_CO	:MC_MoveAbsolute_CO;//【绝对定位】
	MC_MoveRelative_CO	:MC_MoveRelative_CO;//【相对定位】
	MC_Jog_CO			:MC_Jog_CO;//【点动】先按stop再按点动

	TON_0: ton;//【刷新定位】
	
	u16线程count: UINT;
END_VAR





u16线程count:=u16线程count+1;

axis1.pDevice:= ADR(can轴输入);	//axis1.pDevice:= ADR(axis);
//【输入5x】
axis1.In.wStatusWord:=x6041; // 状态字
axis1.In.sActMode:=x6061;	 // 模式
axis1.In.dActPosition:=x6064;// 电机位置
axis1.In.dActVelocity:=x606C;// 电机速度
axis1.In.dActTorque:=x6077;  // 电机力矩

// 修改0x6041默认值0x0250
// IF gvl.h6041 = 16#0200
// OR  gvl.h6041 = 16#8270
// OR  gvl.h6041 = 16#0270

//axis1.In.wStatusWord

IF Axis1.In.wStatusWord =16#200 		    //【雷赛】默认0x0200,要改成 0x0250
OR (Axis1.In.wStatusWord AND 16#0F) =16#00 	// 8670,【xxx0】
THEN
	Axis1.In.wStatusWord := 16#250;// 准备
END_IF
//【程序处理】
  A00_功能块调用();
//【输出9y】
  y6040:=axis1.Out.wControlWord;//控制字
  y6060:=axis1.Out.sSetMode;//模式
  y6081:=axis1.Out.dProfileVel;//速度   '6082冲击速度'
  y6083:=axis1.Out.dProfileAcc;//加速
  y6084:=axis1.Out.dProfileDec;//减速
  
  y607A:=axis1.Out.dTargetPos;//【模式定位】'追踪定位'
  y60ff:=axis1.Out.dTargetVel;//【模式速度】
  y6071:=axis1.Out.dTargetTor;//【模式力矩】
  y607C:=axis1.Out.dHomeOffset;// 原点偏置
  
//【显示结果】
b轴使能状态				:=axis1.bRegulatorRealState;//---轴使能状态
b伺服通信状态           :=Axis1.bCommunication;		//---读取从站通信状态

f轴当前位置				:=Axis1.fActPosition;		//---读取伺服 反馈位置
f轴当前速度				:=Axis1.fActVelocity;		//---读取伺服 反馈速度
f轴当前力矩				:=Axis1.fActTorque;			//---读取伺服 反馈转矩

e轴运行状态				:=Axis1.nAxisState;			//---读取轴运行状态
e轴故障代码				:=Axis1.eErrorID[0];		//---读取当前的轴故障代码





5其他参考资料:

DMA882-CAN【驱动器】站127_dummyusage-CSDN博客

canopen协议详解【C#二次开发】_canopen通讯协议-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/696543.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Chroium 源码目录结构分析(1):源码目录体积一栏

获取源码 首先,我们拉一份最新的源代码(笔者是2024.6.6日拉取的): fetch --nohistory chromium 源码预处理 如果运行build,会生成许多生成的代码,因此我们不运行build。 然后,把干扰后续分析…

Map深度学习

Map Map是一个键值对的集合,和object类似,Map作为构造函数,可以通过全局对象获取到。需要通过new操作创建实例对象,直接调用会报错。Map构造函数接受一个iterable类型的函数,用来初始化Map。 var m new Map([[1, &qu…

centos7安装字体

1.安装命令 yum install fontconfig #字体库命令 yum install mkfontscale #更新字体命令2.安装字体(注意权限问题) 进入目录 /usr/share/fonts ,该目录是 centos7 字体库的默认安装目录。在该目录下创建一个文件夹 ekp (名字…

理解我的积木编程思想

1 学习教程,至少7139手册2 编程实践,遇到实际问题后,在技术资料中查找关键词3 选择适合的条目找到代 码。修正,组合。

封装了一个简单理解的iOS竖直文字轮播

效果图 原理 就是持有两个视图,并且两个视图同时改变origin.y 动画结束之后,判断哪个视图是在上面并且看不到的, 则将该视图移动到底部,并且该视图展示下一跳内容 在开始下一轮动画 代码 - (void)startAnimationWithDuration:(…

若依项目部署(Linux2.0)

解压jdk tar -zxvf jdk-8u151-linux-x64.tar.gz 配置Java环境变量: vim /etc/profile export JAVA_HOME/root/soft/jdk1.8.0_151 export JRE_HOME${JAVA_HOME}/jre export CLASSPATH.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH${JAVA_HOME}/bin:$PATH 设置环境…

WordPress 高级缓存插件 W3 Total Cache Pro 详细配置教程

说起来有关 WordPress 缓存插件明月已经发表过不少文章了,但有关 W3 Total Cache Pro 这个 WordPress 高级缓存插件除了早期【网站缓存插件 W3 Total Cache,适合自己的才是最好的!】一文后就很少再提及了,最近因为明月另一个网站【玉满斋】因为某些性能上的需要准备更换缓存…

MySQL基础---库的操作和表的操作(配着自己的实操图,简单易上手)

绪论​ 勿问成功的秘诀为何,且尽全力做您应该做的事吧。–美华纳;本章是MySQL的第二章,本章主要写道MySQL中库和表的增删查改以及对库和表的备份处理,本章是基于上一章所写若没安装mysql可以查看Linux下搭建mysql软件及登录和基本…

解密Spring Boot:深入理解条件装配与条件注解

文章目录 一、条件装配概述1.1 条件装配的基本原理1.2 条件装配的作用 二、常用注解2.1 ConditionalOnClass2.2 ConditionalOnBean2.3 ConditionalOnProperty2.4 ConditionalOnExpression2.5 ConditionalOnMissingBean 三、条件装配的实现原理四、实际案例 一、条件装配概述 1…

办公风云颜值背后的职场正能量

办公风云:颜值背后的职场正能量当我们提到职场,脑海中浮现的往往是严肃的面孔、忙碌的身影和堆积如山的文件。但在这个看似单调的舞台上,总有一些人,用他们的颜值和才华,为我们上演了一场场别开生面的“大戏”。今天&a…

68. UE5 RPG 处理多个角色后续bug

我们现在已经有了四个敌人角色,接下来,处理一下在战斗中遇到的问题。 处理角色死亡后还会攻击的问题 因为我们有角色溶解的效果,角色在死亡以后的5秒钟才会被销毁掉。所以在这五秒钟之内,角色其实还是会攻击。主要时因为AI行为树…

Gh-ost让MySQL在线表结构变更不再是难题

Gh-ost:无缝迁移,效率与安全并行- 精选真开源,释放新价值。 概览 gh-ost是由GitHub团队精心打造的在线MySQL表结构迁移工具,它以一种无需触发器的方式,实现了对数据库表结构变更的在线操作。gh-ost的设计初衷是解决现…

NetSuite精益实施 之 系统切换作业标准化

这个题目为近日所思,一直没有落笔。今天是端午假日,得空卸货。 标准化是精益实施的三个基础之一,在我们的项目实践中没有须臾忘记。在此我们不再赘述标准化为啥这么重要,更多来分享如何标准化。 在项目实施的各阶段中&#xff0…

汇编语言作业(六)

目录 一、实验目的 二、实验内容 三、实验步骤以及结果 四、实验结果与分析 五、实验总结 一、实验目的 掌握加减法运算指令对各状态标志位的影响及测试方法掌握汇编语言长整数的加法的操作方法 二、实验内容 对于以下几组数, 087H和034H 0C2H和5FH 0F3H和0F3H&am…

数据中心智能化运维发展研究报告(2023)解读

数据中心智能化运维发展研究报告(2023)解读 《数据中心智能化运维发展研究报告(2023)》探讨了数据中心智能化运维的概念、核心内容、实际应用和发展建议。报告指出,通过人工智能、大数据等新一代信息技术的深度应用&a…

代码随想录 -数组

1.二分算法 边界开闭 左闭右闭 原则 这里的&#xff0c;middle不是要找的值。那么nums【middle】>tager 我们要更新右边界为middle-1 &#xff08;因为要左区间 所以更新右边界&#xff09; 在这里插入图片描述 class Solution { public:int search(vector<int>&a…

探索基于订阅式的电视App:Android TV 端强大的开源视频播放器

探索基于订阅式的电视App&#xff1a;Android TV 端强大的开源视频播放器 在智能电视和流媒体日益普及的今天&#xff0c;一款强大的视频播放器是家庭娱乐的重要组成部分。正是这样一款为Android TV设计的开源视频播放器。本文将深入探讨电视盒子OSC的技术特点、使用方法以及其…

transformer 位置编码源码解读

import torch import mathdef get_positional_encoding(max_len, d_model):"""计算位置编码参数&#xff1a;max_len -- 序列的最大长度d_model -- 位置编码的维度返回&#xff1a;一个形状为 (max_len, d_model) 的位置编码张量"""positional_e…

C++ | Leetcode C++题解之第135题分发糖果

题目&#xff1a; 题解&#xff1a; class Solution { public:int candy(vector<int>& ratings) {int n ratings.size();int ret 1;int inc 1, dec 0, pre 1;for (int i 1; i < n; i) {if (ratings[i] > ratings[i - 1]) {dec 0;pre ratings[i] rati…

【JAVASE】String 的应用案例

本篇文章旨在讲解String的应用&#xff0c;下面讲解两个案例&#xff1a; &#xff08;1&#xff09;完成用户登录 &#xff08;2&#xff09;开发验证码 一&#xff1a;完成用户登录 需求&#xff1a;系统正确的登录名是&#xff1a;csdnhg12&#xff0c;密码是&#xff1a…