can报文格式(CAN报文格式转换软件)

can报文格式(CAN报文格式转换软件)关键词 CAN 协议转换 转换模块 转换器 Lua 编程 DroneCAN UAVCAN CAN 转换器 Ardupilot Px4 Pixhawk UartAssist 读写 CAN 协议数据 DroneCAN 协议与原生 CAN 协议数据转换 DroneCAN 协议与自定义 CAN 协议数据转换 Keywords Demonstrates a case of reading and writing CAN protocol data CAN protocol



关键词:CAN协议转换/转换模块/转换器,Lua编程,DroneCAN/UAVCAN/CAN转换器,Ardupilot,Px4,Pixhawk,UartAssist,读写CAN协议数据,DroneCAN协议与原生CAN协议数据转换,DroneCAN协议与自定义CAN协议数据转换

哈喽大家好,我是Mokel。这是Pogo-CAN转换器/转换模块(can-convertor转换器)系列视频的第三期。在第一期视频我们介绍了can-convertor转换器,第二期视频中我们演示了读写DroneCAN协议数据的例程。这期视频中我将演示在can-convertor转换器中如何通过Lua代码读写原生CAN协议数据。

这期视频中我将用到Pogo-CAN协议转换器/转换模块(can-convertor转换器)、Pogo-DroneCAN调试器(canv2调试器)、GH1.25-4P双头反向端子线以及两根typeC转USB线。

你可以在淘宝搜索“CAN协议转换 px4”找到Pogo-CAN转换器商品或者直接评论区置顶链接(https://item.taobao.com/item.htm?spm=a21n57.1.0.0.7e56523cjhl6Oc&id=750897861626&ns=1&abbucket=17#detail)跳转到商品。

该商品也上架了俄罗斯电商平台OZON,你可以通过搜索关键词“Модуль преобразования cоглашение CAN”找到商品或者直接评论区置顶链接(https://www.ozon.ru/product/modul-preobrazovaniya-coglashenie-can-podderzhka-px4-pixhawk-ardupilot-podderzhka-programmirovaniya-/?asb=a7D3xKAAFCBoCKqQPIHhDhA7YESO2M9%252BDg4SWOxhKmk%253D&asb2=dtTUZykkKGWFh2Dos3wDcpH9qvmxF3jrRLoQjbqXhHyDWLPydKdYk1CiwF1q9MHCZ98QmDvbtyMlFo8dsqXSiw0iL-tFl3ZFWsg5n72DgGiT61hWqEPZ_fN-hOpkPNTi&avtc=1&avte=2&avts=&keywords=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C+%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F+c%D0%BE%D0%B3%D0%BB%D0%B0%D1%88%D0%B5%D0%BD%D0%B8%D0%B5+CAN)跳转到商品。

同时,你可以在淘宝搜索“DroneCAN调试器”找到Pogo-DroneCAN调试器(canv2调试器),也可以通过评论区置顶链接(https://item.taobao.com/item.htm?spm=a21n57.1.0.0.2b9a523cYE9t78&id=734695507467&ns=1&abbucket=15#detail)直接跳转商品。该商品也上架了俄罗斯电商平台OZON,你可以通过搜索关键词“Отладчик DroneCAN”找到该商品,也可以通过评论区置顶链接(https://www.ozon.ru/product/otladchik-dronecan-uavcan-konverter-usb-can-izmenenie-proshivki-s-pomoshchyu-qgc-1346580712/?asb=Oaqy7GWh%252BuG5Uct4DT5YEaFYsnMz6G%252Fs7Or0MSlWDhw%253D&asb2=8OXO2usSNqJRQIWXLtovWVB92lxf2fcf01rcW64dRBUB00ytZba_n5caH5gOrcj_OAQ1ShXm3WPGz5O50L9Ck1ipLgk3QMcbK7fBpzXdlII8Ao00psQcK1RhANh79JFT&avtc=1&avte=2&avts=1703434129&keywords=%D0%9E%D1%82%D0%BB%D0%B0%D0%B4%D1%87%D0%B8%D0%BA+DroneCAN)跳转商品。

can-convertor转换器连接CAN设备时,我们可以通过编写Lua代码读写原生CAN协议数据。在教程中我们使用canv2调试器模拟CAN设备来和can-convertor转换器进行原生CAN数据收发操作。canv2调试器默认功能是转换DroneCAN协议和SLCAN协议,所以我们不能直接使用canv2调试器来进行例程演示。Pogo官方关于canv2调试器教程中有提到canv2调试器支持搭载candleLight_fw固件,在CAN协议生态中candleLight_fw固件是调试原生CAN协议的一个很好的解决方案,通过配套的cangaroo上位机,我们可以很方便的对原生CAN协议数据进行调试。更多关于candleLight_fw固件和cangaroo上位机的信息可以在CANable官网(https://canable.io/updater/)中查看。

我们需要将canv2调试器更新为candleLight_fw固件,我会在下文演示如何为canv2调试器刷固件,而can-convertor转换器仍然搭载着官方默认固件can-convertor.bin(https://gitee.com/pogo-tech/can-convertor-lua/releases)。

演示中,我们除了用到上面提到的上位机cangaroo,我们还会用到UartAssist串口调试助手。在之前教程中我们已经完成了UartAssist的安装,这里就不做过多的赘述了。

我们接下来要完成cangaroo上位机的安装,以及将我们的canv2调试器搭载的固件更新为candleLight_fw。

我们通过Pogo官方提供的资源安装cangaroo,打开Pogo官方gitee代码仓库release(https://gitee.com/pogo-tech/can-convertor-lua/releases),其中提供了cangaroo压缩包资源,下载。下载完成后,解压压缩包,在解压后的文件夹内可以看到cangaroo.exe文件。cangaroo.exe便可以运行cangaroo。

在Pogo官方代码仓库中同样为我们提供了candleLight_fw固件资源。打开gitee代码仓库release(https://gitee.com/pogo-tech/candle-light_fw/releases/tag/can_v2-0.1),找到我们需要的固件,candleLight_fw.bin下载固件。

我们将使用QGroundControl软件来更新canv2调试器的固件,你可以查看之前的视频(

将canv2调试器通过TypeC线连接到电脑,然后QGroundControl窗口中会弹出固件设置子窗口,我们选择高级设置,再将下拉框中的选项修改为自定义固件文件,确定。

此时选择我们要更新的固件,选择candleLight_fw.bin文件,打开,便开始更新canv2调试器的固件。当我们看到升级完成提示,说明canv2调试器已经更新为candleLight_fw固件。

连接我们的设备,通过GH1.25-4P双头反向端子线将can-convertor转换器的CAN1口和canv2调试器连接起来。然后将两根typeC转USB线连接到两个设备。

设备连接完成,接下来可以开始第一个例程“CAN_Read”。将can-convertor转换器通过TypeC线连接到电脑,将pogo.lua替换为下述代码,具体替换步骤参考前两期教程。

代码中,通过candrv.set_BitRate()、candrv.set_Protocol()、candrv.enable()三个函数分别将转换器的通信波特率设置为1000K,通信协议设置为原生CAN协议,以及使能转换器CAN1口(代码中CAN口参数can_num的值可以为0或1,分别对应转换器上的CAN0口和CAN1口,脚本中声明的can_num值为1,表示CAN1口)。

在can-convertor转换器中存在一个内存空间用来保存从CAN口接收到的数据。逻辑代码部分,首先通过candrv.recv()函数将CAN1口从canv2调试器接收到的数据保存下来。之后通过candrv.get_ID()、candrv.get_Len()和candrv.get_IDE()等一系列get函数解析并获取该内存空间中的数据ID、数据长度以及是否是扩展帧等数据。再之后使用print()函数打印获取到的数据。最后代码会根据数据长度,循环获取数据的每一位,并打印出来。

pogo.lua代码已经替换完成,然后我们打开UartAssist串口调试助手,将can-convertor转换器端通过TypeC线连接到电脑,并在UartAssist选中它开始调试。

此时UartAssist的数据日志窗口中,我们可以看到id、len、is_ext的值都为0,说明can-convertor转换器并没有接收到canv2调试器发送的数据。

我们再将canv2调试器端连接到电脑上,打开cangaroo上位机,cangaroo窗口左上角的measurement,再下拉框中的start measurement按钮,此时我们窗口会弹出一个调试配置页面。选中cangaroo检测到的接口candle0,并将波特率设置成和Lua代码中定义的波特率一样的值。由于我们在Lua代码中传给candrv.set_BitRate()函数的参数值为1000,且单位为K,所以我们选择波特率为。配置完成,OK,进入调试界面,此时我们在调试界面的Log窗口中可以看到打印的两条信息,说明我们设备连接成功。

连接成功后,我们通过cangaroo上位机操作canv2调试器。我们在Transmit View窗口中配置canv2调试器向can-convertor转换器发送的数据,首先通过将Address框中的数置为111,从而把canv2调试器的节点ID设置为111,之后将发送的Payload数据设置为11,22,33,44,55,66,77,88,Extended选项框则是声明发送的数据是否是扩展帧,我们暂时不勾选它。

Transmit View窗口左下角的Send Repeated按钮,canv2调试器开始不断向can-convertor转换器发送原生CAN协议数据,且在左侧的Log窗口可以看到调试器发送的数据。

我们通过在UartAssist中打印的can-convertor转换器的调试数据,判断是否成功接收到canv2调试器发送的数据。我们看到在UartAssist中打印的id、len字段不再是0,且日志中打印了在cangaroo设置的Payload数据。这里需要说明一下,在cangaroo中设置的是16进制数据,而在UartAssist中则是以10进制显示,所以我们看到UartAssist打印的调试信息中,id以及data值和cangaroo中设置的值存在差别。can-convertor转换器成功通过Lua脚本获取canv2调试器发送的数据并打印出来。

接下来是“CAN_Send_and_Recv”例程,将演示通过Lua脚本让can-convertor转换器向CAN设备发送原生CAN协议数据,先将pogo.lua的代码替换以下代码:

在can-convertor转换器中不仅存在一个内存空间用来存储转换器接收到的数据,还为发送数据提供了一个内存空间。Pogo官方封装了一系列函数帮助我们操作这两个内存空间。如同candrv.recv()函数会将CAN口接收到的数据保存到内存空间中,candrv.send()方法会将内存空间中的待发送数据发送给指定CAN口连接的设备。除此之外,我们还可以通过一系列get或set函数获取或设置内存空间的数据。比如说,我们可以通过candrv.get_ID()和candrv.get_IDE()函数获取内存空间中接收到的数据的id值以及它是否是扩展帧数据。再比如说,我们通过candrv.set_ExtID()函数将指定CAN口的待发送数据设置为扩展帧数据并设置数据id,或者通过candrv.set_Data()函数为指定CAN口的待发送数据设置数据某一位的值。

在脚本中首先通过candrv.recv(can_num)函数将CAN1口接收到的canv2调试器数据保存下来,之后调用candrv.get_Len()函数获取接收到的数据的长度,当接收到数据长度大于0时,获取该数据的id值,再判断该数据是否是扩展帧数据;如果是的话,通过candrv.set_ExtID(can_num, id + 1)函数将待发送回去的数据设置为扩展帧数据且将其id值置为接收到的数据的id值加一;如果不是的话,通过candrv.set_StdID(can_num, id + 1)函数发送标准数据帧,数据id同样为接收到的数据的id值加一;完成待发送数据的id值设置之后,代码会通过在for循环中调用candrv.set_Data()函数,设置待发送数据的每一位的值,且值和接收到的数据同一位上的值相同,最后我们再调用candrv.send()函数将设置好的数据发送回去。

我们来进行实际的演示,打开UartAssist串口调试助手,将can-convertor转换器端连接到电脑上,UartAssist中选中转换器后开始调试。之后再将canv2调试器端连到电脑,打开cangaroo,start Measurement开始配置canv2调试器,将调试器通信的波特率设置为,然后“OK”。

我们在Transmit View窗口中设置canv2调试器的发送数据,并Send Repeated按钮不断向发送can-convertor转换器发送数据。Lua脚本中,转换器根据接收到的数据设置返回数据,并通过candrv.send()函数将重新设置后的数据发送回canv2调试器。我们可以通过cangaroo的主窗口看到发送回去的数据;记得去掉aggregate by ID选项框的勾选,否则会只显示一条数据。

cangaroo中成功打印了正确的返回数据,例程演示成功。

本期视频就到这里了,更多原生CAN协议相关例程可以在Pogo官方gitee仓库(https://gitee.com/pogo-tech/can-convertor-lua)中找到,你你可以参照官方例程编写更多自定义功能。我们下期视频,不见不散。

今天的文章 can报文格式(CAN报文格式转换软件)分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-03 16:06
下一篇 2024-12-03 15:46

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/77147.html