Python中CAN通讯学习

参考:python-can库基于PCAN-USB使用方法

          python-can简述_python can-CSDN博客

安装PCAN驱动

驱动程序: PEAK-System

驱动 - PEAK-System

安装库文件

python.exe -m pip install --upgrade pip
或
pip install --upgrade pip

pip install python-can 
或
python -m pip install "python-can[viewer]"

参考代码如下:

import can
from can.interfaces.pcan import PcanBus
import time

# 初始化PCAN通道
channel = "PCAN_USBBUS1"  # 通道名称根据实际情况设置
bus = PcanBus(channel=channel, bitrate=250000, is_extended_id=False)

# msg = can.Message(arbitration_id=0x500, data=[00, 10, 20, 13, 14, 15, 16, 0x7F], is_extended_id=False)
msg = can.Message(arbitration_id=0x500, is_extended_id=False, dlc=8)
msg.data = [0, 0, 0, 0, 0, 0, 0, 0]
msg.data[0] = 0x10
msg.data[1] = 0x20
msg.data[2] = 0x1A
msg.data[3] = 0x10
msg.data[4] = 0x10
msg.data[5] = 0x10
msg.data[6] = 0x10
#msg.data[7] = 0xff
#bus.send_periodic(msgs=msg, period=0.3)  # 发送周期
count = 0
# 发送CAN消息
try:
    while True:

        count += 1
        msg.data[7] = count

        bus.send(msg)
        print("发送的ID为 {} 数据为 {}".format(msg.arbitration_id, msg.data))
        time.sleep(0.1) #设置发送周期 100ms
except can.CanError:
    print("通讯错误,消息未发送")
finally:
    # 确保总线能够被正确关闭
    bus.shutdown()

python语法补充:

在空列表中python不能够直接通过索引赋值
以下是错的

data = []
data[0] = 0x1A
data[1] = 0x1B
print(data)

空列表向列表中添加元素,应该使用append()方法或者通过索引赋值的方式

data = []
data.append(0x1A)
data.append(0x1B)
print(data)

在非空列表中python能够直接通过索引赋值

data = [0,0]
data[0] = 0x1A
data[1] = 0x1B
print(data)

你可能感兴趣的:(python,python,学习)