java 实现 CAN口通讯

1、引入第三方库

链接:https://pan.baidu.com/s/1JC-Bi_Qgts5a-tGo28JcTQ?pwd=6533
提取码:6533
将第三方库 放在libs包里,并在pom文件中增加依赖

<dependency>
	<groupId>libsocket-can-java</groupId>
	<artifactId>libsocket-can-java</artifactId>
	<version>0.1.0</version>
	<scope>system</scope>
	<systemPath>${project.basedir}/libs/libsocket-can-java.jar</systemPath>
</dependency>

在这里插入图片描述

2、编写CAN口读写数据

@SpringBootApplication
public class LibsocketApplication {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(LibsocketApplication.class, args);

        System.out.println("Running tests!");
        final CanSocket socket = new CanSocket(CanSocket.Mode.RAW);
        final CanSocket.CanInterface canif = new CanSocket.CanInterface(socket, "can0");
        socket.bind(canif);
        System.out.println("bind success !");
        //new CanSocket.CanId(0x5) 表示帧id,默认是标准帧,如果是扩展帧,使用这个 new CanSocket.CanId(0x5).setEFFSFF()
        socket.send(new CanSocket.CanFrame(canif,
                new CanSocket.CanId(0x5), new byte[] {1,2,3,4,5,6,7,8}));
        //循环不断接收新的消息
        while (true) {
            CanSocket.CanFrame canFrame = socket.recv(canif.getInterfaceIndex());
            System.out.println("receive data length" + canFrame.getData().length);
            System.out.println("canId:" + canFrame.getCanId());
            System.out.println("data:" + bytesToHexString(canFrame.getData()));
        }



    public static String bytesToHexString(byte[] src){
        StringBuilder stringBuilder = new StringBuilder();
        if (src == null || src.length <= 0) {
            return null;
        }
        for (int i = 0; i < src.length; i++) {
            int v = src[i] & 0xFF;
            String hv = Integer.toHexString(v);
            if (hv.length() < 2) {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv);
        }
        return stringBuilder.toString();
    }

}

在这里插入图片描述

3、在树莓派配置运行

3.1 配置 mcp2515模块的驱动

sudo nano /boot/config.txt
dtparam=i2c_arm=on
dtparam=i2c0,pins_44_45
dtoverlay=i2c-rtc,pcf8563,i2c_csi_dsi
dtparam=spi=on
dtoverlay=spi1-2cs
dtoverlay=mcp2515-can1,oscillator=12000000,interrupt=25
dtoverlay=mcp2515-can0,oscillator=12000000,interrupt=24
dtoverlay=mcp2515-can2,oscillator=12000000,interrupt=23
dtparam=audio=on

在这里插入图片描述
验证安装

dmesg | grep -i can

在这里插入图片描述

3.2 安装CAN口工具

sudo apt install can-utils

3.3 启动CAN口

sudo ip link set can0 up type can bitrate 500000

或者

##回环发送  可用于测试当前程序消息的收发
sudo ip link set can0 up type can bitrate 500000 loopback on 

3.4 查看CAN口网络

ifconfig -a

在这里插入图片描述

3.5 模拟发送CAN消息

发送CAN消息

cansend can0 300#1880E0A80100

在这里插入图片描述
监听CAN口

candump can0 -L

在这里插入图片描述

3.6 使用java程序监听CAN口

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要在Java实现Modbus RTU通讯,你可以使用modbus4j库。首先,你需要准备好串环境,可以使用virtual serial port driver来模拟串环境\[1\]。Modbus是一种串行通信协议,包括RTU、ASCII和TCP三种形式,其中MODBUS-RTU是最常用的\[2\]。 在Java中使用modbus4j库进行Modbus RTU通讯,你可以使用modbus4j的SerialPortWrapper接实现类。推荐使用Freedomotic中的三个类来实现SerialPortWrapper接,它们分别是SerialPortWrapperImpl.java、SerialInputStream.java和SerialOutputStream.java\[3\]。 通过使用modbus4j库和相应的实现类,你可以在Java中轻松地实现Modbus RTU通讯。 #### 引用[.reference_title] - *1* *3* [Java通讯Modbus Rtu](https://blog.csdn.net/james112496/article/details/125462694)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [java利用socket通信实现Modbus-RTU通信协议](https://blog.csdn.net/qq_40042416/article/details/115672989)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值