一种基于CANOPEN的主从站同步方法与流程
- 国知局
- 2025-01-10 13:40:31
本发明属于计算机控制,涉及一种基于canopen的主从站同步方法。
背景技术:
1、canopen通信是建立在can数据链路层之上的一种通讯形式,此种通信方式对应用层做出了相关的规定。canopen设备模型包括通信部分、对象字典和应用部分。通讯部分包括pdo对象、sdo对象、nmt对象。对象字典包括数据类型、通讯对象、和应用对象。
2、canopen协议的优点包括高效性、精确定位、抗干扰性、多功能性、易于配置、数据传输方式的高效性、灵活的配置和状态查询功能、开放的标准、数据安全性高、以及具有安全通信约束等优点。
技术实现思路
1、(一)要解决的技术问题
2、canopen协议根据对象字典管理的数据进行参数管理,对于主站和从站均需要管理一份对象字典,主从站对象字典参数区数据应该保持一致,而对于pdo参数区和数据区则交叉映射,传统的同步方法是手动处理对象字典各个索引的数据,人工确认主从站数据一致,这样处理易出错,且不能动态修改。
3、(二)技术方案
4、为了解决上述技术问题,本发明提供一种基于canopen的主从站同步方法,其包括以下步骤:
5、s1:将主站对象字典的参数同步到从站;
6、s2:将主站对象字典tpdo映射参数同步到从站对象字典rpdo映射参数,将主站对象字典rpdo映射参数同步到从站对象字典tpdo映射参数;
7、s3:将主站配置映射区同步到从站。
8、其中,步骤s1包括以下子步骤:
9、s1_1使用canopen标准库中读取本地对象字典函数readlocaldict读取对象字典参数;
10、s1_2判断节点号的范围在1和节点最大数量max_node_count-1之间,否则直接返回错误;
11、s1_3使用信号量初始化函数rt_sem_init对信号量finish_sem进行初始化操作;
12、s1_4循环调用获取主站写入从站对象字典结果函数getwriteresultnetworkdict,写入成功后,使用关闭sdo传输函数closesdotransfer关闭此次数据传输;
13、s1_5使用信号量卸载函数rt_sem_detach,将信号量finish_sem进行卸载。
14、步骤s1_1中,传入数据分别为本地对象字典指针master402_od、本地对象字典索引master_index和本地对象字典子索引master_subindex;读取到值所存入的指针pdata,值的大小size以及参数类型type。
15、步骤s1_3中,使用节点数据写入函数writenetworkdictcallback写入从站对象字典参数,传入数据分别为本地对象字典指针master402_od、节点号node_id、从站对象字典索引slave_index、本地对象字典子索引slave_subindex、值的大小size以及参数类型type,并将指针pdata所指向的数据写入。
16、其中,步骤s2包括以下子步骤:
17、s2_1根据所需要同步数据的主站索引号master_index来设置从站索引号slave_master值;
18、s2_2使用canopen标准库中读取本地对象字典函数readlocaldict读取对象字典参数;
19、s2_3判断节点号的范围在1和节点最大数量max_node_count-1之间,否则直接返回错误;
20、s2_4使用信号量初始化函数rt_sem_init对信号量finish_sem进行初始化操作;
21、s2_5循环调用获取主站写入从站对象字典结果函数getwriteresultnetworkdict,写入成功后,使用关闭sdo传输函数closesdotransfer关闭此次数据传输;
22、s2_6使用信号量卸载函数rt_sem_detach,将信号量finish_sem进行卸载。
23、步骤s2_1中,如果master_index的数值范围为大于等于0x1600且小于等于0x17ff,则设置从站索引号slave_master值为master_index+0x400;如果master_index的数值范围为大于等于0x1a00且小于等于0x1bff,则设置从站索引号slave_master值为master_index-0x400;如果master_index不在大于等于0x1600且小于等于0x17ff和大于等于0x1600且小于等于0x17ff的范围内,则slave_index的值和master_index的值相同。
24、步骤s2_2中,传入数据分别为本地对象字典指针master402_od、本地对象字典索引master_index、本地对象字典子索引master_subindex,读取到值所存入的指针pdata、值的大小size以及参数类型type。
25、步骤s2_4中,使用节点数据写入函数writenetworkdictcallback写入从站对象字典参数,传入数据分别为本地对象字典指针master402_od、节点号node_id、从站对象字典索引slave_index、本地对象字典子索引slave_subindex、值的大小size以及参数类型type,并将指针pdata所指向的数据写入。
26、其中,步骤s3包括以下子步骤:
27、s3_1使用canopen标准库中读取本地对象字典函数readlocaldict读取对象字典参数,传入数据分别为本地对象字典指针master402_od、本地对象字典索引master_index、本地对象字典子索引master_subindex,读取到值所存入的指针pdata、值的大小size以及参数类型type判断读取成功,转到s3_2;
28、s3_2计算配置过程中的sdo_data数据,计算方法为master_index的值左移16位加上master_subindex值左移8位,加上s3_1中获取到的size值乘以8最后计算后的值为sdo_data的值;
29、s3_3对s3_1中数据指针pdata指向的值、大小size的值和类型type的值进行清零操作;
30、s3_4使用读取本地对象字典函数readlocaldict读取对象字典参数,传入数据分别为本地对象字典指针master402_od、从站对象字典索引slave_index、从站对象字典子索引slave_subindex,读取到值所存入的指针pdata、值的大小size以及参数类型type写入成功后,转入s3_5进行从站写入操作;
31、s3_5判断写入节点号的范围在1和节点最大数量max_node_count-1之间,否则直接返回错误;
32、s3_6使用信号量初始化函数rt_sem_init对信号量finish_sem进行初始化操作;
33、s3_7循环调用获取主站写入从站对象字典结果函数getwriteresultnetworkdict,写入成功后,使用关闭sdo传输函数closesdotransfer关闭此次数据传输;
34、s3_8使用信号量卸载函数rt_sem_detach,将信号量finish_sem进行卸载。
35、步骤s3_6中,使用节点数据写入函数writenetworkdictcallback写入从站对象字典参数,传入数据分别为本地对象字典指针master402_od、节点号node_id、从站对象字典索引slave_index、本地对象字典子索引slave_subindex、值的大小size以及参数类型type,并将指针pdata所指向的数据写入。
36、(三)有益效果
37、上述技术方案所提供的基于canopen的主从站同步方法,将根据对象字典索引号,对主站对象字典数据进行读取操作,通过sdo报文写操作写入到对应的从站中,对于不同的映射方法进行分类处理,提高了同步的可靠性以及同步的效率。
本文地址:https://www.jishuxx.com/zhuanli/20250110/354624.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。