Android modbus TCP(kotlin)协议使用记录

  (别人项目新增功能使用到kotlin)项目需求,要通过modbus去发送相关指令去修改对应的设备(ip)寄存器的地址值,我这边直接使用的是别人的开源库:

https://github.com/licheedev/Modbus4Android,按照里面的方法来添加,相关依赖

    allprojects {
  repositories {
    ...
    maven { url 'https://jitpack.io' }
  }
}


   //modebus
    implementation 'com.github.licheedev:Modbus4Android:2.0.2'

在程序最开始的初始化类oncreate

 // 启用rtu的crc校验(默认就启用)
        ModbusConfig.setEnableRtuCrc(true)
       // 打印数据log(默认全禁用)
       // System.out: MessagingControl.send: 01030000000305cb
       // System.out: MessagingConnection.read: 010306000100020000bd75
        ModbusConfig.setEnableDataLog(true, true)

 

 创建单例 ModbusManager :

public class ModbusManager extends ModbusWorker {
    private static volatile ModbusManager sInstance;

    public static ModbusManager get() {
        ModbusManager manager = sInstance;
        if (manager == null) {
            synchronized (ModbusManager.class) {
                manager = sInstance;
                if (manager == null) {
                    manager = new ModbusManager();
                    sInstance = manager;
                }
            }
        }
        return manager;
    }

    private ModbusManager() {
    }

    /**
     * 释放整个ModbusManager,单例会被置null
     */
    public synchronized void release() {
        super.release();
        sInstance = null;
    }
}

代码使用:

  var param: ModbusParam<*>? = null

//modbusTcp modbus_offsetadr,:代表操作寄存器地址, modbus_value:最终修改的值
 private fun modbus_Runing(modbus_offsetadr: Int, modbus_value: Int ){
        // TCP
        param = TcpParam.create("192.168.2.10", 502)
            .setTimeout(1000)
            .setRetries(0)
            .setEncapsulated(false)
            .setKeepAlive(true)
        ModbusManager.get().closeModbusMaster() // 先关闭一下

        ModbusManager.get().init(param, object : ModbusCallback<ModbusMaster> {
            override fun onSuccess(t: ModbusMaster?) {
                Log.i("操作","onSuccess")
            }

            override fun onFailure(tr: Throwable?) {
               Log.i("操作","onFailure")
            }

            override fun onFinally() {
             Log.i("操作","onFinally")
            }

        })


        object : Thread() {
            override fun run() {
                ModbusManager.get()
                    .writeSingleRegister(
                        1,
                        modbus_offsetadr,
                        modbus_value,
                        object : ModbusCallback<WriteRegisterResponse> {
                            override fun onSuccess(t: WriteRegisterResponse?) {
                               
                            }

                            override fun onFailure(tr: Throwable?) {
                               
                            }

                            override fun onFinally() {
                               
                            }
                        })
            }
        }.start()

    }

使用

      modbus_AHURuning(37, 33) 把37相关modebus寄存器首地址的值更改为33
更多使用用法,请参考的项目的想要操作https://github.com/licheedev/Modbus4Android/blob/master/app/src/main/java/com/licheedev/demo/MainActivity.java

这然就可以到达我的需求了,还是很简单的配置使用步骤,如果,你想再优化代码可以参考文章开头进入的项目地址,找到其他链接去学习使用。 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
用户可以根据需求在驱动库里选择相对应的通讯驱动程序,配置相应的通讯握手参数,自由定义需要控制和采集的变量名、通讯地址、数据类型和初始值。功能说明及图片展示: 1.安装完成首次进入将会显示三页功能简要展示页面。 2.点击“立即使用”按钮,进入登录界面(公测账户为admin,密码admin)。 3.登录成功进入APP主页,此时主页所有状态为初始未配置状态。 4.在主页状态下向右滑动,可打开功能模块选择列表。 5.点击“WIFI连接”进入连接现场设备网络页面,如果此时用户已通过手机WIFI页面连接现场设备,则直接跳过此步骤。 6.连接成功后返回功能模块选择列表,点击“参数设置”进入通讯相关参数配置页面(首先进入驱动配置页面),目前驱动库中只有支持Modbus TCP的驱动,后续会持续更新,用户通过在驱动库列表中长按操作将选中的驱动挑选至已选列表中,如果要取消,可以在已选列表中通过同样的长按操作完成。 7.配置要访问的设备通讯参数,与主页的操作逻辑一致,在驱动配置页面向右滑动打开配置功能列表,点击“通讯参数配置”进入通讯参数配置页,然后点击右上角的加号,此时软件会根据已选的驱动类型自动添加一条相对应的通讯参数,用户可以通过双击的方式打开修改列表,然后在列表的某一条参数处通过长按的方式进入最终的修改对话框,修改完成后,可以通过长按的方式选定当前需要的参数配置信息到已选区域。 8.通讯参数配置完成后,向右滑动进入配置功能列表,点击“IO参数配置”进入地址段的分配,点击右上角的加号,在弹出的对话框中根据实际需求分配响应的起始地址以及地址数量,分配完成后,可在屏幕右侧边缘向左滑动调出隐藏功能菜单,通过功能菜单可查看和修改配置地址段的功能对应的IO点信息。 9.所有配置完成后,可返回主页,此时主页显示当前配置的信息,其中“控制操作”功能可以通过按钮发送布尔值,操作逻辑为当前值为0时发送1,当前值为1时发送0,而“参数设置”功能通过对子项长按可以设置调出输入框设置相应的参数值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值