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使用:

         程序内可以使用SDO操作从站参数。

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博客

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CODESYS CAN 2.0 是一种用于处理控制器局域网络(CAN)通信的软件工具。它是基于CODESYS开发平台的扩展,主要用于工业自动化控制系统中的数据传输和通信。 CODESYS CAN 2.0 主要提供了以下功能: 1. 基本通信:通过CAN总线实现控制器之间的数据交换和通信。它可以便捷地发送和接收数据包,实现控制器的相互配合和协调工作。 2. 数据传输:CODESYS CAN 2.0 提供了高效可靠的数据传输机制。它支持不同数据类型的传输,如整数、浮点数、布尔值等,能够满足各种数据传输的需求。 3. 帧过滤:CODESYS CAN 2.0 允许用户使用帧过滤功能来筛选和过滤特定的CAN数据帧。这样可以避免无关数据的干扰,提高数据传输的效率和安全性。 4. 网络配置:CODESYS CAN 2.0 具备灵活的网络配置功能。它可以支持多个CAN总线的配置和管理,允许用户将多个控制器连接成复杂的网络结构,满足不同控制系统的需求。 5. 调试和监测:CODESYS CAN 2.0 提供了强大的调试和监测工具。用户可以实时监测CAN总线上的数据流,查看数据的发送和接收情况,以及分析网络中的通信问题,方便进行故障排查和调试工作。 综上所述,CODESYS CAN 2.0 是一款功能强大的软件工具,能够方便、高效地实现控制器之间的通信和数据传输。它在工业自动化领域中有着广泛的应用,为各种控制系统的设计、开发和维护提供了可靠的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值