codesys【CAN总线】

2024-06-11 05:36
文章标签 总线 codesys

本文主要是介绍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轴CANVAR_IN_OUTcan轴输入: _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_VARVAR_INPUTf齿轮比:REAL:=10000;// 齿轮比【圈脉冲】u1电源:BOOL:=FALSE;// h6040u1复位: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;//		h6081f加速度:REAL:=10;//	h6083f减速度:REAL:=10;//	h6084f目标速度:REAL:=10;//  h60FFf绝对坐标:REAL:=5;// h607Af相对坐标:REAL:=5;// h607Ai16力矩值:INT:=5;// h6071
END_VARVAR_OUTPUTb轴使能状态			:BOOL;b伺服通信状态		:BOOL;f轴当前位置			:LREAL;f轴当前速度			:lREAL;f轴当前力矩			:REAL;e轴运行状态			:SMC_AXIS_STATE;e轴故障代码			:MC_ERROR_CO;END_VARVAR//【输入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.wStatusWordIF Axis1.In.wStatusWord =16#200 		    //【雷赛】默认0x0200,要改成 0x0250
OR (Axis1.In.wStatusWord AND 16#0F) =16#00 	// 8670,【xxx0】
THENAxis1.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博客

这篇关于codesys【CAN总线】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1050322

相关文章

电子电气架构---私有总线通信和诊断规则

电子电气架构—私有总线通信和诊断规则 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节能减排。 无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事.而不是让内心的烦躁、

I2C总线协议(AT24C02C)

本文章是基于TQ2440开发板上的AT24C02C 一, I2C简介       IIC即Inter-Integrated Circut(集成电路总线),有飞利浦在八十年代实际出来. I2C是一种多向控制总线,就是同一个总线下可以连接多个芯片,同时每个芯片都可以作为实时数据传输的控制源. 二. 硬件结构       I2C串行总线一般有两根信号线,一根是双向的数据总线SDA, 一根是

【STM32】CAN总线基础入门

CAN总线基础入门 一、CAN简介二、主流通信协议对比三、CAN物理层1、CAN硬件电路2、CAN电平标准3、CAN收发器 – TJA1050(高速CAN)4、CAN物理层特性 四、帧格式1、CAN总线帧格式2、数据帧3、数据帧各部分用途简介4、数据帧的发展历史5、遥控帧6、错误帧7、过载帧8、帧间隔9、位填充10、波形实例 五、位同步1、接收方数据采样2、接收方数据采样遇到的问题3、位时序

CodeSys中动态切换3D模型

文章目录 需求研究结果 需求 在前面的【CodeSys开发3d机械臂显示控件】中,我们已经实现了一个可以显示3d模型的控件。但是这个控件是和使用的3d模型绑定死的,在安装这个控件时就已经将模型文件于控件一起安装到codesys中。 假如我想在不同的工程中,对这个控件动态地指定不同的模型,该怎么实现? 研究 首先,不同的工程,把不同的模型文件包含进来是没问题的,因为codesy

V90总线伺服报800F错误

1、博途PLC工艺对象位置轴轴控功能块 博途PLC工艺对象位置轴轴控功能块(完整SCL代码)-CSDN博客文章浏览阅读423次。S7-1200PLC脉冲轴位置轴位置控制功能块S7-1200PLC脉冲轴位置轴位置控制功能块优化(完整SCL源代码)_s71200 脉冲轴-CSDN博客文章浏览阅读341次。该博客详细介绍了如何优化S7-1200 PLC的位置控制功能块,使得在轴激活限位时无需复位即可直

EventBus-Vue事件总线解析与使用指南

前言         在Vue.js中,组件通信是开发过程中非常场景的需求。根据不同的场景和需求,Vue提供了多种组件通信方式。比如父子组件通信、兄弟组件通信、跨代组件通信等。当应用程序中两个组件或者说页面之间没有引入和被引入的关系的时,或者说他们之间嵌套的结果复杂的时候,我们可以考虑如何传递数据呢?         其中适用的通信方式有 Vuex、provide 和 inject、Event

计算机总线及外部总线汇总

参考视频教程:    **编程必备基础 计算机组成原理+操作系统+计算机网络  ** 计算机总线 名称 传输速率(比特/字节) 推出年分 I²C 3.4 Mbit/s 425 kB/s 1992 Apple II series (incl. Apple IIGS) 8-bit/1 MHz 8 Mbit/s 1 MB/s[[31]](https://zh.wikip

《PCI Express体系结构导读》随记 —— 第II篇 第7章 PCIe总线的数据链路层与物理层(7)

接前一篇文章:《PCI Express体系结构导读》随记 —— 第II篇 第7章 PCIe总线的数据链路层与物理层(6) 7.1 数据链路层的组成结构 7.1.1 数据链路层的状态 3. DL_Active状态 当数据链路层处于DL_Active状态时,PCIe链路可以正常工作。此时数据链路层可以从事务层和物理层正常接收和发送TLP、并处理DLLP,此时数据链路

思考(六十九):一种基于消息总线的功能可插拔的服务器架构

架构图 +--------------------+ +----------------+ +----------------+| | | NODE 1 | | NODE 2 || TOPIC ROUTE INFO |

LIN总线CAPL函数—— 更新特定报文数据(linUpdateResponse)

🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe,博客目录大全,点击跳转👉 linResetRespBaudrate函数用于更新一个从节点的数据,语法如下 激活LIN从节点,使LIN从节点报文周期发送,如下图0x23 报文的默认数据如下: 通