Android端使用Modbus協(xié)議的簡單方法
Modbus用于設(shè)備之間的通信,同樣在正常App開發(fā)中用的也很少
1、導(dǎo)入Modbus4Android的庫
gayhub地址:github.com/zgkxzx/Modb…
使用Jar包的方式引入可以,也可以直接將這個(gè)項(xiàng)目down到本地,引入這個(gè)項(xiàng)目,我使用是第二種方法
2、基于 TCP/IP 的 Modbus Master/客戶端
2.1、初始化ModbusMaster
ModbusReq.getInstance().setParam(ModbusParam() .setHost(salveIP)//從站的IP地址 .setPort(salvePort)//從站的端口 .setEncapsulated(false)// .setKeepAlive(true) .setTimeout(2000) .setRetries(0)) .init(object : OnRequestBack<String> { override fun onSuccess(t: String?) { } override fun onFailed(msg: String?) { } })
2.2、讀寫保持寄存器
讀保持寄存器 /** * Function Code 3 * Read Holding Registers * * @param onRequestBack callback * @param slaveId slave id 從站id * @param start start address 讀取保持寄存器的開始位置 * @param len length 讀取的數(shù)據(jù)長度 */
ModbusReq.getInstance().readHoldingRegisters(object : OnRequestBack<ShortArray> { @SuppressLint("SetTextI18n") override fun onSuccess(t: ShortArray?) {//這個(gè)就是讀取到的數(shù)據(jù) } override fun onFailed(msg: String?) { } }, slaveId, shart, len)
寫保持寄存器
/** * Function Code 16 * Write Registers * * @param onRequestBack callback * @param slaveId slave id * @param start start address * @param values values */
ModbusReq.getInstance().writeRegisters(object : OnRequestBack<String> { override fun onSuccess(s: String) { } override fun onFailed(msg: String) { } }, slaveId, start, shortArray)
2.3、讀寫線圈
讀線圈
讀線圈 /** * Function Code 1 * Read Coil Register * * @param onRequestBack callback * @param slaveId slave id * @param start start address * @param len length */
ModbusReq.getInstance().readCoil(object :OnRequestBack<BooleanArray>{ override fun onSuccess(t: BooleanArray?) { } override fun onFailed(msg: String?) { } },1,1,10)
寫線圈
ModbusReq.getInstance().writeCoils(object :OnRequestBack<String>{ override fun onFailed(msg: String?) { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } override fun onSuccess(t: String?) { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } },1,1, arrayOf(true,true,false,false).toBooleanArray())
各個(gè)功能的用法都基本上差不多,就是方法名和功能碼不一樣,讀的時(shí)候都是傳入從站的id和開始的位置,還有要讀取的長度,寫的時(shí)候也是傳入一個(gè)從站地址,開始的位置和一個(gè)數(shù)組,依次將數(shù)組的值從開始的位置寫入
2.4 回收Master
ModbusReq.getInstance().destory()
3、基于 TCP/IP 的 Modbus Salve/服務(wù)端
啟動(dòng)服務(wù)
var modbusSlave=TcpSlave(502,false)//默認(rèn)端口502,不開啟壓縮兒 modbusSlave.addProcessImage(BasicProcessImage(1))//初始化數(shù)據(jù)存儲(chǔ)的鏡像, modbusSlave.start()//關(guān)閉服務(wù) stop方法
4、總結(jié)
到此這篇關(guān)于Android端使用Modbus協(xié)議的文章就介紹到這了,更多相關(guān)Android端使用Modbus協(xié)議內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android中自定義ContentProvider實(shí)例
應(yīng)用A(TestBaidu)調(diào)用另外一個(gè)應(yīng)用(TestContentProvider)即自定義ContentProvider的使用,其它應(yīng)用調(diào)用該ContentProvider,具體如下,感興趣的朋友可以參考下哈2013-06-06解析ScrollView--仿QQ空間標(biāo)題欄漸變
本篇文章主要介紹了仿QQ空間標(biāo)題欄漸變的實(shí)現(xiàn)方法的相關(guān)知識(shí),具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-05-05Android 判斷網(wǎng)絡(luò)狀態(tài)及開啟網(wǎng)路
這篇文章主要介紹了Android 判斷網(wǎng)絡(luò)狀態(tài)及開啟網(wǎng)路的相關(guān)資料,在開發(fā)網(wǎng)路狀態(tài)的時(shí)候需要先判斷是否開啟之后在提示用戶進(jìn)行開啟操作,需要的朋友可以參考下2017-08-08Android中button實(shí)現(xiàn)onclicklistener事件的兩種方式
本文介紹下Android中button實(shí)現(xiàn)onclicklistener事件的兩種方法,感興趣的朋友可以參考下2013-04-04android 6.0 寫入SD卡的權(quán)限申請實(shí)例講解
今天小編就為大家分享一篇android 6.0 寫入SD卡的權(quán)限申請實(shí)例講解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08Android7.0上某些PopuWindow出現(xiàn)顯示位置不正確問題的解決方法
這篇文章主要介紹了Android7.0上某些PopuWindow出現(xiàn)顯示位置不正確問題的解決方法,涉及針對Android7.0中PopuWindow屬性與方法的相關(guān)設(shè)置技巧,需要的朋友可以參考下2017-10-10詳解Android中的NestedScrolling機(jī)制帶你玩轉(zhuǎn)嵌套滑動(dòng)
這篇文章主要給大家詳細(xì)解析了Android中的NestedScrolling機(jī)制,通過介紹該機(jī)制帶你玩轉(zhuǎn)Android中的嵌套滑動(dòng)效果,文中給出了詳細(xì)的示例代碼和介紹,需要的朋友們可以參考學(xué)習(xí),下面來一起看看吧。2017-05-05