CANOpen EMCY紧急报文介绍

什么是CANOpen紧急报文

CANOpen中的Emcy紧急报文用于当设备出现故障或警告时,向其它节点报告故障或警告使用的。如设备某个设备出现过压或过流时,就可以发送紧急报文。

紧急报文的格式

在这里插入图片描述
错误代码:是0x1003索引预定义错误字段的内容,是16bit详细的错误代码
错误寄存器:是0x1001索引当前错误状态的内容,是8bit,每个bit代表一个含义,粗略的表示设备故障方向。

CANFestival 如何发送紧急报文,

当节点出现故障时,调用UNS8 EMCY_setError(CO_Data* d, UNS16 errCode, UNS8 errRegMask, UNS16 addInfo)函数发送紧急报文。

/*! Sets a new error with code errCode. Also sets corresponding bits in Error register (1001h)
 **                                                                                                 
 **  
 ** @param d
 ** @param errCode Code of the error                                                                                        
 ** @param errRegister Bits of Error register (1001h) to be set.
 ** @return 1 if error, 0 if successful
 */
UNS8 EMCY_setError(CO_Data* d, UNS16 errCode, UNS8 errRegMask, UNS16 addInfo)
{
   
	UNS8 index;
	UNS8 errRegister_tmp;
	
	for (index = 0; index < EMCY_MAX_ERRORS; ++index)
	{
   
		if (d->error_data[index].errCode == errCode)		/* error already registered */
		{
   
			if (d->error_data[index].active)
			{
   
				MSG_WAR(0x3052, "EMCY message already sent", 0);
				return 0;//错误已注册已发送直接返回
			} else d->error_data[index].active = 1;		/*已注册但还未发送 将active置1*/ /* set as active error */
			break;
		}
	}
	
	if (index == EMCY_MAX_ERRORS)	/*进了这个if表示错误代码还没注册*/	/* if errCode not already registered */
		for (index = 0; index < EMCY_MAX_ERRORS; ++index) if (d<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值