PLIN API中文FAQ

在使用PLIN API之前,首先您应该对您要如何使用LIN总线有一定了解:

  1.仿真LIN主节点还是从节点;

  2.是否需要使用调度表;

  3.是否需要发送诊断帧。

根据上述条件的不同,整个编程的思路会有很大的不同。

1.使用前

  PLIN设备在使用前需要安装LIN驱动。另外API提供的是dll库文件,您需要把它加载到工程文件中去。

  LIN驱动会提供PLIN VIEW pro的自带免费软件。在排查bug时,如果您出现了收不到数据的情况,可以尝试使用PLIN VIEW pro软件能否收到正确的数据,这可以协助判断错误究竟是发生在硬件层面还是软件层面。

 

2.连接使用的函数

  PLIN API在连接时需要连接client和hardware。

  LIN_RegisterClient和LIN_ConnectClient分别用于创建客户端和连接客户端。需要注意的是LIN_RegisterClient函数的输入参数hWnd:hWnd在制作DOS Box的客户端时,可以输入0。

 HLINCLIENT句柄由LIN_RegisterClient函数产生。

 LIN_InitializeHardware函数用于连接hardware。

  设置波特率和硬件的主从模式(主节点还是从节点)都是在LIN_InitializeHardware函数中。波特率范围参考如下:

 LIN_GetAvailableHardware函数用于查找可用的硬件设备。如果只是想获取可连接的硬件通道的数量,使用如下输入的参数:pBuff设置为NULL,wBuffSize设置为0,这样pCount参数就会返回可使用的通道数目。

  HLINHW句柄可由LIN_GetAvailableHardware函数产生。

  LIN_GetClientParam函数和LIN_GetHardwareParam函数用于获取服务器和硬件的状态,其中LIN_GetHardwareParam可以用于在LIN_GetAvailableHardware查找硬件设备后,输出每个通道的详细信息。

 

  如果软件一直收不到报文,可能是这个原因

  LIN_SetClientFilter和LIN_RegisterFrameId用于设置设备的过滤器,注意客户端不会收到任何LIN报文,直到使用其中一个函数设置了过滤器。

  需要注意的是,LIN_SetClientFilter将替换原有的过滤器,而LIN_RegisterFrameId将扩展原有的过滤器。

3.配置帧使用的函数

  LIN_SetFrameEntry用于配置帧,主要需要解释下TLINFrameEntry。

 帧ID是FID(不包含校验),方向用于配置这一帧是由PLIN设备接收的还是发送的。如果PLIN设备是从节点,这里需要额外注意!此时当主节点请求某ID帧的数据时,如果PLIN的该ID被配置为publisher,PLIN设备就会自动进行回复;如果PLIN设备是主节点并使用调度表时,调度表运行到的帧ID被配置为publisher,那么PLIN设备会把数据填充并直接发送。检验方式请查看您对应使用的LIN协议,一般来说LIN1.x协议都是使用Classic,LIN2.x除诊断帧外使用Enhanced,诊断帧(0x3C 0x3D)使用Classic(但这并不是唯一的,也有在诊断帧校验时使用Enhanced的)。请注意,如果该帧被设置为publisher,则检验方式不能被设置为auto自动。

  关于Flags的解释见下图,一般请将这个数值设置成1。另外如果将这个值设置成3=1+2,表示同时设置FRAME_FLAG_RESPONSE_ENABLE和FRAME_FLAG_SINGLE_SHOT的flags。

4.配置调度表使用的函数

  LIN_SetSchedule用于设置调度表,然后使用LIN_StartSchedule运行它。调度表总共可以设置8个(编号0至7)。

 只有主节点可以设置调度表,从节点不需要设置调度表;如果您使用主节点并不想使用调度表,则也可以跳过这一部分。

  这里主要解释TLINScheduleSlot参数的含义:

关于类型请参见LIN总线协议,一般默认是用无条件帧Unconditional Frame。MasterRequest和SlaveResponse代表诊断帧(一般是0x3C和0x3D)。其余的类型不常被使用。

  Delay和FramId[0]是我们需要填写的部分,用于设置延时和帧ID。请注意FramId是一个数组,但只有FramId[0]会被我们用到,后面都是用于Sporadic类型的。如果在调度表里有多个ID,那么是需要定义多个ScheduleSlot。注意在LIN_SetSchedule函数中,传入的TLINScheduleSlot本身就是一个数组Array。

5.收发函数

  接收:LIN_Read函数。

  无论如何使用,都需要LIN_Read读取报文,也可以选择LIN_ReadMulti,它们区别不大。需要注意的是,每次函数都是从缓存中收到的最早的报文开始读的。如果您觉得接收有延迟,多半就是读的速度太慢了。

  请注意接收的TLINRcvMsg中FrameId为PID。PID 按位与0x3F将会得到普通的ID。

  发送:

  如果是从节点或是主节点使用调度表:LIN_UpdateByteArray函数。

  LIN从节点只有被主节点请求时才能发送报文。

  运行调度表时,调用Write函数无效!

  在使用这个函数对数据进行更改后,从节点再被下一次请求该数据时,以及主节点调度表发送该数据时,将都会按照LIN_UpdateByteArray函数最后设置的数据进行发送。

  如果是主节点没有使用调度表:LIN_Write函数。

  如果想在调度表中插入一帧,暂停调度表,使用LIN_Write发送,再恢复调度表。

  设置TLINMsg:

  FrameId为PID(不会自动计算),请使用LIN_GetPID函数计算正确的PID。

  请使用LIN_CalculateChecksum函数计算正确的校验和(不会自动计算)。

  如果Direction设置为Subscriber,则LIN_Write函数将会发送报头

6.断开连接

  LIN_DisconnectClient函数。

此文转自虹科汽车电子微信公众号“虹科汽车电子”

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值