
canOpen
小灰灰搞电子
这个作者很懒,什么都没留下…
展开
-
Canopen 一个主机连多个从机字典的配置方法
一、声明本人采用的是如下方法,也没有时间探索过有没有更好的方法。所以请大家谨慎参考,如有更好的方法,烦请告知作者一下,谢谢。 二、说明由于从机ID需要人工设置为了很好的包容性,所以本人配置了127个从机的ID。 三、主机字典配置 a、索引 0x1016,心跳检测时间配置 如下:/* index 0x1016 : Consumer Heartbeat Time. */ UNS8 master_objdict_highestSubIndex_obj101.原创 2022-04-25 10:23:11 · 2875 阅读 · 5 评论 -
canOpen学习十三之读字典和写字典注意事项
注意点:读写字典完成后读取读写字典结果等待的状态不同,读字典等待的状态是SDO_UPLOAD_IN_PROGRESS,而写字典的状态是SDO_DOWNLOAD_IN_PROGRESS。如下 读字典:Bool my_read_obj(void *readData,u16 index,u8 subIndex, u8 dataType,u8 readId){ u32 objAbortCode; //字典读写结果 u8 objResult; //字典读写结果 u8 objRea原创 2020-12-02 14:14:23 · 1879 阅读 · 0 评论 -
canOpen学习十二之canOpen回调函数的定义与使用
一、回调函数的定义首先再用字典编辑器的时候就要勾选有回访:然后定义自己的回调函数:回调函数的函数指针为typedef UNS32 (*ODCallback_t)(CO_Data* d, const indextable *, UNS8 bSubindex);定义自己的回调函数:UNS32 index2000_callback(CO_Data* d, const indextable *table, UNS8 bSubindex){ printf("value=%x\r\n",*(uint8原创 2020-05-19 13:13:13 · 5314 阅读 · 5 评论 -
canOpen学习十一之canOpen应用出现问题-通过SDO修改了从机心跳时间后等好长时间从机才会按照修改的时间发送心跳
产生上述问题的主要原因是当我们修改心跳时间后系统会调用OnHeartbeatProducerUpdate这个函数去更新NextTime的值,下面看看定时器中的处理:这是一个1ms的定时器//定时器3中断服务函数void TIM3_IRQHandler(void){ if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中断 { TimeCNT++; if (TimeCNT >= TIMER_MAX_COUNT) { Tim原创 2020-05-19 10:47:56 · 1824 阅读 · 2 评论 -
canOpen学习十之canOpen应用实现紧急事件发送
一、简介所谓紧急事件就是系统出现错误后需要告知其他设备我出错了,其他设备做出对应的反应。紧急事件用到的索引是0x1001和0x1003,下面详细介绍一下这两个索引对象0x1001:对象0x1003:二、代码解析首先从机字典配置/* index 0x1001 : Error Register. */ UNS8 slave_objdict_obj1001 = 0x00; /* 18 */ subindex slave_objdict_Index1001[] = {原创 2020-05-18 14:05:59 · 2856 阅读 · 4 评论 -
canOpen学习九之canOpen应用实现主机自动发送同步帧
主机发送同步帧主要有索引为0x1005、0x1006、0x1007的字典设置。下面详细介绍一下:对象0x1005:对象0x1006:对象0x1007:主机字典配置:/* index 0x1005 : SYNC COB ID. */ UNS32 master_objdict_obj1005 = 0x40000080; /* 0 */ subindex master_objdict_Index1005[] =原创 2020-05-18 12:50:23 · 3341 阅读 · 7 评论 -
canOpen学习八之canOpen应用实现主从机PDO定时同步数据
从机字典文件/* index 0x1800 : Transmit PDO 1 Parameter. */ UNS8 slave_objdict_highestSubIndex_obj1800 = 6; /* number of subindex - 1*/ UNS32 slave_objdict_obj1800_COB_ID_used_by_PDO = 0x180; /* 384 */...原创 2020-05-01 10:24:15 · 2366 阅读 · 11 评论 -
canOpen学习七之canOpen应用实现主从机PDO远程同步通信
一、从机代码/* index 0x1800 : Transmit PDO 1 Parameter. */ UNS8 slave_objdict_highestSubIndex_obj1800 = 6; /* number of subindex - 1*/ UNS32 slave_objdict_obj1800_COB_ID_used_by_PDO = 0x180; /* 384 */...原创 2020-05-01 10:16:46 · 2841 阅读 · 13 评论 -
canOpen学习六之canOpen应用实现主从机PDO循环同步通信
一、从机代码从机字典/* index 0x1400 : Receive PDO 1 Parameter. */ UNS8 slave_objdict_highestSubIndex_obj1400 = 6; /* number of subindex - 1*/ UNS32 slave_objdict_obj1400_COB_ID_used_by_PDO = 0x200; /* 512...原创 2020-05-01 10:07:18 · 3127 阅读 · 11 评论 -
canOpen学习五之canOpen应用实现主从机PDO非循环同步
一、从机代码从机字典/* index 0x1400 : Receive PDO 1 Parameter. */ UNS8 slave_objdict_highestSubIndex_obj1400 = 6; /* number of subindex - 1*/ UNS32 slave_objdict_obj1400_COB_ID_used_by_PDO = 0x200; /* 512...原创 2020-04-30 10:39:27 · 2264 阅读 · 0 评论 -
canOpen学习四之canOpen应用实现主机检测从机丢失
一、从机代码将从机心跳设置为1S/* index 0x1017 : Producer Heartbeat Time. */ UNS16 slave_objdict_obj1017 = 1000; /* 0 */ subindex slave_objdict_Index1017[] = { { RW, uint16, sizeof (UNS16), (void*)&...原创 2020-04-30 10:26:10 · 2711 阅读 · 9 评论 -
canOpen学习三之canOpen应用实现主机通过SDO修改从机心跳帧时间
一、从机代码主要是所有0x1017的时间为1000,默认心跳时间为1s/* index 0x1017 : Producer Heartbeat Time. */UNS16 slave_objdict_obj1017 = 1000; /* 0 */subindex slave_objdict_Index1017[] = { { RW, uint16, sizeof (UNS16...原创 2020-04-30 10:14:34 · 2925 阅读 · 2 评论 -
canOpen学习二之canOpen应用实现请求节点状态、改变节点状态、写字典、读字典
一、主机请求节点状态1、函数:UNS8 masterRequestNodeState(CO_Data* d, UNS8 nodeId)2、参数d:CO_DatanodeId:节点ID3、调用方式masterRequestNodeState(&master_objdict_Data,0x01);4、说明节点状态存储在struct_CO_Data结构体的e_nodeState...原创 2020-04-28 14:19:34 · 5318 阅读 · 8 评论 -
canOpen学习一之canfestival源码中Transmission type 发送类型详解
一、00h:非循环同步 只能异步发送(即接收到发送请求或者主动发送),接收到SYNC帧不会发送。二、01h:循环同步 根据TestSlave_obj1400_SYNC_start_value里面设置的值接收到SYNC的个数发送一次。三、FCh:远程同步 当收到PDO请求,若该PDO_status的状态位PDO_RTR_SYNC_READY置位(会在接收到SYNC信号调用的_se...原创 2020-04-24 17:38:28 · 3704 阅读 · 3 评论