KVASER CANlib & Python��3������U100��Python

Logan Via
Fri, 06 Jan 2023 07:47:38 +0000

�������̵�ָ���У����ǽ�����U100�ӿ��ϵ�LED�Ĺ���ԭ����ʹ�÷�ʽ��

������Anton Carlsson������������Ա

��ͬ������?L-G Fredriksson���ֳ�Ӧ�ù���ʦ

�汾��?2021-08-09A

���ĵ�Ŀ���������Щ��

��ָ����������Щϣ��ͨ��CANlib��canlib Python�����ú�ʹ���ƺ���Ϸ CAN�ӿڵ��û���

��ʹ�����ָ��ǰ��������ӵ���ƺ���Ϸ U100�ӿ���

��ʹ�����ָ��֮ǰ�����ǽ������Ķ�����������

�ƺ���Ϸ CANlib & Python ��1���֣��״�����

�ƺ���Ϸ CANlib & Python ��2���֣����Ժ�ʾ��

����������ؼ�����

������ж��˲�����������ʹ�õ�����/���̣���ʹ������ǿ��������˵���б���

����Windows Powershell��
powershell.exe

�л��������Python�ű���Ŀ¼��cd��������Ѿ���һ�����⻷�����Ҿ�������Ȩ�ޣ����������������������裩

����һ�����⻷����
py -3 -m venv .venv �Cprompt .

�������ʹ���¼������û��Ȩ�޵����û���
Set-ExecutionPolicy Unrestricted -Scope CurrentUser

�������⻷����
.\.venv\Scripts\activate

�������δ�ڴ����⻷���а�װcanlib����ִ�����²�����
pip install canlib

��

���нű���py check_ch.py��pyһֱ�������У���ȷ������Ľӿ������ӣ�

�����༭����
python -m idlelib
python -m idlelib check_ch.py

��

ͣ�����⻷����
deactivate

�ƺ���Ϸ U100�ӿ�

��ǰ�����ƺ���Ϸ�ӿ���ȣ�U100������һЩ���������˱������豸���Ӽ��֮�⣬�����Եı仯�ǽӿ��ϵ�LED������LED�ڳߴ����״�Ϸ����˱仯�����ǵĹ�����ʽҲ�����˵�������Щ�仯ʹ�û������׿���LED������LED��ȡ�й��豸�ĸ�����Ϣ��

���ȣ�֮ǰ������CAN�ӿ�������LED����PW��ÿ�����õ�CANͨ���ϸ�������LED��Ȼ����U100ֻ������LED���������豸��Ψһ���õ�CANͨ����һ��LED������TX����һ��LED������RX��Ȼ������ЩLED���и���Ĺ��ܣ�������ʾ������ɫ��

U100 LEDs

����ǰ���豸��ӵ�е�������ɫ����ɫ����ɫ����ɫ����ͬ��U100����������ɫ����Щ��ɫ��������ɫ����ɫ����ɫ����ɫ����ɫ��LED����������״̬������ͼ��ʾ��ÿ��ָʾ����һ��״̬����

���״�����U100ʱ������LED�����Ȼ�����˸һ���̹⣬Ȼ��״̬���������׹�����ͨ������ʱ����ɫ״̬���򽫱�Ϊ��ɫ����U100���ջ��ͱ���ʱ������һ��״̬������˸��ɫ������豸���յ����ģ�RX״̬������˸��ɫ������豸���ͱ��ģ�TX״̬������˸��ɫ������ڴ�������г��ִ���LED����һ���̶�����ʾ���ǽ��յ��Ĵ���������������ǳ�����������û������ͨ���������ʹ��U100���ͱ���ʱ��ͨ����������󱻶�״̬������״̬���򶼻���˸��ɫ�����⣬����ͨ�����ڴ����������TX LED������Ϊ��ɫ��������ǳ����Բ�ƥ��ı����ʶ�ȡ���ģ�״̬�����Խ���˸��ɫ���������������������ڽ��մ���֡��RX LED������Ϊ��ɫ��������TX������

��������������߸��أ����ӷ��͵ı�����������LEDָʾ��Ҳ����֮���𡣸������߸��صĲ�ͬ����TX��RX LED��״̬����ʼ�������LED������ƹ⣬��ȡ�����������ڷ��ͻ��ǽ�����Ҫ����LED�����ǿ��Ա�д���½ű�����������Ϊu100.py��

> .\.venv\Scripts\activate

(pyproj)> py .\u100.py

import time
from canlib import canlib, Frame

# First create two frames with different id:s.
frame_a = Frame(id_=1, data=[72, 69, 76, 76, 79, 33])
frame_b = Frame(id_=2, data=[72, 69, 76, 76, 79, 33])

# Second, open two channels, one for the U100 and one for another interface.
# In this example the U100 is connected to channel 3 and a USBcan is
# connected to channel 2. And set their bitrate.
ch_a = canlib.openChannel(channel=2, bitrate=canlib.Bitrate.BITRATE_100K)
ch_b = canlib.openChannel(channel=3, bitrate=canlib.Bitrate.BITRATE_100K)

#set both channels to normal and go on bus.
ch_a.setBusOutputControl(canlib.Driver.NORMAL)
ch_b.setBusOutputControl(canlib.Driver.NORMAL)
ch_a.busOn()
ch_b.busOn()

# To get a clearer sense of what happens, you will need to press enter between
# each test.
input("Press enter to continue")
# In the first example we will transmit messages with the U100. In the
# second example we will receive messages with the U100. And in the third
# and last example we will both send and receive messages with the U100.
# In all examples we will send 50 messages, you can test to increase this
# number to see its effect.
for i in range(50):
# We will make use of the try function during these tests. The program will
# try to execute the commands within the try-block (the indented region
# underneath). If the program encounters an CanGeneralError (indicated by
# the except command) the program will instead execute the commands within
# the except block. In this example the messages might be sent to quickly
# and result in a CanGeneralError which is why we will wait for 0.1 seconds
# with time.sleep if this happens.
    try:
        # This is the try-block.
        ch_b.write(frame_b)
        ch_a.read(1000)
    except canlib.exceptions.CanGeneralError:
        # This is the except block.
        time.sleep(0.1)

input("Press enter to continue")

for i in range(50):
    try:
        ch_a.write(frame_a)
        ch_b.read(1000)
    except canlib.exceptions.CanGeneralError:
        time.sleep(0.1)

input("Press enter to continue")

for i in range(50):
    try:
        ch_b.write(frame_b)
        ch_a.read(1000)
        ch_a.write(frame_a)
        ch_b.read(1000)
    except canlib.exceptions.CanGeneralError:
        time.sleep(0.1)

ch_a.close()
ch_b.close()

�ڲ��Թ����У�TX��RX��LED����������������ӱ��ĵ���������֧�ַ�Χ�ڵ������������߸��ؾͻ����ӣ������LED�ƽ���ɻ�ɫ��