BabyLIN二次开发教程

本文目录

二次开发教程

本站所有技术文档均为虹科技术工程师所编写和更新,如果您发现任何错误,欢迎扫码下方二维码联系我们进行更正,万分感谢。

如果您需要定制的项目服务或教程培训,请联系虹科获取报价

1. 适用硬件

  • BabyLIN-II
  • BabyLIN-RC-II
  • BabyLIN-RM-III
  • BabyLIN-MB-II
  • HARP-5

2. 适用环境

Windows®Vista/7/8/10(32 and 64 Bit)、Linux

3. 使用前提

  • 驱动
  • 对BabyLIN有一定的掌握
  • 了解该文章中提到的用法:https://mp.weixin.qq.com/s/SIQK6m5DGBo15m1lpoFdEw 
  • 任何通信相关问题建议在simplemenu测试无误后再转移至二次开发
  • 任何程序相关的不确定性可以通过官方例程进行验证:

下载LinWorks Installer(请先联系虹科销售人员获取下载密码)

4. 例程问题

所有的API开发包中均包含例程讲解,不同开发包包含的例程不同(C#、Python、Java、C/C++等,实际以开发包内容为准)

5. API开发流程

请结合API开发包中的API帮助文档(PCANBasic_enu.chm)

  • 连接/断开

1) BLC_openPort

根据设备的COM口(USB设备,使用BLC_open),IP地址和端口(以太网设备,使用BLC_openNet),可以直接使用对应的函数进行连接。

2) BLC_getChannelHandle

A. BabyLIN设备拥有包含多个通道(CAN/LIN)的设备,所以在获得设备的handle之后,还需要用这个函数获取各个通道的handle。
B. channelId参数,可以通过BLC_getChannelCount获取通道数量,通过BLC_getChannelInfo获取通道信息。当然对于那些仅有1个LIN通道的设备,通常输入0代表device,输入1代表LIN通道。

3) BLC_close

用于关闭对设备的连接。

  • BabyLIN命令/设备参数

1) BLC_sendCommand

用于发送硬件通道需要执行的命令,相关命令可参照API帮助文档中的Commands。

2) BLC_setsig

A. 用于改变信号的值。在BabyLIN中,除了诊断的内容,LIN总线的其它通讯都被设计成在信号的范畴下发送和读取的。Set signal函数是唯一一个可以改变发送内容的函数,可以按照sdf文件中信号的定义修改发送的内容。发送的时机则完全参照调度表。
B. 另外的发送方式请参考command中的inject命令。

3) BLC_setDTLMode

A. BabyLIN有不同的诊断模式,针对不同的协议功能。Baby-LIN在启动时状态为Diagnostic OFF。
B. 如果BabyLIN充当LIN主节点,则使用相关的API函数时将自动选择诊断模式。
a) API函数BLC_sendRawMasterRequest或BLC_sendRawSlaveResponse将启动诊断RAW模式;
b) API函数BLC_sendDTLRequest或BLC_sendDTLResponse将启动诊断DTL模式。
C. 如果BabyLIN充当LIN从节点,则必须主动使用BLC_setDTLMode函数设置DTL模式。无法同时使用两种不同的诊断模式!

4) BLC_sendRawMasterRequest / BLC_getRawSlaveResponse

用于发送和接收LIN诊断报文。按照LIN协议,主节点发送的ID为0x3C,从节点返回的ID为0x3D。在收发之前,请保证在LIN总线上已经有运行包含这两帧的调度表。

5) BLC_sendRawSlaveResponse

A. 从节点使用这个函数响应主节点的请求并做出相应的反馈。
B. 调用该函数后,设备会自动对之后收到的所有符合条件的主节点的3C请求进行回复。直到再次调用该函数时,会覆盖掉上一次调用函数时的设置。

  • 数据接收

1) BLC_getNextDTLRequest/BLC_getNextDTLResponse

A. 用于获取DTL格式的诊断帧,发送的机制和BLC_getNextFrame接近,都是接收最早的数据。在设置了DTL模式(请参考BLC_setDTLMode函数)之后就可以开始收到数据(收不到数据可能由于没有设置DTL模式)。
B. 不符合DTL格式的数据也会被读到,所以需要使用者去判断哪个内容才是需要的。必要的时候,需要多次读取直到收到正确的内容。

2) BLC_getLastFrame

A. BLC_getLastFrame函数用于按照ID获取最近收到的帧数据。请注意在使用”disframe”和”mon_on”命令后,才能在对应的模式收到数据。
B. BabyLIN设备会一直保存每个ID收到的最后一次数据,用户可以随时获取这些数据。

3) BLC_getNextFrame

A. BLC_getNextFrame用于获取BabyLIN设备收到的最早的帧数据。请注意在使用”disframe”和”mon_on”命令后,才能在对应的模式收到数据。
B. BLC_getNextFrame可以获取到任意ID的数据,会按照BabyLIN接收的顺序依次从接收缓存中获取,接收过的帧会从缓存中被移除。
C. BLC_getNextFrame和BLC_getLastFrame函数互相不会产生任何冲突,因为它们从不同的缓存中读取数据;BLC_getNextFrame使用的接收缓存最多储存1024帧的LIN数据,当这个缓存满了之后,最早的接收数据将被丢弃。

4) BLC_getNextSignal/BLC_getSignalValue

BLC_getNextSignal函数和BLC_getNextFrame类似,用于获取BabyLIN设备收到的最早的信号值。同一帧有多个信号设定为读取时,函数会按照先后顺序依次返回同一帧的信号值。BLC_getSignalValue用于按照ldf中定义的信号编号获取当前的信号值。请注意先使用”dissignal”命令获取对应信号。

  • SDF相关

1) BLC_loadSDF

A. BLC_loadSDF用于将SDF加载到BabyLIN设备中。
B. 在所有情况下,SDF都会完全加载其所有部分。

2) SDF_open

A. SDF_open在BabyLIN.dll的内存中打开SDF,生成一个SDF handle。以SDF_开头的函数和Unified Access中的SDF部分可用于获取SDF的相关信息。请注意,这个函数并不会把SDF文件加载到设备中去。
B. 需要SDF handle的函数都需要配合这个函数来使用,读取的是对应SDF handle指向的SDF文件的内容。