Android Modbus的實現--Modbus4Android

前言

Modbus是一個工業通信系統,由帶智能終端的可編程序控制器和計算機通過公用線路或局部專用線路連接而成。其系統結構既包括硬件、亦包括軟件。它可應用於各種數據採集和過程監控。

由於android系統的開源性,可定製性,功能強大,網絡應用成熟,很多工業設備開始逐漸使用android設備來定製工業設備系統,那麼modbus在android系統上面的應用應運而生。在筆者工作期間,就主導過兩個比較大的基於modbus的android項目,某大型國企的大型消防系統,某大型國企電氣公司的大型充電栓系統…

這是Android版的Modbus TCP 例子,例子裏面只寫了對保持寄存器的讀寫功能,其中要注意的是對modbus的初始化、讀、寫等等操作都要在子線程裏面進行,不然會引起網絡操作在主線程的異常。

下載地址:https://github.com/zgkxzx/Modbus4Android

對於modbus 的線圈,離散寄存器,輸入寄存器等等的操作,程序思路基本一致,不另作例子;對於modbus RTU/ASCII模式的通信,手機上面不帶串口功能,用不了此功能,暫時沒有上傳。

1.創建ModbusMaster實例

ModbusFactory factory = new ModbusFactory();
IpParameters params = new IpParameters();
//設置IP地址以及端口號
params.setHost("192.168.0.101");
params.setPort(502);
params.setEncapsulated(false);
//創建ModbusMaster以及設置超時時間
ModbusMaster master = factory.createTcpMaster(params, true);
// master.setRetries(4);
master.setTimeout(2000);
master.setRetries(0);

2.初始化ModbusMaster

master.init();

3.讀線圈

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

                    @Override
                    public void onFailed(String msg) {
                        Log.e(TAG, "readCoil onFailed " + msg);
                    }
                }, 1, 1, 2);

4.讀直接寄存器

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

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

5.讀保持寄存器

ModbusReq.readHoldingRegisters(mModbusMaster, new OnRequestBack<short[]>() {
                    @Override
                    public void onSuccess(short[] data) {
                        Log.d(TAG, "readHoldingRegisters onSuccess " + Arrays.toString(data));
                    }

                    @Override
                    public void onFailed(String msg) {
                        Log.e(TAG, "readHoldingRegisters onFailed " + msg);
                    }
                }, 1, 2, 8);

6.讀輸入寄存器

 ModbusReq.readInputRegisters(mModbusMaster, new OnRequestBack<short[]>() {
                    @Override
                    public void onSuccess(short[] data) {
                        Log.d(TAG, "readInputRegisters onSuccess " + Arrays.toString(data));
                    }

                    @Override
                    public void onFailed(String msg) {
                        Log.e(TAG, "readInputRegisters onFailed " + msg);
                    }
                }, 1, 2, 8);

7.寫線圈

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

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

8.寫寄存器

ModbusReq.writeRegister(mModbusMaster, new OnRequestBack<String>() {
                    @Override
                    public void onSuccess(String s) {
                        Log.e(TAG, "writeRegister onSuccess " + s);
                    }

                    @Override
                    public void onFailed(String msg) {
                        Log.e(TAG, "writeRegister onFailed " + msg);
                    }
                },1,1,234);

9.寫多個寄存器

ModbusReq.writeRegisters(mModbusMaster, new OnRequestBack<String>() {
                    @Override
                    public void onSuccess(String s) {
                        Log.e(TAG, "writeRegisters onSuccess " + s);
                    }

                    @Override
                    public void onFailed(String msg) {
                        Log.e(TAG, "writeRegisters onFailed " + msg);
                    }
                },1,2,new short[]{211,52,34});

10.回收ModbusMaster實例對象

master.destroy();

由於本人精力有限,僅封裝了modbus的tcp/ip模式的協議。如有任何問題,請直接留言;如有後續要求,將更新版本倉庫。

下載地址:https://github.com/zgkxzx/Modbus4Android

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章