2.使用Python收发数据
2.1接发数据代码如下:
2.1.1接收数据代码
# author:Hurricane
# date: 2021/4/12
# File : CAN\_receive.py
# E-mail:hurri\_cane@qq.com
import sys
from canlib import canlib
def print\_frame(frame):
"""Prints a message to screen"""
if (frame.flags & canlib.canMSG_ERROR_FRAME != 0):
print("\*\*\*ERROR FRAME RECEIVED\*\*\*")
else:
print("{id:0>8X} {dlc} {data} {timestamp}".format(
id=frame.id,
dlc=frame.dlc,
data=' '.join('%02x' % i for i in frame.data),
timestamp=frame.timestamp
))
if __name__ == '\_\_main\_\_':
# Initialization
channel_number = 0
# Specific CANlib channel number may be specified as first argument
if len(sys.argv) == 2:
channel_number = int(sys.argv[1])
chdata = canlib.ChannelData(channel_number)
print("%d. %s (%s / %s)" % (channel_number, chdata.channel_name,
chdata.card_upc_no,
chdata.card_serial_no))
# Open CAN channel, virtual channels are considered ok to use
ch = canlib.openChannel(channel_number, canlib.canOPEN_ACCEPT_VIRTUAL)
print("Setting bitrate to 500 kb/s")
ch.setBusParams(canlib.canBITRATE_500K)
ch.busOn()
# Start listening for messages
finished = False
print(" ID DLC DATA Timestamp")
while not finished:
try:
frame = ch.read(timeout=50)
print_frame(frame)
except(canlib.canNoMsg) as ex:
pass
except (canlib.canError) as ex:
print(ex)
finished = True
# Channel teardown
ch.busOff()
ch.close()
2.1.2发送数据代码
# author:Hurricane
# date: 2021/4/12
# File : CAN\_send.py
# E-mail:hurri\_cane@qq.com
import sys
from canlib import canlib, Frame
channel_number = 1
# Specific CANlib channel number may be specified as first argument
if len(sys.argv) == 2:
channel_number = int(sys.argv[1])
print("Opening channel %d" % (channel_number))
# Use ChannelData to get some information about the selected channel
chd = canlib.ChannelData(channel_number)
print("%d. %s (%s / %s) " % (channel_number,
chd.channel_name,
chd.card_upc_no,
chd.card_serial_no))
# If the channel have a custom name, print it
if chd.custom_name != '':
print("Customized Channel Name: %s " % (chd.custom_name))
# Open CAN channel, virtual channels are considered ok to use
ch = canlib.openChannel(channel_number, canlib.canOPEN_ACCEPT_VIRTUAL)
print("Setting bitrate to 500 kb/s")
ch.setBusParams(canlib.canBITRATE_500K)
print("Going on bus")
ch.busOn()
print("Sending a message")
frame = Frame(id_=123,
data=[1, 2, 3, 4, 5, 6, 7, 8],
dlc=8,
flags=0)
ch.write(frame)
print("Going off bus")
ch.busOff()
print("Closing channel")
ch.close()
注:发送数据代码是发送这样的一帧数据:
id是123,长度为8的CAN帧
PS:这里面的信息可以自行修改,符合CAN帧的规则就行
frame = Frame(id_=123,
data=[1, 2, 3, 4, 5, 6, 7, 8],
dlc=8,
flags=0)
2.2验证发送数据
验证是否发送成功,只需要看到有没有接收到数据就行了,本文通过Kvaser提供的软件来测试是否接收到数据。
当然也可以通过上文提到的接收数据的代码,这个在后文会提到。
2.2.1使用Kvaser Can King接收数据
打开CAnKing软件(此软件在1.2节已经提供安装包)
- 设置CAN通道为0
- 设置波特率为500K
- 点击按钮
Go On Bus
现在CAN的0通道便打开了,在右侧Output框可以显示发送以及接收到的数据
2.2.2使用Python发送数据
运行2.1.2的Python文件
可以看到运行一次代码,Kvaser Can King便会接收一帧数据
2.3验证接收数据
2.3.1使用Kvaser Can King发送数据
与2.2.1同样打开CAnKing软件
- 设置CAN通道为0
- 设置波特率为500K
- 点击按钮
Go On Bus
现在CAN的0通道便打开了,在右侧Output框可以显示发送以及接收到的数据
按照下图打开Universal
按钮
点击后便会打开Message对话框,按照图示输入信息
电机Send便会发送CAN帧
2.3.2使用Python发接收数据
运行2.1.1的Python文件
可以看到每次点击Send,Python代码便会接收一帧数据
2.3代码间发送与接收数据:
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典