Android通过ModbusTCP连接PLC

        本文介绍Android通过局域网连接PLC,PLC端开启了Modbus TCP Server。Android可修改数据块中的值实现控制硬件的功能。

        项目中使用了modbus4Android(GitHub - zgkxzx/Modbus4Android: Modbus for android)。

      第一步:引入jar

                在Module的build.gradle中引入lib:

                https://wwp.lanzoul.com/iyW4U0d0wh1e
                密码:heq0

        implementation files('libs\\modbus4Android-1.2.jar')

       第二步:创建连接

/**
     * 初始化plc链接
     * @param modbusIp
     * @param modbusPort
     */
    public static void initModubusTCP(String modbusIp,Integer modbusPort){
        ModbusReq.getInstance().setParam(new ModbusParam()
                .setHost("192.168.124.189")
                .setPort(502)
                .setEncapsulated(false)
                .setKeepAlive(true)
                .setTimeout(2000)
                .setRetries(0))
                .init(new OnRequestBack<String>() {
                    @Override
                    public void onSuccess(String s) {
                        Log.d("modbus", "onSuccess " + s);
                    }

                    @Override
                    public void onFailed(String msg) {
                        Log.d("modbus", "onFailed " + msg);
                    }
                });
    }

        第三步:读取线圈数据

        读取slaveId = 1;数据地址为VB10001开始,向后5位的数据;

 ModbusReq.getInstance().readDiscreteInput(new OnRequestBack<boolean[]>() {
                @Override
                public void onSuccess(boolean[] booleen) {
                    Log.d("modbus", "readDiscreteInput onSuccess " + Arrays.toString(booleen));
                }

                @Override
                public void onFailed(String msg) {
                    Log.e("modbus", "readDiscreteInput onFailed " + msg);
                }
            },1,1,5);

        第四步:写(单个)线圈

向slaveId = 1,PLC地址为VB10001,中写入开关量:false(0)

ModbusReq.getInstance().writeCoil(new OnRequestBack<String>() {
                @Override
                public void onSuccess(String s) {
                    Log.e("modbus", "writeCoil onSuccess " + s);
                }

                @Override
                public void onFailed(String msg) {
                    Log.e("modus", "writeCoil onFailed " + msg);
                }
            },1,1,false);

其它读写类型可参考modbus4android中的readme文件。

调试前可通过Modbus poll 连接PLC,测试与PLC的通信和读写数据是否正常。

modbus功能码:

       0x01:读线圈
        0x05:写单个线圈
        0x0F:写多个线圈
        0x02:读离散量输入
        0x04:读输入寄存器
        0x03:读保持寄存器
        0x06:写单个保持寄存器
        0x10:写多个保持寄存器

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值