1.在工程中添加 CAN 开发库 candev.jar 

在工程中添加 CAN 开发库 candev.jar

一下是 方法参数介绍和调用

⚫ 在程序头部添加引用:

import com.cosofteck.Can;

import com.cosofteck.CanFrame;

⚫ 控制 CAN0 接口方法

public static int SetBitrate(int bitrate)

功能:设置 CAN 比特率。

参数:

bitrate:CAN 比特率值。

返回值:成功返回 0,失败返回-1。

public static int Start()

功能:启动 CAN 服务。

返回值:成功返回 0,失败返回-1。

public static int Stop()

功能:停止 CAN 服务。

返回值:成功返回 0,失败返回-1。

public static int Restart()

功能:重启 CAN 服务。

返回值:成功返回 0,失败返回-1。

public static int RestartDelay(int delay)

功能:延时重启 CAN 服务。

参数:

delay:重启 CAN 服务延时的时间,单位毫秒(ms)。

返回值:成功返回 0,失败返回-1。

public static int SetMode(int mode, boolean on)

功能:设置控制模式。

参数:

mode:控制模式。0:loopback;1:listen-only;2:triple-sampling;

3:one-shot;4:berr-reporting。

on:true 打开,false 关闭。

返回值:成功返回 0,失败返回-1。

public static int SendInit(int family, int type, int proto)

功能:发送初始化。

参数:使用默认值(29,3,1)

返回值:成功返回 0,失败返回-1。

public static int SendData(byte[] data, int id, boolean rtr, boolean

extended)

功能:发送数据。

参数:

data:要发送的数据数组。

id:发送帧 ID 号。

rtr:是否发送远程帧格式。

Extended:是否发送扩展帧类型。

返回值:返回发送数据结构的字节数,返回-1 总线错误,返回 0

连接断开。

public static int SendClose()

功能:关闭发送。

返回值:成功返回 0,失败返回-1。

public static int ReadInit(int family, int type, int proto)

功能:接收初始化。

参数:使用默认值(29,3,1)

返回值:成功返回 0,失败返回-1。

public static CanFrame ReadData()

功能:接收数据。

返回值:返回接收到的数据。

public static int ReadClose()

功能:关闭接收。

返回值:成功返回 0,失败返回-1。

⚫ 控制 CAN1 接口方法

public static int SetBitrateOne(int bitrate)

功能:设置 CAN 比特率。

参数:

bitrate:CAN 比特率值。

返回值:成功返回 0,失败返回-1。

public static int StartOne ()

功能:启动 CAN 服务。

返回值:成功返回 0,失败返回-1。

public static int StopOne ()

功能:停止 CAN 服务。

返回值:成功返回 0,失败返回-1。

public static int RestartOne ()

功能:重启 CAN 服务。

返回值:成功返回 0,失败返回-1。

public static int RestartDelayOne (int delay)

功能:延时重启 CAN 服务。

参数:

delay:重启 CAN 服务延时的时间,单位毫秒(ms)。

返回值:成功返回 0,失败返回-1。

public static int SetModeOne (int mode, boolean on)

功能:设置控制模式。

参数:

mode:控制模式。0:loopback;1:listen-only;2:triple-sampling;

3:one-shot;4:berr-reporting。

on:true 打开,false 关闭。

返回值:成功返回 0,失败返回-1。

public static int SendInitOne (int family, int type, int proto)

功能:发送初始化。

参数:使用默认值(29,3,1)

返回值:成功返回 0,失败返回-1。

public static int SendDataOne (byte[] data, int id, boolean rtr, boolean

extended)

功能:发送数据。

参数:

data:要发送的数据数组。

id:发送帧 ID 号。

rtr:是否发送远程帧格式。

Extended:是否发送扩展帧类型。

返回值:返回发送数据结构的字节数,返回-1 总线错误,返回 0

连接断开。

public static int SendCloseOne ()

功能:关闭发送。

返回值:成功返回 0,失败返回-1。

public static int ReadInitOne (int family, int type, int proto)

功能:接收初始化。

参数:使用默认值(29,3,1)

返回值:成功返回 0,失败返回-1。

public static CanFrame ReadDataOne ()

功能:接收数据。

返回值:返回接收到的数据。

public static int ReadCloseOne ()

功能:关闭接收。

返回值:成功返回 0,失败返回-1。

⚫ 数据结构

接收到的数据保存为 CanFrame 对象,包含 3 个数据成员:

int mId;

接收到的帧 ID 号。

byte mDlc;

接收到的帧长度。

byte[] mData;

接收到的帧数据。

2.在代码中实际使用

//设置波特率

Can.SetBitrate(500000);

//启动 有返回值

System.out.println("can启动" + Can.Start());

//进行读取的初始化

System.out.println("发送初始化" + Can.SendInit(29, 3, 1));

System.out.println("读取初始化" + Can.ReadInit(29, 3, 1));

3.设置can的屏蔽和遮罩

long CAN_EFF_FLAG = 0x80000000;

long CAN_SFF_MASK = 0x000007FF;

long CAN_EFF_MASK = 0xFFFFFFFF;

4.读取

new Thread() {

@Override

public void run() {

while (true) {

CanFrame canFrame = Can.ReadData();

int id;

if ((canFrame.mId & CAN_EFF_FLAG) == 0) {

Log.d(TAG, "Standard Frame id = " + (canFrame.mId & CAN_SFF_MASK));

id = (int) (canFrame.mId & CAN_SFF_MASK);

} else {

Log.d(TAG, "Extended Frame id = " + (canFrame.mId & CAN_EFF_MASK));

id = (int) (canFrame.mId & CAN_EFF_MASK);

}

Log.d(TAG, "dlc = " + canFrame.mDlc);

//数据长度

int dlc = canFrame.mDlc;

int len = canFrame.mData.length;

//解析数据 16 转 10

for (int i = 0; i < len; i++) {

Log.d(TAG, "解析data" + i + " = " + canFrame.mData[i]);

}

// 原始数据

String sMsg = Integer.toHexString(id) + " [" + Integer.toHexString(dlc) + "] ";

for (int n = 0; n < dlc; n++) {

System.out.println("原始data"+ Integer.toHexString(canFrame.mData[n] & 0xFF));

sMsg += " " + Integer.toHexString(canFrame.mData[n] & 0xFF);

}

sMsg += "\r\n";

String sim = dateFormat.format(date);

// userDB.insert(String.valueOf(id),sMsg,sim);

System.out.println("原始数据输出"+sMsg);

}

}

}.start();

5.发送

byte testData[] = {10, 0, 0, 0, 0, 0, 0, 0};

new Thread() {

@Override

public void run() {

while (true) {

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println("发送数据" + Can.SendData(testData, 516, false, false));

System.out.println("返回值:返回发送数据结构的字节数,返回-1 总线错误,返回 0连接断开。");

}

}

}.start();

 6.如果demo和candev.jar 请在我的资源中下载

推荐文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。