硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1176|回复: 13
收起左侧

[CAN/FDCAN] canopen 大于4字节传输

[复制链接]

16

主题

33

回帖

81

积分

初级会员

积分
81
发表于 2024-11-8 12:59:26 | 显示全部楼层 |阅读模式
最近需要用到canopen的大于4字节段传输方式,不知道最后一个字节为什么会报错,对象字典是是否哪里要设置,有没有相关demo

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117563
QQ
发表于 2024-11-8 14:37:39 | 显示全部楼层
用的那个传输,SDO?
回复

使用道具 举报

16

主题

33

回帖

81

积分

初级会员

积分
81
 楼主| 发表于 2024-11-8 16:31:41 | 显示全部楼层
eric2013 发表于 2024-11-8 14:37
用的那个传输,SDO?

是的sdo
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117563
QQ
发表于 2024-11-9 09:19:13 | 显示全部楼层

我一直用的快速SDO模式的32bit模式,没有用过普通SDO模式大于32bit的。

不过这个普通SDO模式也比较简单,后面我更新RTX5/FreeRTOS全家桶综合实战模板更新一次。这种用法。因为协议本身都已经支持了,用户直接收发数据即可
回复

使用道具 举报

16

主题

33

回帖

81

积分

初级会员

积分
81
 楼主| 发表于 2024-11-11 08:36:14 | 显示全部楼层
eric2013 发表于 2024-11-9 09:19
我一直用的快速SDO模式的32bit模式,没有用过普通SDO模式大于32bit的。

不过这个普通SDO模式也比较简 ...

为什么我发的帖看不到图片了,你能看到吗
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117563
QQ
发表于 2024-11-11 09:00:21 | 显示全部楼层
zs890801 发表于 2024-11-11 08:36
为什么我发的帖看不到图片了,你能看到吗

如果你的图片不是单独上传的,任何人都看不到。

论坛不支持图片复制粘贴,必须单独上传。
回复

使用道具 举报

16

主题

33

回帖

81

积分

初级会员

积分
81
 楼主| 发表于 2024-11-11 09:27:45 | 显示全部楼层
eric2013 发表于 2024-11-11 09:00
如果你的图片不是单独上传的,任何人都看不到。

论坛不支持图片复制粘贴,必须单独上传。

我在对象字典里应该怎么配置长度大于4字节的
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117563
QQ
发表于 2024-11-11 09:36:08 | 显示全部楼层
zs890801 发表于 2024-11-11 09:27
我在对象字典里应该怎么配置长度大于4字节的

还没测试过,等回头不忙了试试
回复

使用道具 举报

0

主题

44

回帖

44

积分

新手上路

积分
44
发表于 2024-11-11 10:04:40 | 显示全部楼层
普通SDO,传输数据大于4字节的,可以把数据类型设置为sting,字符串的格式,但是这有个弊端,实际通信中,自定义协议的话,数据部分可能会有0,这个CANopenNode会被认为是字符串结束符,从而导致数据长度不对。另外一种方法数据类型设置为domain,然后自己写代码初始化,比如下面是我自己初始化的
回复

使用道具 举报

0

主题

44

回帖

44

积分

新手上路

积分
44
发表于 2024-11-11 10:35:57 | 显示全部楼层
如果你是Client,直接读写即可,CAN-festival直接写字典,数据类型定义为VISIBLE_STRING即可。如果你是server,CANopeNode的domain是要自己写读写函数的,domain的话,相当于是自己的读写函数替代了协议栈的读写函数。CAN-festival的domain我没用过,我印象中好像不存在0被认为字符串结束而被结束的情况。
回复

使用道具 举报

16

主题

33

回帖

81

积分

初级会员

积分
81
 楼主| 发表于 2024-11-11 11:00:00 | 显示全部楼层
沉醉东风 发表于 2024-11-11 10:35
如果你是Client,直接读写即可,CAN-festival直接写字典,数据类型定义为VISIBLE_STRING即可。如果你是serv ...

刚改成字符串确实可以,不报错了,我这边server,本来上位机client通过can要传输一些汉字,然后我在打包成json格式传输到服务器的,传4个字节感觉有点少,就想着这个段传输能不能用起来
回复

使用道具 举报

16

主题

33

回帖

81

积分

初级会员

积分
81
 楼主| 发表于 2024-11-11 13:31:22 | 显示全部楼层
沉醉东风 发表于 2024-11-11 10:35
如果你是Client,直接读写即可,CAN-festival直接写字典,数据类型定义为VISIBLE_STRING即可。如果你是serv ...


我感觉结尾遇到0貌似也没问题,我传输了16字节,最后一帧是2个字节00 01,
但是这个字符串数组的大小不知道有没有,我现在是随便设置了38,UNS8 Device_Info_name1_Reg[38] = "";                /* Mapped at index 0x4301, subindex 0x01 */
另外,传输超时不知道哪里有没有能设置

1731302681309.jpg
回复

使用道具 举报

0

主题

44

回帖

44

积分

新手上路

积分
44
发表于 2024-11-11 13:49:41 | 显示全部楼层
zs890801 发表于 2024-11-11 13:31
我感觉结尾遇到0貌似也没问题,我传输了16字节,最后一帧是2个字节00 01,
但是这个字符串数组的大小 ...

用的什么协议栈,CANopenNode的源码里,如果数据类型是sting是有对字符串结束符做判断。另外SDO的传输超时是client控制设置的,因为SDO超时的时候,Cleint会发80数据包出来的。
回复

使用道具 举报

16

主题

33

回帖

81

积分

初级会员

积分
81
 楼主| 发表于 2024-11-11 15:05:22 | 显示全部楼层
沉醉东风 发表于 2024-11-11 13:49
用的什么协议栈,CANopenNode的源码里,如果数据类型是sting是有对字符串结束符做判断。另外SDO的传输超 ...

CAN-festival
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 16:18 , Processed in 0.064497 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表