plc接收CAN总线上的信息,程序怎么写?

plc接收CAN总线上的信息,程序怎么写?,第1张

plc接收CAN总线上的信息,可以配置成CANopen基本协议进行9针口程序编写。

CAN协议用于汽车中各种不同元件之间的通信,以此取代昂贵而笨重的配电线束。该协议的健壮性使其用途延伸到其他自动化和工业应用。

CAN协议的特性包括完整性的串行数据通讯、提供实时支持、传输速率高达1Mb/s、同时具有11位的寻址以及检错能力。

CAN总线使用串行数据传输方式,可以1Mb/s的速率在40m的双绞线上运行,也可以使用光缆连接,而且在这种总线上总线协议支持多主控制器。

扩展资料:

CAN协议总线的工作原理:

CAN与I2C总线的许多细节很类似,但也有一些明显的区别。当CAN总线上的一个节点(站)发送数据时,它以报文形式广播给网络中所有节点。对每个节点来说,无论数据是否是发给自己的,都对其进行接收。

每组报文开头的11位字符为标识符,定义了报文的优先级,这种报文格式称为面向内容的编址方案。

在同一系统中标识符是唯一的,不可能有两个站发送具有相同标识符的报文。当几个站同时竞争总线读取时,这种配置十分重要。

参考资料来源:百度百科—可编程逻辑控制器 (可编程控制器件)

参考资料来源:百度百科—CAN总线协议

can总线的接收程序都是放在中断里面的,下面是我的一段接收程序希望对你有启发

void USB_LP_CAN1_RX0_IRQHandler(void) //CAN_FIFO0接收中断

{

CAN_RxMessage(&CAN_MessageStd)//接收数据

CAN_FRAME_CACHE_Mark() //缓存数据

CAN_FIFORelease(CAN1,CAN_FIFO0)//清中断标志

}

估计你要么是没有清中断标志,要么是接收数据的函数写的不对。

在STM32的CAN控制器中,接收错误计数器和发送错误计数器都是由CAN_ESR寄存器来控制的。要清零接收错误计数器和发送错误计数器,可以使用如下代码:

c

Copy code

CAN_HandleTypeDef hcan

//清零发送错误计数器

hcan.Instance->ESR |= CAN_ESR_TEC

//清零接收错误计数器

hcan.Instance->ESR |= CAN_ESR_REC

其中,hcan是CAN控制器的句柄,CAN_ESR_TEC和CAN_ESR_REC分别表示发送错误计数器和接收错误计数器。

在清零之前,需要先确保CAN控制器已经停止了,可以使用如下代码停止CAN控制器:

c

Copy code

//停止CAN控制器

HAL_CAN_Stop(&hcan)

需要注意的是,在CAN总线中,错误计数器是非常重要的参数,它可以反映CAN总线的质量和稳定性。因此,在清零错误计数器之前,应该先检查错误发生的原因,并采取措施来解决问题,以确保CAN总线的正常工作。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11112928.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存