加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

用Python实现LIN数据收发

(2024-01-15 10:46:25)
标签:

汽车电子总线

lin

总线协议

LINLocal InterconnectNetwork)总线,是基于UART/SCIUniversal Asynchronous Receiver-Transmitter/SerialCommunication Interface通用异步收发器/串行通信接口)的低成本串行通信协议。

在汽车中作为CAN总线的辅助总线,常被运用于车门、车窗、车灯以及中控锁等车身控制领域。

 

 

LIN总线特点

单主控器/多从设备模式无需仲裁机制;

低成本,基于通用UART 接口所有控制机都具备LIN 必需的硬件;

单信号线传输,同时保证信号传输的延迟时间;

LIN具有可预测的电磁兼容性能,为了限制EMC的强度,LIN协议规定最大传输速率为20kbps

LIN总线提供信号的配置、处理、识别和诊断功能。

用Python实现LIN数据收发 

LIN总线ID64个,也就是0~3F。传输速率1kbps~20kbps

 

 

 

Python收发案例:

 

import time

 

from canlib import canlib, Frame

from canlib import linlib

 

 

def print_channels():

    for ch in range(canlib.getNumberOfChannels()):

        chdata = canlib.ChannelData(ch)

        if "LIN" in chdata.channel_name:

            print(

                "{ch}. {name} ({ean} / {serial})".format(

                    ch=ch,

                    name=chdata.channel_name,

                    ean=chdata.card_upc_no,

                    serial=chdata.card_serial_no,

                )

            )

 

 

if __name__ == '__main__':

    # 打印出当前检测到的LIN接口信息

    print_channels()

 

    # 打开Lin通道,并设置为master,句柄接入总线

    # linlib.openChannel(0, linlib.ChannelType.MASTER)

    lin_master = linlib.openMaster(0)

    lin_master.setBitrate(19200)

    lin_master.busOn()

 

    # 打开Lin通道,并设置为slave,句柄接入总线

    # linlib.openChannel(1, linlib.ChannelType.SLAVE)

    lin_slave = linlib.openSlave(1)

    lin_slave.setBitrate(19200)

    lin_slave.busOn()

 

    # 发送数据

    msg = Frame(

        id_=12,

        data=[1, 2, 3, 4, 5, 6, 7, 8],

        dlc=8,

        flags=0

    )

    lin_master.writeMessage(msg)

 

# 接收数据

    frame = lin_slave.read(timeout=50)

    print("{id:0>8X}  {dlc}  {data}  {timestamp}".format(

        id=frame.id,

        dlc=frame.dlc,

        data=' '.join('x' % i for i in frame.data),

        timestamp=frame.timestamp

    ))

 

    time.sleep(10)

 

    # 移除句柄

    lin_master.busOff()

    lin_slave.busOff()

 

    # 关闭通道

    lin_master.close()

lin_slave.close()

 

运行结果:

用Python实现LIN数据收发 

 

read的参数timeout超时前没收到数据就会报以下错误,终止程序进行。

canlib.linlib.exceptions.LinNoMessageError: No messages available. (-1) 

Kvaser Leaf Professional LIN是一款单通道为LIN设计的USB产品。通过 MagiSyncTM功能实现时间戳自动同步,能提供实时连接任意几个产品至一台 PC。给客户提供方便同时也适合多通道使用。

主要性能

支持 LIN 1.3 和 2.x。
100% 支持用Kvaser的LINlib 语言,为任何一款Kvaser硬件编写的应用脚本。
出色的错误处理能力。
耗电量低。
出色的电磁兼容性(EMC)。
聚氨基甲酸乙酯导线能应对恶劣的工作环境。


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有