微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于 J1939 传输协议的 Python socketcan 接口

如何解决用于 J1939 传输协议的 Python socketcan 接口

在J1939协议中使用python和socketcan,当数据超过8个字节时,recvfrom()似乎没有返回接口。在J1939协议中,当数据字节超过8个时,会发送多条CAN报文,因为一个CAN报文最多只能容纳8个数据字节。

使用下面的程序,我看到接口返回了8个数据字节,但没有返回9个数据字节。

是 Python 的问题还是内核的问题?如果这确实是一个错误,我们如何才能找到合适的开发人员?

谢谢。

#!/usr/bin/env python3

import socket

send_socket = socket.socket(socket.PF_CAN,socket.soCK_DGRAM,socket.CAN_J1939) 

interface = "vcan0"

send_socket_src_name = socket.J1939_NO_NAME
send_socket_src_pgn = socket.J1939_NO_PGN 
send_socket_src_addr = 0x80
send_socket_src_sck_addr = (interface,send_socket_src_name,send_socket_src_pgn,send_socket_src_addr)
send_socket.bind(send_socket_src_sck_addr)

send_socket_dest_name = socket.J1939_NO_NAME 
send_socket_dest_pgn = 0x2300
send_socket_dest_addr = 0x81
send_socket_dest_sck_addr = (interface,send_socket_dest_name,send_socket_dest_pgn,send_socket_dest_addr)
send_socket_data_8_bytes = b'\x01\x02\x03\x04\x05\x06\x07\x08'
send_socket_data_9_bytes = b'\x01\x02\x03\x04\x05\x06\x07\x08\x09'

receive_socket = socket.socket(socket.PF_CAN,socket.CAN_J1939) 

receive_socket_src_name = socket.J1939_NO_NAME
receive_socket_src_pgn = socket.J1939_NO_PGN 
receive_socket_src_addr = 0x81 
receive_socket_src_sck_addr = (interface,receive_socket_src_name,receive_socket_src_pgn,receive_socket_src_addr)
receive_socket.bind(receive_socket_src_sck_addr)

send_socket.sendto(send_socket_data_8_bytes,send_socket_dest_sck_addr)
(data,sock_addr) = receive_socket.recvfrom(128)
(interface,src_name,src_pgn,src_addr) = sock_addr
print(f"interface for 8 data bytes:{interface}")

send_socket.sendto(send_socket_data_9_bytes,src_addr) = sock_addr
print(f"interface for 9 data bytes:{interface}")

receive_socket.close()
send_socket.close()

这是输出

interface for 8 data bytes:vcan0
interface for 9 data bytes:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。