Python实现LIN数据收发

Python实现LIN数据收发


前言

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

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

支持LIN测试的软件就显然没有CAN总线那么多,busmaster作为性价比最高的总线软件(没有什么是比开源更香的,如果有,那就是开源且功能强大)。

但是busmaster也无法支持所有的LIN卡,就比如Kvaser Hybrid CAN/LIN系列的LIN通道就无法被识别,所以只能进行二次开发(主要是为了节约,收费的软件还是可以支持的)

LIN


直接上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('%02x' % 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

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

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

busmaster界面

busmaster
听说官方软件CANking已经在更新当中,不知道是否能将LIN也支持上,期待…

Hybrid CAN/LIN
初识LIN,请膜拜大佬的文章

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值