gpt4 book ai didi

python - 在Python中通过UDP发送CAN帧

转载 作者:行者123 更新时间:2023-12-03 12:02:30 33 4
gpt4 key购买 nike

我在两台Linux机器之间建立了UDP套接字连接,并且可以轻松发送例如b"Hello, World!"。但是现在我需要发送以下CAN帧

from can import Message
send_msg = Message(data=[1, 2, 3, 4, 5])
因此,如果我打印 send_msg,它将显示:
Timestamp:        0.000000    ID: 00000000    X                DLC:  5    01 02 03 04 05
我想将此打印在接收端。我正在使用的发送和接收结束代码如下:
发送:
import socket

UDP_IP = "10.140.189.249"
UDP_PORT = 5005
from can import Message
send_msg = Message(data=[1, 2, 3, 4, 5])

print(send_msg)
MESSAGE = send_msg

print("UDP target IP: %s" % UDP_IP)
print("UDP target port: %s" % UDP_PORT)
print("message: %s" % MESSAGE)

sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))
在这里,我知道 MESSAGE = send_msg是错误的。
接收
import socket

UDP_IP = "0.0.0.0"
UDP_PORT = 5005

sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))

while True:
rec_msg, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
print("received message: %s" % rec_msg)
请指教

最佳答案

由于UDP连接的物理层和CAN连接的本质层是完全不同的,因此您无法通过UDP发送CAN帧。当然可能的是发送CAN帧的有效负载并在接收侧组装CAN消息:即在发送方:

sock.sendto(b“12345“, (UDP_IP, UDP_PORT))
在接收端:
msg = Message(data=bytearray(recv_msg))
您很可能不仅要传输CAN帧的数据,还希望传输ID和其他字段。
另一种可能是使用 pickle.dumpspickle.loads在发送方对Message对象进行腌制,并在接收方对其进行腌制。
CAN总线的所有功能(例如仲裁,错误帧等)都无法在UDP连接上进行模仿。

关于python - 在Python中通过UDP发送CAN帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63257492/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com